1C:Бухгалтерия
1С:CRM ПРОФ, КОРП
1С:ERP Управление предприятием 2
Платформа 1С v8.3
Корп. решения 1С
Здравствуйте. Я очень мало знаю русский. Извините за этого. Я еще новичок в 1С программирование. Есть токая задания "Загрузить данные из экселя в ТЗ документа". Написал код, есть ошибка но не знаю как исправит с этим. Пример : у меня экселя есть 10 строк но программ выбирает только последний.
Эксель:
Номенклатура Количество
1 - Монитор 10
2 - Экран 23
3 - Клавиатура 23
В документа отображается только последний ("Клавиатура") (ПоступлениеТоваровУслуг.Товары)
Как исправится с этим?
Спасибо всем за ранее.
Вот полный код:
Эксель:
Номенклатура Количество
1 - Монитор 10
2 - Экран 23
3 - Клавиатура 23
В документа отображается только последний ("Клавиатура") (ПоступлениеТоваровУслуг.Товары)
Как исправится с этим?
Спасибо всем за ранее.
Вот полный код:
Перем СЗ, ТЗ;
Процедура СозданиеТаблицыЗначений()
ТЗ = Новый ТаблицаЗначений;
//ТЗ.Колонки.Добавить("ПолноеНаименование",,,);
ТЗ.Колонки.Добавить("Номенклатура",,,);
ТЗ.Колонки.Добавить("Количество",,,);
ТЗ.Колонки.Добавить("Цена",,,);
ТЗ.Колонки.Добавить("Сумма",,,);
//ТЗ.Колонки.Добавить("ПолноеНазвание" ,Новый ОписаниеТипов("СписокЗначений"));
КонецПроцедуры
/////////////////////////////////////////////////////////////////////////////////////////////////
Функция ПоискПодстроки(Подстрока, ПодстрокаРасшифровка)
ПозицияСимвола = Найти(Подстрока, ",");
ПозицияСимволаРасшифровка = Найти(ПодстрокаРасшифровка, ",");
Если ПозицияСимвола <> 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,"Файл выбран.");
Иначе
Предупреждение("Файл не выбран.");
Возврат;
КонецЕсли;
СозданиеТаблицыЗначений();
ПереборСтрокВЭксель();
ПереборСтрокТЗ();
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Загрузка данных в документ Поступление товаров и услуг из Microsoft Excel (УТ 10.3)
- Загрузка из Эксель справочника Номенклатура, Прайс-лист, Остатки товаров. УТ 10.3
- Интеграция 1С с Яндекс.Маркет для УТ 10.3
- Мой опыт перехода с УТ 10.3 на УТ 11.5 (маркировка товаров, ЕГАИС)
- Загрузка отчетов Wildberries из файлов для УТ 10.3 / УПП 1.3 (обычные формы)
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Попробуйте вот так
Перем СЗ, ТЗ;
Процедура СозданиеТаблицыЗначений()
ТЗ = Новый ТаблицаЗначений;
//ТЗ.Колонки.Добавить("ПолноеНаименование",,,);
ТЗ.Колонки.Добавить("Номенклатура",,,);
ТЗ.Колонки.Добавить("Количество",,,);
ТЗ.Колонки.Добавить("Цена",,,);
ТЗ.Колонки.Добавить("Сумма",,,);
//ТЗ.Колонки.Добавить("ПолноеНазвание" ,Новый ОписаниеТипов("СписокЗначений"));
КонецПроцедуры
/////////////////////////////////////////////////////////////////////////////////////////////////
Функция ПоискПодстроки(Подстрока, ПодстрокаРасшифровка)
ПозицияСимвола = Найти(Подстрока, ",");
ПозицияСимволаРасшифровка = Найти(ПодстрокаРасшифровка, ",");
Если ПозицияСимвола <> 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,"Файл выбран.");
Иначе
Предупреждение("Файл не выбран.");
Возврат;
КонецЕсли;
СозданиеТаблицыЗначений();
ПереборСтрокВЭксель();
ПереборСтрокТЗ();
КонецПроцедуры
Показать
В коде ошибка
Нудно метод добавить в цикле использовать
НоваяСтрока = ТЗ.Добавить();
Для Стр = 1 ПО 10 Цикл
//НоваяСтрока.ПолноеНаименование = СокрЛП(Эксель.Cells(Стр,1).Value);
НоваяСтрока.Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
//ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value),СокрЛП(Эксель.Cells(Стр,1).Value));
//НоваяСтрока.ПолноеНазвание = СЗ;
КонецЦикла;
ПоказатьНудно метод добавить в цикле использовать
Для Стр = 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) - правильно, но не достаточно.
надо еще здесь исправить
чтобы было так:
(2), (3) - правильно, но не достаточно.
надо еще здесь исправить
Процедура ПереборСтрокТЗ() Экспорт
Стр = ЭлементыФормы.Товары.ТекущиеДанные;
Для Каждого Ст из ТЗ Цикл
Стр.Номенклатура = Ст.Номенклатура;
Стр.Количество = Ст.Количество;
Стр.Цена = Ст.Цена;
Стр.Сумма = Ст.Сумма;
КонецЦикла;
КонецПроцедуры
Показатьчтобы было так:
Процедура ПереборСтрокТЗ() Экспорт
//Стр = ЭлементыФормы.Товары.ТекущиеДанные;// неправильно
Для Каждого Ст из ТЗ Цикл
НовСтр = Элементы.Товары.Добавить();
НовСтр.Номенклатура = Ст.Номенклатура;
НовСтр.Количество = Ст.Количество;
НовСтр.Цена = Ст.Цена;
НовСтр.Сумма = Ст.Сумма;
КонецЦикла;
КонецПроцедуры
Показать
(8)
Спасибо за вниманию.
Писал так:
Но выдают ошибку: {Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3439,8)}: Переменная не определена (Элементы)
Стр = <<?>>Элементы.Товары.Добавить(); (Проверка: Толстый клиент (обычное приложение))
Спасибо за вниманию.
Писал так:
Процедура ПереборСтрокТЗ() Экспорт
Для Каждого Ст из ТЗ Цикл
НовСтр = Элементы.Товары.Добавить();
НовСтр.Номенклатура.Наименование = Ст.Номенклатура;
НовСтр.Количество = Ст.Количество;
НовСтр.Цена = Ст.Цена;
НовСтр.Сумма = Ст.Сумма;
КонецЦикла;
КонецПроцедуры
ПоказатьНо выдают ошибку: {Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3439,8)}: Переменная не определена (Элементы)
Стр = <<?>>Элементы.Товары.Добавить(); (Проверка: Толстый клиент (обычное приложение))
(12)
Выдают ошибку
{Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3438)}: Метод объекта не обнаружен (Добавить)
Стр = ЭлементыФормы.Товары.Добавить();
ДобавитьСтроку() тоже написал
{Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3438)}: Обращение к процедуре объекта как к функции (ДобавитьСтроку)
Стр = ЭлементыФормы.Товары.ДобавитьСтроку();
Выдают ошибку
{Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3438)}: Метод объекта не обнаружен (Добавить)
Стр = ЭлементыФормы.Товары.Добавить();
ДобавитьСтроку() тоже написал
{Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента.Форма(3438)}: Обращение к процедуре объекта как к функции (ДобавитьСтроку)
Стр = ЭлементыФормы.Товары.ДобавитьСтроку();
Вот так нужно написать - НоваяСтрока = ТЗ.Добавить(); в цикле укажите
Для Стр = 1 ПО 10 Цикл
НоваяСтрока = ТЗ.Добавить();
//НоваяСтрока.ПолноеНаименование = СокрЛП(Эксель.Cells(Стр,1).Value);
НоваяСтрока.Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
//ПозицияСимвола = ПоискПодстроки(СокрЛП(Эксель.Cells(Стр,1).Value),СокрЛП(Эксель.Cells(Стр,1).Value));
//НоваяСтрока.ПолноеНазвание = СЗ;
КонецЦикла
Показать
(3)
В окладке здесь цикл не работает. Сразу прерывает
Но если написать так
Тогда в окладке не бывает проблема но результат то и самое (Не показывает все товары)
В окладке здесь цикл не работает. Сразу прерывает
Процедура ПереборСтрокТЗ() Экспорт
Стр = ЭлементыФормы.Товары.ТекущиеДанные;
Для Каждого Ст из ТЗ Цикл
Стр.Номенклатура = Ст.Номенклатура;
Стр.Количество = Ст.Количество;
Стр.Цена = Ст.Цена;
Стр.Сумма = Ст.Сумма;
КонецЦикла;
КонецПроцедуры
ПоказатьНо если написать так
НоваяСтрока = ТЗ;
Для Стр = 1 ПО 10 Цикл
НоваяСтрока.Добавить().Номенклатура = СокрЛП(Эксель.Cells(Стр,1).Value);
НоваяСтрока.Добавить().Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
НоваяСтрока.Добавить().Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
НоваяСтрока.Добавить().Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
КонецЦикла
Процедура ПереборСтрокТЗ() Экспорт
Стр = ЭлементыФормы.Товары.ТекущиеДанные;
Для Каждого Ст из НоваяСтрока Цикл
Стр.Номенклатура = Ст.Номенклатура;
Стр.Количество = Ст.Количество;
Стр.Цена = Ст.Цена;
Стр.Сумма = Ст.Сумма;
КонецЦикла;
КонецПроцедуры
ПоказатьТогда в окладке не бывает проблема но результат то и самое (Не показывает все товары)
Последняя процедура написано не верно, у вас нет добавления строк в табличную часть. Нужно написать как то так
Процедура ПереборСтрокТЗ() Экспорт
Для Каждого Ст из НоваяСтрока Цикл
Стр = Объект.Товары.Добавить();
Стр.Номенклатура = Ст.Номенклатура;
Стр.Количество = Ст.Количество;
Стр.Цена = Ст.Цена;
Стр.Сумма = Ст.Сумма;
КонецЦикла;
КонецПроцедуры
Показать
(9)
Да это справочник. Написал так:
но не показывает названию.
Да это справочник. Написал так:
Процедура ПереборСтрокВЭксель()
Попытка
Путь = "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();
КонецПроцедуры
Процедура ПереборСтрокТЗ() Экспорт
Для Каждого Ст из ТЗ Цикл
Стр = ЭлементыФормы.Товары.ТекущиеДанные;
//Стр = Элементы.Товары.Добавить();
Стр.Номенклатура.Наименование = Ст.Номенклатура;
Стр.Количество = Ст.Количество;
Стр.Цена = Ст.Цена;
Стр.Сумма = Ст.Сумма;
КонецЦикла;
КонецПроцедуры
Показатьно не показывает названию.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот