Имя: Пароль:
1C
1С v8
Объект в управляемой форме
0 alexei366
 
16.09.13
14:31
Есть форма документа, на ней есть кнопка, которая считает всякую фигню из текущих данных объекта.
Типа для ускорения работы к функции подсчета применил &НаСервереБезКонтекста и в параметр передаю ОбъектФормы. Ну естественно выдает ошибку "Нельзя изменять поле, содержащее объект данных формы".

Вопрос такой возможно ли оставить директиву  &НаСервереБезКонтекста  и не перекопирыровать необходимые данные из Объекта в некую структуру для передачи данных в функцию?

(Пытался даж при выходе из функции приравнивать Объект к НЕОПРЕДЕЛЕННО, приравнивает но ошибка остается, версия платформы 8.3.3)
1 Нуф-Нуф
 
16.09.13
14:33
нафига юзать без контекста и все равно пытать передать форму?
2 alexei366
 
16.09.13
14:37
(1) Не согласен, яж не форму в итоге передать хочу, я имею ввиду мне нафиг не нужна форма с её элементами (типа поля, группы, таблицы, надписи , картинки и т.д)
3 banco
 
16.09.13
14:39
(2) код покажи, явно что то не так делаешь
4 Infsams654
 
16.09.13
14:41
(1) + 100500 - "и в параметр передаю ОбъектФормы"
(2) в"сякую фигню из текущих данных объекта" и надо передавать. "не перекопирыровать необходимые данные из Объекта в некую структуру для передачи данных в функцию" - а как думаешь, на сервер данные каким образом передаются ?
5 Defender aka LINN
 
16.09.13
14:41
(2) Объект - неотъемлимая часть формы
6 Нуф-Нуф
 
16.09.13
14:42
покажи код, будь мужиком, блеать!
7 alexei366
 
16.09.13
14:43
(3) (6) Держите

&НаКлиенте
Процедура Пересчитать(Команда)
    
    Перем ОписаниеОшибки,СтруктураИтоговая;
    
    РеквизитФормыВЗначение
    
    Если Пересчитать_СБ(Объект,СтруктураИтоговая,ОписаниеОшибки) = Ложь Тогда
        Сообщить(ОписаниеОшибки);
    КонецЕсли;
    
    МойРеквизит1 = СтруктураИтоговая.МойРеквизит1;
    МойРеквизит2 = СтруктураИтоговая.МойРеквизит2;

    ЭтаФорма.Модифицированность = Истина;
    
КонецПроцедуры



&НаСервереБезКонтекста
Функция Пересчитать_СБ(Объект,СтруктураИтоговая,ОписаниеОшибки)
              
    Возврат Документы.МойДокумент.ПолучитьСтруктуруИтоговою(Объект,СтруктураИтоговая,ОписаниеОшибки);

    
КонецФункции
8 alexei366
 
16.09.13
14:44
После Сообщить(ОписаниеОшибки); идет Возврат; если что)) (7)
9 alexei366
 
16.09.13
14:45
(7) И РеквизитФормыВЗначение не надо
10 Нуф-Нуф
 
16.09.13
14:45
ну и? в объекте у тебя что сидит? зачем ты его передаешь на сервер?
11 alexei366
 
16.09.13
14:46
(10) В объекте сидит ОбъектФормы (т.е данные документа), а на сервер передаю чтобы выполнить несколько запросов по этим данным для подсчета всякой фигни
12 Infsams654
 
16.09.13
14:47
(7) Это че такое
Перем ОписаниеОшибки,СтруктураИтоговая;
    
    РеквизитФормыВЗначение

?

Синтаксис:

РеквизитФормыВЗначение(<ИмяРеквизита>, <Тип>)

Вообщето, РеквизитФормыВЗначение нужно, для того, чтоб к методам объекта обратится, данные итак уже есть
13 alexei366
 
16.09.13
14:47
(4) Думаю данные сериализуются, ты что предлагаешь лучше скажи? Я как понимаю как в сях нельзя же указать перед параметром функции директиву "in".
14 alexei366
 
16.09.13
14:48
(12) читай (9)
15 Нуф-Нуф
 
16.09.13
14:48
Если Пересчитать_СБ(Объект.ССЫЛКА,СтруктураИтоговая,ОписаниеОшибки) = Ложь Тогда
        Сообщить(ОписаниеОшибки);
    КонецЕсли;
16 alexei366
 
16.09.13
14:52
(15) Я в начале написал что мне нужны текущие данные, а не ссылка
17 alexei366
 
16.09.13
14:52
Ну чо чуваки я решил проблемму, кто хочет знать?
18 Нуф-Нуф
 
16.09.13
14:53
(16) а как ты собираешься выполнять запросы к текущим данным?
19 Нуф-Нуф
 
16.09.13
14:53
(17) давай, удивляй
20 Defender aka LINN
 
16.09.13
14:54
(16) Тогда делай контекстный вызов и не тилипи нам моск
21 Лефмихалыч
 
модератор
16.09.13
14:55
(7) не будет твоя "Пересчитать_СБ" без контекста работать в таком виде
22 Euguln
 
16.09.13
14:56
(0) А чо не сделать как в типовых, передать саму форму?
23 alexei366
 
16.09.13
14:56
(18) В данных объекта есть ссылки и простые типы, на их основе я делаю запросы к другим таблицам (объектам).
24 yukon
 
16.09.13
14:59
(0) Передай по значению:

Функция Пересчитать_СБ(Знач Объект
25 alexei366
 
16.09.13
15:00
(24) Во во, так и сделанно уже , вот решение))
26 scanduta
 
16.09.13
15:04
(23) что за изврат ..показывай код
27 scanduta
 
16.09.13
15:04
народ требует зрелищ
28 Infsams654
 
16.09.13
15:06
(25) а зачем тут нужен менеджер документа "Документы.МойДокумент.ПолучитьСтруктуруИтоговою(Объект,СтруктураИтоговая,ОписаниеОшибки);" , если можно  методом самого объекта все можно получить? Тут какой-то изврат.
Статический метод-то тут зачем, если результат зависит толкьо от данных одного объекта ?
29 alexei366
 
16.09.13
15:08
(26) там интим уже пошел)). Одним словом по данным объекта документа я делаю запросы к справочникам, ну както так.
30 alexei366
 
16.09.13
15:10
(28) А мож я хочу этот метод юзать и для ссылки документа и для ОбъетФормыСтруктура и для Объекта. Что тебе не нравиться. По твоему чтобы мне посчитать мою фигню, из ссылки придется постоянно объект получать чтобы его метод вызвать, и тогда для  Формы мне придется контекстный вызов делать для етого
31 banco
 
16.09.13
15:11
смысл тогда неконтекстного вызова, если передаешь объект? передай, то что нужно, типа так
СтруктураПараметров = Новый Структура("НужныйРеквизит1, НужныйРеквизит2, ИтакДалее");
ЗаполнитьЗначениеСвойств(СтруктураПараметров, Объект);
Пересчитать_СБ(СтрутураПарметров, ...)
....
32 alexei366
 
16.09.13
15:16
(31) Да там таблицы надо передать, както неохото их выгружать в др переменную
33 Нуф-Нуф
 
16.09.13
15:17
пример из типовой:

&НаКлиенте
Процедура ВалютаПриИзменении(Элемент)
    
    ЗаполнитьПорядокОплатыГруппуФинансовогоУчета(
        Объект.Валюта,
        Объект.НалогообложениеНДС,
        Объект.ПорядокОплаты,
        Объект.ГруппаФинансовогоУчета
    );
    
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗаполнитьПорядокОплатыГруппуФинансовогоУчета(Валюта, НалогообложениеНДС, ПорядокОплаты, ГруппаФинансовогоУчета)
    
    ПорядокОплаты = Перечисления.ПорядокОплатыПоСоглашениям.ПолучитьПорядокОплатыПоУмолчанию(Валюта, НалогообложениеНДС);
    ЗаполнитьГруппуФинансовогоУчета(ПорядокОплаты, ГруппаФинансовогоУчета);
    
КонецПроцедуры


передавай конкретные реквизиты. а не объект формы, ибо в этом случае смысла неконтекстного вызова нет
34 alexei366
 
16.09.13
15:18
(33) Есть, ведь элементы формы с самой формой не передаются тогда
35 Infsams654
 
16.09.13
15:19
(30) ну тут смысл инкапсуляции - объект делает то, что только от него зависит. Другое дело, например печать в БП 3.0 - в статический метод менеджера передается список объектов, каждый из которых выдает свои данные на печать
36 alexei366
 
16.09.13
15:31
(35) Ну наверно, но пока так реализованно, мож потом перепишу
37 alexei366
 
16.09.13
15:32
(31) Переделал, терь выгружаю таблицы перед вызовом функции, пусть будет так
38 alexei366
 
16.09.13
15:39
(37) Блин а выгрузить таблицы на клиенте не доступны
39 alexei366
 
16.09.13
15:41
(38) Он же возвращает Таблицу значений которая не имеет отображение на клиенте
40 Infsams654
 
16.09.13
16:25
(39) если уж так надо ТЗ на клиенте, то создается РЕКВИЗИТ формы типа ТЗ (или даже дерева) и отображается