Как отредактировать модуль и макет внешней печатной формы в 1С:Управление торговлей 10.3

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Создание внешней печатной формы на основе встроенной — это стандартная задача для разработчика 1С, однако она часто сопровождается трудностями, особенно если вы только начинаете осваивать программирование в этой среде. Разберем типичные ошибки, возникающие при переносе кода из типовой конфигурации «Управление торговлей 10.3» (обычные формы), и выясним, как правильно синхронизировать программный код модуля с визуальным представлением макета.

Ошибка 1: Неверные параметры в операции сравнения (СсылкаНаОбъект)

Первая проблема, с которой сталкиваются пользователи, — это ошибка при выполнении запроса или условия: Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. Проанализируем причину. Для корректной работы внешней печатной формы в системе должен быть определен реквизит, через который программа понимает, какой именно документ мы печатаем.

Во внешней обработке обязательно должен присутствовать реквизит СсылкаНаОбъект. Рассмотрим важные требования к нему:

  1. Имя реквизита: Строго СсылкаНаОбъект.
  2. Тип данных: Должен соответствовать ссылке на документ, для которого создается форма (например, ДокументСсылка.ЗаказПокупателя). Если вы оставите тип «ВнешняяОбработка...», как это часто бывает при автоматическом создании, 1С не сможет передать ссылку на реальный документ в процедуру печати.

Если в коде запроса встречается условие вида СчетНаОплатуПокупателю.Ссылка >= &ТекущийДокумент, а параметр &ТекущийДокумент не заполнен или имеет неверный тип, платформа выдаст ошибку. Убедитесь, что в процедуре Печать() происходит правильное присвоение значений параметрам запроса.

Ошибка 2: Область не найдена (КолонкаКодов)

Ситуация, когда вы удалили ненужные колонки (например, «Код товара» или «Артикул») из макета, а форма перестала открываться, — классическая. Ошибка Метод контекста (ПолучитьОбласть): Область не найдена: КолонкаКодов говорит о том, что в программном коде осталась попытка обратиться к ячейкам, которых физически больше нет в табличном документе.

Разберем, как 1С работает с областями. В коде это выглядит так:

ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");

Здесь символ | означает пересечение горизонтальной секции ШапкаТаблицы и вертикальной секции КолонкаКодов. Если вы удалили вертикальную секцию в макете, вы обязаны удалить или закомментировать все обращения к ней в коде. Посмотрим на примере функции формирования таблицы:


// Если мы удалили КолонкуКодов в макете, этот блок кода нужно убрать:
// ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов"); 
// ТабДокумент.Присоединить(ОбластьКодов);

Важное правило: Если вы используете метод Присоединить(), порядок вывода областей имеет значение. Если одна из «промежуточных» колонок удаляется, убедитесь, что логика заполнения строки не нарушена. Проанализируем фрагмент кода вывода шапки:


ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
ОбластьСуммы = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");

ТабДокумент.Вывести(ОбластьНомера);
// Если КолонкаКодов удалена, мы просто сразу переходим к следующей области
ТабДокумент.Присоединить(ОбластьДанных);
ТабДокумент.Присоединить(ОбластьСуммы);

Как правильно убрать «лишнюю писанину» из модуля

Чтобы не нарушить структуру документа при удалении колонок, выполните следующие шаги:

  1. В режиме конфигуратора откройте макет вашей обработки.
  2. Проверьте имена вертикальных и горизонтальных секций. Если вы удалили столбец, убедитесь, что имя удаленной секции больше не фигурирует в свойствах макета.
  3. Используйте глобальный поиск по тексту модуля (Ctrl + F) по ключевому слову КолонкаКодов (или другому имени удаленной области).
  4. Закомментируйте (используя //) или удалите строки, где эта область получается методом ПолучитьОбласть и где она выводится методом Присоединить.

Проблема с отображением менеджера и логотипа

Если после ваших правок форма начала открываться, но исчезли подписи (менеджер) или логотип, это означает, что вы либо удалили соответствующие области в макете, либо забыли вызвать их вывод в коде. Рассмотрим, как выводится информация о менеджере в УТ 10.3:


// Пример правильного вывода области менеджера
ОбластьМакета = Макет.ПолучитьОбласть("Менеджер1");
// Заполняем параметр "Менеджер" данными из структуры ПараметрыПечати
ОбластьМакета.Параметры.Менеджер = ПараметрыПечати.ФИООтветственный;
ТабДокумент.Вывести(ОбластьМакета);

Проанализируем ситуацию с логотипом. Логотип в 1С — это объект типа «Рисунок», который размещается поверх ячеек. Если вы удаляли строки или колонки, рисунок мог «схлопнуться» или оказаться за пределами именованной области (например, за пределами области «Заголовок»). Проверьте в макете, чтобы рисунок логотипа находился строго внутри границ той секции, которую вы вызываете в коде.

Итоговые рекомендации по отладке

Выясним, как упростить процесс поиска ошибок в печатных формах:

Таким образом, для решения проблемы достаточно синхронизировать имена в макете и коде, правильно настроить реквизит СсылкаНаОбъект и внимательно следить за тем, какие области присоединяются к финальному документу. Помните, что 1С крайне чувствительна к именованию объектов: лишний пробел или ошибка в регистре при вызове ПолучитьОбласть приведут к неработоспособности формы.

← На главную