Добрый день!
Конфигурация УТ 11.
Ситуация следующая. Надо в базу 1С загрузить файл экселя, но на сервере на котором находится база, нет экселя. Как это можно сделать? С загрузкой документов еще не разу не работал, поэтому надеюсь на Вашу помощь!
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
ДиалогВыбораФайла.Фильтр = "Лист Excel (*.xls)|*.xls|";
Если ДиалогВыбораФайла.Выбрать() Тогда
ТабличныйДокумент = ЭлементыФормы.ТЗ;
ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);
Если нРег(ФайлНаДиске.Расширение) = ".xls" Тогда
мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);
КонецЕсли;
КонецЕсли;
&НаКлиенте
Процедура Загрузить(Команда)
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
ДиалогВыбораФайла.Фильтр = "Лист Excel (*.xlsx)|*.xlsx|";
Если ДиалогВыбораФайла.Выбрать() Тогда
ТабличныйДокумент = ЭлементыФормы.ТЗ;
ФайлНаДиске = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);
Если нРег(ФайлНаДиске.Расширение) = ".xlsx" Тогда
мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
xlLastCell = 11;
ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат Ложь;
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Возврат ложь;
КонецПопытки;
ТабличныйДокумент.Очистить();
ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
RowCount = ActiveCell.Row;
ColumnCount = ActiveCell.Column;
Для Column = 1 По ColumnCount Цикл
ТабличныйДокумент.Область("C" + Формат(Column, "ЧГ=")).ШиринаКолонки = ExcelЛист.Columns(Column).ColumnWidth;
КонецЦикла;
Для Row = 1 По RowCount Цикл
Для Column = 1 По ColumnCount Цикл
ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = ExcelЛист.Cells(Row,Column).Text;
КонецЦикла;
КонецЦикла;
Excel.WorkBooks.Close();
Excel = 0;
Возврат Истина;
КонецФункции // ()
{Форма.Форма.Форма(8,29)}: Переменная не определена (ЭлементыФормы)
ТабличныйДокумент = <<?>>ЭлементыФормы.ТЗ; (Проверка: Тонкий клиент)
{Форма.Форма.Форма(11,13)}: Процедура или функция с указанным именем не определена (мПрочитатьТабличныйДокументИзExcel)
<<?>>мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла); (Проверка: Тонкий клиент)
{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(15,3)}: Процедура или функция с указанным именем не определена (Состояние)
<<?>>Состояние("Обработка файла Microsoft Excel..."); (Проверка: Сервер)
{Форма.Форма.Форма(8,29)}: Переменная не определена (ЭтотОбъект)
ТабличныйДокумент = <<?>>ЭтотОбъект.ТЗ; (Проверка: Тонкий клиент)
{Форма.Форма.Форма(11,13)}: Процедура или функция с указанным именем не определена (мПрочитатьТабличныйДокументИзExcel)
<<?>>мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла); (Проверка: Тонкий клиент)
Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
xlLastCell = 11;
ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат Ложь;
КонецЕсли;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Возврат ложь;
КонецПопытки;
ТабличныйДокумент.Очистить();
ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
RowCount = ActiveCell.Row;
ColumnCount = ActiveCell.Column;
Для Column = 1 По ColumnCount Цикл
ТабличныйДокумент.Область("C" + Формат(Column, "ЧГ=")).ШиринаКолонки = ExcelЛист.Columns(Column).ColumnWidth;
КонецЦикла;
Для Row = 1 По RowCount Цикл
Для Column = 1 По ColumnCount Цикл
ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = ExcelЛист.Cells(Row,Column).Value;
КонецЦикла;
КонецЦикла;
Excel.WorkBooks.Close();
Excel = 0;
Возврат Истина;
КонецФункции // ()
&НаСервере
Процедура ПолучитьТаблицуДанных(ТабличныйДокумент)
Объект.ЕстьОшибки = Ложь;
Для ТекущаяСтрока = 2 По ТабличныйДокумент.ВысотаТаблицы Цикл
Группа = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C1").Текст);
Код = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C2").Текст);
Артикул = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C3").Текст);
РабочееНаименование = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C4").Текст);
НаименованиеДляПечати = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C5").Текст);
Новинка = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C6").Текст);
СтавкаНДС = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C7").Текст);
ВидНоменклатуры = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C8").Текст);
ТипНоменклатуры = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C9").Текст);
ЕдиницаХранения = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C10").Текст);
ВестиУчетПоГТД = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C11").Текст);
Поставщик = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C12").Текст);
Бренд = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C13").Текст);
Попытка
КоличествоВУпаковкеПоУмолчанию = Число(СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"С14").Текст));
Исключение
КоличествоВУпаковкеПоУмолчанию = 0;
Объект.ЕстьОшибки = Истина;
Сообщить("Строка №"+ТекущаяСтрока+". Количество имеет не числовой формат!");
ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C14").Примечание.Текст = "Количество имеет не числовой формат!";
КонецПопытки;
МинимальныйЗаказ = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C15").Текст);
Попытка
ЦенаПоступления = Число(СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C16").Текст));
Исключение
ЦенаПоступления = 0;
Объект.ЕстьОшибки = Истина;
Сообщить("Строка №"+ТекущаяСтрока+". Цена имеет не числовой формат!");
ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C16").Примечание.Текст = "Цена имеет не числовой формат!";
КонецПопытки;
Попытка
ЦенаБазовая = Число(СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C17").Текст));
Исключение
ЦенаБазовая = 0;
Объект.ЕстьОшибки = Истина;
Сообщить("Строка №"+ТекущаяСтрока+". Цена имеет не числовой формат!");
ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C17").Примечание.Текст = "Цена имеет не числовой формат!";
КонецПопытки;
ШтрихКод = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C18").Текст);
Склад = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C19").Текст);
СпособПополненияЗапаса = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C20").Текст);
ВремяТранспортировки = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C21").Текст);
Календарь = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C22").Текст);
ПорядокПрименения = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C23").Текст);
АртикулА = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C24").Текст);
Наименование = СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C25").Текст);
Попытка
Цена = Число(СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C26").Текст));
Исключение
Цена = 0;
Объект.ЕстьОшибки = Истина;
Сообщить("Строка№"+ТекущаяСтрока+". Цена имеет не числовой формат!");
ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"C26").Примечание.Текст = "Цена имеет не числовой формат!";
КонецПопытки;
НоваяСтрока = Объект.Таблица.Добавить();
НоваяСтрока.Группа = Группа;
НоваяСтрока.Код = Код;
НоваяСтрока.Артикул = Артикул;
НоваяСтрока.РабочееНаименование = РабочееНаименование;
НоваяСтрока.НаименованиеДляПечати = НаименованиеДляПечати;
НоваяСтрока.Новинка = Новинка;
НоваяСтрока.СтавкаНДС = СтавкаНДС;
НоваяСтрока.ВидНоменклатуры = ВидНоменклатуры;
НоваяСтрока.ТипНоменклатуры = ТипНоменклатуры;
НоваяСтрока.ЕдиницаХранения = ЕдиницаХранения;
НоваяСтрока.ВестиУчетПоГТД = ВестиУчетПоГТД;
НоваяСтрока.Поставщик = Поставщик;
НоваяСтрока.Бренд = Бренд;
НоваяСтрока.КоличествоВУпаковкеПоУмолчанию = КоличествоВУпаковкеПоУмолчанию;
НоваяСтрока.МинимальныйЗаказ = МинимальныйЗаказ;
НоваяСтрока.ЦенаПоступления = ЦенаПоступления;
НоваяСтрока.ЦенаБазовая = ЦенаБазовая;
НоваяСтрока.Штрихкод = Штрихкод;
НоваяСтрока.Склад = Склад;
НоваяСтрока.СпособПополненияЗапаса = СпособПополненияЗапаса;
НоваяСтрока.ВремяТранспортировки = ВремяТранспортировки;
НоваяСтрока.Календарь = Календарь;
НоваяСтрока.ПорядокПрименения = ПорядокПрименения;
НоваяСтрока.АртикулА = АртикулА;
НоваяСтрока.Наименование = Наименование;
НоваяСтрока.Цена = Цена;
КонецЦикла;
КонецПроцедуры
КоличествоВУпаковкеПоУмолчанию = Число(СокрЛП(ТабличныйДокумент.Область("R"+Формат(ТекущаяСтрока,"ЧГ=")+"С14").Текст));
Сообщить("Строка№"+ТекущаяСтрока+". Цена имеет не числовой формат!");
&НаСервере
Процедура М_Присвоение()
Для каждого ТЧ из Объект.Таблица Цикл
Спр = Справочники.Номенклатура.СоздатьЭлемент();
Спр.Артикул = ТЧ.Артикул;
Спр.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Новинки Весна 2012");
Спр.Наименование = ТЧ.РабочееНаименование;
Спр.НаименованиеПолное = ТЧ.НаименованиеДляПечати;
Если ТЧ.СтавкаНДС = "СтавкаНДС" Тогда
Спр.СтавкаНДС = Перечисления.СтавкаНДС.НДС18;
КонецЕсли;
Спр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("ТЧ.ВидНоменклатуры");
Если ТЧ.ТипНоменклатуры = "Товар" Тогда
Спр.ТипНоменклатуры = Истина;
ИначеЕсли ТЧ.ТипНоменклатуры = "Услуга" Тогда
Спр.ТипНоменклатуры = Ложь;
КонецЕсли;
Спр.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ТЧ.ЕдиницаХранения");
Если ТЧ.ВестиУчетПоГТД = "Да" Тогда
Спр.ВестиУчетПоГТД = Истина;
ИначеЕсли ТЧ.ВестиУчетПоГТД = "Нет" Тогда
Спр.ВестиУчетПоГТД = Ложь;
КонецЕсли;
Спр.Записать();
Для каждого Стр ИЗ Спр.ДополнительныеРеквизиты Цикл
Если Стр.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Бренд") Тогда
Стр.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("ТЧ.Бренд");
Если ТЧ.Новинка = "Да" Тогда
Спр.Новинка = Истина;
ИначеЕсли ТЧ.Новинка ="нет" тогда
Спр.Новинка = Ложь;
КонецЕсли;
КонецЕсли;
Спр.МинимальныйЗаказ = ТЧ.МинимальныйЗаказ;
Спр.Записать();
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Спр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("ТЧ.ВидНоменклатуры");
//и это
Спр.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ТЧ.ЕдиницаХранения");
i | Правила п.13 |
// вместо Спр = Справочники.Номенклатура.СоздатьЭлемент();
ТекНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию("Мое наименование");
Если ТекНоменклатура.ПустаяСсылка() Тогда
Сообщить("Не найдена номенклатура! Создаем новый элемент");
Спр = Справочники.Номенклатура.СоздатьЭлемент();
Иначе
Спр = ТекНоменклатура.ПолучитьОбъект();//дальше пишем в него
КонецЕсли;