|
К вопросу удаления записей из регистра сведений по регистратору | ☑ | ||
---|---|---|---|---|
0
ArturR
24.09.16
✎
16:46
|
Привет!
Разъяснения прошу. Задача вроде как простая, но никак не пойму сути. Суть: Есть документ который в табличной части ссылается на элемент справочника. До тех пор пока документ не проведен этот элемент справочника заблокирован (что бы его не использовали в других документах). Для этого я сделал регистр Блокировка. С одним измерением - Номенклатура. 1. При записи документа - создается запись Движения.Блокировка.Записывать=Истина; Движение = Движения.Блокировка.Добавить(); Движение.Номенклатура = ТекСтрока.Номенклатура; 2. При проведении документа эта запись должна удаляться, т.е. из регистра Блокировка удалится должны записи у которых регистратор этот документ. Поиск в Интернете дал такой код: ---------------------------------------------- Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ |ЦеныНоменклатурыКонтрагентов.Регистратор |ИЗ |РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей(); Пока Выборка.Следующий() Цикл НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); НаборЗаписей.Записать(); КонецЦикла; ---------------------------------------------- НО! Я никак не пойму как он работает. Где в этом коде есть ссылка на нужный мне регистратор? |
|||
5
PR2
24.09.16
✎
16:53
|
(0) Волосы встали дыбом. Что это за мрак?
Что мешает смотреть не в регистр сведений, а в сам документ, нахрена нужен регистр сведений? |
|||
6
PR2
24.09.16
✎
16:54
|
+(5) Это уж не говоря о том, что за движения у непроведенного документа обычно пристреливают сразу без разбирательств.
|
|||
7
jsmith
24.09.16
✎
16:55
|
Во-во
|
|||
8
ArturR
24.09.16
✎
16:58
|
(6)(5) Согласен. Но как мне заблокировать элемент справочника что бы его по ошибке не использовали в другом.
|
|||
9
PR2
24.09.16
✎
17:00
|
(8) Блин, так же как и сейчас.
Только смотреть не в регистр сведений, а в документ. |
|||
10
ArturR
24.09.16
✎
17:03
|
(9) Значит мне нужно при проведении удалить записи регистра Блокировка. И я так понял, что это делается просто.
Может кто подскажет как? |
|||
11
PR2
24.09.16
✎
17:07
|
(10) Рукалицо
Удали нахрен вообще свой регистр сведений Смотри сразу в документ и анализируй, проведен он или нет |
|||
12
ArturR
24.09.16
✎
17:12
|
Дело не в анализе документа.
Задача состоит в том, что бы элемент справочника был заблокирован от использования до тех пор пока документ ждет своего проведения. И только после проведения документа снимается блокировка с элемента. Пробовал вот это. НаборЗаписей = РегистрыСведений.Блокировка.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка); НаборЗаписей.Записать(); не работает. |
|||
13
lEvGl
гуру
24.09.16
✎
17:13
|
зачем нужно такое ограничение?
Задача состоит в том, что бы элемент справочника был заблокирован от использования до тех пор пока документ ждет своего проведения. И только после проведения документа снимается блокировка с элемента. |
|||
14
Chameleon1980
24.09.16
✎
17:13
|
(11)
читай "...Суть: Есть документ который в табличной части ссылается на элемент справочника. До тех пор пока документ не проведен этот элемент справочника заблокирован (что бы его не использовали в других документах). ..." а рс для скорости. А так он за какой период будет непроведенные документы искать по номенклатуре. а так он заглянул в рс. посмотрел есть ли там записи. проанализировал есть ли там номенклатура из нового документа. я так, например, смысл понял |
|||
15
jsmith
24.09.16
✎
17:15
|
Документ сделать измерением.
|
|||
16
Chameleon1980
24.09.16
✎
17:16
|
(15) предлагал в (1)
|
|||
17
ArturR
24.09.16
✎
17:17
|
(13)
Этот документ - Акт модернизации. Сначала программно создаю печатную версию Акта. Потом он подписывается комиссией. Потом в регистрируется и только когда есть номер и дата по журналу учета - документ проводится по базе данных. И пока документ ждет своей подписи - номенклатура, которая там используется, не должна попасть в другие акты. Это для того что бы не было двойного использования. |
|||
18
jsmith
24.09.16
✎
17:17
|
И чо, при событии ПриОкончанииРедактирования, при ПослеУдаления надо будет регистр колошматить?
А, еще надо документ записывать перед операциями с ТЧ. |
|||
19
Chameleon1980
24.09.16
✎
17:18
|
+ а что, если пометили на удаление документ?
нужно тоже об удалении записей позаботиться. + а что, если сняли пометку на удаления ранее помеченного документ? Но пока не провели. Записи опять писать? если что просто не забудь про этот нюанс. А вообще может по-другому как-то обойти? |
|||
20
ArturR
24.09.16
✎
17:18
|
(15) А зачем? Этот документ - регистратор.
|
|||
21
ArturR
24.09.16
✎
17:19
|
(19) Правильно, все. Я тоже про это думал. Не могу пока придумать красивое решение. Хотя бы так хочу сделать.
|
|||
22
Chameleon1980
24.09.16
✎
17:20
|
(20) и прямо в обработке проведения будешь записи убивать?
а ты смогешь не в обработке проведения записать в РС подчиненный регистратору? |
|||
23
jsmith
24.09.16
✎
17:20
|
Хотя не. Проще без РС. Просто блокировка только на элементы в записанном документе, и контроль при записи.
|
|||
24
Chameleon1980
24.09.16
✎
17:21
|
(23) чет не понял с первого зачитывания?
|
|||
25
Chameleon1980
24.09.16
✎
17:22
|
записанных документов может быть не один.
с разной номенклатурой. вот вся эта номенклатура аккуратно и сложится в РС. при проведении и пометке на удаление записи убиваем. |
|||
26
ArturR
24.09.16
✎
17:22
|
(22) да прямо в обработке проведения
|
|||
27
jsmith
24.09.16
✎
17:23
|
Чет вы гоните.
|
|||
28
Chameleon1980
24.09.16
✎
17:23
|
+ (25) все записи в рс по данному регистратору.
тут и заморачиваться не нужно про удаленные или вновь добавленные строки. отбор по данному документу (но по измерению) и убитие этих записей в нужный момент и обратное |
|||
29
ArturR
24.09.16
✎
17:23
|
(25)все правильно. В том то и вопрос - как убить записи.
|
|||
30
jsmith
24.09.16
✎
17:24
|
Берем документ. При записи контроль на то, что есть такие же элементы в другом непроведенном доке - отказ.
При редактировании элемента такой же запрос - отказ. Или я не так понял задачу. |
|||
31
Chameleon1980
24.09.16
✎
17:24
|
(27) кому жто?
|
|||
32
Лефмихалыч
24.09.16
✎
17:25
|
(5) В РС есть смысл. Чем больше документов будет появляться в базе, тем более ресурсоемкой будет задача определить доступность номенклатуры. Даже при включении индекирования. Регистр при проведении документа очищается, то есть в нем ни когда не будет много записей и с течением времени он не будет расти.
|
|||
33
PR2
24.09.16
✎
17:25
|
Я как в дурдом попал.
А что, нахождение элемента справочника в каком-то регистре сведений сразу запрещает его использование где-либо? |
|||
34
ArturR
24.09.16
✎
17:25
|
(28) т.е. нужно документ именно в измерение загнать?
|
|||
35
Лефмихалыч
24.09.16
✎
17:26
|
(34) нет
|
|||
36
ArturR
24.09.16
✎
17:27
|
(33) нет конечно. :) Просто если элемент в РС есть, то значит при проверке на запись документа я дам Отказ=Истина.
|
|||
37
Лефмихалыч
24.09.16
✎
17:27
|
(33) напряги воображение, Рома
|
|||
38
PR2
24.09.16
✎
17:28
|
(32) Я как бы в курсе.
Но вот незадача. Ради этой сомнительной выгоды мы совершает просто вопиющий акт вандализма, просто вообще руки вырвать и выкинуть. А если уж зайдет речь про объем данных, а я на 1000 процентов уверен, что в (0) и рядом не пахнет каким-нить мало-мальски значимым объемом данных, то тогда нужно в справочник добавлять реквизит "НеТрогатьАТоРукиВырву" и его уже обрабатывать. |
|||
39
lEvGl
гуру
24.09.16
✎
17:28
|
странная ситуация, мне кажется, что решение больше организационное. Технически: при печати добавили в не подчиненный регистр запись с номенклатурой, при проведении удалили, а при печати (в момент попытки создания нового документа с такой номенклатурой) проверять регистр и не давать печатать. Ситуации с отменой/удалением документа в базе нужно исключить, так как будет несоответствие базы журналу учета (он я так понимаю - первичен).
пс. странно, что после проведения документа номенклатуру можно использовать снова. |
|||
40
ArturR
24.09.16
✎
17:29
|
(37) :) Да напрягаю, напрягаю. Тока видать так напряг что сам себя боюсь
|
|||
41
PR2
24.09.16
✎
17:30
|
(37) Да я как бы напряг, я просто ТС на (36) спровоцировал, чтобы у него мозг начал работать и наконец сообразил, что не один ли хрен, что обрабатывать, регистр сведений, документ или справочник.
А если нет разницы, то _нахрена_ вся эта свинопляска с регистром сведений и дебильным переставлением проведения с ног на уши? |
|||
42
Лефмихалыч
24.09.16
✎
17:30
|
(38) ты можешь быть уверен в чем угодно
|
|||
43
PR2
24.09.16
✎
17:31
|
(40) Он не тебе, он мне
|
|||
44
PR2
24.09.16
✎
17:31
|
(42) Я в курсе
|
|||
45
ArturR
24.09.16
✎
17:34
|
Пацаны. Далеко от темы ушли. Чем впрочем грешат форумы. Вернемся к сути вопроса.
Дано. 1. Регистр и в нем движения. 2. Документ который эти движения сделал. Задача. Удалить движения которые сделал этот документ. |
|||
46
PR2
24.09.16
✎
17:37
|
(45) Рукалицо
Не говори, пожалуйста, что это я тебе подсказал. Пацаны не поймут. |
|||
47
lEvGl
гуру
24.09.16
✎
17:39
|
пацаны обсудили, что им интересно и уже разошлись)
|
|||
48
ArturR
24.09.16
✎
17:42
|
(46) Спасибо.
|
|||
49
PR2
24.09.16
✎
17:42
|
(48) Тссс, мы же договорились
|
|||
50
Web00001
24.09.16
✎
17:43
|
(45)Ты ерундой страдаешь потому что.
Узнать использовалась ли это номенклатура в проведенных документах: ВЫБРАТЬ ЧекККМТовары.Ссылка ИЗ Документ.ЧекККМ.Товары КАК ЧекККМТовары ГДЕ ЧекККМТовары.Ссылка.Проведен И ЧекККМТовары.Номенклатура = &Номенклатура Удалить все движения в указанном регистре по регистратору НаборВРегистр = РегистрыСвдений.ТвойРегистр.СоздатьНаборЗаписей(); НаборВРегистр.Отбор.Регистратор.Значение = НужныйДок; НаборВРегистр.Записать(Истина); Я не пробовал этот код, но вроде как он не может не работать. |
|||
51
Chameleon1980
24.09.16
✎
17:47
|
(50) запрос-то на х?
мы в обработке проведения удаляем записи т.е. у нас есть сссылка уже. |
|||
52
ArturR
24.09.16
✎
17:52
|
Все нормально. Все работает. Тока не понимаю как. :(
Как этот код написанный в ОбработкеПроведения "Движения.Блокировка" понимает что нужно выбрать именно по этому документу. |
|||
53
PR2
24.09.16
✎
17:54
|
(52) Не парься, я тоже не понимаю, вообще мало кто это понимает.
Бытует легенда, что это потому, что код находится в модуле конкретного документа, но, скорее всего, это просто древняя красивая легенда. |
|||
54
Chameleon1980
24.09.16
✎
17:56
|
блин, а мне не понятно - кому что здесь не понятно?
|
|||
55
PR2
24.09.16
✎
17:58
|
(54) Мне непонятно. Нахрена здесь регистр сведений?
|
|||
56
ArturR
24.09.16
✎
17:59
|
(53)(54) Ладно пацаны. Хоре лохать меня :) Спасибо за помощь.
(55) По другому я не придумал. Вроде как ничего идейка. Есть пару тонких моментов (19). |
|||
57
PR2
24.09.16
✎
18:01
|
(56) По-другому (5) или (38)
|
|||
58
Chameleon1980
24.09.16
✎
18:02
|
(55) все нормально и с РС ну или с добавлением реквизита номенклатуре.
|
|||
59
Chameleon1980
24.09.16
✎
18:03
|
+(58) в рс и правда, думаю записей не так много будет. все операции по поиску будут быстрее, чем другие варианты (ИМХО). Вот хотя бы по-этому мне с РС больше нравится вариант.
|
|||
60
PR2
24.09.16
✎
18:03
|
(58) С РС нормально, допустим.
Ненормально с движениями у непроведенного документа. |
|||
61
PR2
24.09.16
✎
18:04
|
(59) Хочешь оптимизировать, пиши в справочник, че
|
|||
62
Chameleon1980
24.09.16
✎
18:05
|
(60) а чего бы и нет.
Если рс сделать не подчиненным (говорилось не раз выше), а через измерение. |
|||
63
Злопчинский
24.09.16
✎
18:06
|
Мне непонятно
Почему нельзя в номенклатуре тупо возводить или снимать флажок ? Без всяких рс? |
|||
64
Chameleon1980
24.09.16
✎
18:06
|
(61) с фига ли из справочника быстрее найдется что заблокировано, а что нет?
в рс только конкретные записи про блокировку. в ситуации со справочником запрос (на больших объемах справочника) будет дольше. |
|||
65
PR2
24.09.16
✎
18:06
|
(62) Да в принципе можно и унитаз на кухне прикрутить, ничего такого, в принципе
|
|||
66
Chameleon1980
24.09.16
✎
18:07
|
(63) потому-что (64)
|
|||
67
PR2
24.09.16
✎
18:07
|
(63) Мне тоже непонятно. Табу, наверное или комплексы какие-то.
|
|||
68
PR2
24.09.16
✎
18:08
|
(64) Из какого справочника, ты издеваешься?
Я при обращении к конкретному элементу справочника уже сразу получу инфу, заблокирован он или нет, даже лезть никуда не нужно. |
|||
69
Chameleon1980
24.09.16
✎
18:08
|
+(64) потом жеж ненужные записи из рс уйдут когда документ двинувший рс проведется.
и соответственно РС вообще ничтожный будет |
|||
70
Chameleon1980
24.09.16
✎
18:09
|
(68) не прав - извиняюсь
|
|||
71
Chameleon1980
24.09.16
✎
18:09
|
(70) видать в душ пора и спать
|
|||
72
Chameleon1980
24.09.16
✎
18:10
|
видать и в правду я зациклился на рс просто
|
|||
73
Злопчинский
24.09.16
✎
18:12
|
Чуден и удивителен мир снеговик
Многия возможности порождают многия печали |
|||
74
PR2
24.09.16
✎
18:13
|
(72) Бывает :))
Заметил, частенько кто-нить вкинет в (0) бредятину и ее потом двести постов перетирают, как оптимизировать, вместо того, чтобы задать вопрос, а нахрена вообще она такая нужна. И потом еще, когда все-таки кто-нить это спросит, полста стыдливо-умно-важных постов на тему того, как нехорошо менять объекты вместо того, чтобы делать новые, как потом сложно обновлять базу будет, какие разные бывают задачи и случаи и как не все сразу однозначно понятно с первого взгляда и прочее бла-бла-бла. |
|||
75
Chameleon1980
24.09.16
✎
18:13
|
стоп. а как мы соотнесем потом документ и номенклатуру?
если у нас только флаг будет в номенклатуре? или просто не давать добавлять в новый документ позиции с уже возведенным флагом. а при проведении записанного, но не проведенного документа тупо снимать флаг со всех присутвтующих в документе позиций |
|||
76
Chameleon1980
24.09.16
✎
18:14
|
а если позиция заблокирована - тупо открыта кем-то - мы запишем программно флаг при этом?
|
|||
77
PR2
24.09.16
✎
18:14
|
(75) Никак. А есть такая задача? Если нужно, тогда реквизит будет не булево, а ссылка на документ блокировки.
|
|||
78
PR2
24.09.16
✎
18:15
|
(76) Если не получится записать программно, то говорим, что жизнь не удалась и отказ при записи документа.
|
|||
79
Chameleon1980
24.09.16
✎
18:16
|
(78)а групповое перепроведение кстати что у нас будет ?
|
|||
80
PR2
24.09.16
✎
18:17
|
(79) То же самое. Мы же не предупреждение выдаем, а сообщить.
|
|||
81
Chameleon1980
24.09.16
✎
18:18
|
тупо по всем ошибочным выдать сообщения.
ну там на юзере будет ответственность за проведение не проведенных. с рс же блокировки такой вероятность меньше. короче я в душ |
|||
82
PR2
24.09.16
✎
18:25
|
(81) Меньше, да, потому что регистр все-таки служебный, в отличие от справочника.
Но если уж совсем делать по уму, то нужно плясать как минимум от (19). Берешь ты документ, пометил на удаление, у тебя справочник заблокирован, потом хренак и удалил документ физически. И все, элемент заблокирован навечно. Поэтому совсем по-правильному делать только через проверку запросом наличия документа-блокировки. Или (если это правильно логически) как минимум при пометке документа на удаление разблокировать элемент. И помним, что при этом остается как некрасивый момент непосредственное удаление. |
|||
83
Web00001
24.09.16
✎
18:29
|
это прям реально чушь, вот документов много и искать он в проведенных документах будет вечность. Умиляют оптмизитаторы несуществующей нагрузки. У меня в справочнике с несколькими миллионами записей поиск происходит мгновенно. Так на хрена регистры городить, если вопрос только один есть ли номенклатура в проведенных документах или нет? Пусть запрос и ответит на этот вопрос а не регистр сведений.
|
|||
84
jsmith
24.09.16
✎
18:30
|
Вы еще тут обсуждаете что ли.
|
|||
85
PR2
24.09.16
✎
18:31
|
(83) +1
Особенно поиск по индексированному реквизиту прямо обнапрягается, чувствую. |
|||
86
PR2
24.09.16
✎
18:31
|
(84) А ты из магазина вернулся?
|
|||
87
ArturR
24.09.16
✎
18:33
|
А вот идея с реквизитом элемента справочника мне в голову приходила. Только вот не хотел реквизит лишний заводить.
(82) придется проверку делать. (83) мне не нужно лопатить проведенные документы. По замыслу в регистре максимум 10-15 записей будет. |
|||
88
PR2
24.09.16
✎
18:34
|
(87) LOL
Ну да, лучше лишний регистр сделать :)) |
|||
89
PR2
24.09.16
✎
18:34
|
(87) >>придется проверку делать
Какую? |
|||
90
ArturR
24.09.16
✎
18:34
|
(89) ПередУдалением(Отказ)
|
|||
91
PR2
24.09.16
✎
18:35
|
(87) >>По замыслу в регистре максимум 10-15 записей будет
_Срочно_ регистр, вдруг 1С не справится :)) |
|||
92
PR2
24.09.16
✎
18:35
|
(90) Ты издеваешься?
|
|||
93
Фрэнки
24.09.16
✎
18:36
|
если еще раздумья, как сделать лучше, еще не закончены, то предлагаю прекратить мусолить состояние документа только по признаку Проведен или НеПроведен, а добавить ему Статус и перепроводить документ при установке нового нового статуса. Даже в типовых уже есть применение статусов. Ну или вместо статуса документа можно определять наличие значений в реквизите НомерПоЖурналу А если смена статуса удаляет - Очистить() движение регистра, то все это уже есть и выше об этом сказано
|
|||
94
ArturR
24.09.16
✎
18:37
|
(88) а что на самом деле лучше? Лишний регистр и или реквизит?
(наверно реквизит) (90) нет. А что не так? |
|||
95
PR2
24.09.16
✎
18:38
|
(94) Зависит от ситуации. В твоем случае однозначно реквизит.
|
|||
96
PR2
24.09.16
✎
18:38
|
||||
97
ArturR
24.09.16
✎
18:42
|
(93) а вот это идея! Т.е. по факту получится что нужно два раза провести. А статусы: НаПодписи, Зарегистрирован.
Нужно обмозговать. Спасибо за идею. |
|||
98
ArturR
24.09.16
✎
18:42
|
(96) звука нету. На работе гляну.
|
|||
99
ArturR
24.09.16
✎
18:43
|
(96) хотя и так понятно :))
|
|||
100
PR2
24.09.16
✎
18:46
|
(97) Извини, отходил ненадолго, из глав кровь пошла, ходил умываться
|
|||
101
PR2
24.09.16
✎
18:47
|
+(100) Пойду за попкорном и успокоительным что ли схожу
|
|||
102
ArturR
24.09.16
✎
18:50
|
(100)(101) Да ладно тебе.
Думаю вопрос закрыт. Всем еще раз спасибо! |
|||
103
PR2
24.09.16
✎
18:53
|
(102) Как? А (93) обсудить? Шикарная же идея, но столько нюансов.
|
|||
104
DrZombi
гуру
24.09.16
✎
19:13
|
(0) Движения.Блокировка.Записывать=Истина;
Движение = Движения.Блокировка.Добавить(); Движение.Номенклатура = ТекСтрока.Номенклатура; ... Я тебя удивлю, но если перепровести проведенный документ, то записей станет больше. Если не удалять предыдущие записи :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |