Добавление колонки закупочной цены в справочник Номенклатура УТ 11.5
Задача, с которой обращаются многократно. Решил написать методичку.
Запрос динамического списка номенклатуры имеет вид:
ВЫБРАТЬ
СпрНоменклатураПереопределяемый.Ссылка КАК Ссылка,
СпрНоменклатураПереопределяемый.Код КАК Код,
...
ИЗ
Справочник.Номенклатура КАК СпрНоменклатураПереопределяемый
ГДЕ
НЕ СпрНоменклатураПереопределяемый.ЭтоГруппа
...
Но после создания на сервере таблица называется уже СпрНоменклатура а не СпрНоменклатураПереопределяемый.
Если бы речь шла о добавлении в форму списка подбора, нужно было бы менять текст запроса в процедуре ПодборТоваровСервер.УстановитьТекстыЗапросовСписковФормыПодбора.
Доработка несложная:
&НаСервере Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) //Добавляем поля Маркер = "СпрНоменклатура.Ссылка КАК Ссылка,"; СписокНоменклатура.ТекстЗапроса = СтрЗаменить(СписокНоменклатура.ТекстЗапроса, Маркер, Маркер + " |ЕСТЬNull(ТЦеныЗакупочные.Цена, 0) КАК дор_ЦенаЗакупочная, |"); //Добавляем таблицы Маркер = "Справочник.Номенклатура КАК СпрНоменклатура"; СписокНоменклатура.ТекстЗапроса = СтрЗаменить(СписокНоменклатура.ТекстЗапроса, Маркер, Маркер + " |ЛЕВОЕ СОЕДИНЕНИЕ ( " + //Используем максимум, потому что в случае с характеристиками может быть соединение одной строки номенклатуры //с несколькими строками цен "ВЫБРАТЬ | Т.Номенклатура КАК Номенклатура, | МАКСИМУМ(Т.Цена) КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦеныЗакупочная) КАК Т | |СГРУППИРОВАТЬ ПО | Т.Номенклатура" + ") КАК ТЦеныЗакупочные ПО ТЦеныЗакупочные.Номенклатура = СпрНоменклатура.Ссылка" ); ВидЦеныЗакупочная = Справочники.ВидыЦен.НайтиПоРеквизиту("Идентификатор", "Закупка"); СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("ВидЦеныЗакупочная", ВидЦеныЗакупочная); ЭлементПеред = Элементы.СписокРасширенныйПоискНоменклатураСсылка; Элемент = дор_ДобавитьКолонкуСпискаНоменклатуры(ЭтаФорма, "дор_ЦенаЗакупочная", "Ц.Зак", Элементы.СписокРасширенныйПоискНоменклатура, ЭлементПеред, 8); Элемент.Формат = "ЧДЦ=2"; КонецПроцедуры Функция дор_ДобавитьКолонкуСпискаНоменклатуры(Форма, Имя, Заголовок, ЭлементСписка, ПолеПеред, Ширина, ПутьКДанным = Неопределено) Экспорт Элемент = Форма.Элементы.Вставить(Имя, Тип("ПолеФормы"), ЭлементСписка, ПолеПеред); Элемент.Вид = ВидПоляФормы.ПолеВвода; Если ПутьКДанным = Неопределено Тогда Элемент.ПутьКДанным = "СписокНоменклатура." + Имя; Иначе Элемент.ПутьКДанным = ПутьКДанным; КонецЕсли; Элемент.АвтоМаксимальнаяШирина = ложь; Элемент.РастягиватьПоГоризонтали = ложь; //Элемент.КартинкаШапки = БиблиотекаКартинок["_" + Имя + "Шапка"]; //Элемент.ОтображатьВШапке = ложь; Элемент.Ширина = Ширина; //Элемент.МаксимальнаяШирина = 1; Элемент.Заголовок = Заголовок; Возврат Элемент; КонецФункции
Среда: УТ 11.5.22.83. Платформа: 8.3.27.1644




Костыли конечно это маркеры. Не надежно и не универсально.
Ну и вид цены лучше на форме реквизит сделать, чтобы можно было менять. Удобно, практично.
не надо делать больше того, что хочет заказчик. Золотое правило. Маркеры работают хорошо, можно, конечно, переписать на схему запроса, но не стоит оно того тут.