Добавляем колонки в список документов по товару. Розница 3.0

Я уже писал ранее, как дорабатывал список документов по товару в УНФ 1.6.

Теперь уже другой клиент обратился с задачей — выводить в список документов по товару колонки :

  1. Цена — цена в документе
  2. Количество — количество в документе
  3. Строки — строки документов, в которых находится товар.

Поступил аналогично, ведь Розница 3.0 выросла из УНФ 3.0, а та унаследовала от УНФ 1.6.

Расширение формы СписокДокументов обработки ДокументыПоКритериюОтбора выглядит так:


&НаСервере
Процедура M_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	//дор_СоздатьПоляФормы();
КонецПроцедуры


&НаСервере
&После("ОбновитьТаблицуДокументовНаСервере")
Процедура дор_ОбновитьТаблицуДокументовНаСервере(ВсеСтроки)
	
	Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда
		Возврат;
	КонецЕсли;

	дор_СоздатьПоляФормы();                                                                          
	
	Для Каждого Строка ИЗ ТаблицаДокументов Цикл
		МД = Метаданные.НайтиПоТипу(ТипЗнч(Строка.Документ));
		
		Для Каждого МДТЧ из МД.ТабличныеЧасти Цикл
			
			ИмяТЧ = МДТЧ.Имя;
			
			Если МДТЧ.Реквизиты.Найти("Номенклатура") = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			
			ТЧ = Строка.Документ[ИмяТЧ];
			ИскСтроки = ТЧ.НайтиСтроки(Новый Структура("Номенклатура", Номенклатура)); 
			
			//Только по тем строкам, где найдено
			Если ИскСтроки.Количество() = 0 Тогда
				Продолжить;
			КонецЕсли;
			
			Строки = "";     
			Цена = 0;
			Количество = 0;
			Для Каждого ИскСтрока ИЗ ИскСтроки Цикл
				Строки = Строки + ?(Строки = "", "", ",") + (ТЧ.Индекс(ИскСтрока) + 1);
				Если МДТЧ.Реквизиты.Найти("Цена") <> Неопределено Тогда
					Цена = ИскСтрока.Цена;                         
				КонецЕсли;
				
				Если МДТЧ.Реквизиты.Найти("Количество") <> Неопределено Тогда
					Количество = Количество + ИскСтрока.Количество;
				КонецЕсли;                

				Строка.дор_Количество = Количество;
				Строка.дор_Цена = Цена;
				Строка.дор_Строки = Строки;

			КонецЦикла;
			
			Прервать; //Только по одной ТЧ
			
		КонецЦикла;
			
			
		Попытка      
		Исключение
		КонецПопытки;
	КонецЦикла;
КонецПроцедуры

Процедура дор_СоздатьПоляФормы()
	
	Если Элементы.Найти("дор_Количество") = Неопределено Тогда
		Реквизиты = Новый Массив;
		Реквизиты.Добавить(Новый РеквизитФормы("дор_Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)), "ТаблицаДокументов", "Кол-во", Истина));
		Реквизиты.Добавить(Новый РеквизитФормы("дор_Цена", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)), "ТаблицаДокументов", "Закуп.цена", Истина));
		Реквизиты.Добавить(Новый РеквизитФормы("дор_Строки", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(255)), "ТаблицаДокументов", "Строки", Истина));
		ИзменитьРеквизиты(Реквизиты);
		
		Привязка = Элементы.ТаблицаДокументовВидОперации;
		Элемент = Элементы.Вставить("дор_Количество", Тип("ПолеФормы"), Привязка.Родитель, Привязка);
		Элемент.Вид = ВидПоляФормы.ПолеВвода;
		Элемент.АвтоМаксимальнаяШирина = ложь;
		Элемент.РастягиватьПоГоризонтали = ложь;
		Элемент.Ширина = 4;
		Элемент.ПутьКДанным = "ТаблицаДокументов.дор_Количество";   
		

		Элемент = Элементы.Вставить("дор_Строки", Тип("ПолеФормы"), Привязка.Родитель, Привязка);
		Элемент.Вид = ВидПоляФормы.ПолеВвода;
		Элемент.АвтоМаксимальнаяШирина = ложь;
		Элемент.РастягиватьПоГоризонтали = ложь;
		Элемент.Ширина = 4;
		Элемент.ПутьКДанным = "ТаблицаДокументов.дор_Строки";   

		Элемент = Элементы.Вставить("дор_Цена", Тип("ПолеФормы"), Привязка.Родитель, Привязка);
		Элемент.Вид = ВидПоляФормы.ПолеВвода;
		Элемент.АвтоМаксимальнаяШирина = ложь;
		Элемент.РастягиватьПоГоризонтали = ложь;
		Элемент.Ширина = 6;
		Элемент.ПутьКДанным = "ТаблицаДокументов.дор_Цена";   
		
	КонецЕсли;
	
КонецПроцедуры

Код довольно универсальный, даже на метаданные обращаю внимание!

Доработанная форма списка документов выглядит так:

Среда: Розница 3.0.3.147. Платформа: 8.3.20.1710. Объем: 0.8 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *