Бьём костылями по некрасоте. УНФ3
По просьбе клиента доделываю печатную форму накладной, вывожу в нее вес товара и цену за килограмм.
Расширяю функцию СформироватьПФ модуля менеджера обработки ПечатьНакладная, где и формируется эта печатная форма.
Изменение и контроль не люблю. С радостью замечаю, что на вход процедуры подаются ДанныеОбъектовПечати, где по каждому объекту уже есть таблица запасов.
И тут вижу некрасивое — 1с передает в таблицу запасов характеристику, но не передает номенклатуру.
Приходится использовать некрасивый костыль — поиск по коду. Но это лучше, чем подсаживать клиента на то, что печать будет слетать после обновлений (изменения и контроль):
&Вместо("СформироватьПФ") Функция мл_СформироватьПФ(ОписаниеПечатнойФормы, ДанныеОбъектовПечати, ОбъектыПечати, ВключаяУслуги) //Пробуем добавить вес Для Каждого ДанныеОбъекта ИЗ ДанныеОбъектовПечати Цикл ДанныеОбъекта.ТаблицаЗапасы.Колонки.Добавить("Вес"); ДанныеОбъекта.ТаблицаЗапасы.Колонки.Добавить("ЦенаЗаКг"); Для Каждого Строка ИЗ ДанныеОбъекта.ТаблицаЗапасы Цикл ТекНоменклатура = Справочники.Номенклатура.НайтиПоКоду(Строка.Код); Если НЕ ЗначениеЗаполнено(ТекНоменклатура) Тогда Продолжить; КонецЕсли; Строка.Вес = ТекНоменклатура.Вес * Строка.Количество; Строка.ЦенаЗаКг = ?(Строка.Вес = 0, 0, Окр(Строка.Сумма / Строка.Вес, 2)); КонецЦикла; КонецЦикла; Результат = ПродолжитьВызов(ОписаниеПечатнойФормы, ДанныеОбъектовПечати, ОбъектыПечати, ВключаяУслуги); Возврат Результат; КонецФункции
Добавил нужные поля в макет:

Я ожидал, что все добавленные колонки будут выводиться в макет, но не тут-то было, пришлось расширять и процедуру ЗаполнитьДанныеПечатиПоСтрокеТабличнойЧасти:
&После("ЗаполнитьДанныеПечатиПоСтрокеТабличнойЧасти") Процедура мл_ЗаполнитьДанныеПечатиПоСтрокеТабличнойЧасти(СтрокаТабличнойЧасти, ДанныеПечати, ПараметрыНоменклатуры, Итоги, ДанныеОбъекта) Если СтрокаТабличнойЧасти.Владелец().Колонки.Найти("Вес") <> Неопределено Тогда ДанныеПечати.Вставить("Вес", СтрокаТабличнойЧасти.Вес); КонецЕсли; Если СтрокаТабличнойЧасти.Владелец().Колонки.Найти("ЦенаЗаКг") <> Неопределено Тогда ДанныеПечати.Вставить("ЦенаЗаКг", СтрокаТабличнойЧасти.ЦенаЗаКг); КонецЕсли; КонецПроцедуры
Получилось нормально:

Ощущение, что код в 1С пишут вредители.
Среда: 3.0.9.105 Объем: 1 час

>>Приходится использовать некрасивый костыль — поиск по коду. Но это лучше, чем подсаживать клиента на то, что печать будет слетать после обновлений (изменения и контроль)
Очень сомнительное высказывание
в практике фрилансера «Изменение и контроль» — зло
Будет часто слетать при обновлениях, клиент будет нервничать.
При обновлении надо следить. Благо при подключении внешних редакторов это делается в 99% случаях практически автоматически. Гораздо хуже когда разъедется вместо — если будет синтакс ошибка — это будет меньшее зло
Ты путаешь, когда во Вместо пишешь весь код процедуры со своими изменениям и когда во вместо вызываваешь типовой код.
Я ратую за последнее. опыт подсказывает, что такое использование вместо надежнее и работает дольше.
Что значит дольше? Вы обновляете основную конфигурацию не проверив расширения? Вы адекват?
«….И тут вижу некрасивое — 1с передает в таблицу запасов характеристику, но не передает номенклатуру»
А не получится из Характеристики брать Владельца?
так характеристика не заполнена, там товар без характеристики весь