Имя: Пароль:
1C
1С v8
Как передать табчасть для заполнения в серверную процедуру?
,
0 lanc2233
 
12.02.14
12:13
&НаКлиенте
Процедура ЗаполняемТабЧастьКлиент()
    ЗаполняемТабЧастьСервер(Объект.ИмяТабчасти)
КонецПроцедуры

&НаСервере
Процедура ЗаполняемТабЧастьСервер(ТабЧасть) // в глобальном модуле
  НовСтр = ТабЧасть.Добавить();
  // ...
КонецПроцедуры

Выдает ощибку "Нельзя изменять поле, содержащее объект данных формы".
Как правильно передать табличную часть?
1 Euguln
 
12.02.14
12:15
Вызывай из серверной процедуры формы.
2 lanc2233
 
12.02.14
12:18
(1) ну на самом деле у меня из формы вызывается глобальная клиентская процедура, а уже из нее серверная.

придется значительную часть алгоритма переделывать..

других вариантов нет?
3 Defender aka LINN
 
12.02.14
12:18
&НаКлиенте
Процедура ЗаполняемТабЧастьКлиент()
    ЗаполняемТабЧастьСервер()
КонецПроцедуры

&НаСервере
Процедура ЗаполняемТабЧастьСервер() // в глобальном модуле

  НовСтр = Объект.ИмяТабчасти.Добавить();
  // ...

КонецПроцедуры
4 lanc2233
 
12.02.14
12:22
(3) Когда пытаюсь объект передать вместо табчасти, то-же самое выдает.
5 х86
 
12.02.14
12:24
(4)зачем объект передавать?
6 lanc2233
 
12.02.14
12:27
(5) а к какому объекту мне в глобальной процедуре обращаться?
7 Jonny_Khomich
 
12.02.14
12:29
Ну ты ТЗ передавай
8 GROOVY
 
12.02.14
12:33
Во временное хранилище положи.
9 Art igloo
 
12.02.14
12:40
В сервной процедуре модуля формы:

КопияТч = Объект.ИмяТч.Выгрузить();
Адрес = ПоместитьВоВременноеХранилище(КопияТЧ, Новый УникальныйИдентификатор);

В глобальном модуле:

ЗаполняемТабЧастьСервер(Адрес ); //здесь достанешь из временного хранилища
10 Ork
 
12.02.14
12:45
(8) + (9) Я балдю дорогая редакция.
Реализация клиент-серверного подхода в 1С достигла небывалых высот, глубин, ширин и прочих измерений.
11 Art igloo
 
12.02.14
12:46
(10) Поясни?
12 Ork
 
12.02.14
13:01
(11) Че пояснять? Данные формы объекта имеют отображение на сервере. По крайней мере так в документации. Иначе почему стартовое заполнение реквизитов выполняется в ПриСозданииНаСервере()? Но работать с ними "на сервере же" штатно нельзя. Только нужно гонять туда сюда команды и данные. Это ли не высота полета мысли?
13 Art igloo
 
12.02.14
13:17
(12) Я так понимаю потому что в ПриСозданииНаСервере доступен контекст формы, а в чисто серверном модуле он не доступен, поэтому и проекции там не видны. Потому надо четко определиться, что ты хочешь в сервеный модуль передать. GROOVY, объясни нам, ты вроде в этом спец.
14 Feunoir
 
12.02.14
13:24
&НаКлиенте
Процедура Заполнить(Команда)
...
    ЗаполнитьСервер();
...
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСервер()
    Документы.гт_ПланированиеРабот.ЗаполнитьДокумент(Объект);
    Модифицированность = Истина;
КонецПроцедуры

В модуле менеджера

Процедура ЗаполнитьДокумент(Объект) Экспорт
    
...
            СтрокаТЦП = Объект.ЭлементыТЦП.Добавить();
...
КонецПроцедуры

И в общем-то нормально работает.
15 Ork
 
12.02.14
13:26
(13) Вот я об этом и говорю. Есть "серверная часть", а есть "чисто серверная часть".
16 Art igloo
 
12.02.14
13:42
(14) Работает, потому что в модуль менеджера допускаются передачи проекций, а вот в серверный модуль как выяснилось нет.
17 Feunoir
 
12.02.14
13:50
(16) Если я правильно расшифровал, то "проекция" это контекст формы. Так он в модуле менеджера тоже недоступен. В этом отношении общий серверный модуль и модуль менеджера одинаковы.
18 Art igloo
 
12.02.14
13:54
(17) Как же недоступен когда ты передаеш в твоем примере Объект. Объект - это что такое? ДанныеФормыСтруктура. И он у тебя виден в модуле менеджера, а теперь создай чисто серверный общий модуль и попробуй передать туда объект. Получится ошибка передачи мутабельного значения...
19 Art igloo
 
12.02.14
13:55
+18 Т.е. получается как пишет (15) есть "серверная часть" а есть "чисто серверная часть"
20 Feunoir
 
12.02.14
13:58
(18) Мутабельные значения это только при передаче клиент-сервер. Внутри сервера, как и внутри клиента, передавай их как хочешь.
21 Art igloo
 
12.02.14
14:07
(20) Да точно, затупил, я из клиентской передавал. Тогда да, все работает. Тогда непонятно почему у автора не работает.
22 Feunoir
 
12.02.14
14:10
(21) Потому что автор пытается сам передать данные формы с клиента на сервер, а не взять сковертированный контекст уже на сервере. Только поэтому. В принципе в (3) ему всё написали. Только ТС читает не внимательно.
23 Art igloo
 
12.02.14
14:15
(22) Точно, что-то туплю сегодня. Теория заговора "сервер" "чисто сервер" отменяется.
24 GROOVY
 
12.02.14
14:18
Чего тут объяснять? Есть такая штука как "ДанныеФормы". Многие их путают с реквизитами объекта, от сюда и недоумение почему чего-то там нельзя сделать...
25 Art igloo
 
12.02.14
14:22
(24) А зачем ты посоветовал во временное хранилище положить? Ведь можно же ДанныеФормы передать в общий серверный модуль из серверной процедуры модуля формы.