Здравствуйте. Я очень мало знаю русский. Извините за этого. Я еще новичок в 1С программирование. Есть токая задания "Загрузить данные из экселя в ТЗ документа". Написал код, есть ошибка но не знаю как исправит с этим. Пример : у меня экселя есть 10 строк но программ выбирает только последний.
Эксель:
Номенклатура Количество
1 - Монитор 10
2 - Экран 23
3 - Клавиатура 23
В документа отображается только последний ("Клавиатура") (ПоступлениеТоваровУслуг.Товары)
Как исправится с этим?
Спасибо всем за ранее.
Вот полный код:

```1c
    Перем СЗ, ТЗ;
    Процедура СозданиеТаблицыЗначений()
    ТЗ = Новый ТаблицаЗначений;
    //ТЗ.Колонки.Добавить("ПолноеНаименование",,,);
    ТЗ.Колонки.Добавить("Номенклатура",,,);
    ТЗ.Колонки.Добавить("Количество",,,);
    ТЗ.Колонки.Добавить("Цена",,,);
    ТЗ.Колонки.Добавить("Сумма",,,);
    //ТЗ.Колонки.Добавить("ПолноеНазвание" ,Новый ОписаниеТипов("СписокЗначений"));
    КонецПроцедуры

    ////////////////////////////////////////////////////////////­/////////////////////////////////////

    Функция ПоискПодстроки(Подстрока, ПодстрокаРасшифровка)

    ПозицияСимвола = Найти(Подстрока, ",");
    ПозицияСимволаРасшифровка = Найти(ПодстрокаРасшифровка, ",");

    Если ПозицияСимвола <> 0 Тогда
    ПерваяНоменклатура = Лев(Подстрока, ПозицияСимвола - 1);
    ПерваяНоменклатураРасшифровка = Лев(ПодстрокаРасшифровка, ПозицияСимволаРасшифровка - 1);

    СЗ.Добавить(ПерваяНоменклатура, ПерваяНоменклатураРасшифровка);
    Остаток = СтрДлина(Подстрока) - (СтрДлина(ПерваяНоменклатура) + 1);
    ОстатокРасшифровка = СтрДлина(ПодстрокаРасшифровка) - (СтрДлина(ПерваяНоменклатураРасшифровка) + 1);

    Возврат ПоискПодстроки(Прав(Подстрока, Остаток), Прав(ПодстрокаРасшифровка,ОстатокРасшифровка));

    Иначе
    СЗ.Добавить(СокрЛП(Подстрока), СокрЛП(ПодстрокаРасшифровка));
    Возврат ПозицияСимвола;
    КонецЕсли;
    КонецФункции

    ////////////////////////////////////////////////////////////­/////////////////////////////////////

    Процедура ПереборСтрокВЭксель()

    Путь = "C:\Users\User\Desktop\55.xlsx";
    Эксель = Новый COMОбъект("Excel.Application");
    Эксель.Workbooks.Open(Путь);
    Эксель.Sheets(1).Select();
    СЗ = Новый СписокЗначений;
    НоваяСтрока = ТЗ.Добавить();
    Для Стр = 1 ПО 10 Цикл
    //НоваяСтрока.ПолноеНаименование = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
    НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
    НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
    //ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value),СокрЛП(Эксель.Cells(Стр,1).Value));
    //НоваяСтрока.ПолноеНазвание = СЗ;
    КонецЦикла;

    Эксель.ActiveWorkbook.Close();
    Эксель.Application.Quit();
    КонецПроцедуры

    ////////////////////////////////////////////////////////////­/////////////////////////////////////

    Процедура ПереборСтрокТЗ() Экспорт
    Стр = ЭлементыФормы.Товары.ТекущиеДанные;
    Для Каждого Ст из ТЗ Цикл
    Стр.Номенклатура = Ст.Номенклатура;
    Стр.Количество = Ст.Количество;
    Стр.Цена = Ст.Цена;
    Стр.Сумма = Ст.Сумма;
    КонецЦикла;
    КонецПроцедуры

    ////////////////////////////////////////////////////////////­/////////////////////////////////////

    Процедура ОсновныеДействияФормыЗагрузитьДанные(Кнопка) Экспорт
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Фильтр = "Excel файл (*.xls; *.xlsx)|*.xls;*.xlsx|";
    Если Диалог.Выбрать() Тогда
    Предупреждение(Диалог.ПолноеИмяФайла,10,"Файл выбран.");
    Иначе
    Предупреждение("Файл не выбран.");
    Возврат;
    КонецЕсли;

    СозданиеТаблицыЗначений();

    ПереборСтрокВЭксель();

    ПереборСтрокТЗ();

    КонецПроцедуры
```
---
Пардон, на увидел сначала, что это форма документа.
тогда все через Объект
Объект.Товары.Добавить();
---
Попробуйте вот так

```1c
    Перем СЗ, ТЗ;
    Процедура СозданиеТаблицыЗначений()
    ТЗ = Новый ТаблицаЗначений;
    //ТЗ.Колонки.Добавить("ПолноеНаименование",,,);
    ТЗ.Колонки.Добавить("Номенклатура",,,);
    ТЗ.Колонки.Добавить("Количество",,,);
    ТЗ.Колонки.Добавить("Цена",,,);
    ТЗ.Колонки.Добавить("Сумма",,,);
    //ТЗ.Колонки.Добавить("ПолноеНазвание" ,Новый ОписаниеТипов("СписокЗначений"));
    КонецПроцедуры

    ////////////////////////////////////////////////////////////­/////////////////////////////////////

    Функция ПоискПодстроки(Подстрока, ПодстрокаРасшифровка)

    ПозицияСимвола = Найти(Подстрока, ",");
    ПозицияСимволаРасшифровка = Найти(ПодстрокаРасшифровка, ",");

    Если ПозицияСимвола <> 0 Тогда
    ПерваяНоменклатура = Лев(Подстрока, ПозицияСимвола - 1);
    ПерваяНоменклатураРасшифровка = Лев(ПодстрокаРасшифровка, ПозицияСимволаРасшифровка - 1);

    СЗ.Добавить(ПерваяНоменклатура, ПерваяНоменклатураРасшифровка);
    Остаток = СтрДлина(Подстрока) - (СтрДлина(ПерваяНоменклатура) + 1);
    ОстатокРасшифровка = СтрДлина(ПодстрокаРасшифровка) - (СтрДлина(ПерваяНоменклатураРасшифровка) + 1);

    Возврат ПоискПодстроки(Прав(Подстрока, Остаток), Прав(ПодстрокаРасшифровка,ОстатокРасшифровка));

    Иначе
    СЗ.Добавить(СокрЛП(Подстрока), СокрЛП(ПодстрокаРасшифровка));
    Возврат ПозицияСимвола;
    КонецЕсли;
    КонецФункции

    ////////////////////////////////////////////////////////////­/////////////////////////////////////

    Процедура ПереборСтрокВЭксель()

    Путь = "C:\Users\User\Desktop\55.xlsx";
    Эксель = Новый COMОбъект("Excel.Application");
    Эксель.Workbooks.Open(Путь);
    Эксель.Sheets(1).Select();
    СЗ = Новый СписокЗначений;
    Для Стр = 1 ПО 10 Цикл
    НоваяСтрока = ТЗ.Добавить();
    //НоваяСтрока.ПолноеНаименование = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Номенклатура = Справочник.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,1).Value));
    НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
    НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
    НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
    //ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value),СокрЛП(Эксель.Cells(Стр,1).Value));
    //НоваяСтрока.ПолноеНазвание = СЗ;
    КонецЦикла;

    Эксель.ActiveWorkbook.Close();
    Эксель.Application.Quit();
    КонецПроцедуры

    ////////////////////////////////////////////////////////////­/////////////////////////////////////

    Процедура ПереборСтрокТЗ() Экспорт
    Для Каждого Ст из ТЗ Цикл
    Стр = Объект.Товары.Добавить();
    Стр.Номенклатура = Ст.Номенклатура;
    Стр.Количество = Ст.Количество;
    Стр.Цена = Ст.Цена;
    Стр.Сумма = Ст.Сумма;
    КонецЦикла;
    КонецПроцедуры

    ////////////////////////////////////////////////////////////­/////////////////////////////////////

    Процедура ОсновныеДействияФормыЗагрузитьДанные(Кнопка) Экспорт
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Фильтр = "Excel файл (*.xls; *.xlsx)|*.xls;*.xlsx|";
    Если Диалог.Выбрать() Тогда
    Предупреждение(Диалог.ПолноеИмяФайла,10,"Файл выбран.");
    Иначе
    Предупреждение("Файл не выбран.");
    Возврат;
    КонецЕсли;

    СозданиеТаблицыЗначений();

    ПереборСтрокВЭксель();

    ПереборСтрокТЗ();

    КонецПроцедуры
```
---
В коде ошибка

```1c
    НоваяСтрока = ТЗ.Добавить();
    Для Стр = 1 ПО 10 Цикл
    //НоваяСтрока.ПолноеНаименование = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
    НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
    НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
    //ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value),СокрЛП(Эксель.Cells(Стр,1).Value));
    //НоваяСтрока.ПолноеНазвание = СЗ;
    КонецЦикла;
```

Нудно метод добавить в цикле использовать

```1c
    Для Стр = 1 ПО 10 Цикл
    НоваяСтрока = ТЗ.Добавить();
    //НоваяСтрока.ПолноеНаименование = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
    НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
    НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
    //ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value),СокрЛП(Эксель.Cells(Стр,1).Value));
    //НоваяСтрока.ПолноеНазвание = СЗ;
    КонецЦикла
```
---
Последнее Ваше предположение - что-то совсем не то.
(2), (3) - правильно, но не достаточно.
надо еще здесь исправить

```1c
    Процедура ПереборСтрокТЗ() Экспорт
    Стр = ЭлементыФормы.Товары.ТекущиеДанные;
    Для Каждого Ст из ТЗ Цикл
    Стр.Номенклатура = Ст.Номенклатура;
    Стр.Количество = Ст.Количество;
    Стр.Цена = Ст.Цена;
    Стр.Сумма = Ст.Сумма;
    КонецЦикла;
    КонецПроцедуры
```

чтобы было так:

```1c
    Процедура ПереборСтрокТЗ() Экспорт
    //Стр = ЭлементыФормы.Товары.ТекущиеДанные;// неправильно
    Для Каждого Ст из ТЗ Цикл
    НовСтр = Элементы.Товары.Добавить();
    НовСтр.Номенклатура = Ст.Номенклатура;
    НовСтр.Количество = Ст.Количество;
    НовСтр.Цена = Ст.Цена;
    НовСтр.Сумма = Ст.Сумма;
    КонецЦикла;
    КонецПроцедуры
```
---
Спасибо за вниманию.
Писал так:

```1c
    Процедура ПереборСтрокТЗ() Экспорт
    Для Каждого Ст из ТЗ Цикл
    НовСтр = Элементы.Товары.Добавить();
    НовСтр.Номенклатура.Наименование = Ст.Номенклатура;
    НовСтр.Количество = Ст.Количество;
    НовСтр.Цена = Ст.Цена;
    НовСтр.Сумма = Ст.Сумма;
    КонецЦикла;
    КонецПроцедуры
```

Но выдают ошибку: {Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3439,8)}: Переменная не определена (Элементы)
 Стр = <<?>>Элементы.Товары.Добавить(); (Проверка: Толстый клиент (обычное приложение))
---
НовСтр = Элементы.Товары.Добавить();

попробуй
НовСтр = ЭлементыФормы.Товары.Добавить();
---
Выдают ошибку
{Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3438)}: Метод объекта не обнаружен (Добавить)
    Стр = ЭлементыФормы.Товары.Добавить();

ДобавитьСтроку() тоже написал
{Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3438)}: Обращение к процедуре объекта как к функции (ДобавитьСтроку)
    Стр = ЭлементыФормы.Товары.ДобавитьСтроку();
---
Пардон, на увидел сначала, что это форма документа.
тогда все через Объект
Объект.Товары.Добавить();
---
Спасибо вам огромное
Написал так :
Стр = ЭтотОбъект.Товары.Добавить()
Работает как надо
Спасибо
---
Вот так нужно написать - НоваяСтрока = ТЗ.Добавить(); в цикле укажите

```1c
    Для Стр = 1 ПО 10 Цикл
    НоваяСтрока = ТЗ.Добавить();
    //НоваяСтрока.ПолноеНаименование = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
    НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
    НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
    //ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value),СокрЛП(Эксель.Cells(Стр,1).Value));
    //НоваяСтрока.ПолноеНазвание = СЗ;
    КонецЦикла
```
---
Не чего не изменился в результате.
И еще почему то не показывает названию номенклатуры
---
В окладке здесь цикл не работает. Сразу прерывает

```1c
    Процедура ПереборСтрокТЗ() Экспорт
    Стр = ЭлементыФормы.Товары.ТекущиеДанные;
    Для Каждого Ст из ТЗ Цикл
    Стр.Номенклатура = Ст.Номенклатура;
    Стр.Количество = Ст.Количество;
    Стр.Цена = Ст.Цена;
    Стр.Сумма = Ст.Сумма;
    КонецЦикла;
    КонецПроцедуры
```

Но если написать так

```1c
    НоваяСтрока = ТЗ;
    Для Стр = 1 ПО 10 Цикл
    НоваяСтрока.Добавить().Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
    НоваяСтрока.Добавить().Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
    НоваяСтрока.Добавить().Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
    НоваяСтрока.Добавить().Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
    КонецЦикла

    Процедура ПереборСтрокТЗ() Экспорт
    Стр = ЭлементыФормы.Товары.ТекущиеДанные;
    Для Каждого Ст из НоваяСтрока Цикл
    Стр.Номенклатура = Ст.Номенклатура;
    Стр.Количество = Ст.Количество;
    Стр.Цена = Ст.Цена;
    Стр.Сумма = Ст.Сумма;
    КонецЦикла;
    КонецПроцедуры
```

Тогда в окладке не бывает проблема но результат то и самое (Не показывает все товары)
---
Последняя процедура написано не верно, у вас нет добавления строк в табличную часть. Нужно написать как то так

```1c
    Процедура ПереборСтрокТЗ() Экспорт
    Для Каждого Ст из НоваяСтрока Цикл
    Стр = Объект.Товары.Добавить();
    Стр.Номенклатура = Ст.Номенклатура;
    Стр.Количество = Ст.Количество;
    Стр.Цена = Ст.Цена;
    Стр.Сумма = Ст.Сумма;
    КонецЦикла;
    КонецПроцедуры
```
---
Не показывает название Номенклатуры...
Какой тип объекта "Номенклатура"?

Если Справочник, тогда надо еще добавить:
Стр.Номенклатура.Наименование = Ст.Номенклатура;
---
Да это справочник. Написал так:

```1c
    Процедура ПереборСтрокВЭксель()

    Попытка
    Путь = "C:\Users\Ulvi Mammadov\Desktop\55.xlsx";
    Excel = Новый COMОбъект("Excel.Application");
    Excel.Workbooks.Open(Путь);
    Исключение
    Сообщить("При открытии файла произошла ошибка! Операция прервана!");
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;

    СЗ = Новый СписокЗначений;
    Попытка
    Excel.Sheets(1).Select();
    Исключение
    Excel.ActiveWorkbook.Close();
    Excel = 0;
    Сообщить("Первый лист не найден!");
    ОтменитьТранзакцию();
    Возврат;
    КонецПопытки;

    vExcel = Лев(Excel.Version, Найти(Excel.Version,".")-1);
    Если vExcel = "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 ПО 10 Цикл
    НоваяСтрока = ТЗ.Добавить();
    //НоваяСтрока.ПолноеНаименование = СокрЛП(Эксель.Cells(Стр,1).Value);
    //НоваяСтрока.Номенклатура = СокрЛП(Excel.Cells(Стр,1).Value);
    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Excel.Cells(Стр,1).Value));
    НоваяСтрока.Количество = СокрЛП(Excel.Cells(Стр,2).Value);
    НоваяСтрока.Цена = СокрЛП(Excel.Cells(Стр,3).Value);
    НоваяСтрока.Сумма = СокрЛП(Excel.Cells(Стр,4).Value);
    //ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value),СокрЛП(Эксель.Cells(Стр,1).Value));
    //НоваяСтрока.ПолноеНазвание = СЗ;
    КонецЦикла;

    Excel.ActiveWorkbook.Close();
    Excel.Application.Quit();
    КонецПроцедуры

    Процедура ПереборСтрокТЗ() Экспорт

    Для Каждого Ст из ТЗ Цикл
    Стр = ЭлементыФормы.Товары.ТекущиеДанные;
    //Стр = Элементы.Товары.Добавить();
    Стр.Номенклатура.Наименование = Ст.Номенклатура;
    Стр.Количество = Ст.Количество;
    Стр.Цена = Ст.Цена;
    Стр.Сумма = Ст.Сумма;
    КонецЦикла;

    КонецПроцедуры
```

но не показывает названию.
---
Пардон, на увидел сначала, что это форма документа.
тогда все через Объект
Объект.Товары.Добавить();