Обработка производит загрузку данных из файла Excell в табличную часть документа
&НаКлиенте
Процедура ЗагрузитьИзExcel(Команда)
Оповещение = Новый ОписаниеОповещения("ЗаполнитьТоварыВопросЗавершение", ЭтаФорма);
ТекстВопроса = "Вы хотите очистить табличную часть? Если Вы хотите добавить товары к уже занесенным, нажмите ""Нет"".";
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТоварыВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Товары.Очистить();
КонецЕсли;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Файл данных (*.xls, *.xlsx)|*.xls; *.xlsx";
ДиалогВыбораФайла.Заголовок = "Выберите файл";
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.Расширение = "xls, xlsx";
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Ложь;
Если Не ДиалогВыбораФайла.Выбрать() Тогда
Возврат;
КонецЕсли;
ВыполнитьЗагрузку(ДиалогВыбораФайла.ПолноеИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузку(Файл)
Попытка
COMОбъект = Новый COMОбъект("Excel.Application");
Исключение
COMОбъект = Неопределено;
ТекстСообщенияВозврат = НСтр("ru = 'Не удалось создать объект Excel.Application'" )
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияВозврат);
Возврат;
КонецПопытки;
Попытка
COMОбъект.WorkBooks.Open(Файл);
Исключение
COMОбъект = Неопределено;
ТекстСообщенияВозврат = НСтр("ru = 'Не удалось открыть файл данных'" )
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияВозврат);
Возврат;
КонецПопытки;
ЛистДанных = COMОбъект.Sheets(1);
КоличествоСтрок = ЛистДанных.UsedRange.Rows.Count;
// Структура файла
КолонкаАртикул = 1;
КолонкаНаименование = 2;
КолонкаКоличество = 3;
КолонкаЦена = 4;
//
МассивСтрокФайла = Новый Массив;
НомерСтрокиФайла = 0;
Для НомерСтрокиФайла = 2 По КоличествоСтрок Цикл
Если НомерСтрокиФайла % 20 = 0 Тогда
Состояние(НСтр("ru = 'Выполняется чтение данных. Пожалуйста подождите'"),
Окр(100*НомерСтрокиФайла / КоличествоСтрок, 0),
НСтр("ru = 'Выполняется чтение данных. Пожалуйста подождите'"));
КонецЕсли;
Если ЛистДанных.Cells(НомерСтрокиФайла, КолонкаАртикул).Value <> "" Тогда
СтруктураСтроки = Новый Структура("Артикул, Наименование, Количество, Цена");
СтруктураСтроки.Артикул = ЛистДанных.Cells(НомерСтрокиФайла, КолонкаАртикул).Value;
СтруктураСтроки.Наименование = ЛистДанных.Cells(НомерСтрокиФайла, КолонкаНаименование).Value;
СтруктураСтроки.Количество = ЛистДанных.Cells(НомерСтрокиФайла, КолонкаКоличество).Text;
СтруктураСтроки.Цена = ЛистДанных.Cells(НомерСтрокиФайла, КолонкаЦена).Text;
МассивСтрокФайла.Добавить(СтруктураСтроки);
КонецЕсли;
КонецЦикла;
//
Попытка
COMОбъект.Quit();
COMОбъект = Неопределено;
Исключение
КонецПопытки;
ЗаполнитьТЧТовары(МассивСтрокФайла);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТЧТовары(МассивСтрок)
Для Каждого Эл Из МассивСтрок Цикл
НоваяСтрока = Объект.Товары.Добавить();
Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",Эл.Артикул);
Если Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Или Номенклатура <> Неопределено Тогда
//НоваяСтрока.Артикул = Номенклатура.Артикул;
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.КоличествоУпаковок = Эл.Количество;
НоваяСтрока.Количество = Эл.Количество;
НоваяСтрока.Цена = Эл.Цена;
НоваяСтрока.Сумма = НоваяСтрока.КоличествоУпаковок * НоваяСтрока.Цена;
НоваяСтрока.ДатаОтгрузки = Объект.Дата;
НоваяСтрока.Склад = Объект.Склад;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзExcel(Команда)
Оповещение = Новый ОписаниеОповещения("ЗаполнитьТоварыВопросЗавершение", ЭтаФорма);
ТекстВопроса = "Вы хотите очистить табличную часть? Если Вы хотите добавить товары к уже занесенным, нажмите ""Нет"".";
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТоварыВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Товары.Очистить();
КонецЕсли;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Файл данных (*.xls, *.xlsx)|*.xls; *.xlsx";
ДиалогВыбораФайла.Заголовок = "Выберите файл";
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.Расширение = "xls, xlsx";
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Ложь;
Если Не ДиалогВыбораФайла.Выбрать() Тогда
Возврат;
КонецЕсли;
ВыполнитьЗагрузку(ДиалогВыбораФайла.ПолноеИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузку(Файл)
Попытка
COMОбъект = Новый COMОбъект("Excel.Application");
Исключение
COMОбъект = Неопределено;
ТекстСообщенияВозврат = НСтр("ru = 'Не удалось создать объект Excel.Application'" )
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияВозврат);
Возврат;
КонецПопытки;
Попытка
COMОбъект.WorkBooks.Open(Файл);
Исключение
COMОбъект = Неопределено;
ТекстСообщенияВозврат = НСтр("ru = 'Не удалось открыть файл данных'" )
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияВозврат);
Возврат;
КонецПопытки;
ЛистДанных = COMОбъект.Sheets(1);
КоличествоСтрок = ЛистДанных.UsedRange.Rows.Count;
// Структура файла
КолонкаАртикул = 1;
КолонкаНаименование = 2;
КолонкаКоличество = 3;
КолонкаЦена = 4;
//
МассивСтрокФайла = Новый Массив;
НомерСтрокиФайла = 0;
Для НомерСтрокиФайла = 2 По КоличествоСтрок Цикл
Если НомерСтрокиФайла % 20 = 0 Тогда
Состояние(НСтр("ru = 'Выполняется чтение данных. Пожалуйста подождите'"),
Окр(100*НомерСтрокиФайла / КоличествоСтрок, 0),
НСтр("ru = 'Выполняется чтение данных. Пожалуйста подождите'"));
КонецЕсли;
Если ЛистДанных.Cells(НомерСтрокиФайла, КолонкаАртикул).Value <> "" Тогда
СтруктураСтроки = Новый Структура("Артикул, Наименование, Количество, Цена");
СтруктураСтроки.Артикул = ЛистДанных.Cells(НомерСтрокиФайла, КолонкаАртикул).Value;
СтруктураСтроки.Наименование = ЛистДанных.Cells(НомерСтрокиФайла, КолонкаНаименование).Value;
СтруктураСтроки.Количество = ЛистДанных.Cells(НомерСтрокиФайла, КолонкаКоличество).Text;
СтруктураСтроки.Цена = ЛистДанных.Cells(НомерСтрокиФайла, КолонкаЦена).Text;
МассивСтрокФайла.Добавить(СтруктураСтроки);
КонецЕсли;
КонецЦикла;
//
Попытка
COMОбъект.Quit();
COMОбъект = Неопределено;
Исключение
КонецПопытки;
ЗаполнитьТЧТовары(МассивСтрокФайла);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТЧТовары(МассивСтрок)
Для Каждого Эл Из МассивСтрок Цикл
НоваяСтрока = Объект.Товары.Добавить();
Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",Эл.Артикул);
Если Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Или Номенклатура <> Неопределено Тогда
//НоваяСтрока.Артикул = Номенклатура.Артикул;
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.КоличествоУпаковок = Эл.Количество;
НоваяСтрока.Количество = Эл.Количество;
НоваяСтрока.Цена = Эл.Цена;
НоваяСтрока.Сумма = НоваяСтрока.КоличествоУпаковок * НоваяСтрока.Цена;
НоваяСтрока.ДатаОтгрузки = Объект.Дата;
НоваяСтрока.Склад = Объект.Склад;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Комментариев нет:
Отправить комментарий