Как программно заполнить адрес контрагента в 1С для выгрузки ЭСФ?

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

При выгрузке электронных счетов-фактур (ЭСФ) в Казахстане база данных проверяет наличие заполненных адресов у контрагентов. Если в информационной базе 1С:Бухгалтерия для Казахстана (ред. 2.0) заведено множество контрагентов без фактических и юридических адресов, стандартная обработка «Групповая обработка справочников и документов» не поможет, так как контактная информация хранится не в реквизитах самого справочника КонтактныеЛица или Контрагенты, а в отдельном регистре сведений.

Рассмотрим, как устроена хранение адресов в конфигурациях 1С и какими способами можно массово установить адрес контрагентам.

Почему стандартная групповая обработка не изменяет адреса?

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

Ограничения и требования ИС ЭСФ к адресам

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

  1. Длина строки: Текстовое представление адреса в ЭСФ должно быть длиннее 3 символов и не превышать 400 символов. Значение «Республика Казахстан» проходит проверку по длине.
  2. Работа с нерезидентами: Для контрагентов-нерезидентов обязательным является указание кода страны по классификатору ISO. Одной лишь произвольной строки «Республика Казахстан» для них будет недостаточно.
  3. Налоговые риски: Подстановка единого адреса у всех контрагентов решает техническую проблему с выгрузкой файлов, но может вызвать вопросы при налоговых проверках, если контрагенты являются юридическими лицами-резидентами.

Способ 1. Программное заполнение регистра сведений через набор записей

Рассмотрим пример кода 1С, который позволяет записать контактную информацию напрямую в регистр сведений КонтактнаяИнформация. Данный метод создает или обновляет запись юридического адреса контрагента.

Разберем по шагам логику работы с регистром сведений:

  1. Создаем набор записей регистра КонтактнаяИнформация.
  2. Устанавливаем отбор по конкретному контрагенту (объекту), типу информации (адрес) и виду контактной информации (ЮрАдресКонтрагента).
  3. Проверяем, существует ли уже заполненное представление адреса.
  4. Если адрес отсутствует, формируем новую запись и записываем набор с замещением.

Посмотрим на пример кода обработки:


ВыборкаКонтрагентов = Справочники.Контрагенты.Выбрать();

Пока ВыборкаКонтрагентов.Следующий() Цикл
    
    // Исключаем группы контрагентов
    Если ВыборкаКонтрагентов.ЭтоГруппа Тогда
        Продолжить;
    КонецЕсли;
    
    СсылкаКонтрагента = ВыборкаКонтрагентов.Ссылка;
    
    НЗ = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    НЗ.Отбор.Объект.Установить(СсылкаКонтрагента);
    НЗ.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Адрес);
    НЗ.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
    НЗ.Прочитать();
    
    ФлагУжеЕстьТакойАдрес = Ложь;
    Для Каждого Запись Из НЗ Цикл
        Если Не ПустаяСтрока(Запись.Представление) Тогда
            ФлагУжеЕстьТакойАдрес = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если Не ФлагУжеЕстьТакойАдрес Тогда
        НЗ.Очистить();
        
        Запись = НЗ.Добавить();
        Запись.Объект = СсылкаКонтрагента;
        Запись.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
        Запись.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
        Запись.Представление = "Республика Казахстан";
        
        Попытка
            НЗ.Записать(Истина);
            Сообщить("Записан юр. адрес контрагенту: " + Строка(СсылкаКонтрагента));
        Исключение
            Сообщить("Ошибка записи контрагента: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;

КонецЦикла;

Способ 2. Использование сервисного модуля конфигурации

В типовых конфигурациях 1С (включая Бухгалтерию для Казахстана) предусмотрен общий модуль УправлениеКонтактнойИнформацией. Использование процедур этого модуля предпочтительно, так как он автоматически учитывает специфику структуры адреса и связанную служебную информацию.

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


// Пример вызова типовой процедуры записи контактной информации
ВидАдреса = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
ЗначениеАдреса = "Республика Казахстан";

УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(
    СсылкаКонтрагента, 
    ЗначениеАдреса, 
    ВидАдреса, 
    Перечисления.ТипыКонтактнойИнформации.Адрес
);

Способ 3. Заполнение без кода (Групповая обработка регистров сведений)

Если нет возможности написать программный код, можно воспользоваться стандартными обработками из комплекта поставки 1С:

  1. Воспользуйтесь внешней обработкой «Групповая обработка регистров сведений».
  2. Укажите регистр КонтактнаяИнформация.
  3. Настройте отбор по полю Объект (для нужных контрагентов или всей папки) и полю Вид = ЮрАдресКонтрагента.
  4. Выполните массовую установку значения для реквизита Представление.

Использование предложенных вариантов позволит быстро подготовить справочник контрагентов для успешного формирования и выгрузки электронных счетов-фактур.

← На главную