Как передать форму на сервер

1. Sergey_SP 26.07.16 10:17 Сейчас в теме
Добрый день.

На клиенте нужно создать документ и заполнить его.
Проблема в том что заполнением занимается серверная процедура в которую передается форма этого документа.

Т.е. с клиента вызываю серверную процедуру которая создает документ, далее если там же попытаться получить форму чтобы её передать в другую процедуру получаю ошибку "Интерактивные операции недоступны".
Пошел по другому пути, возвращаю с сервера ссылку на клиент, пытаюсь по ней ПолучитьФорму выходит ошибка "метод объекта не обнаружен".

Как правильно сделать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1496 26.07.16 10:19 Сейчас в теме
(1) Sergey_SP, создаешь документ, потом открываешь форму, методы открытия в УФ смотри в справке.
4. Sergey_SP 26.07.16 11:27 Сейчас в теме
(2) Xershi, мне не нужно открывать форму, создал документ, заполнил, записал и забыл.
Можно поподробнее что и где делать?

P.S. платформу да, обновил до 1933.
5. vadim1011985 101 26.07.16 11:33 Сейчас в теме
(4) Sergey_SP, а зачем Вам форма на сервере ? Работайте с объектом и передавайте Объект . Посмотрите как реализовано в типовых конфигурациях
8. Sergey_SP 26.07.16 11:49 Сейчас в теме
(5) vadim1011985, я с типовой и работаю... заполняю типовой документ. поэтому и не хочется лезть и менять типовой код.
6. sssss_aaaaa_2011 26.07.16 11:35 Сейчас в теме
(4) Sergey_SP,
заполнением занимается серверная процедура в которую передается форма
\Вот эту процедуру переделываешь на получение не формы, а ссылки на документ. Дальше элементарно.
7. Sergey_SP 26.07.16 11:44 Сейчас в теме
(6) sssss_aaaaa_2011, для начала вам нужно построить атомный реактор, а потом элементарно включаете вилку в розетку :-)

Ну а если без шуток, то процедура довольно сложная, вызывается из формы документа, переделать-то конечно можно всё, но хочется малой кровью...
Yury1001; Putinator; +2 Ответить
9. sssss_aaaaa_2011 26.07.16 12:00 Сейчас в теме
(7) Sergey_SP, и вы хотите сказать, что переданная форма используется в этой процедуре по всему ее тексту? Не верю. Наверняка в самом начала таки получается из формы ссылка на документ и заполняется таки документ, а не форма.
11. Sergey_SP 26.07.16 12:11 Сейчас в теме
(9) sssss_aaaaa_2011, типовая ЗУП 3.1, заполнение табеля.
Можно переделать, не спорю, можно, но блин - типовая, был бы мой кусок, не вопрос переделал бы.

Сейчас просто мне важно понять или я не правильно что-то делаю и не могу получить что мне надо, или же это принципиально не возможно и надо искать другое решение.
14. ЧерныйКот 26.07.16 12:44 Сейчас в теме
(11) Sergey_SP, (11) Sergey_SP, Создать форму на сервере принципиально невозможно.
передать данные формы на сервер - можно.
к примеру:
ЗаполнитьНаСервере(ЭтотОбъект);
15. dj_serega 392 26.07.16 13:47 Сейчас в теме
(11) Sergey_SP,
Сейчас просто мне важно понять или я не правильно что-то делаю и не могу получить что мне надо, или же это принципиально не возможно и надо искать другое решение.

Предлагаю найти соседнюю тему где этот вопрос решался (поиск делайте с начала прошлой недели).
3. tusv 212 26.07.16 10:37 Сейчас в теме
(1) Sergey_SP,
пытаюсь по ней ПолучитьФорму выходит ошибка

Тут на днях эска обновилась, Модуль НачалоРаботы, заменился на клиентский. Спасибо 1с за непередоваемые эмоции
Заполнить форму на сервере можно, открыть невозможно
10. alex-l19041 8 26.07.16 12:08 Сейчас в теме
(1) Sergey_SP, "заполнением занимается серверная процедура в которую передается форма этого документа. " скопируйте кусок кода, где это происходит
16. RocKeR_13 1338 26.07.16 16:12 Сейчас в теме
(1) Sergey_SP,
серверная процедура в которую передается форма этого документа

Что еще за ересь?) Сервер не работает с формами. Вас сразу необходимо отослать к учебнику тов.Радченко "Пособие для разработчиков", ибо вы совсем не понимаете, что такое клиент, что такое сервер и с чем они оперируют. Основной механизм: собрать данные для заполнения (например, в структуру), поместить во временное хранилище, на сервере получить структуру из временного хранилища и уже там заполняйте, что хотите по данным структуры
17. ЧерныйКот 26.07.16 16:18 Сейчас в теме
(16) RocKeR_13, зачем человека путаете?
всё, что можно сериализовать платформа прекрасно передает между клиентом и сервером.
сама форма не может быть создана или открыта или передана на сервер. а вот её данные - могут передаваться (если конечно не содержат несериализуемых значений).
m-serg74; +1 Ответить
19. RocKeR_13 1338 26.07.16 16:27 Сейчас в теме
(17) ЧерныйКот, в названии темы черным по белому стоит вопрос "Как передать форму на сервер".
18. spacecraft 26.07.16 16:24 Сейчас в теме
(16) RocKeR_13, контекст формы бывает не только клиентский, но и серверный. Форма изначально создается на сервере, сериализуется и передается на клиент. Равно как и обратный процесс при сервером вызове.
Вот как раз серверный контекст формы можно передавать и обрабатывать на сервере. Большинство последних типовых так и делает.
Не помню, есть ли это у Радченко. Давно его читал. Но должно быть.
Но не в том виде и не так как хочет ТС.
22. RocKeR_13 1338 26.07.16 17:08 Сейчас в теме
(18) spacecraft, ДанныеФормыКоллекция вроде не сериализуется и во временное хранилище все равно не удастся их поместить. Основную работу с формой все же клиент выполняет, сервер только заполняет данные формы из объектов и наоборот, если необходима запись. А данные при необходимости через ВХ обычно передают
23. spacecraft 26.07.16 17:34 Сейчас в теме
(22) RocKeR_13, не знаю причем тут ДанныеФормыКоллекция... я про нее ни слова не говорил. Но да ладно.
Если она не сериализуется, то как попадает с сервера на клиент и обратно? Или это на клиенте происходит обработка табличных частей?
Сериализуется она конечно.
Основную работу с формой выполняет таки сервер. Именно на сервере форма создается, заполняется и передается на клиента. Часть операций с формой не доступна на клиенте, или не оптимальна.
Как и недоступна часть операций с формой на сервере. Это в основном интерактивные действия.
Главное понимать, что бывает два вида контекста формы. Серверный и клиентский. И уметь с ними работать и применять по назначению.
И посмотрите код последних типовых. Таких как БП3, Розница2, УТ11.
Большая часть работы с данными на форме происходит в общих модулях.
Риник; zoikins; +2 Ответить
24. RocKeR_13 1338 26.07.16 18:03 Сейчас в теме
(23) spacecraft, опять-таки, на сервере ведется обработка данных, а интерактивная работа ведется на клиенте. Собственно, смысл формы и есть в ее интерактивности. Может я криво просто мысль доношу) З.Ы. попробовал ДанныеФормыКоллекция в ВХ засунуть - хрен там) А общие модули-то не смотрели, какие?) Обычно клиентские, которые при необходимости вызывают серверные модули
25. ЧерныйКот 26.07.16 18:19 Сейчас в теме
(24) RocKeR_13, кажется вам нужно перечитать упомянутую книгу Радченко.
ЗЫ, Очень стыдно, но я её не читал.Знания и опыт быстрее приходят на практике.
26. spacecraft 26.07.16 18:56 Сейчас в теме
(24) RocKeR_13, ВХ не показатель. Там много ограничений. Да и принцып другой при передачи формы.
По поводу модулей...
Самый часто используемый прием, это вызов серверных общих модулей из обработчика формы ПриСозданииНаСервере.
Но и просто в не стандартных обработчиках вызываются именно серверные модули.
Чтоб не быть голословным, специально открыл бемо базу Розница 2.
Открываем первый попавшийся документ. К примеру "ЗаказПоставщику". Смотрим модуль формы документа. Там полно таких вызовов. Вот один из них:
&НаСервере
Функция ПолученМагнитныйКод(МагнитныйКод) Экспорт 
	
	СтруктураРезультат = ПодключаемоеОборудованиеРТВызовСервера.ПолученМагнитныйКод(МагнитныйКод, ЭтотОбъект);

Надеюсь не надо объяснять, что такое ЭтотОбъект в контексте модуля формы УФ?
Риник; +1 Ответить
27. RocKeR_13 1338 27.07.16 11:58 Сейчас в теме
(26) spacecraft, каюсь, бесом был видимо одержим. Сейчас перечитал все написанное выше - стыдно стало...(
(1) Собственно, по теме: вы когда создали документ, зачем пытаетесь передать его форму? Передавайте ссылку на документ, тем более вы на клиент не возвращаетесь
31. Риник 13 15.02.23 15:09 Сейчас в теме
(16)
Сервер не работает с формами

Вообще-то форма создается сперва на сервере, только потом на клиенте
12. kojinandrej 59 26.07.16 12:13 Сейчас в теме
А заполняешь реквизиты которые на форме? или в объекте?
13. kojinandrej 59 26.07.16 12:15 Сейчас в теме
Если объект тогда заполняй себе спокойно на сервере без получения формы
20. sssss_aaaaa_2011 26.07.16 16:37 Сейчас в теме
Хм, похоже ТС таки обнаружил различие смыслов переменной ЭтотОбъект в модулях формы и объекта и просто не хочет нам в этом признаваться. Судя по его отсутствию он таки понял, что в серверную процедуру передается таки не форма. :)
21. ЧерныйКот 26.07.16 16:47 Сейчас в теме
(20) sssss_aaaaa_2011, ))) да, похоже на то
28. Sergey_SP 27.07.16 17:42 Сейчас в теме
В общем касаемо моей задачи. Вижу тут много без меня копий поломали :)

Я приводил конкретный документ который мне необходимо заполнять, приводил название типовой конфигурации, если на самом деле кому интересен код можете глянуть, его не так уж и много... не моя как говорится идея делать такое заполнение документа, пользуюсь тем что есть.

Вот как выглядит вызов из формы документа УчетРабочегоВремениРасширенныйФормы.ТабельЗаполнитьСотрудникамиОрганизации(ЭтаФорма);
ну и далее в общем модуле ТабельЗаполнитьСтрокиПоСотруднику()

На самом деле можно изменить часть процедур(ы), по тексту видно что через форму идет обращение непосредственно к объекту (Форма.Объект), но есть и обращение к реквизитам формы, которых нет у объекта...

Резюме. Писать новую свою процедуру заполнения (с выкидыванием заполнения реквизитов формы) на основании типовой я посчитал нецелесообразным, поэтому решение задачи в таком виде прекратил.
30. SiAl 76 27.06.18 20:20 Сейчас в теме
(28) Коллега, получилось найти решение? Тоже сейчас бьюсь над дополнительной обработкой заполнения документа. Надо как-то обновить элементы формы, которые обновляются в процедуре серверного общего модуля.
29. rommilk 3 24.08.17 14:16 Сейчас в теме
Открываешь сессию тонкого или толстого клиента через OLE и через него уже можно работать с формами. Как это сделать написано здесь http://infostart.ru/public/403150/
SurovcevD; +1 Ответить
32. lostcay 9 24.10.23 04:14 Сейчас в теме
Долго мучался, как сделать не переписывая половину ЗУП`а.
В общем задача была создать автоматом кадровые переводы, грубо говоря по нажатию 1 кнопки.

1. Мы хотим заполнить документ так, как он заполняется при изменении сотрудника. Ищем нужную нам типовую процедуру в которой происходит необходимая магия. В моем примере нужна "Процедура СотрудникПриИзмененииНаСервере()"
2. Двигаемся дальше. В расширении создаем экспорную процедуру "мое_ПерезаполнитьДанныеДокумента()", которая в свою очередь вызывает "СотрудникПриИзмененииНаСервере"
3. Создаем документы просто через СоздатьДокумент(), заполняем сотрудника, организацию, дату и записываем. Возвращаем ссылку на клиент.
4. Берем эту ссылку и в нашей обработке создания документов, в клиентской процедуре пишем:
	Парам=Новый Структура("Ключ",Ссылка);
	ДокФорма=ПолучитьФорму("Документ.КадровыйПеревод.Форма.ФормаДокумента",Парам);
	
	ДокФорма.мое_ПерезаполнитьДанныеДокумента();
	
	ДокФорма.Записать();

5. Готово. Дальше можно опять получить объект и дозаполнить чем хотим.

Странно что до этого никто не додумался. Или я плохо искал..
33. lostcay 9 24.10.23 04:21 Сейчас в теме
(32) P.S. работает невероятно долго
34. Raskad 10 24.10.23 11:54 Сейчас в теме
(32)
и записываем

А зачем вот эта предварительная запись для получения ссылки? Поэтому и работает долго. Нельзя просто:
ЗначенияДляЗаполнения = Новый Структура;
ЗначенияДляЗаполнения.Вставить("Организация", Организация);
		
ФормаДокумента = ПолучитьФорму("Документ.КадровыйПеревод.Форма.ФормаДокумента");
ЗаполнитьЗначенияСвойств(ФормаДокумента.Объект, ЗначенияДляЗаполнения);
ФормаДокумента.Записать();
35. lostcay 9 24.10.23 13:42 Сейчас в теме
(34) Ну вообще да, хорошая мысль. Тогда вообще данные для заполнения можно формировать на сервере, а заполнять уже на клиенте прям в форму. И получается не нужно записывать один и тот же документ три раза)
36. VmvLer 24.10.23 14:14 Сейчас в теме
в типовых часто в форму добавляют реквизиты объекта формы, табличные части и колонки в табличные части, которых нет в объекте конфигурации. Потом эти данные обрабатываются в серверном методе. Передать это "добро" с клиента на сервер часто бывает проблематично.
Оставьте свое сообщение

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