Как вывести БИН организации или контрагента в макет УПД в 1С:Бухгалтерия 8.3

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

При работе с типовыми конфигурациями 1С, такими как Бухгалтерия предприятия 3.0, часто возникает необходимость кастомизации печатных форм. Одной из популярных задач является вывод дополнительных идентификаторов, таких как БИН (Бизнес-идентификационный номер, актуально для Казахстана) или Налоговый номер в стране регистрации (для иностранных контрагентов), в универсальный передаточный документ (УПД). Просто добавить ячейку в макет недостаточно — необходимо программно передать данные в эту ячейку. В этой статье мы подробно разберем, как реализовать этот механизм, проанализируем ошибки новичков и найдем оптимальное решение.

Анализ проблемы: почему данные не выводятся сами?

Рассмотрим типичную ситуацию: вы открыли конфигуратор, нашли макет УПД, добавили новую строку и создали в ней ячейку с типом Параметр, назвав её НалоговыйНомер. Однако при печати документа ячейка остается пустой или программа выдает ошибку: Поле объекта не обнаружено (НалоговыйНомер). Выясним причину: печатная форма в 1С формируется программно. Общий модуль собирает данные из документа и справочников в специальную структуру (шапку), а затем поочередно заполняет параметры макета. Если в коде не прописана передача значения именно для вашего нового параметра, 1С просто "не знает", что туда нужно что-то записывать.

Шаг 1: Подготовка данных в общем модуле

Для начала нам нужно найти место, где формируются данные для печати. В типовой БП 3.0 за это отвечает общий модуль УчетНДС. Нам необходимо расширить структуру ДанныеШапки, чтобы она включала нужный нам реквизит. Разберем по шагам, как это сделать в функции ПодготовитьДанныеШапкиСчетаФактуры1137.

Проанализируем ситуацию: нам нужно получить налоговый номер покупателя. Для этого мы обратимся к сведениям о контрагенте. В коде это будет выглядеть следующим образом:


// В функции ПодготовитьДанныеШапкиСчетаФактуры1137
// Находим раздел, где формируются сведения о покупателе

ДанныеШапки.Вставить("НалоговыйНомерВСтранеРегистрации", 
    ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОПокупателе, "НалоговыйНомерВСтранеРегистрации, "));

Важный момент: Мы используем встроенную функцию ОписаниеОрганизации, которая умеет корректно извлекать реквизиты из структуры сведений. Если вы работаете с локализацией для Казахстана, вместо НалоговыйНомерВСтранеРегистрации может использоваться реквизит БИН.

Шаг 2: Вывод значения в макет

Теперь, когда данные попали в структуру ДанныеШапки, их нужно передать непосредственно в область макета. Это происходит в процедуре ВывестиСчетФактуруВТабличныйДокумент. Найдем раздел, отвечающий за заполнение параметров шапки, и добавим нашу строку.

Рассмотрим пример кода:


// В процедуре ВывестиСчетФактуруВТабличныйДокумент
// В блоке заполнения параметров области макета

ОбластьМакета.Параметры.НалоговыйНомер = "БИН: " + ДанныеШапки.НалоговыйНомерВСтранеРегистрации;

Обратите внимание, что имя параметра ОбластьМакета.Параметры.НалоговыйНомер должно строго совпадать с именем параметра, которое вы указали в свойствах ячейки в редакторе макета. Если в макете параметр называется БИН_Покупателя, то и в коде должно быть ОбластьМакета.Параметры.БИН_Покупателя.

Использование расширений — правильный подход

Редактирование типового общего модуля напрямую (как в примере выше) приведет к трудностям при обновлении программы. Рассмотрим более профессиональный метод — использование расширений конфигурации. Это позволит сохранить изменения при обновлении типовой конфигурации.

  1. Создадим новое расширение и добавим в него общий модуль УчетНДС.
  2. Используем аннотацию &После для процедуры ПодготовитьДанныеШапкиСчетаФактуры1137.
  3. Дополним структуру новыми данными, не меняя основной код.

Пример кода для расширения:


&После("ПодготовитьДанныеШапкиСчетаФактуры1137")
Процедура Расш1_ПодготовитьДанныеШапкиСчетаФактуры1137(ВыборкаСФ, Реквизиты, ПлатежноРасчетныеДокументы, ДополнитьДаннымиУПД, ДанныеШапки)
    
    // Получаем ссылку на покупателя из выборки
    ПокупательСсылка = ВыборкаСФ.Покупатель;
    
    // Получаем БИН напрямую из справочника Контрагенты
    БИН_Значение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПокупательСсылка, "НалоговыйНомер");
    
    // Добавляем в структуру, если значение заполнено
    Если ЗначениеЗаполнено(БИН_Значение) Тогда
        ДанныеШапки.Вставить("МойДополнительныйБИН", БИН_Значение);
    КонецЕсли;
    
КонецПроцедуры

Проверка на пустые значения

Хорошим тоном в разработке на 1С считается проверка данных перед выводом. Если у контрагента не заполнен БИН, выводить пустую строку с префиксом "БИН: " будет некрасиво. Проанализируем, как сделать вывод более изящным:


Если ЗначениеЗаполнено(ДанныеШапки.НалоговыйНомерВСтранеРегистрации) Тогда
    ОбластьМакета.Параметры.НалоговыйНомер = "БИН: " + ДанныеШапки.НалоговыйНомерВСтранеReg;
Иначе
    // Если номера нет, можно либо скрыть параметр, либо оставить пустым
    ОбластьМакета.Параметры.НалоговыйНомер = "";
КонецЕсли;

Типичные ошибки при реализации

Разберем основные ошибки, с которыми сталкиваются пользователи при попытке решить эту задачу:

Следование этим инструкциям позволит вам корректно и безопасно модифицировать печатные формы, обеспечивая соответствие документов законодательным требованиям вашей страны или внутренним стандартам организации.

← На главную