Имя: Пароль:
1C
1С v8
ПолучитьМакет внешней обработки НаСервереБезКонтекста - есть варианты?
0 camojiet
 
05.09.16
07:36
По идее должна работать схема:

&НаКлиенте
Процедура ОбновитьДиаграмму(Команда)
    ОбновитьТД(ДиаграммаПогруженных,Объект);
КонецПроцедуры

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

Но ругается на Тип.

При этом

&НаСервере
Процедура ОбновитьТД(ТабДок,Знач Объект) // Тут пришлось вставить знач, только для подтверждения эксперемента
    Обработка  = ДанныеФормыВЗначение(Объект,Тип("ВнешняяОбработкаОбъект.РабочийСтолСборники"));
КонецПроцедуры // ОбновитьТабДок()

Объект получен без проблем.

Далее выясняется что ТипЗнч(РеквизитФормыВЗначение("Объект")) и Тип("ВнешняяОбработкаОбъект.РабочийСтолСборники") возвращают одно и то же, но не они не равны друг другу. :s

http://screencast.com/t/fQIakGuGeg

Проблема не критичная, но приходится часто разрабатывать внешние обработки, и приходится каждый раз когда мне надо обновить содержимое табличного документа гонять контекст на сервер и обратно. В интернете шукал - не нашёл подходящей методы. Сам не допёр. Может есть метода какая?
1 zak555
 
05.09.16
07:38
Объект -- реквизит формы => нужен контекст
2 camojiet
 
05.09.16
07:55
Придумал дегродный, но рабочий вариант.


&НаСервере

ТипОбработки = ЗначениеВСтрокуВнутр(ТипЗнч(РеквизитФормыВЗначение("Объект"))); // Это реквизит формы "Строка" бесконечной длины

КонецПроцедуры

Ну а дальше

&НаКлиенте
Процедура ОбновитьДиаграмму(Команда)
    ОбновитьТД(ДиаграммаПогруженных,Объект,ТипОбработки);
КонецПроцедуры

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

И усё работает. Может кто-то предложит лучше?
3 camojiet
 
05.09.16
07:57
Неправильно скопировал.
ТипОбработки  заполняется ПриСозданииНаСервере.

Короче тупо - но работает. Контекст не нужен.
4 DrZombi
 
гуру
05.09.16
08:53
(2) Отстой...
Проще вообще в твою функцию передать макет :)

Код же работает на сервере :)
5 DrZombi
 
гуру
05.09.16
08:53
(3) Да что ты там к типу привязалси? :)
6 DrZombi
 
гуру
05.09.16
09:25
(3) Спасибо... не ожидал, что не так просто передать тип :)
7 camojiet
 
05.09.16
09:35
(4) Вы имеете в виду ЗначениеВСтрокуВнутр(РеквизитФормыВЗначение("Объект").ПолучитьМакет()); ?
Ну наверное так тоже можно :)
8 DrZombi
 
гуру
05.09.16
09:39
(7) Не обращай на это. Это было еще до того, как я попробовал :)
9 DrZombi
 
гуру
05.09.16
09:43
+(8)  Можно в качестве реквизита формы вообще указать ТабличныйДокумент.

Любопытно, только как это все скажется на объеме данных? :)
10 camojiet
 
05.09.16
09:43
Смех смехом а не ясно ещё, что меньше по объёму - передавать на сервер ДанныеФормы "Объект", или сразу Макет. Если макет небольшой (в моём случае он микроскопический), то скорее всего макет будет меньше. Не буду врать - не знаю что конкретно передается на сервер в виде ДанныхФормы.
11 DrZombi
 
гуру
05.09.16
09:43
+ Передаваемых от Клиента на сервер.
12 DrZombi
 
гуру
05.09.16
09:44
(10) 1С и правду, как то не дали механизм получения Типов без контекста :(

Ведь по ИД этот тип есть, просто мы о нем не знаем :)
13 camojiet
 
05.09.16
10:06
Короче сделал через макет. Так как получается, что передавая на сервер данные формы "Объект" я передаю весь объект, в том числе и макет. Зачем передавать всё, если можно передать только макет.
Ну и не имеет смысла передавать ТабДок на сервер, так как он всё равно там первым делом у меня очищается. Сделаю функцией и передам табдок через возврат.