Не загружаются данные в документ Заказ поставщику из файла Excel

1. sergqwert15 2 13.07.20 16:58 Сейчас в теме
Не загружаются данные из файла эксель в документ Заказ поставщику.

Процедура ПечатьПеремещениеТоваровОтветственноеХранение()


Если не ЗначениеЗаполнено(ЗаказПоставщику) Тогда
Сообщить("Укажите заказ поставщика для экспорта ", СтатусСообщения.ОченьВажное);
Возврат;
КонецЕсли;

РЗапрос = ПолучитьЗапросПоТоварам();


Если РЗапрос.Количество() = 0 Тогда
Сообщить("Отсутствуют перемещения по параметрам выбранным на форме!", СтатусСообщения.Важное);
Иначе
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПеремещениеТоваров_Накладная";
Макет = ПолучитьМакет("НакладнаяОтветственноеХранение");

// печать производится на языке ИБ
КодЯзыкаПечать = Локализация.КодЯзыкаИнформационнойБазы();
Макет.КодЯзыкаМакета = КодЯзыкаПечать;

// Выводим шапку накладной

ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
//ОбластьМакета.Параметры.Номер = СокрЛП(Номер);
ОбластьМакета.Параметры.Дата = Формат(Дата, "ДФ=dd.MM.yyyy");
ОбластьМакета.Параметры.РеквизитыОрганизации = СокрЛП(Организация.Наименование);
ТабДокумент.Вывести(ОбластьМакета);

Нпп = 1;

Для Каждого Зн Из РЗапрос Цикл

ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.Заполнить(Зн);
ОбластьМакета.Параметры.Нпп = Нпп;
ТабДокумент.Вывести(ОбластьМакета);

Нпп = Нпп + 1;

КонецЦикла;

ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.ИтогСуммаБезПДВ = РЗапрос.Итог("СуммаБезНДС");

ВрСуммаБезНДС = РЗапрос.Итог("СуммаБезНДС");
ВрСуммаСНДС = Окр(ВрСуммаБезНДС * 1.2, 2);
ВрСуммаНДС = ВрСуммаСНДС - ВрСуммаБезНДС;

ОбластьМакета.Параметры.ПДВ = ВрСуммаНДС;
ОбластьМакета.Параметры.СуммаВсего = ВрСуммаБезНДС + ВрСуммаНДС;

ТабДокумент.Вывести(ОбластьМакета);

ТабДокумент.Показать();

КонецЕсли;

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

Процедура ФайлЭксельДляЗаполненияНачалоВыбора(Элемент, СтандартнаяОбработка)
ФайлЭксельДляЗаполнения = ВыборФайла(ФайлЭксельДляЗаполнения, СтандартнаяОбработка);
КонецПроцедуры

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

Функция ПолучитьЗапросПоТоварам()
Запрос = Новый Запрос;

Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПоставщикуТовары.Номенклатура,
| ЕСТЬNULL(НоменклатураКонтрагентов.КодНоменклатурыКонтрагента, """") КАК АртикулЧумак,
| ЗаказПоставщикуТовары.ЕдиницаИзмерения.Вес КАК ВесИОбъем,
| ЗаказПоставщикуТовары.Количество,
| ВЫБОР
| КОГДА ЗаказПоставщикуТовары.Ссылка.СуммаВключаетНДС
| ТОГДА ЗаказПоставщикуТовары.Цена
| ИНАЧЕ ЗаказПоставщикуТовары.Цена * 1.2
| КОНЕЦ КАК ЦенаСНДС,
| ВЫБОР
| КОГДА ЗаказПоставщикуТовары.Ссылка.СуммаВключаетНДС
| ТОГДА ЗаказПоставщикуТовары.Сумма
| ИНАЧЕ ЗаказПоставщикуТовары.Сумма + ЗаказПоставщикуТовары.СуммаНДС
| КОНЕЦ КАК СуммаСНДС,
| ВЫБОР
| КОГДА ЗаказПоставщикуТовары.Ссылка.СуммаВключаетНДС
| ТОГДА ЗаказПоставщикуТовары.Цена / 1.2
| ИНАЧЕ ЗаказПоставщикуТовары.Цена
| КОНЕЦ КАК ЦенаБезНДС,
| ВЫБОР
| КОГДА ЗаказПоставщикуТовары.Ссылка.СуммаВключаетНДС
| ТОГДА ЗаказПоставщикуТовары.Сумма - ЗаказПоставщикуТовары.СуммаНДС
| ИНАЧЕ ЗаказПоставщикуТовары.Сумма
| КОНЕЦ КАК СуммаБезНДС,
| ЗаказПоставщикуТовары.СуммаНДС КАК СуммаНДС,
| ЛОЖЬ КАК ВыгруженВФайл
|ИЗ
| Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
| ПО ЗаказПоставщикуТовары.Номенклатура = НоменклатураКонтрагентов.Номенклатура
| И (НоменклатураКонтрагентов.Контрагент = &Контрагент)
|ГДЕ
| ЗаказПоставщикуТовары.Ссылка = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| ЗаказПоставщикуТовары.Номенклатура.Наименование";

Запрос.УстановитьПараметр("Ссылка", ЗаказПоставщику);
Запрос.УстановитьПараметр("Контрагент", ЗаказПоставщику.Контрагент);


//Запрос.УстановитьПараметр("ТипЦенИзКонстанты", УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойТипЦенПродажи"));
//Запрос.УстановитьПараметр("НачДата", НачалоДня(Дата));
//Запрос.УстановитьПараметр("КонДата", КонецДня(Дата));
Запрос.УстановитьПараметр("Бондюэль", Справочники.Номенклатура.НайтиПоКоду("A3391"));
Запрос.УстановитьПараметр("Ролтон", Справочники.Номенклатура.НайтиПоКоду("A3930"));

Возврат Запрос.Выполнить().Выгрузить();
КонецФункции

Процедура ОсновныеДействияФормыЗаполнитьДанными(Кнопка)

Если не ЗначениеЗаполнено(ЗаказПоставщику) Тогда
Сообщить("Укажите заказ поставщика для экспорта ", СтатусСообщения.ОченьВажное);
Возврат;
КонецЕсли;

Если ЗначениеЗаполнено(ФайлЭксельДляЗаполнения) Тогда


РЗапрос = ПолучитьЗапросПоТоварам();

Если РЗапрос.Количество() = 0 Тогда
Сообщить("Отсутствуют перемещения по параметрам выбранным на форме!", СтатусСообщения.Важное);
Возврат;
Иначе

//Уберем в реквизите АртикулЧумак 160 символ , и символ НПП

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


Попытка
// Создать объект.
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось инициализировать Excel");
Возврат;
КонецПопытки;


Попытка

// Если при отработке следующего фрагмента кода произойдет ошибка объект "Excel.Application" будет закрыт.

Состояние("Открытие файла Microsoft Excel...");
ExcelФайл = ExcelПриложение.WorkBooks.Open(ФайлЭксельДляЗаполнения);

ExcelЛист = ExcelФайл.Sheets(НомерЛиста);
xlCellTypeLastCell = 11;
ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;

Для Строка = НачальнаяСтрокаНоменклатуры По ExcelПоследняяСтрока Цикл

АртикулИзФайла = СокрЛП(Формат(ExcelЛист.Cells(Строка, НомерКолонкиАртикулаВФайле).Value,"ЧГ=0"));
//АртикулИзФайла = Число(АртикулИзФайла);
АртикулИзФайла = СтрЗаменить(СтрЗаменить(АртикулИзФайла, Символ(160), ""), Символы.НПП , "");

Если ПустаяСтрока(АртикулИзФайла) Тогда
Прервать;
КонецЕсли;

СтртураОтбора = Новый Структура("АртикулЧумак", АртикулИзФайла);
СтрокиСОтбором = РЗапрос.НайтиСтроки(СтртураОтбора);

//Очищаем количество в каждой строке
ExcelЛист.Cells(Строка, НомерКолонкиКоличестваВФайле).Value = 0;

Если СтрокиСОтбором.Количество() = 1 Тогда
//Заполняем если были перемещения
ExcelЛист.Cells(Строка, НомерКолонкиКоличестваВФайле).Value = СтрокиСОтбором[0].Количество;
СтрокиСОтбором[0].ВыгруженВФайл = Истина;
ИначеЕсли СтрокиСОтбором.Количество() > 1 Тогда
//Ругаемся
Сообщить("Артикул: " + АртикулИзФайла + " дублируется в таблице выгрузки!", СтатусСообщения.ОченьВажное);
ExcelПриложение.DisplayAlerts = 0;
ExcelПриложение.Quit();
Возврат;
КонецЕсли;
КонецЦикла;

Исключение
Сообщить(ОписаниеОшибки());
ExcelПриложение.DisplayAlerts = 0;
ExcelПриложение.Quit();
КонецПопытки;


СтртураОтбора = Новый Структура("ВыгруженВФайл", Ложь);
СтрокиСОтбором = РЗапрос.НайтиСтроки(СтртураОтбора);

Если СтрокиСОтбором.Количество() > 0 Тогда

Для Каждого Вр Из СтрокиСОтбором Цикл
Сообщить("Для номенклатуры " + """" + СокрЛП(Вр.Номенклатура.Наименование) + """" + ", с артикулом " + """" + Вр.АртикулЧумак + """" + " не найдено соответствия в файле Excel!", СтатусСообщения.ОченьВажное);
КонецЦикла;

ExcelПриложение.DisplayAlerts = 0;
ExcelПриложение.Quit();

Иначе
ExcelПриложение.Visible = Истина;
КонецЕсли;

КонецЕсли;

Иначе

Сообщить("Выберите файл для заполнения!", СтатусСообщения.ОченьВажное);

КонецЕсли;


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

Процедура ЗаказПоставщикуПриИзменении(Элемент)
Организация = ЗаказПоставщику.Организация;
КонецПроцедуры
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. SeverBaP 4 13.07.20 18:05 Сейчас в теме
Что конкретно выдает за ошибку?
3. ZergKRSK 128 14.07.20 08:17 Сейчас в теме
(2) вы же профессионал, должны догадаться!
4. yurikmellon 5 14.07.20 08:20 Сейчас в теме
(3) у нас штатный телепат с сегодня в отпуске
Оставьте свое сообщение
Вопросы с вознаграждением