Загрузка таблицы из Excel и создание документов с данными из этой таблицы в 1с

1. user1582389 05.05.21 16:27 Сейчас в теме
Помогите, пож, исправить ошибки:
Переменная не определена (ТаблицаНаименованиеТовара),Переменная не определена (ТаблицаКолич), Переменная не определена (ТаблицаНаименованиеЦена).
В общем, нужно, чтобы в итоге создавались документы, номера которых 1с брал бы из колонки "№ документа" в экселевском файле. Если в экселевском файле 2, 3 и т. д. документа с одинаковыми номерами, то 1с создавать один документ со всеми товарами из этих эксель-доков

&НаКлиенте
Процедура FaylExcelНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

Диалог.Фильтр = НСтр("ru=’Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx'");
Диалог.Заголовок = НСтр("ru=’Выберите файл Excel'");
ОповещениеЗавершения = Новый ОписаниеОповещения("ВыборФайлаЗавершение", ЭтотОбъект, Диалог);
Диалог.Показать(ОповещениеЗавершения);
КонецПроцедуры
&НаКлиенте
Процедура ВыборФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт

Если ВыбранныеФайлы <> Неопределено Тогда

Объект.FaylExcel = ВыбранныеФайлы[0];

КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере(Адрес)

темп_Путь = КаталогВременныхФайлов()+ "prncss_Megan_"+Формат(ТекущаяДата()-Дата(2012,01,01), "ЧГ=0")+".xls";

темп_файл = ПолучитьИзВременногоХранилища(Адрес);
темп_файл.Записать(темп_Путь);

СписокКолонок = Новый СписокЗначений;
СписокКолонок.Добавить("ФизЛицо");
СписокКолонок.Добавить("НомерЛицевогоСчета");

ТабЛицСчетов = ЗагрузитьЭксель(темп_Путь,СписокКолонок);

Попытка
УдалитьФайлы(темп_Путь);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры

&НаСервере
Функция ЗагрузитьЭксель(Путь, СписокКолонки)

ТЗФайл = Новый ТаблицаЗначений;

Попытка
ex = ПолучитьCOMобъект("","Excel.Application");
Исключение
Сообщить("Prilojeniye Excel ne naydeno!");
Возврат ТЗФайл;
КонецПопытки;

Попытка
ex.workbooks.open(Путь,1);
Исключение
Сообщить("Файл перемещён или удалён!");
Возврат ТЗФайл;
КонецПопытки;

Для каждого Зн Из СписокКолонки Цикл
ТЗФайл.Колонки.Добавить(Зн.Значение);
КонецЦикла;

RCount = ex.ActiveSheet.UsedRange.Rows.Count();
CCount = ex.ActiveSheet.UsedRange.Columns.Count();
Для j = 2 по RCount цикл

Новая = Таблица.Добавить();

Новая.НомерДокумента=СокрЛП(ex.ActiveSheet.Cells(j,1).Value);
Новая.НаименованиеТовара=СокрЛП(ex.ActiveSheet.Cells(j,2).Value);
Новая.Колич=СокрЛП(ex.ActiveSheet.Cells(j,3).Value);
Новая.Цена=СокрЛП(ex.ActiveSheet.Cells(j,4).Value);
КонецЦикла;
ex.workbooks.Close();
ex.quit();
Возврат ТЗФайл;
КонецФункции

&НаКлиенте
Процедура Загрузить(Команда)
Двоичное = Новый ДвоичныеДанные(Объект.FaylExcel);
Адрес = ПоместитьВоВременноеХранилище(Двоичное, ЭтаФорма.УникальныйИдентификатор);
ЗагрузитьНаСервере(Адрес);
КонецПроцедуры

&НаСервере
Процедура СоздДокумНаСервере()
НовыйДок = Документы.РеализацияТоваровИУслуг.СоздатьДокумент();
ТабЧастьДока=НовыйДок.Товары;

НовыйДок.Дата= ТекущаяДата();

НовыйДок.Склад = Справочники.Склады.НайтиПоНаименованию("Основной");

СтокаТабличнойЧасти=НовыйДок.Товары.Добавить();

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

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

&НаКлиенте
Процедура СоздДокум(Команда)
СоздДокумНаСервере();
КонецПроцедуры
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 05.05.21 16:37 Сейчас в теме
ну надо определить переменные. А чем тут можно помочь? Наймите программиста, это стандартная задача, ее каждый наверное делал уже...
3. o.nikolaev 213 05.05.21 16:39 Сейчас в теме
Надо так:
&НаСервере
Процедура СоздДокумНаСервере()
	НовыйДок = Документы.РеализацияТоваровИУслуг.СоздатьДокумент();
	ТабЧастьДока=НовыйДок.Товары;
	
	НовыйДок.Дата= ТекущаяДата();
	
	НовыйДок.Склад = Справочники.Склады.НайтиПоНаименованию("Основной");
	
	СтокаТабличнойЧасти=НовыйДок.Товары.Добавить();
	
	Для Каждого Стр Из Таблица Цикл
		СтокаТабличнойЧасти.Наименование = стр.ТаблицаНаименованиеТовара;
		СтокаТабличнойЧасти.Количество = стр.ТаблицаКолич;
		СтокаТабличнойЧасти.Цена = стр.ТаблицаЦена;
	КонецЦикла;
	НовыйДок.Записать(РежимЗаписиДокумента.Запись);
	
КонецПроцедуры
Показать
4. dmbarchenkov 05.05.21 18:37 Сейчас в теме
(1)
(3) нет, не верно. Вы обращаетесь к ТаблицаНаименованиеТовара - а надо к НаименованиеТовара. Надо так:
Для Каждого Стр Из Таблица Цикл
СтокаТабличнойЧасти.Наименование = Стр.НаименованиеТовара;
СтокаТабличнойЧасти.Количество = Стр.Колич;
СтокаТабличнойЧасти.Цена =  Стр.Цена;
КонецЦикла;

это первое.

Второе: вы создаёте строку ТЧ и в неё в цикле пишите прочитанные строки:
СтокаТабличнойЧасти=НовыйДок.Товары.Добавить();

В итоге у вас получится одна последняя строка. Добавлять надо тоже в цикле:
Для Каждого Стр Из Таблица Цикл
СтокаТабличнойЧасти=НовыйДок.Товары.Добавить(); 
СтокаТабличнойЧасти.Наименование = Стр.НаименованиеТовара;
СтокаТабличнойЧасти.Количество = Стр.Колич;
СтокаТабличнойЧасти.Цена =  Стр.Цена;
КонецЦикла;
MarchTomCat; +1 Ответить
5. user1582389 07.05.21 15:06 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот