|
Сравнение набора записей в регистре, нового и существующего | ☑ | ||
---|---|---|---|---|
0
NordMad
23.04.18
✎
15:13
|
Такой вопрос. при записи справочник, документа и т.д. при записи можно сравнить объект и ссылку чтобы понять что было изменено перед записью. вопрос - как провести такое же сравниение для регистра сведений. нашел только то что и ПриЗаписи и ПередЗаписью есть доступ к набору через ЭтотОбъект - где хранится новая запись. как мне сравнить с записью которую она заместит? (замещение =истина, вариант с запросом не предлагать, он очевиден, интересует есть ли возможность сделать это без запроса?)
|
|||
1
NordMad
23.04.18
✎
15:14
|
(0) регистр сведений если что имеется ввиду
|
|||
2
NordMad
23.04.18
✎
15:23
|
(0) если короче, мне просто нужно понять что меняется в записи регистра ПередЗаписью
|
|||
3
Mankubus
23.04.18
✎
15:25
|
(0) запрос религия запрещает? Самый лучший вариант
|
|||
4
NordMad
23.04.18
✎
15:31
|
(3) просто интересует есть ли вариант аналогичный при записи справочника или документа. вот и всё. альтернативны запросу
|
|||
5
Tateossian
23.04.18
✎
15:31
|
Для подчиненного регистратору легко - выгружаешь в таблицу значений, добавляешь колонку и заполняешь -1, читаешь методом прочитать(), добавляешь к этой же таблице, заполняя единицой, сворачиваешь по итератору - там, где -1 - это удаленные записи, там, где 1 - добавленные. Восстанавливаешь первоначальный набор.
|
|||
6
NordMad
23.04.18
✎
15:32
|
(5) да сорри, забыл сказать что регистр независимый и непериодический
|
|||
7
lEvGl
гуру
23.04.18
✎
15:39
|
(4) альтернатива запросу - набор записей с нужным отбором, как в ЭтотОбъект
|
|||
8
RomanYS
23.04.18
✎
15:41
|
(4) У набора записей есть метод Прочитать()
|
|||
9
Tateossian
23.04.18
✎
15:41
|
(5) Для необъемного регистра сведений. Также, прочитать, только без установленного отбора. Записать. Еще раз прочитать. Выполнить функцию с итератором (проставленными статусами 1/-1). Сделать отбор, отбросив нули. Полученная таблица и будет результат изменений, в дополнительные свойства записать статус возврата, чтобы не дублировалась процедура записи.
|
|||
10
NordMad
23.04.18
✎
15:43
|
Т.е. создать наборЗаписей, пихнуть нужный объект и прочитать? правильно я вас понял?
|
|||
11
lEvGl
гуру
23.04.18
✎
15:46
|
до того как ЭтотОбъект будет записан (завершится транзакция) набор в регистре будет еще "старый", если его прочитать в переззаписью(отбор можно взять из ЭтотОбъект), то получится старый вариант в созданном наборе и новый в ЭтотОбъект
|
|||
12
lEvGl
гуру
23.04.18
✎
15:48
|
(10) наверно, хз что значит пихнуть нужный объект
|
|||
13
RomanYS
23.04.18
✎
15:50
|
(10) Если "пихнуть нужный объект" = установить отбор, то да правильно. Но это только "как альтернатива запросу", запрос лучше
|
|||
14
NordMad
23.04.18
✎
15:50
|
(12) ну создать набор, присвоить ему объект по которому будет сравнение и прочитать, потом сравнить с набором ЭтотОбъект
|
|||
15
NordMad
23.04.18
✎
15:51
|
(13) почему запрос лучше? быстрее работает чем прочитать?
|
|||
16
lEvGl
гуру
23.04.18
✎
15:51
|
(13) вот тоже подумал, что запрос ничем не хуже, но там придется с текстом и параметрами "динамически" мутить
|
|||
17
lEvGl
гуру
23.04.18
✎
15:53
|
отбор.загрузить(объект.отбор) что то в этом роде должно быть
или хотя бы циклом отбор точно можно установить |
|||
18
NordMad
23.04.18
✎
15:53
|
(16) больше буков:) в запросе
|
|||
19
lEvGl
гуру
23.04.18
✎
15:54
|
ну просто набор тут универсальнее по коду получается
|
|||
20
RomanYS
23.04.18
✎
15:54
|
(15) "почему" - по определению )), если вам нужно только прочитать данные - не ищите альтернативу запросу.
(18) плохой критерий |
|||
21
hhhh
23.04.18
✎
15:55
|
(10) в регистр сведений набор пишется в 2 этапа: удаление старой записи, потом запись новой. Поэтому ПередЗаписью надо Прочитать(); где-то запомнить, а потом когда второй раз вызовется ПередЗаписью сравнивать. Лучше поэтому не перед записью это делать, а отдельно, предварительно сравнить, перед Записать().
|
|||
22
NordMad
23.04.18
✎
15:56
|
(21) так что уже при начале ПередЗаписью старой записи уже нету?
|
|||
23
NordMad
23.04.18
✎
15:57
|
(20) да всё равно, регистр маленький по количеству записей
|
|||
24
NordMad
23.04.18
✎
15:58
|
текущийНабор = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
текущийНабор.Отбор.Объект = ЭтотОбъект.Отбор.Объект.Значение; текущийНабор.Прочитать(); так не работает |
|||
25
lEvGl
гуру
23.04.18
✎
16:00
|
отбор коллекция вроде
|
|||
26
drei
23.04.18
✎
16:00
|
Это все бесполезно. Не существует метода отличить удаление - запись пустого набора, от первого этапа записи с замещением измененных данных. Даже передача чего-то через дополнительные свойства, так как экземпляры объектов будут разные.
|
|||
27
lEvGl
гуру
23.04.18
✎
16:00
|
признак использование еще есть
|
|||
28
lEvGl
гуру
23.04.18
✎
16:02
|
Установить() там где то должно быть
|
|||
29
lEvGl
гуру
23.04.18
✎
16:03
|
ну а так да, лучше хтмл наверно
|
|||
30
lEvGl
гуру
23.04.18
✎
16:03
|
29 - опс, не туда
|
|||
31
RomanYS
23.04.18
✎
16:07
|
(22) на момент первой записи ЭтотОбъект - пустой, из базы читается. На момент второй - наоборот
|
|||
32
NordMad
23.04.18
✎
16:11
|
(26) а мне надо чтобы сравнение шло с существующим, если записи нет или она удалена то и черт с ней
|
|||
33
drei
23.04.18
✎
16:51
|
(32) Еще раз и медленно. При записи с замещением все события набора вызываются два раза с разными объектами наборов. Первый раз - с пустым набором (есть данные в базе, нет данных в наборе) второй раз - с заполненным (нет данных в базе, есть в наборе). Эти два набора не связаны. Никак. Твои желания мирозданию похъ. На сервере глобальных переменных нет. Совсем.
|
|||
34
drei
23.04.18
✎
17:12
|
Можешь попробовать извратиться через модули с повторным использованием, уповая на то, что между вызовами не произойдет очистки по требованию. Хотя там один серверный вызов, может быть кэш на уровне вызова и получится.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |