Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Сравнение набора записей в регистре, нового и существующего

Сравнение набора записей в регистре, нового и существующего
Я
   NordMad
 
23.04.18 - 15:13
Такой вопрос. при записи справочник, документа и т.д. при записи можно сравнить объект и ссылку чтобы понять что было изменено перед записью. вопрос - как провести такое же сравниение для регистра сведений. нашел только то что и ПриЗаписи и ПередЗаписью есть доступ к набору через ЭтотОбъект - где хранится новая запись. как мне сравнить с записью которую она заместит? (замещение =истина, вариант с запросом не предлагать, он очевиден, интересует есть ли возможность сделать это без запроса?)
 
 
   NordMad
 
1 - 23.04.18 - 15:14
(0) регистр сведений если что имеется ввиду
   NordMad
 
2 - 23.04.18 - 15:23
(0) если короче, мне просто нужно понять что меняется в записи регистра ПередЗаписью
   Mankubus
 
3 - 23.04.18 - 15:25
(0) запрос религия запрещает? Самый лучший вариант
   NordMad
 
4 - 23.04.18 - 15:31
(3) просто интересует есть ли вариант аналогичный при записи справочника или документа. вот и всё. альтернативны запросу
   Tateossian
 
5 - 23.04.18 - 15:31
Для подчиненного регистратору легко - выгружаешь в таблицу значений, добавляешь колонку и заполняешь -1, читаешь методом прочитать(), добавляешь к этой же таблице, заполняя единицой, сворачиваешь по итератору - там, где -1 - это удаленные записи, там, где 1 - добавленные. Восстанавливаешь первоначальный набор.
   NordMad
 
6 - 23.04.18 - 15:32
(5) да сорри, забыл сказать что регистр независимый и непериодический
   lEvGl
 
7 - 23.04.18 - 15:39
(4) альтернатива запросу - набор записей с нужным отбором, как в ЭтотОбъект
   RomanYS
 
8 - 23.04.18 - 15:41
(4) У набора записей есть метод Прочитать()
   Tateossian
 
9 - 23.04.18 - 15:41
(5) Для необъемного регистра сведений. Также, прочитать, только без установленного отбора. Записать. Еще раз прочитать. Выполнить функцию с итератором (проставленными статусами 1/-1). Сделать отбор, отбросив нули. Полученная таблица и будет результат изменений, в дополнительные свойства записать статус возврата, чтобы не дублировалась процедура записи.
   NordMad
 
10 - 23.04.18 - 15:43
Т.е. создать наборЗаписей, пихнуть нужный объект и прочитать? правильно я вас понял?
 
 Рекламное место пустует
   lEvGl
 
11 - 23.04.18 - 15:46
до того как ЭтотОбъект будет записан (завершится транзакция) набор в регистре будет еще "старый", если его прочитать в переззаписью(отбор можно взять из ЭтотОбъект), то получится старый вариант в созданном наборе и новый в ЭтотОбъект
   lEvGl
 
12 - 23.04.18 - 15:48
(10) наверно, хз что значит пихнуть нужный объект
   RomanYS
 
13 - 23.04.18 - 15:50
(10) Если "пихнуть нужный объект" = установить отбор, то да правильно. Но это только "как альтернатива запросу", запрос лучше
   NordMad
 
14 - 23.04.18 - 15:50
(12) ну создать набор, присвоить ему объект по которому будет сравнение и прочитать, потом сравнить с набором ЭтотОбъект
   NordMad
 
15 - 23.04.18 - 15:51
(13) почему запрос лучше? быстрее работает чем прочитать?
   lEvGl
 
16 - 23.04.18 - 15:51
(13) вот тоже подумал, что запрос ничем не хуже, но там придется с текстом и параметрами "динамически" мутить
   lEvGl
 
17 - 23.04.18 - 15:53
отбор.загрузить(объект.отбор) что то в этом роде должно быть
или хотя бы циклом отбор точно можно установить
   NordMad
 
18 - 23.04.18 - 15:53
(16) больше буков:) в запросе
   lEvGl
 
19 - 23.04.18 - 15:54
ну просто набор тут универсальнее по коду получается
   RomanYS
 
20 - 23.04.18 - 15:54
(15) "почему" - по определению )), если вам нужно только прочитать данные - не ищите альтернативу запросу.

(18) плохой критерий
   hhhh
 
21 - 23.04.18 - 15:55
(10) в регистр сведений набор пишется в 2 этапа: удаление старой записи, потом запись новой. Поэтому ПередЗаписью надо Прочитать();  где-то запомнить, а потом когда второй раз вызовется ПередЗаписью сравнивать. Лучше поэтому не перед записью это делать, а отдельно, предварительно сравнить, перед Записать().
   NordMad
 
22 - 23.04.18 - 15:56
(21) так что уже при начале ПередЗаписью старой записи уже нету?
   NordMad
 
23 - 23.04.18 - 15:57
(20) да всё равно, регистр маленький по количеству записей
   NordMad
 
24 - 23.04.18 - 15:58
текущийНабор = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
    текущийНабор.Отбор.Объект = ЭтотОбъект.Отбор.Объект.Значение;
    текущийНабор.Прочитать();
так не работает
   lEvGl
 
25 - 23.04.18 - 16:00
отбор коллекция вроде
   drei
 
26 - 23.04.18 - 16:00
Это все бесполезно. Не существует метода отличить удаление - запись пустого набора, от первого этапа записи с замещением измененных данных. Даже передача чего-то через дополнительные свойства, так как экземпляры объектов будут разные.
   lEvGl
 
27 - 23.04.18 - 16:00
признак использование еще есть
   lEvGl
 
28 - 23.04.18 - 16:02
Установить() там где то должно быть
   lEvGl
 
29 - 23.04.18 - 16:03
ну а так да, лучше хтмл наверно
   lEvGl
 
30 - 23.04.18 - 16:03
29 - опс, не туда
   RomanYS
 
31 - 23.04.18 - 16:07
(22) на момент первой записи ЭтотОбъект - пустой, из базы читается. На момент второй - наоборот
   NordMad
 
32 - 23.04.18 - 16:11
(26) а мне надо чтобы сравнение шло с существующим, если записи нет или она удалена то и черт с ней
   drei
 
33 - 23.04.18 - 16:51
(32) Еще раз и медленно. При записи с замещением все события набора вызываются два раза с разными объектами наборов. Первый раз - с пустым набором (есть данные в базе, нет данных в наборе) второй раз - с заполненным (нет данных в базе, есть в наборе). Эти два набора не связаны. Никак. Твои желания мирозданию похъ. На сервере глобальных переменных нет. Совсем.
 
 
   drei
 
34 - 23.04.18 - 17:12
Можешь попробовать извратиться через модули с повторным использованием, уповая на то, что между вызовами не произойдет очистки по требованию. Хотя там один серверный вызов, может быть кэш на уровне вызова и получится.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует