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

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

К вопросу удаления записей из регистра сведений по регистратору

К вопросу удаления записей из регистра сведений по регистратору
Я
   ArturR
 
24.09.16 - 16:46
Привет!
Разъяснения прошу.
Задача вроде как простая, но никак не пойму сути.
Суть: Есть документ который в табличной части ссылается на элемент справочника. До тех пор пока документ не проведен этот элемент справочника заблокирован (что бы его не использовали в других документах).
Для этого я сделал регистр Блокировка. С одним измерением - Номенклатура.
1. При записи документа - создается запись 

Движения.Блокировка.Записывать=Истина;
Движение = Движения.Блокировка.Добавить();
Движение.Номенклатура = ТекСтрока.Номенклатура;

2. При проведении документа эта запись должна удаляться, т.е. из регистра Блокировка удалится должны записи у которых регистратор этот документ.

Поиск в Интернете дал такой код:
----------------------------------------------
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
|ЦеныНоменклатурыКонтрагентов.Регистратор
|ИЗ
|РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыКонтрагентов.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Записать();    
КонецЦикла;   
----------------------------------------------

НО! Я никак не пойму как он работает. Где в этом коде есть ссылка на нужный мне регистратор?
 
 
   Chameleon1980
 
1 - 24.09.16 - 16:47
тебе, наверное, нужно РС не подчиненный регистратору, а регистратор записывай в измерение.
   Chameleon1980
 
2 - 24.09.16 - 16:49
хотя
   jsmith
 
3 - 24.09.16 - 16:49
НЗ = Движения.Блокировка.СоздатьНаборЗаписей();
НЗ.Записать();
   Chameleon1980
 
4 - 24.09.16 - 16:51
+(2) ты жеж в этом же документе удаляешь запись.

а запрос тебе не нужен. у тебя есть ссылка. по ней отбор и записать
   PR2
 
5 - 24.09.16 - 16:53
(0) Волосы встали дыбом. Что это за мрак?
Что мешает смотреть не в регистр сведений, а в сам документ, нахрена нужен регистр сведений?
   PR2
 
6 - 24.09.16 - 16:54
+(5) Это уж не говоря о том, что за движения у непроведенного документа обычно пристреливают сразу без разбирательств.
   jsmith
 
7 - 24.09.16 - 16:55
Во-во
   ArturR
 
8 - 24.09.16 - 16:58
(6)(5) Согласен. Но как мне заблокировать элемент справочника что бы его по ошибке не использовали в другом.
   PR2
 
9 - 24.09.16 - 17:00
(8) Блин, так же как и сейчас.
Только смотреть не в регистр сведений, а в документ.
   ArturR
 
10 - 24.09.16 - 17:03
(9) Значит мне нужно при проведении удалить записи регистра Блокировка. И я так понял, что это делается просто.
Может кто подскажет как?
 
 Рекламное место пустует
   PR2
 
11 - 24.09.16 - 17:07
(10) Рукалицо
Удали нахрен вообще свой регистр сведений
Смотри сразу в документ и анализируй, проведен он или нет
   ArturR
 
12 - 24.09.16 - 17:12
Дело не в анализе документа.
Задача состоит в том, что бы элемент справочника был заблокирован от использования до тех пор пока документ ждет своего проведения. И только после проведения документа снимается блокировка с элемента.

Пробовал вот это.
НаборЗаписей = РегистрыСведений.Блокировка.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
НаборЗаписей.Записать();


не работает.
   lEvGl
 
13 - 24.09.16 - 17:13
зачем нужно такое ограничение?

Задача состоит в том, что бы элемент справочника был заблокирован от использования до тех пор пока документ ждет своего проведения. И только после проведения документа снимается блокировка с элемента.
   Chameleon1980
 
14 - 24.09.16 - 17:13
(11)
читай
"...Суть: Есть документ который в табличной части ссылается на элемент справочника. До тех пор пока документ не проведен этот элемент справочника заблокирован (что бы его не использовали в других документах). ..."

а рс для скорости. А так он за какой период будет непроведенные документы искать по номенклатуре.

а так он заглянул в рс. посмотрел есть ли там записи.

проанализировал есть ли там номенклатура из нового документа.

я так, например, смысл понял
   jsmith
 
15 - 24.09.16 - 17:15
Документ сделать измерением.
   Chameleon1980
 
16 - 24.09.16 - 17:16
(15) предлагал в (1)
   ArturR
 
17 - 24.09.16 - 17:17
(13)
Этот документ - Акт модернизации.
Сначала программно создаю печатную версию Акта. Потом он подписывается комиссией. Потом в регистрируется и только когда есть номер и дата по журналу учета - документ проводится по базе данных.
И пока документ ждет своей подписи - номенклатура, которая там используется, не должна попасть в другие акты. Это для того что бы не было двойного использования.
   jsmith
 
18 - 24.09.16 - 17:17
И чо, при событии ПриОкончанииРедактирования, при ПослеУдаления надо будет регистр колошматить?
А, еще надо документ записывать перед операциями с ТЧ.
   Chameleon1980
 
19 - 24.09.16 - 17:18
+ а что, если пометили на удаление документ?
нужно тоже об удалении записей позаботиться.
+ а что, если сняли пометку на удаления ранее помеченного документ? Но пока не провели. Записи опять писать?

если что просто не забудь про этот нюанс.

А вообще может по-другому как-то обойти?
   ArturR
 
20 - 24.09.16 - 17:18
(15) А зачем? Этот документ - регистратор.
   ArturR
 
21 - 24.09.16 - 17:19
(19) Правильно, все. Я тоже про это думал. Не могу пока придумать красивое решение. Хотя бы так хочу сделать.
   Chameleon1980
 
22 - 24.09.16 - 17:20
(20) и прямо в обработке проведения будешь записи убивать?

а ты смогешь не в обработке проведения записать в РС подчиненный регистратору?
   jsmith
 
23 - 24.09.16 - 17:20
Хотя не. Проще без РС. Просто блокировка только на элементы в записанном документе, и контроль при записи.
   Chameleon1980
 
24 - 24.09.16 - 17:21
(23) чет не понял с первого зачитывания?
   Chameleon1980
 
25 - 24.09.16 - 17:22
записанных документов может быть не один.
с разной номенклатурой.

вот вся эта номенклатура аккуратно и сложится в РС.

при проведении и пометке на удаление записи убиваем.
   ArturR
 
26 - 24.09.16 - 17:22
(22) да прямо в обработке проведения
   jsmith
 
27 - 24.09.16 - 17:23
Чет вы гоните.
   Chameleon1980
 
28 - 24.09.16 - 17:23
+ (25) все записи в рс по данному регистратору.
тут и заморачиваться не нужно про удаленные или вновь добавленные строки.

отбор по данному документу (но по измерению) и убитие этих записей в нужный момент и обратное
   ArturR
 
29 - 24.09.16 - 17:23
(25)все правильно. В том то и вопрос - как убить записи.
   jsmith
 
30 - 24.09.16 - 17:24
Берем документ. При записи контроль на то, что есть такие же элементы в другом непроведенном доке - отказ.
При редактировании элемента такой же запрос - отказ.
Или я не так понял задачу.
   Chameleon1980
 
31 - 24.09.16 - 17:24
(27) кому жто?
   Лефмихалыч
 
32 - 24.09.16 - 17:25
(5) В РС есть смысл. Чем больше документов будет появляться в базе, тем более ресурсоемкой будет задача определить доступность номенклатуры. Даже при включении индекирования. Регистр при проведении документа очищается, то есть в нем ни когда не будет много записей и с течением времени он не будет расти.
   PR2
 
33 - 24.09.16 - 17:25
Я как в дурдом попал.

А что, нахождение элемента справочника в каком-то регистре сведений сразу запрещает его использование где-либо?
 
 
   ArturR
 
34 - 24.09.16 - 17:25
(28) т.е. нужно документ именно в измерение загнать?
   Лефмихалыч
 
35 - 24.09.16 - 17:26
(34) нет
   ArturR
 
36 - 24.09.16 - 17:27
(33) нет конечно. :) Просто если элемент в РС есть, то значит при проверке на запись документа я дам Отказ=Истина.
   Лефмихалыч
 
37 - 24.09.16 - 17:27
(33) напряги воображение, Рома
   PR2
 
38 - 24.09.16 - 17:28
(32) Я как бы в курсе.
Но вот незадача.
Ради этой сомнительной выгоды мы совершает просто вопиющий акт вандализма, просто вообще руки вырвать и выкинуть.
А если уж зайдет речь про объем данных, а я на 1000 процентов уверен, что в (0) и рядом не пахнет каким-нить мало-мальски значимым объемом данных, то тогда нужно в справочник добавлять реквизит "НеТрогатьАТоРукиВырву" и его уже обрабатывать.
   lEvGl
 
39 - 24.09.16 - 17:28
странная ситуация, мне кажется, что решение больше организационное. Технически: при печати добавили в не подчиненный регистр запись с номенклатурой, при проведении удалили, а при печати (в момент попытки создания нового документа с такой номенклатурой) проверять регистр и не давать печатать. Ситуации с отменой/удалением документа в базе нужно исключить, так как будет несоответствие базы журналу учета (он я так понимаю - первичен).
пс. странно, что после проведения документа номенклатуру можно использовать снова.
   ArturR
 
40 - 24.09.16 - 17:29
(37) :) Да напрягаю, напрягаю. Тока видать так напряг что сам себя боюсь
   PR2
 
41 - 24.09.16 - 17:30
(37) Да я как бы напряг, я просто ТС на (36) спровоцировал, чтобы у него мозг начал работать и наконец сообразил, что не один ли хрен, что обрабатывать, регистр сведений, документ или справочник.
А если нет разницы, то _нахрена_ вся эта свинопляска с регистром сведений и дебильным переставлением проведения с ног на уши?
   Лефмихалыч
 
42 - 24.09.16 - 17:30
(38) ты можешь быть уверен в чем угодно
   PR2
 
43 - 24.09.16 - 17:31
(40) Он не тебе, он мне
   PR2
 
44 - 24.09.16 - 17:31
(42) Я в курсе
   ArturR
 
45 - 24.09.16 - 17:34
Пацаны. Далеко от темы ушли. Чем впрочем грешат форумы. Вернемся к сути вопроса.
Дано.
1. Регистр и в нем движения.
2. Документ который эти движения сделал.

Задача. Удалить движения которые сделал этот документ.
   PR2
 
46 - 24.09.16 - 17:37
(45) Рукалицо
Движения.Блокировка.Прочитать();
Движения.Блокировка.Очистить();

Не говори, пожалуйста, что это я тебе подсказал.
Пацаны не поймут.
   lEvGl
 
47 - 24.09.16 - 17:39
пацаны обсудили, что им интересно и уже разошлись)
   ArturR
 
48 - 24.09.16 - 17:42
(46) Спасибо.
   PR2
 
49 - 24.09.16 - 17:42
(48) Тссс, мы же договорились
 
 Рекламное место пустует
   Web00001
 
50 - 24.09.16 - 17:43
(45)Ты ерундой страдаешь потому что.
Узнать использовалась ли это номенклатура в проведенных документах:

ВЫБРАТЬ
    ЧекККМТовары.Ссылка
ИЗ
    Документ.ЧекККМ.Товары КАК ЧекККМТовары
ГДЕ
    ЧекККМТовары.Ссылка.Проведен
    И ЧекККМТовары.Номенклатура = &Номенклатура

Удалить все движения в указанном регистре по регистратору
НаборВРегистр = РегистрыСвдений.ТвойРегистр.СоздатьНаборЗаписей();
НаборВРегистр.Отбор.Регистратор.Значение = НужныйДок;
НаборВРегистр.Записать(Истина);
Я не пробовал этот код, но вроде как он не может не работать.
   Chameleon1980
 
51 - 24.09.16 - 17:47
(50) запрос-то на х?

мы в обработке проведения удаляем записи т.е. у нас есть сссылка уже.
   ArturR
 
52 - 24.09.16 - 17:52
Все нормально. Все работает. Тока не понимаю как. :(

Как этот код написанный в ОбработкеПроведения  "Движения.Блокировка" понимает что нужно выбрать именно по этому документу.
   PR2
 
53 - 24.09.16 - 17:54
(52) Не парься, я тоже не понимаю, вообще мало кто это понимает.
Бытует легенда, что это потому, что код находится в модуле конкретного документа, но, скорее всего, это просто древняя красивая легенда.
   Chameleon1980
 
54 - 24.09.16 - 17:56
блин, а мне не понятно - кому что здесь не понятно?
   PR2
 
55 - 24.09.16 - 17:58
(54) Мне непонятно. Нахрена здесь регистр сведений?
   ArturR
 
56 - 24.09.16 - 17:59
(53)(54) Ладно пацаны. Хоре лохать меня :) Спасибо за помощь.
(55) По другому я не придумал. Вроде как ничего идейка. Есть пару тонких моментов (19).
   PR2
 
57 - 24.09.16 - 18:01
(56) По-другому (5) или (38)
   Chameleon1980
 
58 - 24.09.16 - 18:02
(55) все нормально и с РС ну или с добавлением реквизита номенклатуре.
   Chameleon1980
 
59 - 24.09.16 - 18:03
+(58) в рс и правда, думаю записей не так много будет. все операции по поиску будут быстрее, чем другие варианты (ИМХО). Вот хотя бы по-этому мне с РС больше нравится вариант.
   PR2
 
60 - 24.09.16 - 18:03
(58) С РС нормально, допустим.
Ненормально с движениями у непроведенного документа.
   PR2
 
61 - 24.09.16 - 18:04
(59) Хочешь оптимизировать, пиши в справочник, че
   Chameleon1980
 
62 - 24.09.16 - 18:05
(60) а чего бы и нет.

Если рс сделать не подчиненным (говорилось не раз выше), а через измерение.
   Злопчинский
 
63 - 24.09.16 - 18:06
Мне непонятно
Почему нельзя в номенклатуре тупо возводить или снимать флажок ? Без всяких рс?
   Chameleon1980
 
64 - 24.09.16 - 18:06
(61) с фига ли из справочника быстрее найдется что заблокировано, а что нет?

в рс только конкретные записи про блокировку.

в ситуации со справочником запрос (на больших объемах справочника) будет дольше.
   PR2
 
65 - 24.09.16 - 18:06
(62) Да в принципе можно и унитаз на кухне прикрутить, ничего такого, в принципе
   Chameleon1980
 
66 - 24.09.16 - 18:07
(63) потому-что (64)
   PR2
 
67 - 24.09.16 - 18:07
(63) Мне тоже непонятно. Табу, наверное или комплексы какие-то.
   PR2
 
68 - 24.09.16 - 18:08
(64) Из какого справочника, ты издеваешься?
Я при обращении к конкретному элементу справочника уже сразу получу инфу, заблокирован он или нет, даже лезть никуда не нужно.
   Chameleon1980
 
69 - 24.09.16 - 18:08
+(64) потом жеж ненужные записи из рс уйдут когда документ двинувший рс проведется.
и соответственно РС вообще ничтожный будет
   Chameleon1980
 
70 - 24.09.16 - 18:09
(68) не прав - извиняюсь
   Chameleon1980
 
71 - 24.09.16 - 18:09
(70) видать в душ пора и спать
   Chameleon1980
 
72 - 24.09.16 - 18:10
видать и в правду я зациклился на рс просто
   Злопчинский
 
73 - 24.09.16 - 18:12
Чуден и удивителен мир снеговик

Многия возможности порождают многия печали
   PR2
 
74 - 24.09.16 - 18:13
(72) Бывает :))
Заметил, частенько кто-нить вкинет в (0) бредятину и ее потом двести постов перетирают, как оптимизировать, вместо того, чтобы задать вопрос, а нахрена вообще она такая нужна.
И потом еще, когда все-таки кто-нить это спросит, полста стыдливо-умно-важных постов на тему того, как нехорошо менять объекты вместо того, чтобы делать новые, как потом сложно обновлять базу будет, какие разные бывают задачи и случаи и как не все сразу однозначно понятно с первого взгляда и прочее бла-бла-бла.
   Chameleon1980
 
75 - 24.09.16 - 18:13
стоп. а как мы соотнесем потом документ и номенклатуру?

если у нас только флаг будет в номенклатуре?

или просто не давать добавлять в новый документ позиции с уже возведенным флагом.

а при проведении записанного, но не проведенного документа тупо снимать флаг со всех присутвтующих в документе позиций
   Chameleon1980
 
76 - 24.09.16 - 18:14
а если позиция заблокирована - тупо открыта кем-то - мы запишем программно флаг при этом?
   PR2
 
77 - 24.09.16 - 18:14
(75) Никак. А есть такая задача? Если нужно, тогда реквизит будет не булево, а ссылка на документ блокировки.
   PR2
 
78 - 24.09.16 - 18:15
(76) Если не получится записать программно, то говорим, что жизнь не удалась и отказ при записи документа.
   Chameleon1980
 
79 - 24.09.16 - 18:16
(78)а групповое перепроведение кстати что у нас будет ?
   PR2
 
80 - 24.09.16 - 18:17
(79) То же самое. Мы же не предупреждение выдаем, а сообщить.
   Chameleon1980
 
81 - 24.09.16 - 18:18
тупо по всем ошибочным выдать сообщения.

ну там на юзере будет ответственность за проведение не проведенных.

с рс же блокировки такой вероятность меньше.

короче я в душ
   PR2
 
82 - 24.09.16 - 18:25
(81) Меньше, да, потому что регистр все-таки служебный, в отличие от справочника.
Но если уж совсем делать по уму, то нужно плясать как минимум от (19).
Берешь ты документ, пометил на удаление, у тебя справочник заблокирован, потом хренак и удалил документ физически.
И все, элемент заблокирован навечно.
Поэтому совсем по-правильному делать только через проверку запросом наличия документа-блокировки.
Или (если это правильно логически) как минимум при пометке документа на удаление разблокировать элемент.
И помним, что при этом остается как некрасивый момент непосредственное удаление.
   Web00001
 
83 - 24.09.16 - 18:29
это прям реально чушь, вот документов много и искать он в проведенных документах будет вечность. Умиляют оптмизитаторы несуществующей нагрузки. У меня в справочнике с несколькими миллионами записей поиск происходит мгновенно. Так на хрена регистры городить, если вопрос только один есть ли номенклатура в проведенных документах или нет? Пусть запрос и ответит на этот вопрос а не регистр сведений.
   jsmith
 
84 - 24.09.16 - 18:30
Вы еще тут обсуждаете что ли.
   PR2
 
85 - 24.09.16 - 18:31
(83) +1
Особенно поиск по индексированному реквизиту прямо обнапрягается, чувствую.
   PR2
 
86 - 24.09.16 - 18:31
(84) А ты из магазина вернулся?
   ArturR
 
87 - 24.09.16 - 18:33
А вот идея с реквизитом элемента справочника мне в голову приходила. Только вот не хотел реквизит лишний заводить.
(82) придется проверку делать.

(83) мне не нужно лопатить проведенные документы.

По замыслу в регистре максимум 10-15 записей будет.
   PR2
 
88 - 24.09.16 - 18:34
(87) LOL
Ну да, лучше лишний регистр сделать :))
   PR2
 
89 - 24.09.16 - 18:34
(87) >>придется проверку делать
Какую?
   ArturR
 
90 - 24.09.16 - 18:34
(89) ПередУдалением(Отказ)
   PR2
 
91 - 24.09.16 - 18:35
(87) >>По замыслу в регистре максимум 10-15 записей будет
_Срочно_ регистр, вдруг 1С не справится :))
   PR2
 
92 - 24.09.16 - 18:35
(90) Ты издеваешься?
   Фрэнки
 
93 - 24.09.16 - 18:36
если еще раздумья, как сделать лучше, еще не закончены, то предлагаю прекратить мусолить состояние документа только по признаку Проведен или НеПроведен, а добавить ему Статус и  перепроводить документ при установке нового нового статуса. Даже в типовых уже есть применение статусов. Ну или вместо статуса документа можно определять наличие значений в реквизите НомерПоЖурналу А если смена статуса удаляет - Очистить() движение регистра, то все это уже есть и выше об этом сказано
   ArturR
 
94 - 24.09.16 - 18:37
(88) а что на самом деле лучше? Лишний регистр и или реквизит?
(наверно реквизит)

(90) нет. А что не так?
   PR2
 
95 - 24.09.16 - 18:38
(94) Зависит от ситуации. В твоем случае однозначно реквизит.
   PR2
 
96 - 24.09.16 - 18:38
(94) ПередУдалением(Отказ) — это проверка?

https://www.youtube.com/watch?v=d1vRLfuF-wM
   ArturR
 
97 - 24.09.16 - 18:42
(93) а вот это идея! Т.е. по факту получится что нужно два раза провести. А статусы: НаПодписи, Зарегистрирован.

Нужно обмозговать. Спасибо за идею.
   ArturR
 
98 - 24.09.16 - 18:42
(96) звука нету. На работе гляну.
   ArturR
 
99 - 24.09.16 - 18:43
(96) хотя и так понятно :))
   PR2
 
100 - 24.09.16 - 18:46
(97) Извини, отходил ненадолго, из глав кровь пошла, ходил умываться
  1  2   

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