Имя: Пароль:
1C
 
Обмен в ПослеЗаписи()
0 Artificial
 
27.07.16
10:25
У документа существует обычная и управляемая форма документа. В процедуре ПослеЗаписи() обычной формы есть такой текст:
Узел = ПланыОбмена.МСФронтУО.НайтиПоКоду(Константы.КодУзлаУО.Получить());
    ОбменДанными.Получатели.Добавить(Узел);
    ПланыОбмена.ЗарегистрироватьИзменения(Узел, ЭтотОбъект);
Как сделать что-то аналогичное в УФ? Авторегистрация в плане обмена запрещена.
1 Остап Сулейманович
 
27.07.16
10:30
(0) Сделать аналогично в ПослеЗаписиНаСервере()
2 Artificial
 
27.07.16
10:33
(1) Не катит. Загвоздка во второй строчке. Программа не знает, что такое "ОбменДанными".
3 Остап Сулейманович
 
27.07.16
10:39
(2) Сервер не знает к чему относится вот это вот ваше ОбменДанными. Просто подскажите ему ЭтотОбъект.ОбменДанными и у него все получится.
4 Artificial
 
27.07.16
10:42
(3) Написал Объект.ОбменДанными.Получатели.Добавить(Узел);
Ничего не изменилось, ругается, что нет такого поля как ОбменДанными.
5 Остап Сулейманович
 
27.07.16
10:43
(4) "Объект" нет на сервере. Не сервере есть "ЭтотОбъект".
6 Остап Сулейманович
 
27.07.16
10:43
+ (5) Вернее не так. На сервере Объект <> ЭтотОбъект.
7 Artificial
 
27.07.16
10:44
(6) Переменная не определена (ЭтотОбъект)
8 Остап Сулейманович
 
27.07.16
10:47
(7) Птля... Зайди отладчиком в процедуру ПослеЗаписиНаСервере и найди там переменную с типом ДокументОбъект. Вот с ним и работай.
9 aleks_default
 
27.07.16
10:47
(0)Это вообще должно быть в модуле объекта. Тому кто это засунул в форму руки из *опы вырвать
10 Остап Сулейманович
 
27.07.16
10:48
+ (8) И вообще ТекущийОбъект передается туда параметром с вызывающей стороны.
Выкладывай вызов процедуры и ее код.
11 Artificial
 
27.07.16
10:48
(10) &НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    ПослеЗаписиНаСервере();
КонецПроцедуры


&НаСервере
Процедура ПослеЗаписиНаСервере()
    
    Узел = ПланыОбмена.МСФронтУО.НайтиПоКоду(Константы.КодУзлаУО.Получить());
    Объект.ОбменДанными.Получатели.Добавить(Узел);
    ПланыОбмена.ЗарегистрироватьИзменения(Узел, Объект);    
    
КонецПроцедуры
12 Artificial
 
27.07.16
10:49
(9) Должно. Но до меня решили, чтоб обмен был только у документов, которые записываются из формы.
13 Остап Сулейманович
 
27.07.16
10:56
(11) Стать сюда ПослеЗаписиНаСервере(). Нажать Ctrl-F1. Прочитать за передаваемые параметры.
14 Остап Сулейманович
 
27.07.16
11:00
+ (13) Для толстых, жадных и ленивых.

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    ПослеЗаписиНаСервере(Объект);
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(текДокумент)
    
    Узел = ПланыОбмена.МСФронтУО.НайтиПоКоду(Константы.КодУзлаУО.Получить());
    текДокумент.ОбменДанными.Получатели.Добавить(Узел);
    ПланыОбмена.ЗарегистрироватьИзменения(Узел, текДокумент);    
КонецПроцедуры
15 Artificial
 
27.07.16
11:03
(14) оле объекта не обнаружено (ОбменДанными)
    текДокумент.ОбменДанными.Получатели.Добавить(Узел);
16 Остап Сулейманович
 
27.07.16
11:04
(15) Что отладчик показывает для переменной текДокумент?
17 Artificial
 
27.07.16
11:05
(16) Не могу отловить. На строку ПослеЗаписиНаСервере(Объект); заходит, потом всё.
18 Fragster
 
гуру
27.07.16
11:05
для всех - чтобы зарегить изменения с помощью ПланыОбмена.ЗарегистрироватьИзменения не нужно добавлять ничего в .ОбменДанными.
И вообще это добавление в .ОбменДанными бесполезно, так как "после записи" формы уже после транзакции и в базу ничего не пишется.
19 Artificial
 
27.07.16
11:06
(18) В обычных формах работает же.
20 Fragster
 
гуру
27.07.16
11:08
(19) если и в обычных формах ты удвлишь строки с .обменданными - оно продолжит работать
21 Fragster
 
гуру
27.07.16
11:09
за счет ПланыОбмена.ЗарегистрироватьИзменения(Узел, текДокумент);
22 Artificial
 
27.07.16
11:09
(21) Хорошо, сейчас попробую.
23 Artificial
 
27.07.16
11:10
ПланыОбмена.ЗарегистрироватьИзменения(Узел, текДокумент);    
по причине:
Недопустимое значение параметра (параметр номер '2')
24 Fragster
 
гуру
27.07.16
11:12
(23) ну, отладчик и СП у тебя, тчобы посмотреть, что в ТекДокумент и что надо передавать вторым параметром.
25 hhhh
 
27.07.16
11:14
(23) ТекДокумент = РеквизитФормыВЗначение("Объект");
26 Fragster
 
гуру
27.07.16
11:15
(25) тогда уж Объект.Ссылка лучше
27 Fragster
 
гуру
27.07.16
11:17
а еще лучше не плодить транзакций, и кода в формах (ведь провести документ можно и из списка) и добавить код

Узел = ПланыОбмена.МСФронтУО.НайтиПоКоду(Константы.КодУзлаУО.Получить());
    ОбменДанными.Получатели.Добавить(Узел);

в модуль объекта
а еще лучше - хранить в константе прямо узел плана обмена и добавить в коде проверку на заполненность этой самой константы (если там продолжать хранить код - то на то, что узел с таким кодом существует)
28 hhhh
 
27.07.16
11:19
(26) вообще-то везде ДокументОбъект регистрируют. В основном. Но можно и документСсылка. Кто его знает, что ему нужно.
29 Artificial
 
27.07.16
11:19
(27) В модуль объекта нельзя, такое условие.
30 aleks_default
 
27.07.16
11:20
(27)если так уж надо, можно передать параметр из формы в модуль объекта через допсвойства объекта.,
31 Fragster
 
гуру
27.07.16
11:20
(29) ну сделай в подписку на событие объекта
32 Fragster
 
гуру
27.07.16
11:21
(28) а нафиг коллекцию преобразовывать, если ссылка уже есть?
33 Artificial
 
27.07.16
11:22
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    ПослеЗаписиНаСервере(Объект);
КонецПроцедуры


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

Что делать?
34 Fragster
 
гуру
27.07.16
11:25
(33) выкинуть к херам. послезаписинасерере - отдельное событие формы, а также (18), (27), (31)
35 aleks_default
 
27.07.16
11:27
в модуле объекта ПриЗаписи пишешь
Если ДополнительныеСвойства.Свойство("ЗаписьИзФормы") тогда

Узел = ПланыОбмена.МСФронтУО.НайтиПоКоду(Узел = ПланыОбмена.МСФронтУО.НайтиПоКоду(Константы.КодУзлаУО.Получить());
    ОбменДанными.Получатели.Добавить(Узел);
КонецЕсли

А в форме ПриЗаписинаСервере

текущийОбъект.длополнительныесвойства.Вставить("ЗаписьНаСервере")
36 aleks_default
 
27.07.16
11:28
но тому кто придумал такое условие, обязательно (9)
37 aleks_default
 
27.07.16
11:29
(35)
*текущийОбъект.Дополнительныесвойства.Вставить("ЗаписьИзФормы")
38 youalex
 
27.07.16
11:29
(9) Вот это вообще шедевральное решение:
"ПланыОбмена.МСФронтУО.НайтиПоКоду(Константы.КодУзлаУО.Получить());"
39 DrZombi
 
гуру
27.07.16
11:30
(12) Это тоже решается через ДополнительноеСвойство.
40 hhhh
 
27.07.16
11:30
(32) я имел в виду то, что сначала было. В вопросе (0).

ТекДокумент.ОбменДанными.Получатели.Добавить(Узел);
41 Fragster
 
гуру
27.07.16
11:31
(12) т.е. если я помечу на удаление или проведу документ в форме списка - то он не должен становиться на обмен?
42 Artificial
 
27.07.16
11:31
(37) По крайней мере запись прошла. Сейчас посмотрим на обмен. Спасибо.
43 Artificial
 
27.07.16
11:31
(41) Типа да.
44 Fragster
 
гуру
27.07.16
11:33
(43) какая хорошая бомба. через пол года прикольно будет разбираться с неконсистентностью данных.
45 Artificial
 
27.07.16
11:34
(44) Желание клиента - закон.
Большое спасибо всем высказавшимся, обмен прошёл. УФ в топку.
46 Остап Сулейманович
 
27.07.16
11:42
(45) "УФ в топку." Значительно лучше УФ все таки изучить. Там нет ничего заумного.
47 Artificial
 
27.07.16
11:45
(46) Бредовости многовато.
48 Остап Сулейманович
 
27.07.16
11:48
(47) Нет никакой "бредовости". Достаточно раз и навсегда запомнить, что сервер ничего не знает за клиента. То есть абсолютно ничего и никогда. Все с чем работает сервер должно быть у него или ему передаваться с клиента для обработки вместе с командой.