Как программно заполнить адрес юридического лица (контрагента) в программе 1С:Розница 2.3

Программист 1С v8.3 (Управляемые формы) 1С:Розница IT и автоматизация бизнеса
← На главную

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

Анализ проблемы и поиск причин ошибки

Рассмотрим ситуацию: при попытке вызвать процедуру КонтактнаяИнформацияУНФ.ЗаполнитьЗначениеКонтактнойИнформации в конфигурации «Розница» система выдает ошибку, так как указанный модуль является специфическим для УНФ. В «Рознице» (начиная с версии 2.0 и выше) работа с адресами, телефонами и электронной почтой стандартизирована через подсистему БСП «Контактная информация». Выясним причину: в разных конфигурациях 1С функции для работы с данными могут называться по-разному, хотя выполняют схожие действия. Наша задача — заменить «самописные» или специфические модули УНФ на стандартные методы БСП.

Метод 1: Использование общего модуля УправлениеКонтактнойИнформацией

Для программной записи адреса в карточку контрагента в «Рознице 2.3» следует использовать стандартный модуль УправлениеКонтактнойИнформацией. Проанализируем, какие параметры нам необходимы. Основная процедура, которая нам поможет, — это ЗаписатьКонтактнуюИнформацию.

Посмотрим на пример того, как должен выглядеть исправленный код процедуры:


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

Важный момент: в параметре Объект должен передаваться именно объект справочника (или данные формы, приведенные к объекту), так как запись контактной информации происходит в табличную часть КонтактнаяИнформация.

Метод 2: Работа с табличной частью напрямую

Если по каким-то причинам стандартный метод модуля УправлениеКонтактнойИнформацией не подходит (например, при сложной логике предварительной обработки), мы можем рассмотреть вариант прямого обращения к табличной части. Контактная информация в справочнике Контрагенты хранится в таблице КонтактнаяИнформация.

Разберем по шагам, какие поля необходимо заполнить:

  1. Тип: ссылка на перечисление Перечисления.ТипыКонтактнойИнформации.Адрес.
  2. Вид: ссылка на элемент справочника Справочники.ВидыКонтактнойИнформации (например, «Юридический адрес»).
  3. Представление: строка текста, которую видит пользователь.
  4. ЗначенияПолей: техническая строка, содержащая разобранный по ФИАС адрес. Если её не заполнить, адрес не будет «валидным» для налоговой отчетности, но отобразится в карточке.

Пример кода для ручного добавления строки:


НоваяСтрока = Объект.КонтактнаяИнформация.Добавить();
НоваяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
НоваяСтрока.Представление = ДанныеКонтрагента.ЮридическийАдрес;
// Чтобы адрес был корректно распознан системой, используем функцию БСП:
НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформацией.ДанныеАдресаДляЗаписи(ДанныеКонтрагента.ЮридическийАдрес, Ложь);

Метод 3: Использование встроенного сервиса 1С:Контрагент

Поскольку в исходном вопросе речь идет о заполнении данных по ИНН, проанализируем ситуацию: зачем писать свой код, если в «Рознице 2.3» уже есть встроенный механизм? Программисту-стажеру полезно будет изучить модуль ЗаполнениеКонтрагентов.

Вместо ручного разбора структур, приходящих из интернета, можно вызвать типовую функцию:


Данные = ЗаполнениеКонтрагентов.ДанныеКонтрагента(ИНН, КПП);
Если Данные <> Неопределено Тогда
    ЗаполнениеКонтрагентов.ЗаполнитьРеквизитыОбъекта(Объект, Данные);
КонецЕсли;

Этот метод является наиболее правильным с точки зрения поддержки конфигурации, так как он автоматически заполняет не только адрес, но и телефоны, руководителя и другие данные, используя механизмы, заложенные разработчиками фирмы «1С».

Важные рекомендации по работе в Рознице 2.3

При работе с контактной информацией строго рекомендуется обращать внимание на следующие нюансы:

Подведем итог: замена КонтактнаяИнформацияУНФ на УправлениеКонтактнойИнформацией — это не просто переименование, а переход на использование универсальных механизмов БСП, которые обеспечат стабильную работу вашего кода в «1С:Розница» и других типовых решениях.

← На главную