|
ПриЗаписи() - как узнать, что записывается новый элемент ? | ☑ | ||
---|---|---|---|---|
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). С чего бы это?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |