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