RLS к табличной части документа Необходимо: 1.если хоть один из товаров имеет пометку удаления - не разрешать запись документа. 2.это должно действовать с определенной даты управляемые формы (хотя для RLS это не сильно важно). Текст ниже НЕ работает РеализацияТоваровУслуг ГДЕ (НЕ РеализацияТоваровУслуг.Ссылка В (ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ НЕ РеализацияТоваровУслугТовары.Номенклатура.ПометкаУдаления )) (подглядел в каком-то FAQ по RLS) пробовал через левое соединение - что типа такого: РеализацияТоваровУслуг ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка КАК Ссылка ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ НЕ РеализацияТоваровУслугТовары.Номенклатура.ПометкаУдаления) КАК ВложенныйЗапрос ПО РеализацияТоваровУслуг.Ссылка = ВложенныйЗапрос.Ссылка тоже не работает. Вариантов перепробовал массу вариантов. вот это работает РеализацияТоваровУслуг ГДЕ НЕ РеализацияТоваровУслуг.ПометкаУдаления если принять, что задание - НЕ сохранять помеченные на удаление документы. До даты даже не добрался. Но это может и смогу сам. А вот обращение к табличной части. Понимаю, что надо отсортировать выборку из табличной части по пометке удаления, так, чтобы помеченные были вверху и ВЫБРАТЬ 1, но всё что я не строил или было с ошибкой или не работало. Как правило спокойно сохраняло документ с двумя товарами - у одного есть пометка, у другого нет. З.ы. и да я знаю, что: кртксть - сстр, тлнт. |
Может проще подпиской? |
В первом RLS в самом глубоком запросе выбираются документы, содержащие хотя бы одну строку с НЕ помеченной на удаление номенклатурой. "ГДЕ(НЕ" применённое к этой выборке даст выборку документов, не содержащих ничего кроме строк с помеченной на удаление номенклатурой. Это несколько противоречит постановке "один из товаров" ЗЫ (1) +100 |
РеализацияТоваровУслуг ГДЕ НЕ 1 В ( ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ НЕ РеализацияТоваровУслугТовары.Номенклатура.ПометкаУ даления И РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка ) |
(0) Это нафига ж над системой так издеваться, если подписки есть? |
А самое главное, что и пользователь, глядя на сообщение "не достаточно прав", и админ ,глядя в журнал регистрации на запись "ошибка доступа" для события "изменение", очень быстро поймут, что же с системой не так. Отличный способ выстрелить себе в колено. Такого в моей коллекции еще не было. |
может запись только нового документа |
но тогда обходится юзером без проблем: выбрал не помеченную номенклатуру, записал, зашёл, поменял на помеченную, опять записал. всё-таки на этапе подбора номенклатуры надо отсеивать, имхо |
3-bma1 > НЕ сохраняет табличную часть в обоих случаях (есть пометка у номенклатуры или нет) |
(8) ещё раз: не делай RLS. Помедитируй над (5). Твоя задача - это классическая проверка заполнения с нормальным информативным сообщением пользователю (и отказом от записи, если уж так припёрло). |
9-roma n >делаю через события, но просто стало интересно, как же этот чудный RLS запрос строить-то |
В первом примере из (0) убери НЕ из самого глубоко вложенного запроса |
2(8) ГДЕ НЕ РеализацияТоваровУслугТовары.Номенклатура.ПометкаУ даления И РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка ) Читать как ГДЕ РеализацияТоваровУслугТовары.Номенклатура.ПометкаУ даления И РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка ) |
12-bma1 >неа, всё равно НЕ хочет в обоих случаях |
11-roma n >убрал не хочет записывать в любом случае (есть номенклатура с пометкойуд, нету - отказ) |
3-bma1 >мне нравится ход твоих мыслей, но кажется надо упорядочить выборку по значению пометка удаления, чтобы "Истина" была вверху. но как это сделать я не знаю. а конструктор твой запрос не может разобрать. |
2(15) не надо никого упорядочивать. надо попытаться получить хоть одну строку, удовлетворяющую условию, что в ней есть номенклатура с пометкой удаления. И если есть хоть одна такая строка - ВЫБРАТЬ ПЕРВЫЕ 1, проверить на вхождение значения 1 в результата этой выборки - 1. Если таких строк нет - в выборке пусто и условие НЕ 1 В ( - срабатывает как НЕ ЛОЖЬ = ИСТИНА. Такой запрос у меня работает на проверку табличной части документа из самописной конфы, где требуется, что если хоть одно значение входит в определенный список - тогда документ не подлежит чтению. |
сделал через подписку на событие с сообщением причины всё кошерно как хотели: 1-GariPortman > 5-Reaper >9-roma n > но блин запрос всё равно не отработал |
Текущее время: 01:24. Часовой пояс GMT +3. |