Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 15:38

Соединить обработку с документам

Автор Ульви Мамедов, 16 мар 2019, 14:11

0 Пользователей и 1 гость просматривают эту тему.

Ульви Мамедов

Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в 1С программирование. В УТ 10.3. Есть обработка загрузка данных из файла excel. В документа есть кнопка "Загрузка данных". Кнопка открывает обработку но обработка не заполняет табличный часть текущего документа. Как исправится с этим? Спасибо всем за ранее.
ДокументПоступление - это реквизит с типом документСсылка.ПоступлениеТоваровУслуг.
Полный код обработку -
Процедура КнопкаВыполнитьНажатие(Кнопка)
Если  ТабличнаяЧасть.Количество() = 0 Тогда
Предупреждение("Для создания документа необходимо заполнить таблицу",,"Внимание");
Возврат;
КонецЕсли;
//Поступление = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
ЧастьДокумента = ДокументПоступление.Товары;
Для Каждого Стр Из ТабличнаяЧасть Цикл
СтрокаПоступление = ЧастьДокумента.Добавить();
СтрокаПоступление.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Стр.Номенклатура,ИСТИНА);
СтрокаПоступление.Цена = Стр.Цена;
СтрокаПоступление.ЕдиницаИзмерения = СтрокаПоступление.Номенклатура.ЕдиницаДляОтчетов;
СтрокаПоступление.Коэффициент = СтрокаПоступление.Номенклатура.ЕдиницаДляОтчетов.Коэффициент;
СтрокаПоступление.Количество = Стр.Количество;
СтрокаПоступление.Сумма =  Стр.Сумма;
СтрокаПоступление.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
КонецЦикла;
//ОткрытьЗначение(Поступление);
КонецПроцедуры

Процедура ПутьКФайлуНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка=ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите excel - файл";
Диалог.ПолноеИмяФайла = "";
Диалог.Фильтр = "Таблицы (*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
Диалог.МножественныйВыбор = Ложь;
Диалог.Каталог = "\";
Если Диалог.Выбрать() Тогда
Предупреждение(Диалог.ПолноеИмяФайла, 10 , "Файл выбран.");
Элемент.значение = Диалог.ПолноеИмяФайла;
Иначе
Предупреждение("Файл не выбран.");
Возврат;
КонецЕсли;
КонецПроцедуры

Процедура ЗаполнитьНажатие(Элемент)
ТабличнаяЧасть.Очистить();
ИмяФайла = ПутьКФайлу;
Если ПустаяСтрока(ИмяФайла) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
Возврат;
КонецЕсли;

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

Попытка
ExcelПриложение.WorkBooks.Open(ИмяФайла);
Исключение
Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;

Попытка
Если Страница = 0 ИЛИ Страница < 0 Тогда
ExcelПриложение.Sheets(1).Select();
Иначе
ExcelПриложение.Sheets(Страница).Select();
КонецЕсли;
Версия = Лев(ExcelПриложение.Version,Найти(ExcelПриложение.Version,".")-1);
Если Версия = "8" тогда
ExcelПоследняяСтрока   = ExcelПриложение.Cells.CurrentRegion.Rows.Count;
ExcelПоследняяКолонка = Макс(ExcelПриложение.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ExcelПоследняяСтрока   = ExcelПриложение.Cells(1,1).SpecialCells(11).Row;
ExcelПоследняяКолонка = ExcelПриложение.Cells(1,1).SpecialCells(11).Column;   
Конецесли;
Исключение
Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
ExcelПриложение.Quit();
КонецПопытки;

КЧ = Новый КвалификаторыЧисла(15,2);
КС = Новый КвалификаторыСтроки(100);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
Массив.Очистить();
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
Массив.Очистить();
Массив.Добавить(Тип("СправочникСсылка.Номенклатура"));
ОписаниеТиповНом = Новый ОписаниеТипов(Массив, , ,КЧ);
 
ТабличнаяЧасть.Очистить();
ЭлементыФормы.ТабличнаяЧасть.Значение.Очистить();

Процессор = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Процессор.ОтображатьПроцентВывода = Истина;
Процессор.НачатьВывод();
Элемент = Новый ЭлементРезультатаКомпоновкиДанных;
 
Для Строка = 2 По ExcelПоследняяСтрока Цикл
ОбработкаПрерыванияПользователя();
ОсновнаяЕдиницаПоКлассификатору = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяЕдиницаПоКлассификатору");

СтруктураПолей = Новый Структура;
ПроверитьНоменклатуры = Строка(СокрЛП(ExcelПриложение.Cells(Строка, НоменклатураКол).Value));
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | Номенклатура.Наименование
               |ИЗ
               | Справочник.Номенклатура КАК Номенклатура
               |ГДЕ
               | Номенклатура.Наименование = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура",ПроверитьНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() = 0 Тогда
НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НоваяНоменклатура.Наименование = ПроверитьНоменклатуры;
НоваяНоменклатура.НаименованиеПолное = ПроверитьНоменклатуры;
НоваяНоменклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоРеквизиту("ТипНоменклатуры",Перечисления.ТипыНоменклатуры.Товар);
НоваяНоменклатура.БазоваяЕдиницаИзмерения = ОсновнаяЕдиницаПоКлассификатору;
НоваяНоменклатура.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
Попытка
НоваяНоменклатура.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
    НоваяЕдиница = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НоваяЕдиница.Владелец = НоваяНоменклатура.Ссылка;
НоваяЕдиница.ЕдиницаПоКлассификатору = НоваяНоменклатура.БазоваяЕдиницаИзмерения;
НоваяЕдиница.Наименование = НоваяНоменклатура.БазоваяЕдиницаИзмерения.Наименование;
НоваяЕдиница.Коэффициент = 1;
НоваяЕдиница.Записать();

ПерезаписаннаяНоменклатура = Справочники.Номенклатура.НайтиПоКоду(НоваяНоменклатура.Код).ПолучитьОбъект();
ВыбСпр = Справочники.ЕдиницыИзмерения.Выбрать(,ПерезаписаннаяНоменклатура.Ссылка);
ВыбСпр.Следующий();

ПерезаписаннаяНоменклатура.ЕдиницаХраненияОстатков = ВыбСпр.Ссылка;
ПерезаписаннаяНоменклатура.ЕдиницаДляОтчетов = ВыбСпр.Ссылка;
ПерезаписаннаяНоменклатура.Записать();
КонецЕсли;


Наименование = СокрЛП(ExcelПриложение.Cells(Строка, НоменклатураКол).Value);
Количество = ExcelПриложение.Cells(Строка, КоличествоКол).Value;
Цена = ExcelПриложение.Cells(Строка, ЦенаКол).Value;
Сумма = ExcelПриложение.Cells(Строка, СуммаКол).Value;

СтруктураПолей.Вставить("Наименование", Наименование);
СтруктураПолей.Вставить("Количество", Количество);
СтруктураПолей.Вставить("Цена", Цена);
СтруктураПолей.Вставить("Сумма", Сумма);


Стр = ЭлементыФормы.ТабличнаяЧасть.Значение.Добавить();
Стр.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Наименование),ИСТИНА);
Стр.Количество = Количество;
Стр.Цена = Цена;
Стр.Сумма = Сумма;

Элемент.ПроцентВывода = Строка/ExcelПоследняяСтрока*100;
Процессор.ВывестиЭлемент(Элемент);

  КонецЦикла;
  Процессор.ЗакончитьВывод();
  ExcelПриложение.Quit();
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
НоменклатураКол = ВосстановитьЗначение("НоменклатураКолонка");
КоличествоКол = ВосстановитьЗначение("КоличествоКолонка");
ЦенаКол = ВосстановитьЗначение("ЦенаКолонка");
СуммаКол = ВосстановитьЗначение("СуммаКолонка");
КонецПроцедуры

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Экспорт
СохранитьЗначение("НоменклатураКолонка", НоменклатураКол);
СохранитьЗначение("КоличествоКолонка", КоличествоКол);
СохранитьЗначение("ЦенаКолонка", ЦенаКол);
СохранитьЗначение("СуммаКолонка", СуммаКол);
КонецПроцедуры


Код кнопку "Загрузить" (В форму документа) -
   Параметр = Новый Структура;
Параметр.Вставить("ДокументПоступление", СсылкаДокумента);
ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайлаXLS.Форма.Форма", Параметр);



Теги:  

Похожие темы (5)

Рейтинг@Mail.ru

Поиск