Имя: Пароль:
1C
1С v8
Вопрос по управляемой форме как передать из клиента на сервер
,
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
Перешел в форму объекта
Сделал в форме экспортную процедуру и от нее отталкивался
Форма.МояПроцедура()
По другому неполучилось
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой