При переходе с одной системы на другую или при массовом обновлении базы данных часто возникает необходимость импортировать данные из внешних файлов. В конфигурации «1С:Комплексная автоматизация 1.1» (КА 1.1) задача загрузки контрагентов из Excel имеет свои особенности, связанные с архитектурой хранения контактной информации. В данной статье мы подробно разберем два основных способа решения этой задачи: использование встроенной обработки и написание собственного программного кода.
Этот способ является наиболее предпочтительным для большинства пользователей и администраторов, так как он не требует написания кода и уже встроен в систему. Рассмотрим пошагово, как правильно настроить этот инструмент.
Поиск обработки в интерфейсе
Многие пользователи сталкиваются с тем, что не могут найти нужную обработку в меню «Дополнительные внешние отчеты и обработки». В типовой конфигурации КА 1.1 она находится в другом месте. Чтобы открыть её, перейдем в главное меню: «Операции» — «Обработка» — «Загрузка данных из табличного документа».
Этап 1: Загрузка основных данных контрагента
Проанализируем процесс создания самих карточек контрагентов. В первую очередь нам необходимо создать элементы справочника Контрагенты.
Этап 2: Загрузка контактной информации (телефонов)
В конфигурации 1.1 контактная информация хранится не в самом справочнике, а в подчиненном регистре сведений. Поэтому вторым шагом мы выполним загрузку именно в него.
Если требуется более сложная логика (например, автоматическое создание основного договора или сложная очистка строк), можно воспользоваться программным методом. Рассмотрим пример кода, который считывает данные из файла и создает новых контрагентов.
Разберем логику работы с объектом ТабличныйДокумент и ПостроительОтчета для быстрого извлечения данных из Excel:
&НаСервере
Процедура ПрочитатьЭксельчик(Файл)
ТД = Новый ТабличныйДокумент;
// Читаем файл в табличный документ
ТД.Прочитать(Файл, СпособЧтенияЗначенийТабличногоДокумента.Текст);
// Используем построитель для удобной выгрузки области в таблицу значений
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТД.Область(1, 1, ТД.ВысотаТаблицы, ТД.ШиринаТаблицы));
Построитель.Выполнить();
Результат = Построитель.Результат.Выгрузить();
Для Каждого Строка Из Результат Цикл
// Сначала проверим, нет ли уже такого контрагента в базе по ИНН
ИщемКлиента = НайдемКлиента(Строка.ИНН);
Если ИщемКлиента.Пустая() Тогда
НовыйКлиент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКлиент.Наименование = Строка.Наименование;
НовыйКлиент.НаименованиеПолное = Строка.Наименование;
НовыйКлиент.ИНН = Строка.ИНН;
// В КА 1.1 важно заполнить признак ЮрФизЛицо
НовыйКлиент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
Попытка
НовыйКлиент.Записать();
// После записи контрагента можно добавить запись телефона в регистр
ЗаписатьТелефон(НовыйКлиент.Ссылка, Строка.Телефон);
Исключение
Сообщить("Ошибка при записи контрагента " + Строка.Наименование + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для поиска существующего контрагента используем функцию с запросом. Проанализируем её структуру:
&НаСервере
Функция НайдемКлиента(ИНН)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН";
Запрос.УстановитьПараметр("ИНН", ИНН);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Возврат Результат.Ссылка;
Иначе
Возврат Справочники.Контрагенты.ПустаяСсылка();
КонецЕсли;
КонецФункции
Проанализируем несколько критических моментов, которые часто упускают при загрузке данных:
Справочники.ДоговорыКонтрагентов.СоздатьЭлемент().Телефон в коде (как в некоторых примерах на форумах) не сработает в типовой КА 1.1, так как в справочнике Контрагенты нет такого реквизита. Всегда используйте запись в регистр сведений.Подводя итог, использование стандартной обработки «Загрузка данных из табличного документа» является самым быстрым и безопасным способом. Она позволяет гибко настроить поля поиска и загрузить данные в разные объекты (справочники и регистры) последовательно, что полностью закрывает потребность в переносе данных из Excel.