Загрузка таблицы из 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 211 05.05.21 16:39 Сейчас в теме
Надо так:
&НаСервере
Процедура СоздДокумНаСервере()
	НовыйДок = Документы.РеализацияТоваровИУслуг.СоздатьДокумент();
	ТабЧастьДока=НовыйДок.Товары;
	
	НовыйДок.Дата= ТекущаяДата();
	
	НовыйДок.Склад = Справочники.Склады.НайтиПоНаименованию("Основной");
	
	СтокаТабличнойЧасти=НовыйДок.Товары.Добавить();
	
	Для Каждого Стр Из Таблица Цикл
		СтокаТабличнойЧасти.Наименование = стр.ТаблицаНаименованиеТовара;
		СтокаТабличнойЧасти.Количество = стр.ТаблицаКолич;
		СтокаТабличнойЧасти.Цена = стр.ТаблицаЦена;
	КонецЦикла;
	НовыйДок.Записать(РежимЗаписиДокумента.Запись);
	
КонецПроцедуры
Показать
4. dmbarchenkov 05.05.21 18:37 Сейчас в теме
(1)
(3) нет, не верно. Вы обращаетесь к ТаблицаНаименованиеТовара - а надо к НаименованиеТовара. Надо так:
Для Каждого Стр Из Таблица Цикл
СтокаТабличнойЧасти.Наименование = Стр.НаименованиеТовара;
СтокаТабличнойЧасти.Количество = Стр.Колич;
СтокаТабличнойЧасти.Цена =  Стр.Цена;
КонецЦикла;

это первое.

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

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

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

Специалист техподдержки
Санкт-Петербург
зарплата от 100 руб. до 150 руб.
Полный день