1С Создать документ

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


Код в документа (кнопка) -
Форма = ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайлаXLS.Форма");//ЗагрузкаДанныхИзТабличногоДокумента
    форма.ЭтотОбъект.СсылкаИсточника = ЭтаФорма.ЭтотОбъект.Ссылка;
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SedovSU@mail.ru 297 12.03.19 06:23 Сейчас в теме
Тут можно пойти несколькими способами. Например, открывается ваша обработка, в нее передается ваша ссылка (вашего документа) даже если она и пустая - новая ссылка на документ, далее вы читаете ексель и добавляете в эту ссылку/объект нужные вам строки. Второй вариант, открывается форма все заполняется, например таблица значение, а далее системе генерирует оповещение и передает в форму таблицу значений, далее в форме документа читаете данное оповещение и загружаете уже в табличную часть вашу заполненную таблицу значений
3. SedovSU@mail.ru 297 12.03.19 06:29 Сейчас в теме
В первом случае можно так сделать. В обработке размещаете реквизит, например ДокументОбъект, тип значения у него ДокументОбъектВашДокумент:

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

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

КонецПроцедуры
Показать
5. _7445_ 12.03.19 11:49 Сейчас в теме
(3)
СтрокаПоступление.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Стр.Номенклатура,ИСТИНА);

Полный код обработку -

Процедура КнопкаВыполнитьНажатие(Кнопка)	
	Если  ТабличнаяЧасть.Количество() = 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." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
	КонецПопытки;
	
	Попытка
		ExcelПриложение.Sheets(1).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();
КонецПроцедуры

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

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



Когда нажму кнопку "Заполнить документ" возвращает диалоговая окна. Отладка не показывает.
Форма обработки у меня токая.
Прикрепленные файлы:
6. _7445_ 12.03.19 12:22 Сейчас в теме
(3)
Обработка = Обработки.ЗагрузкаДанныхИзФайлаXLS.Создать();
Форма = Обработка.ПолучитьФорму("Форма");
Форма.ДокументОбъект = ДокументОбъектВашДокумент;
Форма.КнопкаВыполнитьНажатие();


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


Это чего надо
Форма.КнопкаВыполнитьНажатие();
7. _7445_ 12.03.19 12:30 Сейчас в теме
(3)
Почему то не заполняет табличный часть документа.
4. SedovSU@mail.ru 297 12.03.19 06:30 Сейчас в теме
А с другой стороны, если у вас обработка относится только к этому документу, так сделайте отдельную форму в этом документе со всем кодом который загружает файл. Вам будет проще так управлять всем этим.
Оставьте свое сообщение

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