Имя: Пароль:
1C
1С v8
Ошибка открытия .xls листа для чтения
,
0 falselight
 
27.04.20
05:05
Подскажите пожалуйста, в чем может быть ошибка, открытия .xls листа?

    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(Файл);
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат 0;
    КонецПопытки;


Выходит сообщение об ошибке, -


Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!
{ВнешняяОбработка.LOADxls.Форма.Форма.Форма(18)}: Ошибка при вызове конструктора (COMОбъект): -2147220994(0x800401FE): Приложение было запущено, но оно не зарегистрировало фабрику классов
1 falselight
 
27.04.20
05:20
Ошибка, на этой строке.

Excel = Новый COMОбъект("Excel.Application");


Запустил другой конфигуратор. Там такой ошибки нет.
2 falselight
 
27.04.20
05:39
Может что известное. Хотел узнать.
Пока работаю под другим конфигуратором.
3 Василий Алибабаевич
 
27.04.20
08:00
(0)
1. Если все расположено на клиентской машине - нужно установить нормальный Excel.
2. Если на сервере - п. 1 и проверить права пользователя ОС на создание COM объектов.
4 SleepyHead
 
гуру
27.04.20
08:37
(0) А что, читать через табличный документ уже нельзя?
5 falselight
 
27.04.20
11:01
(3) (4) Дело в том что не работает на одной из версий платформы. На которой я начал делать.
Вот и не понял. Открыл другую, так как не давно пробовал делать тоже самое. и там так же.

В начале же нужно прочитать с Эксель. Вот с него не читалось.
6 H A D G E H O G s
 
27.04.20
11:23
ЛивингСтар, ты ли это?
7 SleepyHead
 
гуру
27.04.20
11:27
(5) Ты вообще понял, что написано в (4)?

Читай через табличный документ,а  не ком-объект. И будет тебе счастье.
8 ChMikle
 
27.04.20
14:17
(0) База какая SQL или файловая и где выполняется >>Excel = Новый COMОбъект("Excel.Application"); в процедуре
&НаКлиенте или &НаСервере ?
9 Ram_zes
 
27.04.20
14:20
(0) считай это дерьмо через табличный документ
10 Ram_zes
 
27.04.20
14:21
(0) и да

Тут рука профи нужна.
[email protected]
Загрузка файла будет 1500 на карту стоить. Предоплата 100%.
11 falselight
 
27.04.20
16:39
(4) Да как то привык так вот эксель открывать при загрузке с него.
А не копировать и вставлять в табличный документ.
12 falselight
 
27.04.20
16:40
(8) На сервере конечно, как обычно.

&НаСервере
Функция СоздатьТЗсXLSЛистов(Файл)
    Таблица = Новый ТаблицаЗначений;
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(Файл);
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат 0;
    КонецПопытки;
    Попытка
        Excel.Sheets(1).Select();  
    Исключение
        Excel.ActiveWorkbook.Close();     
        Excel = 0;
        Сообщить("Файл " + Строка(Файл)+" не соответствует необходимому формату! Первый лист не найден!");
        ОтменитьТранзакцию();
        Возврат 0;
13 falselight
 
27.04.20
16:40
(8) В данный момент файловая.
14 falselight
 
27.04.20
16:42
(10) А как вы сообщение отредактировали свое????
15 ChMikle
 
27.04.20
16:43
(12) Попробуйте создать процедуру  &НаКлиенте и в процедуре открыть файл . Кстати Ексель стоит на компе, где пытаетесь  файл считать.

&НаКлиенте процедура()

  Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(Файл);
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат 0;
    КонецПопытки;
16 falselight
 
27.04.20
17:13
(15) Тут вопрос был, почему под одной платформой не работает.
Идет ошибка что в (0). А под другой работает.

Я этого не мог понять. Может что с платформой.

Попробую ваш совет.

А ещё на сервере такой метод может не сработать, вроде как была как то у меня информация. Там как то иначе нужно.

Может это вот этот ваш совет про это. Я там встретился с тем что на сервере. делают копированием в табличный документ.
17 ChMikle
 
27.04.20
17:52
(16) Вы можете на клиенте в таблицу значений считать данные екселя и отдать ее на сервер выполнять дальнейшие манипуляции.
18 Cthulhu
 
27.04.20
18:07
(17): на клиенте бывает (штатно) таблицазначений? и она норм сериализуется при передаче на сервер???
19 Timon1405
 
27.04.20
18:16
http://catalog.mista.ru/public/714988/ же и никакого экселя
20 Cthulhu
 
27.04.20
18:46
(19): метод "Прочитать" для таб.документов появился совсем недавно (в 15-м что ли релизе?)
ну и там (по ссылке) в принципе в коде не учтено, что книга читается в таб.документ с областями, имена которых совпадают с именами листов книги....
21 Cthulhu
 
27.04.20
18:48
(10): опс. пардон, ялох...
просто на практике недавно нарвался, что "прочитать" нормально работал на 15-м - и при этом напрочь отказывался на 14-м... пардон, про "недавно№ не читайте, по ссылке на 9-м проверено...
22 falselight
 
28.04.20
10:00
В файловой базе загрузка прошла успешно.

Сейчас перенес на сервер. На удаленный рабочий стол, там не работает. Ошибка http://joxi.ru/823qePbHDq86wr

тут нужно делать как в (19) или (15) или (4) советуют?

Ошибка при загрузке http://joxi.ru/KAx3R4VT1LKM62
и http://joxi.ru/823qePbHDq86wr
23 falselight
 
28.04.20
10:02
Ошибка на Колонки, на какие то из этих процедур видимо

&НаСервере
Функция СоздатьТЗсXLSЛистов(Файл)
    Таблица = Новый ТаблицаЗначений;
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(Файл);
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат 0;
    КонецПопытки;
    Попытка
        Excel.Sheets(1).Select();  
    Исключение
        Excel.ActiveWorkbook.Close();     
        Excel = 0;
        Сообщить("Файл " + Строка(Файл)+" не соответствует необходимому формату! Первый лист не найден!");
        ОтменитьТранзакцию();
        Возврат 0;
    КонецПопытки;    
    Версия = Лев(Excel.Version,Найти(Excel.Version, ".") - 1);
    Если Версия = "8" тогда
        ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
        ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
        ФайлСтрок   = Excel.Cells(1, 1).SpecialCells(11).Row;
        ФайлКолонок = Excel.Cells(1, 1).SpecialCells(11).Column;  
    Конецесли;
    Сч = 1;    
    //
    Таблица.Колонки.Добавить("НоваяСтрока", ,"НоваяСтрока");
    //
    Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл
        ИмяКолонки        = Excel.Cells(1, Сч).Text;
        //
        ИмяБезПробелов = СтрЗаменить(ИмяКолонки, " ", "");     //
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, "(", ""); //
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, ")", ""); //
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, ".", ""); //
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, ",", ""); //
        //
        ИмяКолонки     = СтрЗаменить(ИмяКолонки, " ", ""); //
        ИмяКолонки     = СтрЗаменить(ИмяКолонки, "(", ""); //
        ИмяКолонки     = СтрЗаменить(ИмяКолонки, ")", ""); //
        ИмяКолонки     = СтрЗаменить(ИмяКолонки, ".", ""); //
        ИмяКолонки     = СтрЗаменить(ИмяКолонки, ",", ""); //
        //
        ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,"/","");
        ИмяКолонки     = СтрЗаменить(ИмяКолонки,"/","");
        НоваяКолонка   = Таблица.Колонки.Добавить(ИмяБезПробелов, ,ИмяКолонки);
        Сч                = Сч + 1;
    КонецЦикла;
    НомерСтроки = 1;
    Для НС = 2 по ФайлСтрок Цикл  
        НоваяСтрока                = Таблица.Добавить();        
        //
        НоваяСтрока["НоваяСтрока"] = НомерСтроки;            
        //
        Для НомерКолонки = 1 по Таблица.Колонки.Количество()-1 Цикл
            ТекущееЗначение         = Excel.Cells(НС, НомерКолонки).Text;
            ИмяКолонки                = Таблица.Колонки[НомерКолонки].Имя;             
            НоваяСтрока[ИмяКолонки] = ТекущееЗначение;            
        КонецЦикла;
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;  
    //
    Excel.DisplayAlerts = 0;
    Excel.ActiveWorkbook.Close();
    Excel.Quit();
    Excel.DisplayAlerts = 1;
    //
    Возврат Таблица;
КонецФункции
//
&НаСервере
Процедура СоздатьТаблицуНаФорме(ТзДляСоздания)
    //
    Таблица          = РеквизитФормыВЗначение("Товары");
    МассивРеквизитов = Новый Массив;
    Для Каждого Колонка Из Таблица.Колонки Цикл
        МассивРеквизитов.Добавить("Товары." + Колонка.Имя);      
    КонецЦикла;
    //
    ИзменитьРеквизиты(,МассивРеквизитов);
    //
    ЭлементТаблица = Элементы.Найти("Товары");
    Если ЭлементТаблица <> Неопределено Тогда
        Элементы.Удалить(ЭлементТаблица);      
    КонецЕсли;    
    //
    ЭлементТаблица             = Элементы.Добавить("Товары", Тип("ТаблицаФормы"), Элементы.Группа7);
    ЭлементТаблица.ПутьКДанным = "Товары";
    ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;  
    //
    МассивРеквизитов.Очистить();
    Для Каждого Колонка ИЗ ТзДляСоздания.Колонки Цикл
        МассивТипов = Новый Массив;
        МассивТипов.Добавить(Колонка.ТипЗначения);
        НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), "Товары");
        МассивРеквизитов.Добавить(НоваяКолонка);
    КонецЦикла;
    //
    ИзменитьРеквизиты(МассивРеквизитов);
    ЗначениеВРеквизитФормы(ТзДляСоздания, "Товары");
    //
    ЭлементТЗ = Элементы.Товары;
    Для Каждого Колонка ИЗ ТзДляСоздания.Колонки Цикл
        НовыйЭлементФормы             = Элементы.Добавить("Товары" + Колонка.Имя, Тип("ПолеФормы"), ЭлементТЗ);
        НовыйЭлементФормы.Вид         = ВидПоляФормы.ПолеВвода;
        НовыйЭлементФормы.ПутьКДанным = "Товары." + Колонка.Имя;
    КонецЦикла;
КонецПроцедуры
//
24 ChMikle
 
28.04.20
10:26
(22) с правами на доступ к екселю (или он вообще не установлен на компе гдк стоит сервер 1С) у пользователя под которым запущен сервер 1С
25 falselight
 
28.04.20
10:47
(24) Эксель стоит. Открывается. Видимо там принцип работы какой то другой. Отличный от того что выполняется в файловой версии на персональном компьютере.
26 falselight
 
28.04.20
10:50
(25) Принцип обработки файла кодом из 1с, я имею ввиду
27 ChMikle
 
28.04.20
10:51
(25) когда в серверной версии вы на сервере запускаете работу с екселем, то создается сом объект на компе где стоит сервер 1С и под правами пользователя , под которыми он запущен.
28 ChMikle
 
28.04.20
10:53
+(27) 1Ссервер м.б. запущен не под тем пользователем, под которым вы заходите для проверки прав доступа к екселю
29 falselight
 
28.04.20
11:01
(28) Да на этом сервере у меня органиченные права. то есть получается этот код не отработает там?

Как можно выйти из положения?
30 falselight
 
28.04.20
11:05
(17) &НаКлиенте не доступна     Таблица = Новый ТаблицаЗначений;
31 ChMikle
 
28.04.20
11:06
(29) администратор системного подключать и проверять права именно на доступ к екселю под пользователем , под которым сервер 1С  запущен
(30) К екселю подключается из под разных платформ ?
32 ChMikle
 
28.04.20
11:15
(30) на форме создайте элемент ТаблицаЗначений , колонки добавьте и потом перебором переписывайте
33 falselight
 
28.04.20
11:25
(31) На сервере под удаленным рабочим столом одна платформа.

(32) И на сервере не работает отладка, не посмотрю как выполняется код. Одно видно что ругается на Колонки сначала (22) .
34 falselight
 
28.04.20
11:40
(32) А как мне эксель то открыть?
35 falselight
 
28.04.20
12:56
Проверил, да, на клиенте может эксель открыть. Почему тогда такая проблема, не совсем пойму, из за чего.
36 ikea
 
28.04.20
13:10
(35) А как файл Excel на сервер с клиента передается? Через временное хранилище?
37 Мимохожий Однако
 
28.04.20
13:18
Повторюсь. Не надо СОМ. Используй чтение в табличный документ из файла методами 1С.
38 Cthulhu
 
28.04.20
13:29
если уж так хоццца через com
попробуй включи пользователя, под которым запускается сервер приложений 1С Предприятия 8,  в группу Distributed COM Users - если не поможет, то дополнительно включить его в группу локальных администраторов.
(о результате - отпишись?)
39 Cthulhu
 
28.04.20
13:31
(36): тогда бы ошибка была про файл. который не найден -  не на этапе создания com-объекта, а при открытии файла....
40 Cthulhu
 
28.04.20
13:33
(кстати, вотето - v8: Интерфейс не поддерживается - видел?)
41 falselight
 
28.04.20
13:39
(37) Буду пробовать сейчас этот вариант.

Ещё раз. спасибо за мотивацию.
42 falselight
 
28.04.20
16:00
После того как с табличного документа я заполню &НаСервере таблицу значений,
где мне заполнять табличную часть на форме обработки? &НаКлиенте или на &НаСервере ?

А то утомился, подумал спрошу дельный совет. С табличного документа, я заполнил таблицу значений на сервере. Дальше?
Что бы на форме заполнить.

Что бы это все работало на удаленном рабочем столе, на сервере в базе ms sql server.
43 Фрэнки
 
28.04.20
16:09
(42) Так ты на Сервере заполняй сразу в Объект, который из реквизита формы в значение получен. А затем обратно из значения в реквизит формы

у тебя что нет типовой? там же есть такое уже готовое, что подсмотреть можно.
44 falselight
 
28.04.20
16:15
(43) Буду сейчас пробовать!
45 falselight
 
28.04.20
16:15
(43) То есть сама таблица значений что есть у обработки, и положена на форму обработки для визуального отображения не доступна &НаСервере ?
46 H A D G E H O G s
 
28.04.20
16:17
Ахахаха, жесть жестяночка.
47 Cthulhu
 
28.04.20
16:19
(45): во-первых, реквизит №тз" и объект "тз" - это две большие разницы.
ну и во-вторых - а вы попробуйте эту "тз" передать в параметре на сервер... а потом расскажите...
(46) ага. :)))
48 falselight
 
28.04.20
16:21
Смысл в том, что получив таблицу значений с эксель
хочу вывести это на форму. Вот и узнаю что бы без проб, как сразу правильно делать?

http://joxi.ru/RmznO4eiRZ5wVm

Намек хотя бы.
49 Фрэнки
 
28.04.20
16:27
(48) такая ТЗ, как у тебя на картинке видна = реквизит формы. Поэтому нужно через

ТекущийОбъект = РеквизитФормыВЗначение("Книги");

ЗдесьПишемСвойКодЗаполнения(ТекущийОбъект);

ЗначениеВРеквизитФормы(ТекущийОбъект, "Книги");

---
тогда увидишь свою заполненную тз на форме
50 ChMikle
 
28.04.20
17:01
(48) делал загрузку с формы, поищу обработку , если найду вышлю
51 Мимохожий Однако
 
28.04.20
17:12
(48) достаточно поместить табличное поле на форму, связанную с прочитанной таблицей. Посмотри типовую обработку по загрузке данных из табличного документа.
52 ChMikle
 
28.04.20
17:29
Куда выслать обработку ?
53 falselight
 
29.04.20
04:04
(52) Спасибо. Я сам делаю тут. Все равно по загрузке свои особенности.

Или вы тоже грузили в УТ 11.4

Вес товара с упаковкой (г), г    
Высота предмета, см    
Высота упаковки, см    
Глубина предмета, см    
Глубина упаковки, см    
Ширина предмета, см    
Ширина упаковки, см
54 falselight
 
29.04.20
04:35
(52) Ну, а если есть интересные какие примеры. Можно сюда. [email protected]
55 falselight
 
29.04.20
04:59
На сервере удалось прочитать, вот таким кодом.
Сейчас уже и дальше можно обрабатывать.



//
&НаКлиенте
Процедура ФайлДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    ВыбратьФайл("ФайлДляЗагрузки");
КонецПроцедуры
//
&НаКлиенте
Процедура ВыбратьФайл(ФайлДляЗагрузки)
    #Если ВебКлиент Тогда
    Результат = ПодключитьРасширениеРаботыСФайлами();
    Если Не Результат Тогда
        УстановитьРасширениеРаботыСФайлами();
        Если Не ПодключитьРасширениеРаботыСФайлами() Тогда
            ВызватьИсключение "Ошибка. Ваш браузер не поддерживает работу с файлами.";
        КонецЕсли;
    КонецЕсли;
    #КонецЕсли
    Диалог                         = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок             = "Выберите файл";
    Диалог.ПолноеИмяФайла         = "";
    Диалог.МножественныйВыбор     = Ложь;
    Диалог.Фильтр               = "Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|";
    Оповещение                  = Новый ОписаниеОповещения("ОповещениеПослеВыбораФайлаДляОткрытия", ЭтотОбъект, ФайлДляЗагрузки);    
    Диалог.Показать(Оповещение);
КонецПроцедуры
//
&НаКлиенте
Процедура ОповещениеПослеВыбораФайлаДляОткрытия(ВыбранныеФайлы, ДопПараметры) Экспорт
    Если ТипЗнч(ВыбранныеФайлы) = Тип("Массив")    Тогда
        Объект[ДопПараметры] = ВыбранныеФайлы[0];
    КонецЕсли;
КонецПроцедуры
//
&НаКлиенте
Процедура Прочитать(Команда)
    Если Не ЗначениеЗаполнено(Объект.ФайлДляЗагрузки) Тогда
        Сообщить("Не указан файл. Обработка не выполнена.");
        Возврат;
    КонецЕсли;    
    ВыбФайл = Новый Файл(Объект.ФайлДляЗагрузки);
    Если Не ВыбФайл.Существует() Тогда
        Сообщить("Файл не существует!");
        Возврат;
    КонецЕсли;  
    ТДВыгрузка = Новый ТабличныйДокумент;
    мПрочитатьТабличныйДокументИзExcel(ТДВыгрузка, Объект.ФайлДляЗагрузки, 1);
    ПрочитатьНаСервере(ТДВыгрузка);
КонецПроцедуры
//
&НаКлиенте
Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
    xlLastCell = 11;
    ВыбФайл    = Новый Файл(ИмяФайла);
    Если НЕ ВыбФайл.Существует() Тогда
        Сообщить("Файл не существует!");
        Возврат Ложь;
    КонецЕсли;
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(ИмяФайла);
        ExcelЛист = Excel.Sheets(НомерЛистаExcel);
    Исключение
        Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
        Возврат Ложь;
    КонецПопытки;
    SpecialCells = Excel.Sheets(НомерЛистаExcel).Cells.SpecialCells(11);
    RowCount     = SpecialCells.Row;
    ColumnCount  = SpecialCells.Column;
    Для Column = 1 По ColumnCount Цикл
        ТабличныйДокумент.Область("C" + Формат(Column, "ЧГ=")).ШиринаКолонки = ExcelЛист.Columns(Column).ColumnWidth;
    КонецЦикла;
    Для Row = 1 По RowCount Цикл
        Для Column = 1 По ColumnCount Цикл
            Если ТипЗнч(ExcelЛист.Cells(Row,Column).Value) = Тип("Число") Тогда
                ЗначениеЗамена = СтрЗаменить(ExcelЛист.Cells(Row,Column).Value, " ", "");
            Иначе
                ЗначениеЗамена = ExcelЛист.Cells(Row,Column).Value
            КонецЕсли;    
            ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = ЗначениеЗамена;
        КонецЦикла;
    КонецЦикла;
    Excel.WorkBooks.Close();
    Excel = 0;
    Возврат Истина;
КонецФункции //
//
&НаСервере
Процедура ПрочитатьНаСервере(Макет)
    ТЗсXLS = Новый ТаблицаЗначений;
    ТЗсXLS.Колонки.Добавить("", Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("OzonID",                Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Баркод",                Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Наименование",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Автор",                Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Год",                    Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Издательство",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Артикул",                Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Комплектация",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("ВесТовараСУпаковкой", Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("ВысотаПредмета",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("ВысотаУпаковки",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("ГлубинаПредмета",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("ГлубинаУпаковки",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("ШиринаПредмета",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("ШиринаУпаковки",        Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Количество",            Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("Цена",                Новый ОписаниеТипов("Строка"));
    ТЗсXLS.Колонки.Добавить("НомерСтроки",           Новый ОписаниеТипов("Строка"));
    //
    Для Стр = 2 По Макет.ВысотаТаблицы Цикл
        НоваяСтрока                     = ТЗсXLS.Добавить();        
        НоваяСтрока.OzonID                 = СокрЛП(Макет.Область(Стр, 1).Текст);
        НоваяСтрока.Баркод                 = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.Наименование         = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.Автор                 = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.Год                 = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.Издательство         = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.Артикул             = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.Комплектация         = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.ВесТовараСУпаковкой = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.ВысотаПредмета         = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.ВысотаУпаковки         = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.ГлубинаПредмета     = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.ГлубинаУпаковки     = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.ШиринаПредмета         = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.ШиринаУпаковки         = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.Количество             = СокрЛП(Макет.Область(Стр, 2).Текст);
        НоваяСтрока.Цена                 = СокрЛП(Макет.Область(Стр, 2).Текст);        
        НоваяСтрока.НомерСтроки         = Стр;
    КонецЦикла;
    //
    ТзКнигиНаФорме = РеквизитФормыВЗначение("Книги");
    Для Каждого СтрТЗсXLS Из ТЗсXLS Цикл
        НоваяСтрока                     = ТзКнигиНаФорме.Добавить();        
        НоваяСтрока.НомерСтроки         = СокрЛП(СтрТЗсXLS.НомерСтроки-1);        
        НоваяСтрока.OzonID                 = СокрЛП(СтрТЗсXLS.OzonID);
        НоваяСтрока.Баркод                 = СокрЛП(СтрТЗсXLS.Баркод);
        НоваяСтрока.Наименование         = СокрЛП(СтрТЗсXLS.Наименование);
        НоваяСтрока.Автор                 = СокрЛП(СтрТЗсXLS.Автор);
        НоваяСтрока.Год                 = СокрЛП(СтрТЗсXLS.Год);
        НоваяСтрока.Издательство         = СокрЛП(СтрТЗсXLS.Издательство);
        НоваяСтрока.Артикул             = СокрЛП(СтрТЗсXLS.Артикул);
        НоваяСтрока.Комплектация         = СокрЛП(СтрТЗсXLS.Комплектация);
        НоваяСтрока.ВесТовараСУпаковкой = СокрЛП(СтрТЗсXLS.ВесТовараСУпаковкой);
        НоваяСтрока.ВысотаПредмета         = СокрЛП(СтрТЗсXLS.ВысотаПредмета);
        НоваяСтрока.ВысотаУпаковки         = СокрЛП(СтрТЗсXLS.ВысотаУпаковки);
        НоваяСтрока.ГлубинаПредмета     = СокрЛП(СтрТЗсXLS.ГлубинаПредмета);
        НоваяСтрока.ГлубинаУпаковки     = СокрЛП(СтрТЗсXLS.ГлубинаУпаковки);
        НоваяСтрока.ШиринаПредмета         = СокрЛП(СтрТЗсXLS.ШиринаПредмета);
        НоваяСтрока.ШиринаУпаковки         = СокрЛП(СтрТЗсXLS.ШиринаУпаковки);
        НоваяСтрока.Количество             = СокрЛП(СтрТЗсXLS.Количество);
        НоваяСтрока.Цена                 = СокрЛП(СтрТЗсXLS.Цена);        
    КонецЦикла;
    ЗначениеВРеквизитФормы(ТзКнигиНаФорме, "Книги");    
КонецПроцедуры
//