Получить тип ДанныеФормыСтруктура из Объекта Документ Реализация

1. criptid 01.07.21 15:38 Сейчас в теме
Доброго времени суток. Внешняя обработка, делаю программное создание документов Реализация товаров, загружаю из xml фала. Заполняю таб.часть Товары, нужно обработать заполнение счетов учета, есть общий модуль
	ПараметрыЗаполненияСчетовУчета = РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета(
		"Товары.Номенклатура",
		Объект,
		Элементы.Товары.ТекущиеДанные,
		ДанныеОбъекта,
		ДанныеСтрокиТаблицы);
Только вот Объект это тип "ДанныеФормыСтруктура", как то можно преобразовать Объект Документ Реализация?
По теме из базы знаний
Найденные решения
19. spacecraft 01.07.21 17:23 Сейчас в теме
Хотя, если нужны ДанныеФормыСтруктура именно Форма.Объект, тогда можно просто так в обработке:
&НаКлиенте
Процедура ПолучитьДанныеФормыСтруктура(Команда)
	Ключ = Новый Структура("Ключ", СсылкаНаДокумент);
	Форма = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", Ключ);
	ФормаОбъект = Форма.Объект;
	ТестОбъект(ФормаОбъект);
КонецПроцедуры

&НаСервере
Процедура ТестОбъект(ДанныеФормыОбъект)
	Сообщить(ТипЗнч(ДанныеФормыОбъект));
КонецПроцедуры
Показать
jan-pechka; Sergafan10; criptid; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 01.07.21 15:45 Сейчас в теме
(1)получайте его форму, Объект будет в Форма.Объект.

сам документ будет доступен через Форма.РеквизитФормыВЗначение("Объект")
5. criptid 01.07.21 15:51 Сейчас в теме
(2)как получить форму &НаСервере?
6. nomad_irk 76 01.07.21 15:59 Сейчас в теме
(5)никак. ее можно передать на сервер, но получить нужно обязательно на клиенте.
Вы можете на клиенте один раз получить форму документа, передать ее на сервер и на сервере уже делать


ДокОбъект = Документы.<МойДокумент>.СоздатьДокумент();

ДокОбъект.Заполнить();

Форма.ЗначениеВРеквизитФормы(ДокОбъект, "Объект");

ДанныеФормыСтруктура = Форма.Объект;
...............

ДокОбъект = Документы.<МойДокумент>.СоздатьДокумент();

ДокОбъект.Заполнить();

Форма.ЗначениеВРеквизитФормы(ДокОбъект, "Объект");

ДанныеФормыСтруктура = Форма.Объект;
......
Показать
7. spacecraft 01.07.21 16:11 Сейчас в теме
(6)
Вы можете на клиенте один раз получить форму документа, передать ее на сервер и на сервере уже делать

Передать клиентскую форму на сервер вне контекста?
8. nomad_irk 76 01.07.21 16:15 Сейчас в теме
(7)ээээ.....ну так контекст в данном случае будет либо форма внешней обработки, либо фоновое задание, так понимаю.

Если форма внешней обработки, то получаем форму на клиенте, дальше передаем ее хоть контекстно, хоть без......или это так не работает?

Если изначально контекст - это фоновое задание, то так понимаю, задача в лоб не решается и придется взять код, выполняемый на сервере в рамках РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета() и адаптировать его под текущие реалии выполнения.
10. spacecraft 01.07.21 16:19 Сейчас в теме
(8) во внешней обработке получить клиентскую форму документа можно. А вот передать ее во внешней обработке на сервер невозможно. Серверную форму можно получить только внутри контекста сервера в модуле формы самого документа.
11. nomad_irk 76 01.07.21 16:22 Сейчас в теме
(10)значит - никак в лоб не решается, придется извращаться, либо придумывать свой велосипед.
12. spacecraft 01.07.21 16:30 Сейчас в теме
(11) в общем так.
(1) как вариант: можно добавить расширение и модуле формы добавить экспортную серверную функцию, которая будет возвращать серверную форму документа. Это как раз из разряда "извращаться" ))
nomad_irk; +1 Ответить
13. criptid 01.07.21 16:31 Сейчас в теме
(12)
как вариант: можно добавить расширение и модуле формы добавить экспортную функцию, которая будет возвращать серверную форму документа. Это как раз из разряда "извращаться" ))
Если можно более подробней
17. spacecraft 01.07.21 16:40 Сейчас в теме
(13) нет, так тоже не получится. Чтобы вызвать серверную функцию формы, нужно ее уже иметь. Только если добавлять клиентскую процедуру, через которую вызывать серверный метод, в котором и вызывать заполнение. Т.е. доступ возможет только через клиентскую форму.
Т.е. сначала заполняем форму документа, доступом через клиентские функции, затем можем вызвать клиентскую процедуру, которая запускает серверную процедуру, которая уже вызывает нужное заполнение.
14. Sashares 35 01.07.21 16:34 Сейчас в теме
(1)У обработки форма есть?
Если есть, создать на ней реквизит с типом ДокументОбъект.Реализация товаров.
Созданный программно документ преобразовать в реквизит формы, вызвать функцию ОМ, преобразовать обратно, записать.
15. criptid 01.07.21 16:35 Сейчас в теме
(14)есть, таб.часть с списком документов(ссылки) которые будут созданы в результате выполнения обработки
3. soft_wind 01.07.21 15:47 Сейчас в теме
или просто свой Документ объект передавайте в этот параметр,
во многих местах прокатывает
4. criptid 01.07.21 15:48 Сейчас в теме
(3)Вот как раз таки и не прокатывает
9. spacecraft 01.07.21 16:17 Сейчас в теме
(1) не ищите легких путей. Посмотрите, как там заполняется далее. Возможно получиться использовать последующий код, или придется свой код писать.
16. soft_wind 01.07.21 16:38 Сейчас в теме
ну очень тормознутый подход,
оптимальнее конечно работать с документом.объект

но вот пример для вашей задачи
как раз с работой с ДанныеФормыСтруктура
Прикрепленные файлы:
СозданиеДокументаЧерезФорму.epf
18. spacecraft 01.07.21 17:12 Сейчас в теме
Вот что получилось:
Добавляем в расширение форму документа. В ней создаем пару функций:
&НаКлиенте
Функция ПоместитьВоВременноеХранилищеФорму(УИН) Экспорт
	Возврат ПоместитьВоВременноеХранилищеФормуСервер(УИН);
КонецФункции

&НаСервере
Функция ПоместитьВоВременноеХранилищеФормуСервер(УИН) Экспорт
	СервернаяФорма = Объект;
	Возврат ПоместитьВоВременноеХранилище(Новый Структура("Форма",СервернаяФорма), УИН);
КонецФункции
Показать


В форме обработке так же пару методов:
&НаКлиенте
Процедура ПолучитьСервернуюФормуДокумента(Команда)
	Ключ = Новый Структура("Ключ", СсылкаНаДокумент);
	Форма = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", Ключ);
	Адрес = Форма.ПоместитьВоВременноеХранилищеФорму(УникальныйИдентификатор);
	ТестПолученияСервернойФормы(Адрес);
КонецПроцедуры

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

СсылкаНаДокумент и ИмяДокумента подставить свои значения.
19. spacecraft 01.07.21 17:23 Сейчас в теме
Хотя, если нужны ДанныеФормыСтруктура именно Форма.Объект, тогда можно просто так в обработке:
&НаКлиенте
Процедура ПолучитьДанныеФормыСтруктура(Команда)
	Ключ = Новый Структура("Ключ", СсылкаНаДокумент);
	Форма = ПолучитьФорму("Документ.ИмяДокумента.ФормаОбъекта", Ключ);
	ФормаОбъект = Форма.Объект;
	ТестОбъект(ФормаОбъект);
КонецПроцедуры

&НаСервере
Процедура ТестОбъект(ДанныеФормыОбъект)
	Сообщить(ТипЗнч(ДанныеФормыОбъект));
КонецПроцедуры
Показать
jan-pechka; Sergafan10; criptid; +3 Ответить
20. Sashares 35 01.07.21 17:24 Сейчас в теме
(19)Зачем такие извращения? В чем проблема в своей форме создать реквизит с типом ДокументОбъект?
21. spacecraft 01.07.21 17:35 Сейчас в теме
(20) можно и так. Большой разницы с кодом в (19) не будет. Реквизит тоже придется заполнять.
22. criptid 01.07.21 18:44 Сейчас в теме
(19) Вот так сделал, как теперь Записать?
&НаКлиенте
Процедура ЗаполнитьДанныеВТабЧасти()
	
	Для Каждого СтрокаДок Из РеализацииТоваров Цикл 
		Ключ = Новый Структура("Ключ", СтрокаДок.Документ);
		Форма = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", Ключ);
		ФормаОбъект = Форма.Объект;
		ЗаполнитьСтрокуТаб(ФормаОбъект);
	КонецЦикла;	
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСтрокуТаб(ФормаОбъект)
	
	Для Каждого СтрокаТовара Из ФормаОбъект.Товары Цикл 
		ТоварыНоменклатураПриИзменении(ФормаОбъект, СтрокаТовара);
	КонецЦикла;
	
КонецПроцедуры	


&НаСервере
Процедура ТоварыНоменклатураПриИзменении(ФормаОбъект, СтрокаТовара)
	
	ДанныеСтрокиТаблицы = Новый Структура(
		"Номенклатура, ЕдиницаИзмерения, Коэффициент, Количество, Цена, Сумма, 
		|СтавкаНДС, СуммаНДС, СчетУчетаНДСПоРеализации, НДСВидОперацииРеализации, СчетУчетаБУ, СчетУчетаНУ,
		|СтавкаАкциза, СуммаАкциза, АкцизВидОперацииРеализации, СчетУчетаАкцизаПоРеализации, КоэффициентАкциза,
		|СчетДоходовБУ, СубконтоДоходовБУ1, СубконтоДоходовБУ2, СубконтоДоходовБУ3,
		|СчетДоходовНУ, СубконтоДоходовНУ1, СубконтоДоходовНУ2, СубконтоДоходовНУ3, 
		|ВидСубконтоДоходовБУ1, ВидСубконтоДоходовБУ2, ВидСубконтоДоходовБУ3,
		|ВидСубконтоДоходовНУ1, ВидСубконтоДоходовНУ2, ВидСубконтоДоходовНУ3,
		|СубконтоДоходовБУ1Доступность, СубконтоДоходовБУ2Доступность, СубконтоДоходовБУ3Доступность,
		|СубконтоДоходовНУ1Доступность, СубконтоДоходовНУ2Доступность, СубконтоДоходовНУ3Доступность,
		|СчетСписанияСебестоимостиБУ, СубконтоСписанияСебестоимостиБУ1, СубконтоСписанияСебестоимостиБУ2, СубконтоСписанияСебестоимостиБУ3,
		|СчетСписанияСебестоимостиНУ, СубконтоСписанияСебестоимостиНУ1, СубконтоСписанияСебестоимостиНУ2, СубконтоСписанияСебестоимостиНУ3, 
		|ВидСубконтоСписанияСебестоимостиБУ1, ВидСубконтоСписанияСебестоимостиБУ2, ВидСубконтоСписанияСебестоимостиБУ3,
		|ВидСубконтоСписанияСебестоимостиНУ1, ВидСубконтоСписанияСебестоимостиНУ2, ВидСубконтоСписанияСебестоимостиНУ3,
		|СубконтоСписанияСебестоимостиБУ1Доступность, СубконтоСписанияСебестоимостиБУ2Доступность, СубконтоСписанияСебестоимостиБУ3Доступность,
		|СубконтоСписанияСебестоимостиНУ1Доступность, СубконтоСписанияСебестоимостиНУ2Доступность, СубконтоСписанияСебестоимостиНУ3Доступность"
		);
		
	ЗаполнитьЗначенияСвойств(ДанныеСтрокиТаблицы, СтрокаТовара);
	
	ДанныеОбъекта = Новый Структура(
		"Организация, СтруктурноеПодразделение, ВидОперации, Дата, Ссылка, ВидУчетаНУ, ТипЦен, 
		|УчитыватьКПН, УчитыватьНДС, УчитыватьАкциз, СуммаВключаетНДС, СуммаВключаетАкциз,  
		|ВалютаДокумента, КурсВзаиморасчетов, КратностьВзаиморасчетов, Склад, ДоговорКонтрагента");
	
	ЗаполнитьЗначенияСвойств(ДанныеОбъекта, ФормаОбъект);
		
	ПараметрыЗаполненияСчетовУчета = РеализацияТоваровУслугФормыКлиентСервер.НачатьЗаполнениеСчетовУчета(
	    "Товары.Номенклатура",
	    ФормаОбъект,
	 	СтрокаТовара,
		ДанныеОбъекта,
		ДанныеСтрокиТаблицы);
	
	ТоварыНоменклатураПриИзмененииНаСервере(ДанныеСтрокиТаблицы, ДанныеОбъекта, ПараметрыЗаполненияСчетовУчета.КЗаполнению);
	
	ЗаполнитьЗначенияСвойств(СтрокаТовара, ДанныеСтрокиТаблицы);
		
КонецПроцедуры
Показать
23. criptid 02.07.21 08:07 Сейчас в теме
(22)ДанныеФормыВЗначение()
24. MarkinaVA 17.12.21 13:55 Сейчас в теме
СчетаУчетаВДокументах.Заполнить(ДокОбъект, Новый Структура);
Оставьте свое сообщение

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