Имя: Пароль:
1C
1С v8
Пометка удаления для 2-х справочников.
0 breezee
 
14.12.15
18:16
У меня есть 2 справочника. Справ1 и Справ2. Они связаны следующим образом: Справ2 является реквизитом Справ1. Связь 1 к 1. Нужно чтобы когда ставил пометку удаления на элементе 1 справочника - на связанном элементе 2 справочника тоже ставилась пометка. В 1 справочнике на процедуру при записи поставил процедуру, которая смотрит изменилась ли пометка: (Если Не Ссылка.ПометкаУдаления = ПометкаУдаления Тогда) я получаю получаю элемент из справочника 2, в нём изменяю пометку и записываю. Беда в том, что во втором справочнике содержится процедура, которая когда изменяю пометку во 2 справочнике - изменяет пометку в 1.
Т.е. алгоритм работает так: в 1 справочнике изменяю пометку - она изменяется во втором. Изменяется во втором - начинается процедура изменения в 1. Она не срабатывает, т.к. ссылка.пометкаудаления<>пометкаудаления. По идеи всё, но платформа выдает сообщения что "данные базы изменились" и не могут быть сохранены.
1 Господин ПЖ
 
14.12.15
18:17
у вас рукож.пие обыкновенное (с) Хаус
2 Живой Ископаемый
 
14.12.15
18:19
2(0) Окей, запомнили.
3 breezee
 
14.12.15
18:21
(1) Дак что мне делать?
4 Живой Ископаемый
 
14.12.15
18:22
(3) так а что нужно, вопроса-то нет.
5 breezee
 
14.12.15
18:22
(4) Чтобы все заработало)
6 breezee
 
14.12.15
18:23
Т.е. чтобы когда я выставлял пометку в  элементе первого справочнике - пометка во в связанном с ним элементе второго справочника изменялась на такую же
7 Aceforg
 
14.12.15
18:24
Групповая обработка тебе в помощь
8 Живой Ископаемый
 
14.12.15
18:25
ОбменДанными.Загрузка = истина.
В одном справочнике выставляй для другого, в другом проверяй, если заполнено, то процедуру не исполняй.
Это вот просто самое простое, чтобы не думать вообще
9 breezee
 
14.12.15
18:25
(8) Это новый реквизит создавать?
10 breezee
 
14.12.15
18:26
Или ОбменДанными это общий модуль?
11 Живой Ископаемый
 
14.12.15
18:26
2(9) Ну... если очень нужно, то создавай конечно, ктож тебе запретит, но зачем?
12 Михаил Козлов
 
14.12.15
18:27
(9) "Он" уже есть, создавать не нужно.
И, наверное, из ПриЗаписи перенести в ПередЗапись.
13 Живой Ископаемый
 
14.12.15
18:27
14 Живой Ископаемый
 
14.12.15
18:31
2(12)"И, наверное, из ПриЗаписи перенести в ПередЗапись." почему?
Ну, если допустить что мы рациональные существа, а не какие-то предрассудочные двуутробки?
15 breezee
 
14.12.15
18:33
(12) А ведь наверное в этом и вся проблема. Получается я при записи изменяю реквизит. Тем самым вызывая процедуру из другого объекта. Она  в которой тоже изменяю этот же реквизит и записываю. В процедуру при записи дважды записываю. Тьфу. (13) Еще раз пересмотрю, чтобы понять что я делаю)
16 Мимохожий Однако
 
14.12.15
18:37
Не стесняйся. Код показывай.
17 Живой Ископаемый
 
14.12.15
18:38
ПриЗаписиПервогоСправочника()
Если ЭтотОбъект.Обменданными.загрузка Тогда
Возврат;
КонецЕсли;
ДругойСправочник = ЭтотОбъект.РеквизитСоСылкойНаДругойСправочник.ПолучитьОбъект();
ДругойСправочник.ОбменДанными.Загрузка = Истина;
ДргоуйСправочник.ПометкаУдаления = ЭтотОбъект.ПометкаУдаления;

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

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

КонецПроцедуры
18 Живой Ископаемый
 
14.12.15
18:38
Ну вот что тут трудного?
19 breezee
 
14.12.15
18:38
Точно. А в перед записью лучше. Я перед записью изменяю реквизит, вызывается из другого модуля обработка, которая пред его записью изменяет и записывает мой реквизит. Но тут срабатывает процедура перед запись первого реквизита. (16) Уже всю конфу бы скинул, но все на работе осталось(
20 Живой Ископаемый
 
14.12.15
18:39
.
.
.
ДругойСправочник.записать();
КонецПроцедуры
.
.
.
ПервыйСправочник .записать();
КонецПроцедуры
21 breezee
 
14.12.15
18:40
(20) Спасибо!
22 breezee
 
14.12.15
18:43
(20) А им потом нужно ложиь выставлять в .ОбменДанными.Загрузка?
23 Живой Ископаемый
 
14.12.15
18:46
Что?
24 Живой Ископаемый
 
14.12.15
18:48
Чувак... ОбменДанными - это не реквизит, которых хранится где-то в базе. Пока есть объект в памяти, у него есть определенное значение. Закрыл ты свою обработку или отработал твой код, и капец, они опять чистые...


Возьми лучше с полки букварь, не беси меня...
25 breezee
 
14.12.15
18:48
Если ЭтотОбъект.Обменданными.загрузка Тогда
Возврат;
КонецЕсли;
ДругойСправочник = ЭтотОбъект.РеквизитСоСылкойНаДругойСправочник.ПолучитьОбъект();
ДругойСправочник.ОбменДанными.Загрузка = Истина;
ДргоуйСправочник.ПометкаУдаления = ЭтотОбъект.ПометкаУдаления;
ДругойСправочник.ОбменДанными.Загрузка = Ложь;
КонецПроцедуры

Он же все время будет истинным и после 1 прохода, когда я в след. раз захочу изменить пометку - он ничего не сделает
26 breezee
 
14.12.15
18:48
(24) Ок, спасибо!
27 FIXXXL
 
15.12.15
10:17
сделать Спр1 владельцем Спр2
28 Живой Ископаемый
 
15.12.15
10:49
2(27)хм... Ему обоюдно нужно... два справочника могут быть друг другу владельцами?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.