Вывод реквизита поля составного типа БП3
Клиенту нужно было вывести колонку договора из колонки Партия.
Проблема была в том, что реквизит «Партия» имеет составной тип из десятка документов.
Поэтому попытка прописать путь к данным через «Объект.НоменклатураНаСкладе.Партия.ДоговорКонтрагента» не увенчалась успехом.
Пришлось делать дополнительную колонку в табличной части.
Также я предусмотрел возможность обновления данных для одной строки.
Расчет колонки выполняется запросом, поэтому работа идет быстро.
&НаСервере Процедура дбп_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) Реквизит = Новый РеквизитФормы("дор_ЗапасыДоговор", Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"), "Объект.НоменклатураНаСкладе"); МассивРеквизитов = Новый Массив; МассивРеквизитов.Добавить(Реквизит); ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов); Привязка = Элементы.ГруппаКолонокДляУСН; //Если ЭтаФорма.Элементы.Найти("дор_ЗапасыДоговор") = Неопределено Тогда НовыйЭлемент = ЭтаФорма.Элементы.Вставить("дор_ЗапасыДоговор", Тип("ПолеФормы"), Привязка.Родитель, Привязка); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.Заголовок = "Договор"; //Элемент.ПутьКДанным = "Объект.НоменклатураНаСкладе.Партия.ДоговорКонтрагента"; НовыйЭлемент.ПутьКДанным = "Объект.НоменклатураНаСкладе.дор_ЗапасыДоговор"; //КонецЕсли; дор_ЗаполнитьДопДанныеНоменклатуры(); КонецПроцедуры &НаКлиенте &После("НоменклатураНаСкладеПартияПриИзменении") Процедура дбп_НоменклатураНаСкладеПартияПриИзменении(Элемент) дор_ЗаполнитьДопДанныеНоменклатуры(Элементы.НоменклатураНаСкладе.ТекущаяСтрока); КонецПроцедуры &НаСервере Процедура дор_ЗаполнитьДопДанныеНоменклатуры(ИдентификаторСтроки = Неопределено) Экспорт МассивСтрок = Неопределено; Если ИдентификаторСтроки <> Неопределено Тогда МассивСтрок = новый Массив(); Строка = Объект.НоменклатураНаСкладе.НайтиПоИдентификатору(ИдентификаторСтроки); МассивСтрок.Добавить(Строка); КонецЕсли; ТЗ = Объект.НоменклатураНаСкладе.Выгрузить(МассивСтрок, "НомерСтроки, Партия"); З = Новый Запрос(); З.Текст = "ВЫБРАТЬ | Т.НомерСтроки КАК НомерСтроки, | Т.Партия КАК Партия |ПОМЕСТИТЬ ТН |ИЗ | &ТЗ КАК Т |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТН.НомерСтроки КАК НомерСтроки, | ВЫБОР | КОГДА НЕ Т1.ДоговорКонтрагента ЕСТЬ NULL | ТОГДА Т1.ДоговорКонтрагента | КОГДА НЕ Т2.ДоговорКонтрагента ЕСТЬ NULL | ТОГДА Т2.ДоговорКонтрагента | КОГДА НЕ Т3.ДоговорКонтрагента ЕСТЬ NULL | ТОГДА Т3.ДоговорКонтрагента | КОГДА НЕ Т4.ДоговорКонтрагента ЕСТЬ NULL | ТОГДА Т4.ДоговорКонтрагента | КОГДА НЕ Т5.ДоговорКонтрагента ЕСТЬ NULL | ТОГДА Т5.ДоговорКонтрагента | КОГДА НЕ Т6.ДоговорКонтрагента ЕСТЬ NULL | ТОГДА Т6.ДоговорКонтрагента | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК ДоговорКонтрагента |ИЗ | ТН КАК ТН | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК Т1 | ПО ТН.Партия = Т1.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.КорректировкаПоступления КАК Т2 | ПО ТН.Партия = Т2.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Партия КАК Т3 | ПО ТН.Партия = Т3.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДокументРасчетовСКонтрагентом КАК Т4 | ПО ТН.Партия = Т4.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтПокупателя КАК Т5 | ПО ТН.Партия = Т5.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Т6 | ПО ТН.Партия = Т6.Ссылка"; //ДокументСсылка.ОтчетПроизводстваЗаСмену //ДокументСсылка.СписаниеОС //ДокументСсылка.АвансовыйОтчет //ДокументСсылка.КорректировкаПоступления, //ДокументСсылка.ОприходованиеТоваров, //ДокументСсылка.ДокументРасчетовСКонтрагентом //ДокументСсылка.ПринятиеКУчетуОС, //ДокументСсылка.ПоступлениеТоваровУслуг, //ДокументСсылка.ВозвратТоваровОтПокупателя //ДокументСсылка.ПередачаТоваров, //ДокументСсылка.ПересортицаТоваров, //ДокументСсылка.ПоступлениеВАренду, //ДокументСсылка.РасходыПредпринимателя, //ДокументСсылка.ПоступлениеИзПереработки, //ДокументСсылка.КомплектацияНоменклатуры, //ДокументСсылка.РеализацияТоваровУслуг, //ДокументСсылка.ВозвратМатериаловИзЭксплуатации, //ДокументСсылка.Партия З.УстановитьПараметр("ТЗ", ТЗ); Выборка = З.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Объект.НоменклатураНаСкладе[Выборка.НомерСтроки - 1].дор_ЗапасыДоговор = Выборка.ДоговорКонтрагента; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура дбп_НоменклатураНаСкладеПриОкончанииРедактированияПосле(Элемент, НоваяСтрока, ОтменаРедактирования) дор_ЗаполнитьДопДанныеНоменклатуры(Элементы.НоменклатураНаСкладе.ТекущаяСтрока); КонецПроцедуры
Среда: 3.0.198.15 Объем: 1 час.
