При работе в современных конфигурациях 1С, таких как «1С:Управление торговлей», «1С:ERP» или «1С:Бухгалтерия», пользователи часто сталкиваются с ситуацией, когда при печати договора некоторые поля (например, банковский счет или контактное лицо) остаются пустыми. Это происходит даже в тех случаях, когда в карточке контрагента вся информация заполнена корректно. Рассмотрим подробнее, почему так происходит, и разберем пошагово методы решения этой проблемы.
Одной из наиболее распространенных причин является отсутствие установленного основного счета для контрагента. Проанализируем ситуацию: в карточке партнера может быть заведено несколько расчетных счетов, но программа не знает, какой из них должен подтягиваться в печатную форму автоматически. Выясним, как это проверить:
Важно помнить, что в некоторых версиях конфигураций печатная форма обращается именно к параметру ОсновнойБанковскийСчет. Если он не задан, алгоритм формирования документа может вернуть пустое значение.
Разберем еще один важный нюанс. В современных конфигурациях данные для печати часто берутся не напрямую из карточки контрагента, а из реквизитов объекта Справочник.ДоговорыКонтрагентов. Проанализируем, заполнены ли нужные поля в самом документе:
Часто в форме договора присутствуют отдельные поля: «Банковский счет организации» и «Банковский счет контрагента». Если при создании договора эти поля были оставлены пустыми, то в печатную форму данные не попадут, даже если они есть в общей карточке контрагента. Это сделано для того, чтобы в рамках разных договоров с одним и тем же партнером можно было использовать разные платежные реквизиты.
Если с реквизитами в базе все в порядке, нам необходимо проверить сам макет печатной формы. Рассмотрим, как это сделать в пользовательском режиме, используя конструктор печатных форм для объектов базы 1С, который позволяет обойтись без привлечения программиста:
[НомерДоговора] или {КонтрагентНаименование}.Проанализируем типичную ошибку: если макет был отредактирован вручную, имя параметра могло быть повреждено. Например, вместо КонтактноеЛицо случайно написали КонтактЛицо. В этом случае система не сможет сопоставить поле в базе с полем в макете, и оно останется пустым.
Рассмотрим ситуацию с контактным лицом. В карточке контрагента может быть целый список сотрудников, но программа не может случайным образом выбрать одного из них для печати договора. Выясним причину отсутствия данных в этой области:
Для того чтобы контактное лицо отобразилось в договоре, оно должно быть выбрано в соответствующем поле внутри самого объекта Договор. Обычно это поле называется «Подписал» или «Контактное лицо». Если вы используете расширенные шаблоны (например, шаблоны Word для УТ 11.5 или специальные решения для печати договора в MS Word), убедитесь, что в макете указан верный тег для должности и ФИО подписанта.
Посмотрим на ситуацию, которая часто ставит пользователей в тупик: банковский счет заполнен, но в договоре его выбрать нельзя. Это происходит из-за фильтрации по валюте. Если в договоре установлена валюта USD, а у контрагента заведен только рублевый расчетный счет, система скроет этот счет, так как он не соответствует условиям расчетов по данному договору. Проверьте соответствие валют договора и выбранного банковского счета.
Иногда причина кроется глубже. Разберем технические моменты, которые могут влиять на вывод данных:
Если вышеперечисленные способы не помогли, придется обратиться к коду. Рассмотрим пример того, как программно проверяется заполнение параметров макета. В модуле менеджера или в специализированном модуле печати обычно вызывается функция, заполняющая структуру данных. Проанализируем примерный фрагмент кода:
Процедура ЗаполнитьПараметрыПечати(ДанныеПечати, ОбъектСсылка)
// Получаем данные из объекта
ДанныеПечати.Номер = ОбъектСсылка.Номер;
ДанныеПечати.Дата = Формат(ОбъектСсылка.Дата, "ДЛФ=DD");
// Проверяем заполнение банковского счета
Если ЗначениеЗаполнено(ОбъектСсылка.БанковскийСчетКонтрагента) Тогда
ДанныеПечати.РеквизитыКонтрагента = СформироватьСтрокуРеквизитов(ОбъектСсылка.БанковскийСчетКонтрагента);
Иначе
// Если счет в договоре не указан, пробуем взять основной счет контрагента
ДанныеПечати.РеквизитыКонтрагента = СформироватьСтрокуРеквизитов(ОбъектСсылка.Контрагент.ОсновнойБанковскийСчет);
КонецЕсли;
КонецПроцедуры
При отладке стоит обратить внимание на функцию СформироватьСтрокуРеквизитов (или аналогичную ей). Если в ней заложена проверка на конкретный тип счета или наличие определенных данных (например, обязательное заполнение БИК), и эти данные отсутствуют, функция может вернуть пустую строку.
Подводя итог, можно сказать, что решение проблемы «пустых полей» в печатной форме договора в 90% случаев кроется в пользовательских настройках. Сначала проверим заполнение основного банковского счета в карточке контрагента, затем убедимся, что нужные реквизиты выбраны непосредственно в договоре, и только после этого перейдем к анализу макета печати. В ситуациях, когда договор нужно создать оперативно на основании сделки, отличным решением станет печать договора из Заказа покупателя, что позволит минимизировать ручной ввод. Совместное выполнение этих шагов гарантирует корректное отображение всех необходимых данных в ваших документах.