Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как определить изменение реквизита регистра сведений?

Как определить изменение реквизита регистра сведений?
Я
   Лкфае гтв Дшсре
 
01.11.19 - 11:59
Добрый день, коллеги!
Возникла такая проблема: как определить, что изменилось значение реквизита регистра сведений? Можно попробовать в обработчике ПередЗаписью читать значение из БД запросом и сравнивать с текущим объектом. Но есть проблема: набор записей может записываться в два приёма. Сначала записывается пустой набор, он затирает данные в БД. В этот момент существуют старые данные, но ещё нет новых. Затем записывается набор с новыми данными. В этот момент новые данные появляются, но старые уже затёрты. Как исхитриться и поймать момент, когда есть и старые и новые данные? Или может есть другой способ?
 
 
   catena
 
1 - 01.11.19 - 12:03
Никак. Работа напрямую с регистром сведений так и происходит: удаление, а потом запись.
Только запоминать "старые" значения перед удалением. Где-нибудь. И как-то решать ситуации, когда это на самом деле удаление.
А задача-то какая?
   dka80
 
2 - 01.11.19 - 12:03
Смотря как ты пишешь в регистр. Если из документа, то сделай в ПередЗаписьюНаСервере
   dka80
 
3 - 01.11.19 - 12:04
А если пишешь из обработки, то тем более сам проверяй перед тем как записывать
   Лкфае гтв Дшсре
 
4 - 01.11.19 - 12:07
(1) Задача: есть регистр, в нем реквизит Вес. Если вес меняется, например пользователь его изменил, нужно в другом регистре поставить отметку, что вес изменился. С где-нибудь проблема. Если вы сталкивались с такой проблемой, может предложите варианты?
   Fish
 
5 - 01.11.19 - 12:09
Не надо менять вес напрямую в регистре. Вес надо менять там, где он применяется - в документе, справочнике. А в периодическом регистре хранить все изменения.
   Лкфае гтв Дшсре
 
6 - 01.11.19 - 12:10
(5) Я бы рад, но не могу это изменить.
   Fish
 
7 - 01.11.19 - 12:11
(6) Ну тогда (1)
   Лкфае гтв Дшсре
 
8 - 01.11.19 - 12:12
(2) Данные меняет пользователь вручную. Проблема не в том, чтобы получить старые данные, а в том, чтобы сохранить их где-то в БД между вызовами событий записи
   Масянька
 
9 - 01.11.19 - 12:15
(6) А почему не можешь изменить?
   Лкфае гтв Дшсре
 
10 - 01.11.19 - 12:20
(9) Это изменение потянет за собой очень много других вещей. Придется ооооочень много чего переделывать, менять бизнес-процессы работы в компании, переучивать персонал. Займет это пару-тройку-четвёрку лет, обойдется компании в несколько десятков миллионов рублей, и ради  изменения одного реквизита это как-то не бюджетно. Ген. директор не одобрит)
   dka80
 
11 - 01.11.19 - 12:22
Редактирование в форме списка регистра? Ну сделай событие ПередОкончаниеРедактирования
   Масянька
 
12 - 01.11.19 - 12:23
(10) Я, кончено, блондинка... Но в законе :)
Сделать, чтобы при изменении РС открывался элемент справочника - требует много лярдов...
   catena
 
13 - 01.11.19 - 12:25
(10)Достаточно нарисовать собственную форму для изменения, из которой делать все необходимые движения по регистрам. Если кардинально переписывать неохото
   hhhh
 
14 - 01.11.19 - 12:25
(8) делай в ПередЗаписью регистра. ставь отметку.
   Fish
 
15 - 01.11.19 - 12:25
Это конечно, хорошая идея. Вместо того, чтобы использовать один РС, куда записывать историю изменения реквизита, делать два РС - в одном менять, а в другой писать историю :))
   Масянька
 
16 - 01.11.19 - 12:26
(13) (15) А лярды?!
   Borteg
 
17 - 01.11.19 - 12:27
(0) Сначала делаешь регистр куда будешь писать изменения, делаешь его начальное заполнение начальными данными на основании данных имеющихся.
В регистре который анализируешь делаешь при записи обработчик, перебираешь все записи. На каждую запись опрашиваешь свой регистр(который уже заполнен данным начальными). И сравниваешь что в нем лежит, если различия-пишешь, нет -не пишешь.
   dka80
 
18 - 01.11.19 - 12:28
(17) ты (10) читал? вообще компанию обанкротить хочешь?
   hhhh
 
19 - 01.11.19 - 12:29
(17) да, у них там специфичное предприятие, добавление одного справочника обходится в миллионы рублей.
   Borteg
 
20 - 01.11.19 - 12:31
(19) (18) 1sFusion предлагали?
   Borteg
 
21 - 01.11.19 - 12:34
(8) так они у тебя должны и храниться в твоем регистре. Ты же на момент записи уже обладаешь в своем модном регистре записью предыдущих значений.
   Лкфае гтв Дшсре
 
22 - 01.11.19 - 13:02
(12) (16) (18) (19) ахахахахаххах))))) Суть ответа была в том, что это потянет за собой много чего другого. У меня есть простая задача и мой руководитель 1С-ник конечно же не даст мне переписывать давно уже устоявшиеся вещи ради неё. Вопрос (9) был бессмысленным, я просто пошутил с долей шутки. Обсуждать это глупо)
   Лкфае гтв Дшсре
 
23 - 01.11.19 - 13:05
(15) Это не история изменений. В другом регистре хранятся связанные данные, которые по смыслу отделены от исходного регистра (в один регистр их не запихаешь, и не потому, что это стоит миллиарды))), и при изменении веса необходимо устанавливать маркер, что в этом другом регистре данные устарели и пользователь должен их обновить.
   Fish
 
24 - 01.11.19 - 13:31
(23) "и при изменении веса необходимо устанавливать маркер, что в этом другом регистре данные устарели и пользователь должен их обновить." - А нафига такие сложности? Если вес изменился, то он должен измениться в одном месте и для всего. Или я чего-то не понимаю?
   Cyberhawk
 
25 - 01.11.19 - 13:36
Если регистр меняется из формы записи, то легко.
Если нужно универсально, то придется подумать.
   Лкфае гтв Дшсре
 
26 - 01.11.19 - 13:39
(24) окей, ещё детальнее. В первом регистре хранятся поступающие товары. Этот регистр по сути - табличная часть документа ПоступлениеТоваров. Так было сделано давно и там очень много всего в этом регистре и связано с ним много. Во втором регистре - коды ВЭД, которые автоматически определяются на основе некоторых параметров товара. Часть параметров получаются из первого регистра. После того, как товар поступает, ему присваивается код ВЭД (но не сразу). И вот если пользователь через пару дней после поступления вдруг захочет изменить например вес товара, потому что ошибся, нужно будет проверить, что ранее присвоенный код ВЭД всё ещё актуален, либо нужно его переопределить.
   Cyberhawk
 
27 - 01.11.19 - 13:40
"проверить, что ранее присвоенный код ВЭД всё ещё актуален" // В проверке участвует значение реквизита записи первого регистра?
   Cyberhawk
 
28 - 01.11.19 - 13:41
Зачем знать, что значение реквизита у записи меняется? Просто используй новое значение в своей проверке
   Масянька
 
29 - 01.11.19 - 13:43
(26) А почему код ВЭД зависит от веса?
А почему (если так геморройно) разрешено менять вес (тем более - ошибаться)?
И, да, я очень люблю задавать "бессмысленные" вопросы.
   Лкфае гтв Дшсре
 
30 - 01.11.19 - 13:44
(27) Да, участвует.
(28) Для этого нужно постоянно пересчитывать все коды ВЭД, что очень долго и как-то не очень. Проще отследить изменение веса в одной записи
 
 Рекламное место пустует
   Масянька
 
31 - 01.11.19 - 13:44
(28) Во-о-от...
Если в коде ВЭД есть вес товара - проверяй значений.
   Масянька
 
32 - 01.11.19 - 13:45
(30) При изменении вес - изменяй код ВЭД (ту часть, что связана с весом).
   Cyberhawk
 
33 - 01.11.19 - 13:55
(30) Допустим ты отследил что вес у такой-то записи поменял свое значение с такого-то на такое-то.
Что дальше во втором регистре сделать надо?
   Лкфае гтв Дшсре
 
34 - 01.11.19 - 14:00
(33) Установить реквизит ТребуетсяКорректировка в Истину и записать в реквизит ПричинаКорректировки что-то типа "вес поменялся". Через какое-то время пользователь просматривает список присвоенных кодов ВЭД, находит эти записи и принимает решение, менять этот код ВЭД или и так сойдет.
   Лкфае гтв Дшсре
 
35 - 01.11.19 - 14:01
(33) Возможно он просто нажмет кнопку Поиск и 1с снова рассчитает код ВЭД для изменившегося веса
   Масянька
 
36 - 01.11.19 - 14:02
(35) То есть это не так уж и важно?
   Greeen
 
37 - 01.11.19 - 14:03
а регистр переодический?
   Лкфае гтв Дшсре
 
38 - 01.11.19 - 14:05
(37) Оба непериодические
   Cyberhawk
 
39 - 01.11.19 - 14:35
(34) "Установить реквизит ТребуетсяКорректировка в Истину и записать в реквизит ПричинаКорректировки" // Где установить?
   Лкфае гтв Дшсре
 
40 - 01.11.19 - 18:21
В итоге решение проблемы не было найдено. Видимо придётся и правда использовать какое-то временное хранилище для старых значений полей регистра
   pechkin
 
41 - 01.11.19 - 18:23
запрети редктироватьв списке, редактируй в форме.
а там можно все что угодно
   Сияющий в темноте
 
42 - 01.11.19 - 18:44
таки третий регистр,где последнее значение ищ первого
когда поменяли,там остается старое
когда решили,что изменение принято,записыаем измененное значение.
если кто-то хороший вернет первоначальное значение,то маркер изменения снимется
   Лкфае гтв Дшсре
 
43 - 05.11.19 - 10:36
В итоге проблема решилась с помощью передачи значения между двумя событиями - записью пустого набора и набора данных с помощью параметра сеанса.


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