|
Вопрос по управляемой форме как передать из клиента на сервер | ☑ | ||
---|---|---|---|---|
0
svv1979
15.08.14
✎
10:25
|
1с 8.3 ут 11.1
Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1); Форму получает при передаче Пишет ошибку {Форма.Форма.Форма(409)}: Ошибка при вызове метода контекста (ЗаполнитьОбеспечениеВУстановленномПорядке) Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'УправляемаяФорма' Как я понял Основная проблема в том что я передаю Управляемую Форму на Сервер &НаСервере Функция ЗаполнитьОбеспечениеВУстановленномПорядке(ПорядокОбеспечения,ЗаказОбъект1,Форма1) ЗаказОбъект = ЗаказОбъект1.ПолучитьОбъект(); ЭтаФорма1 = Форма1; ДанныеДляОбеспечения = Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения(ЗаказОбъект, ЭтаФорма1, "СтрокиТовары"); ТаблицаОбеспечения = ОбеспечениеСервер.ТаблицаОбеспечения(ДанныеДляОбеспечения, ПорядокОбеспечения); ТекстОповещения = Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения( Объект, ЭтаФорма1, "СтрокиТовары", ТаблицаОбеспечения, ЗаказОбъект.ПараметрыУказанияСерий, ЗависимыеРеквизиты()); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма1); СтруктураИтогов = Новый Структура("РазличныеСклады, ЕстьИзЗаказов"); ОбойтиТаблицуОбновитьЗависимыеРеквизиты(СтруктураИтогов,ЭтаФорма1); Возврат Новый Структура("Ошибки, Оповещение", ДанныеДляОбеспечения.Ошибки, ТекстОповещения); КонецФункции Что посоветуете как можно обойти или другой вариант реализации передачи формы? Или как можно обратиться к форме например по УникальномуИндефикатору? Если можно напишите с командами заранее БЛАГОДАРЕН |
|||
1
toypaul
гуру
15.08.14
✎
10:41
|
не понятно что откуда вызывается
|
|||
2
H A D G E H O G s
15.08.14
✎
10:41
|
(0) Не передавать форму на сервер.
|
|||
3
Garykom
гуру
15.08.14
✎
10:44
|
(0) НЕ НАДО передавать УФ на сервер
Блин УФ это примерно как веб-страницы, т.е. есть запрос от клиента с данными (только простые типы, которые сериализуются легко) в ответ на запрос сервер возвращает результат (тоже только простые типы, которые сериализуются легко) и все Клиент и сервер это 2 в одном флаконе в исполнении 1С, не важно что оно на одном компе к примеру работает, всегда лучше считать что оно раздельно пашет и сервер это там далеко куда надо отправлять данные и получать а не передавать млин формы на сервер Если надо передать форму то нужно использовать специальные механизмы придуманные на этот случай (ЗначениеВРеквизитФормы и РеквизитФормыВЗначение) но лучше просто передать данные из формы а не всю форму... |
|||
4
toypaul
гуру
15.08.14
✎
10:44
|
помнится аналогичный геморой был, когда надо было создать новый документ в обработке и чтобы отработали все процедуры из формы.
по-моему передавал не форму, а структуру с минимальным набором реквизитов |
|||
5
StaticUnsafe
15.08.14
✎
10:45
|
зачем передавать на сервер форму когда у нее есть контекст и можно просто передать управление на сервер с контекстом формы
|
|||
6
toypaul
гуру
15.08.14
✎
10:47
|
разработчики УТ 11 тупо не задумывались, что документы нужно будет программно создавать, а не только интерактивно. и нужный функционал для программного заполнения не предусмотрели.
|
|||
7
toypaul
гуру
15.08.14
✎
10:48
|
все прям такие умные "для чего передавать форму на сервер". для чего тогда в ТИПОВОЙ вот этот код
Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения(ЗаказОбъект, ЭтаФорма1, "СтрокиТовары")? |
|||
8
H A D G E H O G s
15.08.14
✎
10:53
|
(7) Ставлю дайм, что там ЭтаФорма1 - это кусок серверного контекста формы.
|
|||
9
H A D G E H O G s
15.08.14
✎
10:55
|
Ну, собственно, вот:
&НаСервере Функция ПодготовитьДанныеДляОбеспеченияЗаказа() Возврат Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения(Объект, ЭтаФорма, "Заказ"); КонецФункции Плохо, Павел, плохо. |
|||
10
toypaul
гуру
15.08.14
✎
10:58
|
(9) але, гараж. может для кого-то "кусок серверного контекста формы" это не форма. для меня эта форма. и метод этот написан тупо. потому что предусматривает только интерактивную работу. никак больше ты этот "кусок" в этот вызов по-другому (без извращений) не передашь.
|
|||
11
H A D G E H O G s
15.08.14
✎
11:01
|
(10) Ты формалист.
Возьми да перепиши. |
|||
12
hhhh
15.08.14
✎
11:03
|
(10) ну вообще-то здесь передается с сервера на клиент. А мы другой вопрос обсуждаем: с клиента на сервер.
|
|||
13
toypaul
гуру
15.08.14
✎
11:05
|
(11) а я не знаю как назвать людей, которые не пытаясь понять суть задачи, начинают давать бестолковые советы.
(12) чего? с какого сервера на клиент? |
|||
14
H A D G E H O G s
15.08.14
✎
11:09
|
(13) Ты опять, опять ошибаешься.
Я прекрасно понял суть задачи, а также ее неверность. Я даже знаю обходной костыль ее решения, но сама суть передачи формы ошибочна. Да, 1С написали "некрасиво", забив болт на пейсателей, но по сравнению с болтом на посерийный учет вне ордерных складов (к примеру) - это мелочи, и такие светочи, как ты прекрасно допишут процедурку Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения() И возьмут по пяток часов с несчастных клиентов. С каждого. |
|||
15
svv1979
15.08.14
✎
12:27
|
Всем огромное спасибо за участие
Может тогда можно обратиться к Форме в МодулеМенеджера документа Чтобы по минимуму дописывать эту процедуру Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения() Вообще-то хотелось ее вообще не изменять |
|||
16
toypaul
гуру
15.08.14
✎
12:30
|
(15) я же писал - анализируй процедуру и передавай не форму, а структуру с нужными реквизитами.
|
|||
17
svv1979
15.08.14
✎
12:35
|
http://1c.mista.ru/users.php?id=2399
Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения(ЗаказОбъект, ЭтаФорма1, "СтрокиТовары")? ЭтаФорма1 = ЭтоФорма Процедуры взяты из модуля Формы документа |
|||
18
svv1979
15.08.14
✎
12:39
|
Как я писал все обрабатывается во внешней обработке
Поэтому поменял ЭтаФорма на ЭтаФорма1 что бы обращение шло к форме документа Как можно полностью выгрузить все реквизиты формы в структуру 8 недавно начал осваивать так что извините если что не так пишу |
|||
19
hhhh
15.08.14
✎
12:54
|
(180 а точно все нужны? Может два -три реквизита?
|
|||
20
svv1979
15.08.14
✎
13:23
|
(19) Суть проблемы в чем что в процедуре
Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения() Идет обращение к двум реквизитам ДанныеДляОбеспечения.ТолькоПросмотр = Форма.ТолькоПросмотр; УникальныйИдентификатор = Форма.УникальныйИдентификатор; А Форма в данном случае открытая форма документа Сделали бы в 1С получил Управляемую форму и двигай ее куда хочешь |
|||
21
svv1979
15.08.14
✎
13:26
|
Еще хочется же вносить минимум изменений в конфигуратор
Да и УникальныйИдентификатор и ТолькоПросмотр можно получить при открытой форме так как они не реквизиты объекта Остальные данные объекта передать не проблема |
|||
22
svv1979
15.08.14
✎
13:29
|
Чувствую придется перетаскивать процедуру
Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения() в обработку |
|||
23
svv1979
25.08.14
✎
15:45
|
Перешел в форму объекта
Сделал в форме экспортную процедуру и от нее отталкивался Форма.МояПроцедура() По другому неполучилось |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |