На клиенте нужно создать документ и заполнить его.
Проблема в том что заполнением занимается серверная процедура в которую передается форма этого документа.
Т.е. с клиента вызываю серверную процедуру которая создает документ, далее если там же попытаться получить форму чтобы её передать в другую процедуру получаю ошибку "Интерактивные операции недоступны".
Пошел по другому пути, возвращаю с сервера ссылку на клиент, пытаюсь по ней ПолучитьФорму выходит ошибка "метод объекта не обнаружен".
(7) Sergey_SP, и вы хотите сказать, что переданная форма используется в этой процедуре по всему ее тексту? Не верю. Наверняка в самом начала таки получается из формы ссылка на документ и заполняется таки документ, а не форма.
(9) sssss_aaaaa_2011, типовая ЗУП 3.1, заполнение табеля.
Можно переделать, не спорю, можно, но блин - типовая, был бы мой кусок, не вопрос переделал бы.
Сейчас просто мне важно понять или я не правильно что-то делаю и не могу получить что мне надо, или же это принципиально не возможно и надо искать другое решение.
(11) Sergey_SP, (11) Sergey_SP, Создать форму на сервере принципиально невозможно.
передать данные формы на сервер - можно.
к примеру:
ЗаполнитьНаСервере(ЭтотОбъект);
Сейчас просто мне важно понять или я не правильно что-то делаю и не могу получить что мне надо, или же это принципиально не возможно и надо искать другое решение.
Предлагаю найти соседнюю тему где этот вопрос решался (поиск делайте с начала прошлой недели).
Тут на днях эска обновилась, Модуль НачалоРаботы, заменился на клиентский. Спасибо 1с за непередоваемые эмоции
Заполнить форму на сервере можно, открыть невозможно
серверная процедура в которую передается форма этого документа
Что еще за ересь?) Сервер не работает с формами. Вас сразу необходимо отослать к учебнику тов.Радченко "Пособие для разработчиков", ибо вы совсем не понимаете, что такое клиент, что такое сервер и с чем они оперируют. Основной механизм: собрать данные для заполнения (например, в структуру), поместить во временное хранилище, на сервере получить структуру из временного хранилища и уже там заполняйте, что хотите по данным структуры
(16) RocKeR_13, зачем человека путаете?
всё, что можно сериализовать платформа прекрасно передает между клиентом и сервером.
сама форма не может быть создана или открыта или передана на сервер. а вот её данные - могут передаваться (если конечно не содержат несериализуемых значений).
(16) RocKeR_13, контекст формы бывает не только клиентский, но и серверный. Форма изначально создается на сервере, сериализуется и передается на клиент. Равно как и обратный процесс при сервером вызове.
Вот как раз серверный контекст формы можно передавать и обрабатывать на сервере. Большинство последних типовых так и делает.
Не помню, есть ли это у Радченко. Давно его читал. Но должно быть.
Но не в том виде и не так как хочет ТС.
(18) spacecraft, ДанныеФормыКоллекция вроде не сериализуется и во временное хранилище все равно не удастся их поместить. Основную работу с формой все же клиент выполняет, сервер только заполняет данные формы из объектов и наоборот, если необходима запись. А данные при необходимости через ВХ обычно передают
(22) RocKeR_13, не знаю причем тут ДанныеФормыКоллекция... я про нее ни слова не говорил. Но да ладно.
Если она не сериализуется, то как попадает с сервера на клиент и обратно? Или это на клиенте происходит обработка табличных частей?
Сериализуется она конечно.
Основную работу с формой выполняет таки сервер. Именно на сервере форма создается, заполняется и передается на клиента. Часть операций с формой не доступна на клиенте, или не оптимальна.
Как и недоступна часть операций с формой на сервере. Это в основном интерактивные действия.
Главное понимать, что бывает два вида контекста формы. Серверный и клиентский. И уметь с ними работать и применять по назначению.
И посмотрите код последних типовых. Таких как БП3, Розница2, УТ11.
Большая часть работы с данными на форме происходит в общих модулях.
(23) spacecraft, опять-таки, на сервере ведется обработка данных, а интерактивная работа ведется на клиенте. Собственно, смысл формы и есть в ее интерактивности. Может я криво просто мысль доношу) З.Ы. попробовал ДанныеФормыКоллекция в ВХ засунуть - хрен там) А общие модули-то не смотрели, какие?) Обычно клиентские, которые при необходимости вызывают серверные модули
(24) RocKeR_13, ВХ не показатель. Там много ограничений. Да и принцып другой при передачи формы.
По поводу модулей...
Самый часто используемый прием, это вызов серверных общих модулей из обработчика формы ПриСозданииНаСервере.
Но и просто в не стандартных обработчиках вызываются именно серверные модули.
Чтоб не быть голословным, специально открыл бемо базу Розница 2.
Открываем первый попавшийся документ. К примеру "ЗаказПоставщику". Смотрим модуль формы документа. Там полно таких вызовов. Вот один из них:
&НаСервере
Функция ПолученМагнитныйКод(МагнитныйКод) Экспорт
СтруктураРезультат = ПодключаемоеОборудованиеРТВызовСервера.ПолученМагнитныйКод(МагнитныйКод, ЭтотОбъект);
Надеюсь не надо объяснять, что такое ЭтотОбъект в контексте модуля формы УФ?
(26) spacecraft, каюсь, бесом был видимо одержим. Сейчас перечитал все написанное выше - стыдно стало...(
(1) Собственно, по теме: вы когда создали документ, зачем пытаетесь передать его форму? Передавайте ссылку на документ, тем более вы на клиент не возвращаетесь
Хм, похоже ТС таки обнаружил различие смыслов переменной ЭтотОбъект в модулях формы и объекта и просто не хочет нам в этом признаваться. Судя по его отсутствию он таки понял, что в серверную процедуру передается таки не форма. :)
В общем касаемо моей задачи. Вижу тут много без меня копий поломали :)
Я приводил конкретный документ который мне необходимо заполнять, приводил название типовой конфигурации, если на самом деле кому интересен код можете глянуть, его не так уж и много... не моя как говорится идея делать такое заполнение документа, пользуюсь тем что есть.
Вот как выглядит вызов из формы документа УчетРабочегоВремениРасширенныйФормы.ТабельЗаполнитьСотрудникамиОрганизации(ЭтаФорма);
ну и далее в общем модуле ТабельЗаполнитьСтрокиПоСотруднику()
На самом деле можно изменить часть процедур(ы), по тексту видно что через форму идет обращение непосредственно к объекту (Форма.Объект), но есть и обращение к реквизитам формы, которых нет у объекта...
Резюме. Писать новую свою процедуру заполнения (с выкидыванием заполнения реквизитов формы) на основании типовой я посчитал нецелесообразным, поэтому решение задачи в таком виде прекратил.
(28) Коллега, получилось найти решение? Тоже сейчас бьюсь над дополнительной обработкой заполнения документа. Надо как-то обновить элементы формы, которые обновляются в процедуре серверного общего модуля.
Открываешь сессию тонкого или толстого клиента через OLE и через него уже можно работать с формами. Как это сделать написано здесь http://infostart.ru/public/403150/
Долго мучался, как сделать не переписывая половину ЗУП`а.
В общем задача была создать автоматом кадровые переводы, грубо говоря по нажатию 1 кнопки.
1. Мы хотим заполнить документ так, как он заполняется при изменении сотрудника. Ищем нужную нам типовую процедуру в которой происходит необходимая магия. В моем примере нужна "Процедура СотрудникПриИзмененииНаСервере()"
2. Двигаемся дальше. В расширении создаем экспорную процедуру "мое_ПерезаполнитьДанныеДокумента()", которая в свою очередь вызывает "СотрудникПриИзмененииНаСервере"
3. Создаем документы просто через СоздатьДокумент(), заполняем сотрудника, организацию, дату и записываем. Возвращаем ссылку на клиент.
4. Берем эту ссылку и в нашей обработке создания документов, в клиентской процедуре пишем:
(34) Ну вообще да, хорошая мысль. Тогда вообще данные для заполнения можно формировать на сервере, а заполнять уже на клиенте прям в форму. И получается не нужно записывать один и тот же документ три раза)
(32)
Сейчас столкнулся с подобной вещью ,с тем же модулями и процедурами.
Работал с документом табель,Что бы обойти все это дело,сделал так:
Кнопку заполнить над таб частью,
Открывающая обработку,обработка получала данные и писал в тз,далее при закрытии,передавал в хранилище тз,
И получал из хранилища уже на форме владельца.
И там уже на сервере получал тз и заполнял таб часть опять же на сервере.
Так как все общие модули серверные(без проблем передал форму в них).
В ходе заполнения,программно менял текущие данные таблицы,так как общие модули их получали в некоторых процедурах.
Ну и процедуры 2-3 пришлось копирнуть в модуль формы и переделать,изменить пару строк буквально,сами процедуры небольшие по 15 строк кода были.
в типовых часто в форму добавляют реквизиты объекта формы, табличные части и колонки в табличные части, которых нет в объекте конфигурации. Потом эти данные обрабатываются в серверном методе. Передать это "добро" с клиента на сервер часто бывает проблематично.