Имя: Пароль:
 
1C
 
ПриЗаписи() - как узнать, что записывается новый элемент ?
0 ll13
 
15.11.09
19:13
сабж+
ЭтоНовый() - выдаёт Ложь ?!
1 Птица
 
15.11.09
19:13
проверяй в передзаписью
2 Волшебник
 
модератор
15.11.09
19:13
Попробуй ПередЗаписью()
3 megalodon
 
15.11.09
19:13
нада это в ПередЗаписью глядеть
4 Птица
 
15.11.09
19:14
либо через переменную модуля
5 пента
 
15.11.09
19:14
объект.ссылка и ссылка
6 ll13
 
15.11.09
19:24
(2) ПередЗаписью() не пойдёт, нужна ссылка на элемент.
Надо ПриЗаписи() писать в регистр сведений ссылку.
7 zzzzz
 
15.11.09
19:26
(6) А в чем проблема?
8 ll13
 
15.11.09
19:32
(7) В том, что в событии ПередЗаписью() Ссылка ещё пустая.
А в ПриЗаписи() ссылка уже есть, но невозможно определить пишется ли новый элемент.
9 Волшебник
 
модератор
15.11.09
19:35
(8) Заведи переменную модуля объекта ЭтоНовыйОбъект, которую присваивай в процедуре ПередЗаписью по условию ЭтоНовый() и проверяй в процедуре ПриЗаписи.
10 zzzzz
 
15.11.09
19:38
(8) Так проверять можно на пустую ссылку. Если пустая, то можно назначить ссылку.
11 Diter
 
15.11.09
19:39
в семёрке - одна строчка в ПриЗаписи()
12 ll13
 
15.11.09
19:40
(9) Спасибо, так сделаю.
(10) Напишите пример.
13 zzzzz
 
15.11.09
19:55
Перем НазначеннаяСсылка;
Процедура ПередЗаписью(Отказ)
   Если ЭтоНовый() Тогда
       УникальныйИдентификатор= Новый УникальныйИдентификатор;
       НазначеннаяСсылка=Справочники.Автомобили.ПолучитьСсылку(УникальныйИдентификатор);
       УстановитьСсылкуНового(НазначеннаяСсылка);
   КонецЕсли;
КонецПроцедуры


Процедура ПриЗаписи(Отказ)
   Если Ссылка=НазначеннаяСсылка Тогда
       Сообщить("ЧТД");
       
   КонецЕсли;
   
КонецПроцедуры
14 H A D G E H O G s
 
15.11.09
19:56
(13) За такой код

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

оторвал бы eggs без суда и следствия.
15 zzzzz
 
15.11.09
19:59
В качестве примера - пойдет.
16 H A D G E H O G s
 
15.11.09
19:59
(15) Сам то ошибку свою понял?
17 zzzzz
 
15.11.09
20:04
(16) Да ясно. Лишнее написал.
18 H A D G E H O G s
 
15.11.09
20:07
(17) Нет, не то.
Если будет РБД, то при обмене, когда в периферийку залезет элемент - он запишется под другим УИД. И будет у тебя в периферийке толпа дублей с полностью одинаковыми данными и рассинхронизированными ТЧ, ни к чему не привязанными.
19 zzzzz
 
15.11.09
20:09
Да с какого? Читаю - полностью уникальный идентификатор. Создается полностью уникальная ссылка.
20 zzzzz
 
15.11.09
20:17
Если ЭтоНовый() Тогда
   УстановитьСсылкуНового(Справочники.Автомобили.ПолучитьСсылку());
КонецЕсли;
(18) Ты пытаешься сказать, что назначенная таким образом ссылка может быть неуникальной, т.е. для нее не будет правильно работать РБД?
21 H A D G E H O G s
 
15.11.09
20:21
(18) Пардон, ошибся. С ТЧ - не канает. А вот со ссылочной целостностью - да.
22 H A D G E H O G s
 
15.11.09
20:23
(20) Читай по словам:

1) В Центре создали элемент справочника - Контрагент "Пупкин"
2) В Центре в расходную накладную выбрали контрагента "Пупкина"
3) Выгрузили в периферию
4) Контаргенту "Пупкин" присвоился новый УИД в периферийки
5) В расходной накладной появилась битая ссылка.

Привет
23 zzzzz
 
15.11.09
20:25
(21) Может я наивный, но в данном случае, я верю книжкам. А там рекомендуют именно такую работу при необходимости работы со ссылками на еще не записанный элемент. Есть случаи, что это не работает?
24 ll13
 
15.11.09
20:26
Как быть в такой ситуации :
Есть рег сведений определяющий права пользователя с измерениями Пользователь, Объект.
Ограничение на чтение справочника, реализовано спомощью RLS
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПользователей КАК Права
   ПО (Права.Объект = ТекущаяТаблица.Ссылка)
       И (Права.Пользователь = &ТекущийПользователь)

Ограничение на добавление элементов нет. Как реализовать, что бы при создании нового элемента в рег добавлялась запись.

Пишу:
Перем ЭтоНовый;
Процедура ПриЗаписи(Отказ)
   Если ЭтоНовый Тогда
       ПривилегированныйМодуль.РазрешитьДоступ(Ссылка);// добавляет запись    
   КонецЕсли;
КонецПроцедуры

Процедура ПередЗаписью(Отказ)
   ЭтоНовый = ЭтоНовый();
КонецПроцедуры

Всё работает нормально, но это дыра безопасности, достаточно выполнить ПривилегированныйМодуль.РазрешитьДоступ(Ссылка) например из внешней обработки ... Как сделать правильно ?
25 H A D G E H O G s
 
15.11.09
20:26
Оччччень веселая ситуация.
А если мы изменим контрагента в периферийке - то при загрузке в Центре - хопа, его дубль. С полностью одинаковыми реквизитами.
До боли трудно найти причину, если не знаешь.
26 H A D G E H O G s
 
15.11.09
20:28
(23) Да. Есть.
27 zzzzz
 
15.11.09
20:34
(26) Прости, но это мне непонятно. Поясню. У меня есть база. В ней я создаю элементы. Работая уже описанным методом. А потом создаю переферийную базу. Опа - а она у меня создает дубли. См (22). С чего бы это?