Обработка для загрузки контрагентов в 1С из TXT, DBF, CSV, XML и Excel файлов
Первое что должен научиться делать начинающий программист 1С это загружать данные в информационную базу из различных файлов, например, TXT, DBF, CSV, XML и Excel. Это самые популярные форматы с помощью которых происходит обмен. Так же нужно уметь и выгружать данные из 1С. В предыдущих статьях я рассказал про то как можно прочитать данные из этих файлов, сегодня же расскажу как создать контрагентов на основе прочитанных данных. Для того чтобы лучше понять смысл сегодняшней статьи рекомендую прочитать предыдущие материалы на эту тему.
Как в 1С загружать данные из разных файлов
В предыдущих статьях мы создавали универсальную обработку для чтения TXT, DBF, CSV, XML и Excel файлов. На форме был создан переключатель который позволял выбрать тип файла а так же окно выбора, табличная часть в которой отображаются прочитанные данные и две команды «Прочить» и «Загрузить».
Принцип работы обработки такой, сначала отмечаем необходимый формат, после этого в окне выбора отображаются файлы только этого форматы, после нажатия кнопки «Прочитать» происходит чтение выбранного файла, после чего прочитанные данные отображаются в табличной части обработки. Теперь нужно сделать процедуру для команды «Загрузить» которая бы добавляла контрагентов в справочник «Контрагенты». Для этого добавляем действие для команды.
Далее выбираем «Создать на клиенте и процедуру на сервере».
И пишем вот такой код.
&НаСервере
Процедура ЗагрузитьНаСервере()
// Вставить содержимое обработчика.
МассивИНН = Новый Массив;
Для каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
МассивИНН.Добавить(Число(СтрокаДанных.ИНН));
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.ИНН КАК ИНН
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН В(&МассивИНН)";
Запрос.УстановитьПараметр("МассивИНН", МассивИНН);
РезультатЗапроса = Запрос.Выполнить();
ТабКонтрагентов = РезультатЗапроса.Выгрузить();
Для каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
НайденныйКонтрагент = ТабКонтрагентов.Найти(Число(СтрокаДанных.ИНН));
Если НайденныйКонтрагент <> Неопределено Тогда
Продолжить;
КонецЕсли;
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = СтрокаДанных.Наименование;
НовыйКонтрагент.Расшифровка = СтрокаДанных.Расшифровка;
НовыйКонтрагент.ИНН = СтрокаДанных.ИНН;
НовыйКонтрагент.Записать();
КонецЦикла;
Сообщить("Создание когтрагентов успешно завершено!")
КонецПроцедуры
Для того чтобы данные не задваивались сделаем проверку контрагентов по ИНН. Для этого создаем массив в который добавляем все прочитанные ИНН, после этого с помощью запроса проверяем сразу все прочитанные ИНН. Тут можно обойтись и без запроса, но в этом случае увеличиться количество запросов к базе. После чего в цикле обходим табличную часть обработки и создаем новые элементы справочника.
Остается только проверить работоспособность, открываем файл нажимаем «Прочитать» после того как данные будут прочитаны и отобразятся жмем «Загрузить».
После появления сообщения об успешном создании контрагентов, открываем этот справочник и проверяем.
Как видите сделать обработку для загрузки контрагентов из TXT, DBF, CSV, XML или Excel файлов достаточно просто. В этом нет абсолютно ничего сложного, но если у Вас что-то не получается или есть вопросы обязательно напишите об этом.
Как заполнить значения пустых реквизитов, сохранив заполненные реквизиты, у существующих элементов справочника?
Проверить на наличие данных ЗначениеЗаполнено(<Значение>)
А как правильно будет это вставить в данный цикл?
Для каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
НайденныйПользователь = ТабПользователей.Найти(Строка(СтрокаДанных.Фио));
Если НайденныйПользователь Неопределено Тогда
Продолжить;
КонецЕсли;
НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент();
;
НовыйПользователь.Фио = ЗначениеЗаполнено(СтрокаДанных.Фио);
НовыйПользователь.Почта = СтрокаДанных.Почта;
НовыйПользователь.Записать();
КонецЦикла;
А как правильно будет это вставить в данный цикл?
// Вставить содержимое обработчика.
МассивФио = Новый Массив;
Для каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
МассивФио.Добавить(Строка(СтрокаДанных.Фио));
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Пользователи.Ссылка КАК Ссылка,
| Пользователи.Фио КАК Фио,
| Пользователи.Почта КАК Почта
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Фио В(&МассивФио)»;
Запрос.УстановитьПараметр(«МассивФио», МассивФио);
РезультатЗапроса = Запрос.Выполнить();
ТабПользователей = РезультатЗапроса.Выгрузить();
Для каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
НайденныйПользователь = ТабПользователей.Найти(Строка(СтрокаДанных.Фио));
Если НайденныйПользователь Неопределено Тогда
Продолжить;
КонецЕсли;
НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент();
;
НовыйПользователь.Фио = СтрокаДанных.Фио;
НовыйПользователь.Почта = СтрокаДанных.Почта;
НовыйПользователь.Записать();
КонецЦикла;