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 | |||
PR2 9 - 24.09.16 - 17:00 | |||
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 | |||
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 | |||
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 | |||
PR2 57 - 24.09.16 - 18:01 | |||
Chameleon1980 58 - 24.09.16 - 18:02 | (55) все нормально и с РС ну или с добавлением реквизита номенклатуре. | ||
Chameleon1980 59 - 24.09.16 - 18:03 | +(58) в рс и правда, думаю записей не так много будет. все операции по поиску будут быстрее, чем другие варианты (ИМХО). Вот хотя бы по-этому мне с РС больше нравится вариант. | ||
PR2 60 - 24.09.16 - 18:03 | Рекламное место пустует | ||
PR2 61 - 24.09.16 - 18:04 | (59) Хочешь оптимизировать, пиши в справочник, че | ||
Chameleon1980 62 - 24.09.16 - 18:05 | |||
Злопчинский 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 | |||
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 | |||
PR2 86 - 24.09.16 - 18:31 | (84) А ты из магазина вернулся? | ||
ArturR 87 - 24.09.16 - 18:33 | |||
PR2 88 - 24.09.16 - 18:34 | (87) LOL Ну да, лучше лишний регистр сделать :)) | ||
PR2 89 - 24.09.16 - 18:34 | |||
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 | |||
PR2 95 - 24.09.16 - 18:38 | (94) Зависит от ситуации. В твоем случае однозначно реквизит. | ||
PR2 96 - 24.09.16 - 18:38 | |||
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 ► |
Список тем форума
|