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