Импорт документа Excel через web-клиент Во время реализации задачи по регистрации продаж дистрибьюторов на основании Excel документов столкнулся с интересной задачей. Необходимо реализовать загрузку файла и на стороне сервера обработать его, заполнив табличную часть документа.
Решение состоит из двух функций: клиентской и серверной.
Клиентская часть инициирует выбор файла, передачу выбранного файла на сервер и передача управления серверной процедуре.
Код 1C v 8.2 УП #НаКлиенте
Процедура ИмпортИзВнешнегоФайла(Команда)
Если НЕ ПодключитьРасширениеРаботыСФайлами( ) Тогда
УстановитьРасширениеРаботыСФайлами( ) ;
КонецЕсли ;
Если ПодключитьРасширениеРаботыСФайлами( ) Тогда
Режим = РежимДиалогаВыбораФайла. Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = "" ;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
Фильтр = "Текст(*.xls)|*.xls" ;
ДиалогОткрытияФайла. Фильтр = Фильтр;
ДиалогОткрытияФайла. Заголовок = "Выберите файл для импорта" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
Объект. МедицинскиеРаботники. Очистить( ) ;
ДанныеНачинаютсяС = 1 ;
Если Не ВвестиЧисло( ДанныеНачинаютсяС, "Данные начинаются со строки" , 2 , 0 ) Тогда
Возврат ;
КонецЕсли ;
МассивФайлов = ДиалогОткрытияФайла. ВыбранныеФайлы;
ПомещаемыеФайлы = Новый Массив;
Для Каждого Файл Из МассивФайлов Цикл
ТекФайл = Новый Файл( Файл) ;
Описание = Новый ОписаниеПередаваемогоФайла( Файл, "" ) ;
ПомещаемыеФайлы. Добавить( Описание) ;
КонецЦикла ;
ПомещенныеФайлы = Новый Массив;
Если ПоместитьФайлы( ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь , УникальныйИдентификатор) Тогда
ИмпортироватьФайлИзВременногоХранилищаВТЗ( ПомещенныеФайлы, ДанныеНачинаютсяС) ;
КонецЕсли ;
Иначе
Предупреждение( "Файл(ы) не выбран!" ) ;
КонецЕсли ;
Иначе
Предупреждение( НСтр( "ru ='Данная возможность недоступна, так как не подключено расширение работы с файлами.'" , "ru" ) ) ;
КонецЕсли ;
КонецПроцедуры
Серверная процедура перебирает полученные на сервер файлы. Получает COM-объекты и импортирует данные.
Код 1C v 8.2 УП #НаСервере
Процедура ИмпортироватьФайлИзВременногоХранилищаВТЗ(МассивФайлов, ДанныеНачинаютсяС)
ДокументОбъект = РеквизитФормыВЗначение( "Объект" ) ;
Для Каждого ЭлементМассива Из МассивФайлов Цикл
ФайлИзХранилища = ПолучитьИзВременногоХранилища( ЭлементМассива. Хранение) ;
ВременныйФайл = ПолучитьИмяВременногоФайла( "xls" ) ;
ФайлИзХранилища. Записать( ВременныйФайл) ;
Док = ПолучитьCOMОбъект( ВременныйФайл) ;
ФИОУчастника = Док. Sheets( 1 ) . Cells( ДанныеНачинаютсяС, 2 ) . Value;
Пока СокрЛП( ФИОУчастника) = "" Цикл
НоваяСтрока = ДокументОбъект. МедицинскиеРаботники. Добавить( ) ;
НоваяСтрока. Фио = ФИОУчастника;
НоваяСтрока. Учреждение = Док. Sheets( 1 ) . Cells( ДанныеНачинаютсяС, 7 ) . Value;
НоваяСтрока. Адрес = Док. Sheets( 1 ) . Cells( ДанныеНачинаютсяС, 3 ) . Value;
НоваяСтрока. Телефон = Док. Sheets( 1 ) . Cells( ДанныеНачинаютсяС, 4 ) . Value;
НоваяСтрока. ЭлПочта = Док. Sheets( 1 ) . Cells( ДанныеНачинаютсяС, 5 ) . Value;
НоваяСтрока. Образование = Док. Sheets( 1 ) . Cells( ДанныеНачинаютсяС, 6 ) . Value;
ДанныеНачинаютсяС = ДанныеНачинаютсяС + 1 ;
ФИОУчастника = Док. Sheets( 1 ) . Cells( ДанныеНачинаютсяС, 2 ) . Value;
КонецЦикла ;
Сообщить( "Импорт завершён" ) ;
Док. Application. Quit( ) ;
КонецЦикла ;
ЗначениеВРеквизитФормы( ДокументОбъект, "Объект" ) ;
КонецПроцедуры
Источник Категория:
Работа с Microsoft Office и OpenOffice Создать, заменить, записать файл в Хранилище Значения Код 1C v 8.х Функция СоздатьФайлВХранилище(ЛокПолноеИмяФайла,ЛокНаименованиеЭлемента) Экспорт
Попытка
ЛокХранилище = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ЛокПолноеИмяФайла) ) ;
Исключение
Возврат Null ;
КонецПопытки ;
ЛокСправочникХЗН = Справочники. ХранилищеДополнительнойИнформации. СоздатьЭлемент( ) ;
ЛокСправочникХЗН. Наименование = ЛокНаименованиеЭлемента;
ЛокСправочникХЗН. Хранилище = ЛокХранилище;
Попытка
ЛокСправочникХЗН. Записать( ) ;
Возврат ЛокСправочникХЗН;
Исключение
Возврат Null ;
КонецПопытки ;
КонецФункции
Функция ЗаменаФайлаВХранилище(ЛокПолноеИмяФайла,ЛокНаименованиеЭлемента) Экспорт
Попытка
ЛокХранилище = Новый ХранилищеЗначения( Новый ДвоичныеДанные( ЛокПолноеИмяФайла) ) ;
Исключение
Возврат Null ;
КонецПопытки ;
ЛокСправочникХЗНСсылка = Справочники. ХранилищеДополнительнойИнформации. НайтиПоНаименованию( ЛокНаименованиеЭлемента) ;
Если ЛокСправочникХЗНСсылка. Пустая( ) Тогда
Возврат Null ;
КонецЕсли ;
ЛокСправочникХЗН = ЛокСправочникХЗНСсылка. ПолучитьОбъект( ) ;
ЛокСправочникХЗН. Хранилище = ЛокХранилище;
Попытка
ЛокСправочникХЗН. Записать( ) ;
Возврат ЛокСправочникХЗН;
Исключение
Возврат Null ;
КонецПопытки ;
КонецФункции
Функция ЗаписатьФайлИзХранилища(ЛокПолноеИмяФайла,ЛокНаименованиеЭлемента) Экспорт
Попытка
ЛокСпр = Справочники. ХранилищеДополнительнойИнформации. НайтиПоНаименованию( ЛокНаименованиеЭлемента) ;
ЛокСпр. Хранилище. Получить( ) . Записать( ЛокПолноеИмяФайла) ;
Возврат Истина ;
Исключение
Возврат Ложь ;
КонецПопытки ;
КонецФункции
Функция СоздатьВременныйФайлИзХранилища(ЛокНаименованиеЭлемента,ЛокРасширение)
ЛокПолноеИмяФайла = КаталогВременныхФайлов( ) + ПолучитьИмяВременногоФайла( ЛокРасширение) ;
Если ЗаписатьФайлИзХранилища( ЛокПолноеИмяФайла, ЛокНаименованиеЭлемента) Тогда
Возврат ЛокПолноеИмяФайла;
Иначе
Возврат Null ;
КонецЕсли ;
КонецФункции
Категория:
Работа с Хранилищем Значений