Автоматизация ввода данных о контрагентах — одна из самых частых задач, с которой сталкиваются разработчики при доработке конфигурации Бухгалтерия предприятия 3.0. Зачастую ручной ввод информации по ИНН требует либо платной подписки, либо использования сторонних инструментов. В этой статье мы разберем, как подойти к решению данной задачи программным способом, учитывая архитектуру современной 1С:Предприятие 8.3.
Прежде чем приступать к написанию кода, важно осознать, что справочник Контрагенты — это лишь «скелет» объекта. В современной конфигурации БП 3.0 данные не хранятся в «плоских» реквизитах, как это было в старых версиях системы.
Контактная информация (адреса, телефоны, email) вынесена в регистр сведений КонтактнаяИнформация. Это сделано для того, чтобы соответствовать формату адресного классификатора ФИАС/ГАР. Если вы просто попытаетесь записать строку в реквизит, программа не «увидит» эти данные в отчетах или при заполнении документов.
Самый простой путь — использование встроенных процедур конфигурации, которые уже умеют работать с сервисом 1С:Контрагент. Если у вас есть доступ к этому функционалу, вы можете вызвать соответствующую процедуру заполнения по ИНН. Однако, если подписка отсутствует или вы хотите реализовать собственное решение, разберем альтернативный подход.
Для записи Ф.И.О. и Должности контактного лица недостаточно просто создать реквизит в справочнике. В БП 3.0 существует подчиненный справочник КонтактныеЛица. Чтобы программно заполнить эти данные, вам необходимо:
КонтактныеЛица.Наименование, Должность и контактные данные.Поскольку использование платного сервиса 1С не всегда целесообразно, многие разработчики используют прямые запросы к открытым API (таким как Dadata или парсинг сайта ФНС). Рассмотрим примерный алгоритм действий:
Сначала мы формируем HTTP-запрос к выбранному сервису, передавая ИНН контрагента. Получив ответ в формате JSON, мы должны его распарсить в структуру 1С. Рассмотрим упрощенный пример кода для получения и обработки данных:
// Пример получения данных через HTTP-соединение
Соединение = Новый HTTPСоединение("адрес_api_сервиса");
Запрос = Новый HTTPЗапрос("/v1/find?inn=" + ИНН);
Ответ = Соединение.Получить(Запрос);
РезультатСтрокой = Ответ.ПолучитьТелоКакСтроку();
// Парсинг JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(РезультатСтрокой);
ДанныеКонтрагента = ПрочитатьJSON(ЧтениеJSON);
// Заполнение объекта
КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
КонтрагентОбъект.Наименование = ДанныеКонтрагента.Название;
КонтрагентОбъект.ИНН = ДанныеКонтрагента.ИНН;
// ... запись остальных реквизитов
КонтрагентОбъект.Записать();
Для корректной записи адреса или телефона необходимо использовать механизмы Библиотеки Стандартных Подсистем (БСП). Не пытайтесь писать данные напрямую в таблицы базы данных. Используйте процедуру УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию. Она ожидает на вход структуру данных в формате XML, которая соответствует внутренним стандартам 1С.
Важные советы для разработчика:
НачатьТранзакцию() и ЗафиксироватьТранзакцию(). Если произойдет сбой при записи адреса, вы сможете откатить создание всей карточки, чтобы не плодить «битые» записи.Попытка ... Исключение при вызовах внешних API. Внешние сервисы могут быть недоступны, или формат данных может измениться — ваша программа не должна «вылетать» с ошибкой у пользователя.БП 3.0.Используя этот комплексный подход, вы сможете создать надежный механизм для автоматизации справочника Контрагенты, который будет работать стабильно и не зависеть от жестких условий платных подписок.