При адаптации старых внешних печатных форм (ВПФ) под современные конфигурации 1С, такие как «Управление торговлей 11», «Комплексная автоматизация 2» или «ERP Управление предприятием», разработчики часто сталкиваются с целым рядом специфических ошибок. Программа может ругаться на неизвестные параметры в запросах, отсутствие полей или просто ничего не выводить на печать без видимых причин. Разберем по шагам наиболее частые проблемы и выясним причину их возникновения, чтобы ваша печатная форма коммерческого предложения заработала корректно.
Очень часто при выполнении кода запроса в печатной форме вылетает следующая ошибка: Неверные параметры "УпаковкиНоменклатуры.ПустаяСсылка". Проанализируем ситуацию: почему старый, проверенный код внезапно перестал работать?
Дело в том, что в современных версиях конфигураций 1С архитектура хранения нормативно-справочной информации была серьезно переработана. Справочник УпаковкиНоменклатуры больше не используется в том виде, к которому привыкли многие программисты. На его место пришел общий справочник УпаковкиЕдиницыИзмерения.
Посмотрим на пример неправильного кода в условии запроса:
// Неправильно (для старых версий конфигураций)
КОГДА Товары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
Чтобы исправить ошибку, необходимо актуализировать обращение к метаданным в тексте запроса. Изменим строку на актуальную:
// Правильно (для УТ 11, КА 2, ERP)
КОГДА Товары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
Следующая преграда, с которой мы можем столкнуться — это ошибка вида: Поле не найдено "Таблица.КоличествоУпаковок".
Рассмотрим подробнее логику разработчиков типовых решений. Реквизит КоличествоУпаковок исторически использовался для документов, которые двигают складские остатки (особенно при ячеистом хранении). Коммерческое предложение клиенту к таким документам не относится — это предварительный документ, фиксирующий намерения. В целях оптимизации разработчики удалили (или перенесли в служебные скрытые данные) лишние реквизиты из табличной части коммерческих предложений.
Решение здесь максимально простое. Вместо отсутствующего поля мы должны использовать стандартный реквизит Количество. Отредактируем выборку в запросе:
// Вместо:
// Таблица.КоличествоУпаковок КАК КоличествоУпаковок
// Пишем:
Таблица.Количество КАК КоличествоУпаковок
Самая коварная ошибка — когда синтаксических сбоев нет, обработка успешно подключается в справочник «Дополнительные отчеты и обработки», но при нажатии на кнопку печати ничего не происходит. Либо выводится пустой результат. Давайте проанализируем механизмы Библиотеки стандартных подсистем (БСП), которые отвечают за вывод ВПФ.
Для корректной работы печатной формы идентификатор, который вы задаете при регистрации команды в функции СведенияОВнешнейОбработке(), должен строго совпадать с идентификатором, который вы обрабатываете в экспортной процедуре Печать().
Посмотрим на частую ошибку несовпадения идентификаторов:
// В функции регистрации мы передаем идентификатор "ПФ_MXL_КоммерческоеПредложение1":
ДобавитьКоманды(ТаблицаКоманд, "Форма Внешняя", "ПФ_MXL_КоммерческоеПредложение1", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
// А в процедуре Печать мы пытаемся искать совершенно другой идентификатор:
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КоммерческоеПредложениеКлиенту") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(...)
КонецЕсли;
Методы НужноПечататьМакет и ВывестиТабличныйДокументВКоллекцию ищут в коллекции именно ту строку, которая была зарегистрирована. Из-за разницы в именах (ПФ_MXL_КоммерческоеПредложение1 и КоммерческоеПредложениеКлиенту) система просто игнорирует блок кода формирования макета. Приведем идентификаторы к единому стандарту во всех процедурах обработки.
Чтобы избежать подобных мучений в будущем, рассмотрим рекомендуемый подход к созданию внешних печатных форм для современных конфигураций.
СведенияОВнешнейОбработке. Создайте обычную обработку, вынесите на форму реквизит ДокументСсылка и кнопку «Сформировать». Так вы сможете использовать стандартный отладчик, тестировать запросы и видеть реальные ошибки.ДанныеДляПечати), а затем просто программно изменить в нем нужные ячейки или заменить типовой макет на свой. Это сделает вашу ВПФ устойчивой к будущим обновлениям базы.Печать с массивом объектов и добавляйте экспортную функцию с параметрами регистрации БСП.Следуя этим правилам и понимая особенности новых метаданных 1С, вы сможете быстро и безболезненно адаптировать любые печатные формы для актуальных версий систем учета.