Как из документа вызвать обработку, чтобы та заполнила табличную часть этого документа?

1. zoeh 31 10.09.24 18:22 Сейчас в теме
&НаКлиенте
Процедура ММЗагрузитьТаблицуИзExcelПосле(Команда)
	Если Объект.Ссылка.Пустая() Тогда
		
		Сообщить("Нельзя вызывать из несохраненного документа");
		Сообщить(Модифицированность);
	КонецЕсли;
	Форма = ПолучитьФорму("Обработка.ЗагрузкаИзExcel.Форма.Форма", );
	Форма.Объект.Док = Объект.Ссылка; 
	Форма.Открыть(); 
	//ММЗагрузитьТаблицуИзExcelПослеНаСервере();
КонецПроцедуры
Показать


*****

Нстр = Объект.Док.Запасы.Добавить();
Нстр.Номенклатура = Номенклатура;

Объект недоступен для изменения!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. пользователь 10.09.24 18:59
Сообщение было скрыто модератором.
...
3. lone_mayson 52 10.09.24 19:05 Сейчас в теме
Так передавай значение при закрытии формы обработки и в обработке оповещения / выбора заполняй в форме самого документа по переданной таблице товаров (таблице значений, помещенной во временное хранилище)

ОповеститьОВыборе(ПоместитьДанныеВоВременноеХранилище());

&НаСервере
Функция ПоместитьДанныеВоВременноеХранилище()
		
	Возврат ПоместитьВоВременноеХранилище(Объект.Товары.Выгрузить()); // Обработка загрузки из Excel, переименовать названия
	
КонецФункции


в форме документа ловишь событие, получаешь таблицу и заполняешь товары
4. zoeh 31 13.09.24 09:02 Сейчас в теме
А можно как то заполнить внешей обработкой чтоб она была универсальной, с минимальным количеством кода в самом документе.
т.е. в обработку передать объект документ.
у меня не получается
7. lefthander 13.09.24 10:15 Сейчас в теме
(4) Есть же механизм заполнение табличной части через дополнительные внешние обработки... ;)
9. zoeh 31 13.09.24 10:42 Сейчас в теме
(7)
механизм заполнение табличной части через дополнительные внешние обработки


Внешние очень сложно пользоваться отладчиком, хотел было сделать но....
5. zoeh 31 13.09.24 09:02 Сейчас в теме
И желательно без записи
6. user5300 1055 13.09.24 09:30 Сейчас в теме
ОткрытьФорму("Обработка.ЗагрузкаИзExcel.Форма.Форма", , ЭтаФорма)
///
ДокументОбъект = ВладелецФормы.Объект;
lone_mayson; +1 Ответить
8. zoeh 31 13.09.24 10:41 Сейчас в теме
(6) Вроде все получилось, даже отладчик говорит что строки создаются
но после серверного метода выходит вот такое
Ошибка при установке значения атрибута контекста (Объект)
{Доработки_М
Обработка.ЗагрузкаИзExcel.Форма.Форма.Форма(302)}:ЗагрзитьФайлЭксельНаСервере(АдресВХ,ВладелецФормы.Объект);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
Нельзя изменять поле, содержащее объект данных формы
[ОшибкаИспользованияВстроенногоЯзыка]



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


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





******************


&НаСервере
Процедура ЗагрзитьФайлЭксельНаСервере(АдресВХ,Док)


****************

		Для каждого ТекШтрихкод Из СтруктураДанные.МассивШтрихкодов Цикл 
			ДанныеШтрихкода = СтруктураДанные.ДанныеПоШтрихкодам[ТекШтрихкод.Штрихкод]; 
			Если ДанныеШтрихкода.Количество()>0 Тогда
				//Попытка
					ДанныеШтрихкода = СтруктураДанные.ДанныеПоШтрихкодам[ТекШтрихкод.Штрихкод]; 
					Номенклатура = ДанныеШтрихкода[0].Номенклатура;
					Нстр = Док.Запасы.Добавить();
					Нстр.Номенклатура = Номенклатура;
					А=А+1;
					Если А=5 Тогда 
						Прервать
					КонецЕсли;

Показать
10. user5300 1055 13.09.24 10:43 Сейчас в теме
(8)
ЗагрзитьФайлЭксельНаСервере(АдресВХ,ВладелецФормы.Объект);

На сервере надо использовать: "ВладелецФормы.Объект"
11. zoeh 31 13.09.24 10:58 Сейчас в теме
(10)
ВладелецФормы.Объект


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


попробовал так:
НоваяСтрока = ВладелецФормы.Объект.Запасы.Добавить();

свойство недоступно на сервере
13. zoeh 31 13.09.24 11:10 Сейчас в теме
(11) будто не хватает какой от Данные.Обновить
12. zoeh 31 13.09.24 11:09 Сейчас в теме
(10) я даже пропустил отладчик до конца серверной процедуры она исполняется на ура.
но как только выходи на клиент сразу в ошибку
14. zoeh 31 13.09.24 11:18 Сейчас в теме
может вот это впиндярить?
&НаСервере
Процедура ВыпНаСервере()
Об = РеквизитФормыВЗначение("Объект");
А = Об.Товары.Добавить();
А.рек = "фыв";
ЗначениеВРеквизитФормы(Об, "Объект");
КонецПроцедуры
15. zoeh 31 13.09.24 12:33 Сейчас в теме
на будущее может кто споткнётся

&НаКлиенте
Процедура ВыборСчетаЗавершение(Значение, ДопПараметры) Экспорт 
	Если ЗначениеЗаполнено(Значение) Тогда
		Дата = ?(ЗначениеЗаполнено(ВладелецФормы.Объект.Дата), ВладелецФормы.Объект.Дата, ТекущаяДата());
		Строки = ЗаполнитьНаСервере(Значение, ВладелецФормы.Объект.Склад, ВладелецФормы.Объект.Организация, Дата);		
		
		Для каждого Строка Из Строки Цикл
			НоваяСтрока = ВладелецФормы.Объект.Материалы.Добавить();			
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
			//Сообщить("Добавлен "+строка.Номенклатура+", "+Строка.Количество);
		КонецЦикла;
		
		ВладелецФормы.ОбновитьОтображениеДанных();
	КонецЕсли;			
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЗаполнитьНаСервере(Счет,Склад,Организация,Дата)
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Счет", Счет);
	Запрос.УстановитьПараметр("Склад", Склад);
	Запрос.УстановитьПараметр("Организация", Организация);
	Запрос.УстановитьПараметр("Дата", Дата);
	
	ТекстЗапроса = "ВЫБРАТЬ
	               |	ХозрасчетныйОстатки.Счет КАК Счет,
	               |	ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
	               |	ХозрасчетныйОстатки.Субконто3 КАК Субконто3,
	               |	ХозрасчетныйОстатки.Организация КАК Организация,
	               |	СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток,
	               |	СУММА(ХозрасчетныйОстатки.КоличествоОстатокДт) КАК КоличествоОстатокДт,
	               |	СУММА(ХозрасчетныйОстатки.КоличествоОстатокКт) КАК КоличествоОстатокКт,
	               |	СУММА(ХозрасчетныйОстатки.КоличествоРазвернутыйОстатокДт) КАК КоличествоРазвернутыйОстатокДт,
	               |	СУММА(ХозрасчетныйОстатки.КоличествоРазвернутыйОстатокКт) КАК КоличествоРазвернутыйОстатокКт
	               |ИЗ
	               |	РегистрБухгалтерии.Хозрасчетный.Остатки(
	               |			&Дата,
	               |			Счет = &Счет,
	               |			,
	               |			Субконто3 = &Склад
	               |				И Организация = &Организация) КАК ХозрасчетныйОстатки
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ХозрасчетныйОстатки.Счет,
	               |	ХозрасчетныйОстатки.Субконто1,
	               |	ХозрасчетныйОстатки.Субконто3,
	               |	ХозрасчетныйОстатки.Организация
	               |
	               |ИМЕЮЩИЕ
	               |	СУММА(ХозрасчетныйОстатки.КоличествоОстатокДт) > 0";
	
	Запрос.Текст = ТекстЗапроса;
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Строки = Новый Массив();
	
	Пока Выборка.Следующий() Цикл
		НоваяСтрока = Новый Структура("Номенклатура,ЕдиницаИзмерения,Коэффициент,Количество,Счет,ОтражениеВУСН");
		НоваяСтрока.Номенклатура = Выборка.Субконто1;
		НоваяСтрока.ЕдиницаИзмерения = Выборка.Субконто1.ЕдиницаИзмерения;
		НоваяСтрока.Коэффициент 	= 1;
		НоваяСтрока.Количество 		= Выборка.КоличествоОстатокДт;
		НоваяСтрока.Счет 			= Выборка.Счет;
		НоваяСтрока.ОтражениеВУСН 	= Перечисления.ОтражениеВУСН.Принимаются;
		
		Строки.Добавить(НоваяСтрока);
	КонецЦикла; 
	
	Возврат Строки;
		
КонецФункции
Показать
16. SlavaKron 13.09.24 12:39 Сейчас в теме
(15) >Массив структур.
Классика костылестроения.
Оставьте свое сообщение

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