Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 03:05

Загрузка Данных Из Экселя

Автор Ульви Мамедов, 24 янв 2019, 15:38

0 Пользователей и 1 гость просматривают эту тему.

Ульви Мамедов

Здравствуйте. Я очень мало знаю русский. Извините за этого. Я еще новичок в 1С программирование. Программ выдают такую ошибку " {Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3416)}: Значение не является значением объектного типа (Номенклатура)
Стр.Номенклатура = Ст.Номенклатура;
" вроде проблема здесь --
Процедура ПереборСтрокТЗ()

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


Как исправится с этим ?
Вот полный код --
Перем СЗ, ТЗ;
Процедура СозданиеТаблицыЗначений()
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ПолноеНаименование",,"ПолноеНаименование");
ТЗ.Колонки.Добавить("Номенклатура",,"Номенклатура");
ТЗ.Колонки.Добавить("Количество",,"Количество");
ТЗ.Колонки.Добавить("Цена",,"Цена");
ТЗ.Колонки.Добавить("Сумма",,"Сумма");

ТЗ.Колонки.Добавить("ПолноеНазвание" ,Новый ОписаниеТипов("СписокЗначений"));

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

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

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

Если ПозицияСимвола <> 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(Стр,2).Value);
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);

ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value), СокрЛП(Эксель.Cells(Стр,2).Value));
НоваяСтрока.ПолноеНазвание = СЗ;
КонецЦикла;

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

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

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

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

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

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

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

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

Спасибо всем за ранее.

alex0402

Цитата: Ульви Мамедов от 24 янв 2019, 15:38Я очень мало знаю русский

это наживное (со временем научишься).
Цитата: Ульви Мамедов от 24 янв 2019, 15:38Процедура ПереборСтрокТЗ()

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

Я совсем не понял этот код.
Здесь несколько раз присваиваются данные одной строке (по количеству строк в ТЗ).
Теперь, что касается ошибки:
1) в табличной части товары нет колонки Номенклатура.
2) в ТЗ нет колонки Номенклатура.
3) в момент вызова процедуры не выделена ни одна строка табличной части товары (не является текущей). В следствие этого:
ЭлементыФормы.Товары.ТекущиеДанные = Неопределено
и соотыествено Стр = Неопределено.
Спасибо за Сказать спасибо

Ульви Мамедов

Спасибо за вниманию. А как могу исправить эту ошибку?

Теги:  

Похожие темы (5)

Рейтинг@Mail.ru

Поиск