Представленный модуль реализует механизм импорта данных из Excel-документа в информационную базу 1С:Предприятие. В качестве примера используется справочник, содержащий сведения об автомобилях (категория (например грузовой/легковой), марка авто и государственный номер, закрепленный за авто), доставленных на штрафстоянку.
Процедура "ЗагрузитьДанные"
На клиентской стороне открывается диалог выбора файла:
- Разрешается выбрать только один файл.
- Поддерживаются расширения *.xls, *.xlsx.
- После выбора файл передаётся на сервер для обработки.
Процедура "ЗагрузитьДанныеНаСервере"
На серверной стороне:
- Открывается выбранный Excel-файл как табличный документ.
- Цикл по строкам таблицы (параметр в цикле выбирайте исходя из положения данных в табличном документе, в моем случае данные хранятся со второй строки).
- Для каждой строки извлекаются значения, а также проверяется наличие элементов в соответствующих справочниках.
- При отсутствии элемента — создаётся новый.
- Если автомобиль с указанным номером уже существует — пользователь уведомляется об этом.
Исходные коды:
&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыборФайла.МножественныйВыбор = Ложь;
ВыборФайла.Фильтр = "Табличные документы (*.xls, *.xlsx) | *.xls;*.xlsx";
ВыборФайла.Показать(Новый ОписаниеОповещения("ЗагрузитьДанныеНаСервере", ЭтотОбъект, Новый Структура));
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДанныеНаСервере(Результат, ДопПараметр) Экспорт
Если Не (Результат = Неопределено) Тогда
СсылкаНаФайл = Результат[0];
Иначе
Сообщить("Файл не выбран!");
Возврат;
КонецЕсли;
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(СсылкаНаФайл);
Для Строка = 2 По ТабДок.ВысотаТаблицы Цикл
ДанныеАвтомобиля = ТабДок.Область(Строка,3).Текст;
Если Справочники.Автопарк.НайтиПоКоду(ДанныеАвтомобиля, Истина) = Справочники.Автопарк.ПустаяСсылка() Тогда
ЭлементАвтопарка = Справочники.Автопарк.СоздатьЭлемент();
ЭлементАвтопарка.Код = ДанныеАвтомобиля;
КатегорияАвто = ТабДок.Область(Строка,1).Текст;
Если Справочники.Категории.НайтиПоНаименованию(КатегорияАвто, Истина) = Справочники.Категории.ПустаяСсылка() Тогда
ЭлементКатегория = Справочники.Категории.СоздатьЭлемент();
ЭлементКатегория.Наименование = КатегорияАвто;
ЭлементКатегория.Записать();
Сообщить("Добавлена новая категория: "+ЭлементКатегория.Наименование);
КонецЕсли;
ЭлементАвтопарка.Категория = Справочники.Категории.НайтиПоНаименованию(КатегорияАвто, Истина);
МаркаАвто = ТабДок.Область(Строка,2).Текст;
Если Справочники.Марки.НайтиПоНаименованию(МаркаАвто, Истина) = Справочники.Марки.ПустаяСсылка() Тогда
ЭлементМарка = Справочники.Марки.СоздатьЭлемент();
ЭлементМарка.Наименование = МаркаАвто;
ЭлементМарка.Записать();
Сообщить("Добавлена новая марка: "+ЭлементМарка.Наименование);
КонецЕсли;
ЭлементАвтопарка.Марка = Справочники.Марки.НайтиПоНаименованию(МаркаАвто, Истина);
ЭлементАвтопарка.Записать();
Сообщить("Добавлен автомобиль: "+ЭлементАвтопарка.Код);
Иначе
Сообщить("Автомобиль с номером : "+ДанныеАвтомобиля+" уже существует!");
КонецЕсли;
КонецЦикла;
КонецПроцедуры