Запрет на удаление ордеров и накладных
Модераторы: m0p3e, edward_K, Модераторы
Запрет на удаление ордеров и накладных
Добрый день!
Подскажите, пожалуйста, как настроить запрет на удаление накладных и ордеров?
Настроила в правах пользователя на таблицы KatSopr, SpSopr, SklOrder, SpOrder доступ только на чтение, добавление, модификация.
Но при этом в накладной можно на поле "Дата списания" нажать Delete. Галактика напишет, что удалить нельзя. Но при этом "дату списания" очистит, и в списке накладных покажет, что накладная с "-", т.е. без ордеров (хотя реально ордера есть). Далее, у пользователя со всеми правами, удаляем накладную, Галактика удаляет только накладную, а ордер остается подвисший.
Как еще возможно настроить доступ на запрет удаления ордеров и накладных?
Спасибо!
Подскажите, пожалуйста, как настроить запрет на удаление накладных и ордеров?
Настроила в правах пользователя на таблицы KatSopr, SpSopr, SklOrder, SpOrder доступ только на чтение, добавление, модификация.
Но при этом в накладной можно на поле "Дата списания" нажать Delete. Галактика напишет, что удалить нельзя. Но при этом "дату списания" очистит, и в списке накладных покажет, что накладная с "-", т.е. без ордеров (хотя реально ордера есть). Далее, у пользователя со всеми правами, удаляем накладную, Галактика удаляет только накладную, а ордер остается подвисший.
Как еще возможно настроить доступ на запрет удаления ордеров и накладных?
Спасибо!
Чем дальше в лес, тем больше дров.
Поле "дата списания" я могу закрыть от редактирования конфигуратором. Но еще остается вариант просто кнопка "списать" / "оприходовать". По которой ордера, если есть, то они удаляются, и создаются.
При моей настройке ордера не удаляются, но при этом создаются еще раз. Так накладную можно править и сколько хочешь ордеров создавать. Бардак.
С триггерами я еще ни разу не работала. Но народ говорит, что и там такая же ерунда может получиться. Галактике самой все равно: есть доступ на удаление, нет доступа - она это не анализирует, шлепает себе дальше....
Если закрыть доступ на модификацию поля dopr в накладной - тогда ведь нельзя будет сделать ордер (ведь изначально это поле пустое и только после оприходования/списания заполняется).
Должно же быть какое-то рабочее решение...???
Попробою настроить доступ с анализом поля DOpr - если оно не пусто, тои модифицировать накладкную не давать.....????
Поле "дата списания" я могу закрыть от редактирования конфигуратором. Но еще остается вариант просто кнопка "списать" / "оприходовать". По которой ордера, если есть, то они удаляются, и создаются.
При моей настройке ордера не удаляются, но при этом создаются еще раз. Так накладную можно править и сколько хочешь ордеров создавать. Бардак.
С триггерами я еще ни разу не работала. Но народ говорит, что и там такая же ерунда может получиться. Галактике самой все равно: есть доступ на удаление, нет доступа - она это не анализирует, шлепает себе дальше....
Если закрыть доступ на модификацию поля dopr в накладной - тогда ведь нельзя будет сделать ордер (ведь изначально это поле пустое и только после оприходования/списания заполняется).
Должно же быть какое-то рабочее решение...???
Попробою настроить доступ с анализом поля DOpr - если оно не пусто, тои модифицировать накладкную не давать.....????
... Но народ говорит, что и там такая же ерунда может получиться. Галактике самой все равно: есть доступ на удаление, нет доступа - она это не анализирует, шлепает себе дальше....
А менеджеру базы данных наплевать что думает Галактика,
если триггер настроен правильно то он не даст ни удалить не модифицировать запись
А менеджеру базы данных наплевать что думает Галактика,
если триггер настроен правильно то он не даст ни удалить не модифицировать запись
Простенький пример для Oracle
Если накладная оприходована то ее не удалить и не модифицировать поле dopr.
CREATE OR REPLACE TRIGGER "GAL"."AAA" BEFORE
UPDATE
OR DELETE OF "FDOPR" ON "GAL"."KATSOPR" FOR EACH ROW BEGIN
IF :OLD.Fdopr>0 THEN
RAISE_APPLICATION_ERROR( -20001 , 'Record Locked');
ELSE NULL;
END IF;
END;
Если накладная оприходована то ее не удалить и не модифицировать поле dopr.
CREATE OR REPLACE TRIGGER "GAL"."AAA" BEFORE
UPDATE
OR DELETE OF "FDOPR" ON "GAL"."KATSOPR" FOR EACH ROW BEGIN
IF :OLD.Fdopr>0 THEN
RAISE_APPLICATION_ERROR( -20001 , 'Record Locked');
ELSE NULL;
END IF;
END;
Спасибо!
В правах доступа ведь тоже можно настроить права по условиям. Также анализировать dopr. Или тут есть в чем-то существенная разница?
И еще, сейчас переходим на 7.12 - там уже все попроще: поле "дата списания" уже не доступно для редактирования и добавилась кнопка "отменить списание". Наверное, достаточно будет конфигуратором убрать кнопку "отменить списание".
В правах доступа ведь тоже можно настроить права по условиям. Также анализировать dopr. Или тут есть в чем-то существенная разница?
И еще, сейчас переходим на 7.12 - там уже все попроще: поле "дата списания" уже не доступно для редактирования и добавилась кнопка "отменить списание". Наверное, достаточно будет конфигуратором убрать кнопку "отменить списание".