Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. В УТ 10.3. Сам код работает, загружает данные и заполняет табличный часть. Но пользователю надо что он могла вводить номер колонку. Пример : В Excel есть 4 колонку (Номенклатура, Цена, Количество, Сумма). Но Номенклатуры в третий колонке, цена 2, сумма 4 и количество 1. Как исправить с этим?
Рабочий код ниже. Как могу изменить ?
Спасибо всем за ранее.
Рабочий код ниже. Как могу изменить ?
Спасибо всем за ранее.
Процедура СоздатьТЗ()
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура",,,);
ТЗ.Колонки.Добавить("Количество",,,);
ТЗ.Колонки.Добавить("Цена",,,);
ТЗ.Колонки.Добавить("Сумма",,,);
КонецПроцедуры // СоздатьТЗ()
Процедура ПереборСтрокТЗ()
Для Каждого Ст из ТЗ Цикл
Стр = Товары.Добавить();
Стр.Номенклатура = Ст.Номенклатура;
Стр.Количество = Ст.Количество;
Стр.Цена = Ст.Цена;
Стр.Сумма = Ст.Сумма;
Стр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
Стр.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD");
Стр.Коэффициент = 1;
КонецЦикла;
КонецПроцедуры
Процедура ОсновныеДействияФормыЗагрузитьДанные(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите excel - файл";
Диалог.ПолноеИмяФайла = "С:\";
Диалог.Фильтр = "Таблицы (*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
Если Диалог.Выбрать() Тогда
Предупреждение(Диалог.ПолноеИмяФайла, 10 , "Файл выбран.");
Иначе
Предупреждение("Файл не выбран.");
Возврат;
КонецЕсли;
СоздатьТЗ();
Эксель = Новый COMОбъект("Excel.Application");
Эксель.Workbooks.Open(Диалог.ПолноеИмяФайла);
Эксель.Sheets(1).Select();
Версия = Лев(Эксель.Version,Найти(Эксель.Version,".")-1);
Если Версия = "8" тогда
ФайлСтрок = Эксель.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Эксель.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Эксель.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок = Эксель.Cells(1,1).SpecialCells(11).Column;
Конецесли;
Для Стр = 1 ПО ФайлСтрок Цикл
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,1).Value));
Если Номенклатура.Пустая() Тогда
Сообщить("Строка - " + ФайлСтрок + " Номенклатура " + """" + СокрЛП(Эксель.Cells(Стр,1).Value) + """" + " не найдена!");
Иначе
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
НоваяСтрока.Номенклатура = Номенклатура;
Конецесли
КонецЦикла;
Эксель.ActiveWorkbook.Close();
Эксель.Application.Quit();
ПереборСтрокТЗ();
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Универсальная обработка для загрузки данных из Экселя в табличную часть документа
- Загрузка данных из ОФД в 1С:Бухгалтерию 3.0, 1С:КА 2.4, 2.5, УНФ 1.6/3.0 о денежных поступлениях (чеках)
- Загрузка номенклатуры из Эксель (новый взгляд)
- Универсальная загрузка данных из Экселя по основным параметрам для УТ 11.5
- Загрузка данных из экселя в Распоряжение на перечисление на карты МИР
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вот так попробуйте
Перем ТЗ Экспорт;
Процедура СоздатьТЗ()
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура",,,);
ТЗ.Колонки.Добавить("Количество",,,);
ТЗ.Колонки.Добавить("Цена",,,);
ТЗ.Колонки.Добавить("Сумма",,,);
КонецПроцедуры // СоздатьТЗ()
Процедура ПереборСтрокТЗ()
СсылкаДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
СсылкаДокумент.Дата = ТекущаяДата();
Для Каждого Ст из ТЗ Цикл
ТекСтрокаТовары = СсылкаДокумент.Товары.Добавить();
ТекСтрокаТовары.Номенклатура = Ст.Номенклатура;
ТекСтрокаТовары.Количество = Ст.Количество;
ТекСтрокаТовары.Цена = Ст.Цена;
ТекСтрокаТовары.Сумма = Ст.Сумма;
ТекСтрокаТовары.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ТекСтрокаТовары.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD");
ТекСтрокаТовары.Коэффициент = 1;
КонецЦикла;
СсылкаДокумент.Записать();
КонецПроцедуры
Процедура ВыберитеФайлНажатие(Элемент)
СоздатьТЗ();
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите excel - файл";
Диалог.ПолноеИмяФайла = "С:\";
Диалог.Фильтр = "Таблицы (*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
Если Диалог.Выбрать() Тогда
Предупреждение(Диалог.ПолноеИмяФайла, 10 , "Файл выбран.");
Иначе
Предупреждение("Файл не выбран.");
Возврат;
КонецЕсли;
ПолеВвода1 = Диалог.ПолноеИмяФайла;
Эксель = Новый COMОбъект("Excel.Application");
Эксель.Workbooks.Open(Диалог.ПолноеИмяФайла);
Эксель.Sheets(1).Select();
Версия = Лев(Эксель.Version,Найти(Эксель.Version,".")-1);
Если Версия = "8" тогда
ФайлСтрок = Эксель.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Эксель.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Эксель.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок = Эксель.Cells(1,1).SpecialCells(11).Column;
Конецесли;
НоменклатураКолонка = 2; // колонка 2 по умолчанию в файле екселе, даллее ее пользователь может изменить
ВвестиЗначение(НоменклатураКолонка, "Введите номер колонки ""Номенклатура""");
Для Стр = 1 ПО ФайлСтрок Цикл
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value));
Если Номенклатура.Пустая() Тогда
Сообщить("Строка - " + ФайлСтрок + " Номенклатура " + """" + СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value) + """" + " не найдена!");
СсылкаСправочник = Справочники.Номенклатура.СоздатьЭлемент();
СсылкаСправочник.Наименование = Номенклатура;
СсылкаСправочник.ПолноеНаименование = Номенклатура;
СсылкаСправочник.БазоваяЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD");
СсылкаСправочник.Записать();
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value);
НоваяСтрока.Номенклатура = Номенклатура;
Иначе
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value);
НоваяСтрока.Номенклатура = Номенклатура;
Конецесли
КонецЦикла;
Эксель.ActiveWorkbook.Close();
Эксель.Application.Quit();
ПереборСтрокТЗ();
КонецПроцедуры
Показать
(6)
У меня в экселя номенклатуры написан в третий колонке. И есть только одно товар (Пример ; Клавиатура).
Код такой
Но код выбирает самую первую который есть списке справочнике номенклатура. И это родитель. Код так то отбор не делает. С отладкей посмотрел но не могла решить проблему ( СОМ объекты не знаю хорошо). Как могу решить эту проблему
У меня в экселя номенклатуры написан в третий колонке. И есть только одно товар (Пример ; Клавиатура).
Код такой
НоменклатураКолонка = 3; // я сам это поставил
ВвестиЗначение(НоменклатураКолонка, "Введите номер колонки ""Номенклатура""");
///// .......
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value));
НоваяСтрока.Номенклатура = Номенклатура;
Но код выбирает самую первую который есть списке справочнике номенклатура. И это родитель. Код так то отбор не делает. С отладкей посмотрел но не могла решить проблему ( СОМ объекты не знаю хорошо). Как могу решить эту проблему
Вот в этом коде у вас явно указано с каких колонок брать значения. То есть количество из колонки 2, цена из 3.
Можете вызвать диалоговое окно с вопросом из какой колонки брать количество, цена и т.д.
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,2).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,3).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,4).Value);
НоваяСтрока.Номенклатура = Номенклатура;
Можете вызвать диалоговое окно с вопросом из какой колонки брать количество, цена и т.д.
Вот так по простому можно сделать
КолонкаКоличество = 2;
ВвестиЗначение(КолонкаКоличество, "Введите номер колонки ""Количество""");
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КолонкаКоличество).Value);
Можно сделать отдельную форму, красивую форму, на котором пользователь сам укажит для всех необходимые значения
КолонкаКоличество = 2;
ВвестиЗначение(КолонкаКоличество, "Введите номер колонки ""Количество""");
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КолонкаКоличество).Value);
Можно сделать отдельную форму, красивую форму, на котором пользователь сам укажит для всех необходимые значения
(4)
Спасибо за вниманию.
Создал форму, добавил новую реквизиты. Код изменил. Код выбирает номер колонку который пользователь вводил. Но
здесь он выбирает первую номенклатуру ( это группа в первом списке). Можете проста дать подсказку для решения. Спасибо за ранее
Вот полный код
Спасибо за вниманию.
Создал форму, добавил новую реквизиты. Код изменил. Код выбирает номер колонку который пользователь вводил. Но
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value));
здесь он выбирает первую номенклатуру ( это группа в первом списке). Можете проста дать подсказку для решения. Спасибо за ранее
Вот полный код
Перем ТЗ Экспорт;
Процедура СоздатьТЗ()
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура",,,);
ТЗ.Колонки.Добавить("Количество",,,);
ТЗ.Колонки.Добавить("Цена",,,);
ТЗ.Колонки.Добавить("Сумма",,,);
КонецПроцедуры // СоздатьТЗ()
Процедура ПереборСтрокТЗ()
Для Каждого Ст из ТЗ Цикл
СсылкаДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
СсылкаДокумент.Дата = ТекущаяДата();
ТекСтрокаТовары = СсылкаДокумент.Товары.Добавить();
ТекСтрокаТовары.Номенклатура = Ст.Номенклатура;
ТекСтрокаТовары.Количество = Ст.Количество;
ТекСтрокаТовары.Цена = Ст.Цена;
ТекСтрокаТовары.Сумма = Ст.Сумма;
ТекСтрокаТовары.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ТекСтрокаТовары.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD");
ТекСтрокаТовары.Коэффициент = 1;
СсылкаДокумент.Записать();
КонецЦикла;
КонецПроцедуры
Процедура ВыберитеФайлНажатие(Элемент)
СоздатьТЗ();
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите excel - файл";
Диалог.ПолноеИмяФайла = "С:\";
Диалог.Фильтр = "Таблицы (*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
Если Диалог.Выбрать() Тогда
Предупреждение(Диалог.ПолноеИмяФайла, 10 , "Файл выбран.");
Иначе
Предупреждение("Файл не выбран.");
Возврат;
КонецЕсли;
ПолеВвода1 = Диалог.ПолноеИмяФайла;
Эксель = Новый COMОбъект("Excel.Application");
Эксель.Workbooks.Open(Диалог.ПолноеИмяФайла);
Эксель.Sheets(1).Select();
Версия = Лев(Эксель.Version,Найти(Эксель.Version,".")-1);
Если Версия = "8" тогда
ФайлСтрок = Эксель.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Эксель.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Эксель.Cells(1,1).SpecialCells(11).Row;
ФайлКолонок = Эксель.Cells(1,1).SpecialCells(11).Column;
Конецесли;
Для Стр = 1 ПО ФайлСтрок Цикл
//ВвестиЗначение(НоменклатураКолонка, "Введите номер колонки ""Номенклатура""");
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value));
Если Номенклатура.Пустая() Тогда
Сообщить("Строка - " + ФайлСтрок + " Номенклатура " + """" + СокрЛП(Эксель.Cells(Стр,НоменклатураКолонка).Value) + """" + " не найдена!");
СсылкаСправочник = Справочники.Номенклатура.СоздатьЭлемент();
СсылкаСправочник.Наименование = Номенклатура;
СсылкаСправочник.ПолноеНаименование = Номенклатура;
СсылкаСправочник.БазоваяЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("ƏD");
СсылкаСправочник.Записать();
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value);
НоваяСтрока.Номенклатура = Номенклатура;
Иначе
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = СокрЛП(Эксель.Cells(Стр,КоличествоКолонка).Value);
НоваяСтрока.Цена = СокрЛП(Эксель.Cells(Стр,ЦенаКолонка).Value);
НоваяСтрока.Сумма = СокрЛП(Эксель.Cells(Стр,СуммаКолонка).Value);
НоваяСтрока.Номенклатура = Номенклатура;
Конецесли
КонецЦикла;
Эксель.ActiveWorkbook.Close();
Эксель.Application.Quit();
ПереборСтрокТЗ();
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот