Запрет проведения документа "Корректировка записей регистров"

В случае, когда административными мерами пресечь ненормальное использование документов, подобных "Корректировка записей регистров" нельзя, описанный финт позволит программисту/главбуху контролировать применение таких документов.

Как всем известно, во многих конфигурациях есть документы, позволяющие произвольным образом редактировать регистры. Например, в УПП — это «Корректировка записей регистров» и «ОперацияБух», в торговле тоже есть — но кажется, по другому называются.

Это мощный и нужный инструмент, и во многих ситуациях без него не обойтись. Однако же, доступ к ним почему-то даден всем, у кого есть роль «Пользователь» — тоесть всем!

И часто бывает, его применяют не по назначению, а по ситуации — и тогда перестают сходиться партии с оборотно-сальдовой, а у программиста добавляется головной боли.

Изложенное здесь решение — полумера для тех случаев, когда и документ применять надо, и совсем бесконтрольно оставить бухгалтерию нельзя.

Суть идеи такова: добавить к документу подписку на событие «Проведение» и в ней анализировать, кому можно ломать базу руками, а кому нельзя. Тогда бухгалтер создает документ, заполняет его и идет кланяться либо главбуху, либо программисту, либо другому ответственному человеку, который этот документ и проведет.

Однако — и это послужило причиной создания публикации — ситуация немного усложняется тем, что документ «Корректировка записей регистров» и «Операция» не проводятся в принципе! Они пишут регистры программно, не используя механизм проведения.

 

Это поведение можно перехитрить таким образом:

  1. при записи документа выключать (устанавливать в «Ложь» активность записей — тогда они будут присутствовать, но в отчетах не отразятся;
  2. одновременно устанавливать документу признак «Пометка удаления» в «Истина» — чтобы бухгалтерия видела, что документ у неё не проведен.

Если все-же необходимость остается, то схема действий следующая:

    1. Создаем подписку на событие «ПередЗаписью» и включаем туда нужные документы.
    2. в код процедуры-обработчика пишем следующее:

 

Процедура ЗапретПроведенияДокументовРучныхКорректировокПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если
Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    ЭтоНовыйДокумент = Источник.ЭтоНовый();

    Если ЭтоНовыйДокумент Тогда
       
РанееУстановленнаяПометкаУдаления = Ложь;
    Иначе
       
Запрос = Новый Запрос();
       
Запрос.Текст =«
        |ВЫБРАТЬ
        |   0
        |ИЗ
        |   Документ.»
+Источник.метаданные().Имя+» КАК Операция
        |
        |ГДЕ
        |   (Операция.Ссылка = &СсылкаНаОперацию) И
        |   (Операция.ПометкаУдаления = Ложь)»
;

        Запрос.УстановитьПараметр(«СсылкаНаОперацию», Источник.Ссылка);
       
Результат = Запрос.Выполнить();
       
РанееУстановленнаяПометкаУдаления = Результат.Пустой();
    КонецЕсли;

    Если не РольДоступна(Метаданные.ОсновнаяРоль) Тогда
        Если НЕ
ЭтоНовыйДокумент Тогда
            Если не
РанееУстановленнаяПометкаУдаления Тогда
               
Отказ=Истина;
               
#Если Клиент Тогда
                   
Сообщить(«Документы типа «»»+Источник.метаданные().Синоним+«»» Вам разрешено редактировать только помеченные на удаление!»,СтатусСообщения.Важное);
               
#КонецЕсли
           
КонецЕсли;
        КонецЕсли;

        Источник.ПометкаУдаления=Истина;
        Для каждого
Движение Из Источник.движения Цикл
               
Движение.УстановитьАктивность(Ложь);
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Таким образом, «провести» документ сможет только пользователь, которому доступна основная роль (указанная в свойствах конфигурации). Также, только при наличии этой роли можно будет снять либо установить пометку удаления, в прочих случаях — она всегда будет установлена, а движения документа — неактивны.

17 Comments

  1. Urv

    «устанавливать в «Ложь» активность записей — тогда они будут присутствовать, но в отчетах не отразятся.»

    Вы мало знакомы с конфигурацией УПП. И в отчетах отразятся и вызовет много проблем при расчете себестоимости. В типовых механизмах УПП не анализируется активность записей.

    Reply
  2. chmod660

    (1)

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

    насколько я помню, активность записи регистра есть системное свойство, от конфигурации не зависящее.

    создал «корректировку», в нем проводку и движение по партиям.

    мы помним, что в этом документе предусмотрен механизм включения-выключения записей. с его помощью и проверим.

    выключаю активность записи по хозрасчетному — пропадает из оборотно-сальдовой.

    выключаю активность записи по партиямБух — пропадает из отчета «ведомость по партиям товаров на складах».

    скриншоты в студию:

    раз -активность включена

    два — выключена

    учите матчасть, коллега.

    Reply
  3. chmod660

    (1)

    вдогонку выдержка из синтаксис-помомщника

    (поскольку я недостаточно хорошо знаю УПП, то очень часто помощником пользуюсь)

    РегистрНакопленияЗапись.<Имя регистра накопления> (AccumulationRegisterRecord.<Имя регистра накопления>)

    Активность (Active)

    Использование:

    Чтение и запись.

    Описание:

    Тип: Булево. Содержит признак, определяющий влияние записи на итоги регистра накопления.

    Если значение Ложь, то запись не учитывается в итогах регистра.

    Reply
  4. Urv

    Партии товаров на складах это прошлый век. Сейчас РАУЗ.

    Проблемы возникнут при расчете себестоимости. Там используются физические таблицы регистров накопления.

    Так же ряд отчетов из монитора эффективности «произвольные отчеты» написаны на физических таблицах регистров. При этом нигде не выполняется фильтрация по активности записей.

    Из отчетов например «Валовая прибыль». Есть и другие которые в том числе предназначены для анализа по традиционной методике «Партионный учет».

    Reply
  5. sa1m0nn

    (2)

    В РАУЗе вылезает эта дрянь, столкнулись. Пока не плюснешь все записи в корректировке, ничерта не рассчитает. Свойство Активность работает только на виртуальных таблицах, в реальных по-хорошему нужно писать «| ГДЕ Активность», но в типовых нигде нет такого, а запросы строятся на комбинации реальных и виртуальных таблиц.

    Reply
  6. den_valley

    (2)

    Поддержу товарищей, метод Ваш увы, ни для КА, ни для УПП не годится.

    Можете цитировать сколько угодно синтаксис помощник и формировать отчеты, у разработчиков 1С иное мнение (записи на активность они так проверять и не научились в запросах к физическим таблицам).

    Хотя решение — спору нет, не лишено изящества.

    «Видишь суслика? И я не вижу….А он есть!»

    Reply
  7. chmod660

    (4, 5, 6)

    спасибо за информацию, не учел, что из физических и впрямь выбирается.

    Персонально извиняюсь перед Urvза сарказм предыдущих сообщений.

    Непонятно тогда, почему в таком случае не изменено поведение самих документов «Корректировка» — ведь при пометке их на удаление записи в регистрах остаются, и, как вы утверждаете, влияют на состояние прочей информации.

    Если это так — то это существенный баг в конфигурации (-циях).

    и неясно, что делать с публикацией — снести или оставить.

    склоняюсь к мысли поместить в описание почерпнутую в комментариях информацию.

    Reply
  8. alenakrr

    Статью лучше оставить. Полезная тема получилась.))

    А блокировать «Операции» и «Корректировки записей» надо сразу — до создания, тем более, если вводится роль доступа. Можете расширить статью вариантами блокировки без корректировки основной программы, если найдутся такие.

    А пользователи пусть идут и кланяются тем, кто знает как исправлять их ошибки — ситуация создания корректировок почти на 90% связана с неумением правильно пользоваться стандартным функционалом.

    Reply
  9. s44.yuritch

    (7) Это не то чтобы баг. Просто в той же УПП свойство Активность у регистров вообще не может быть выставлено в Ложь иначе как документом Корректировка записей регистра (и Бухгалтерская либо Международная операция). А вот проверки на Активность, кстати, там встречаются (но не везде, и не только в РАУЗ их нет. Как-то получил глюки с учетом отпусков после таких вот «удаленных» корректировок).

    Видимо, разработчики исходили из того, что эти документы создаются людьми, понимающими, что они делают, и в помеченном на удаление виде поэтому не оказываются. Или просто не учли такую возможность платформы.

    Если уж приходится помечать Корректировки и Операции на удаление, то нужно или сразу же делать удаление помеченных, или предварительно удалять из документа все строки.

    Reply
  10. chmod660

    (8)

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

    так я будто бы так и сделал — объекты что на поддержке, не изменяются. Добавляем свои подписку и модуль.

    совсем без правки кода запретить не представляется возможным — доступ дан в рамках роли «Пользователь», которая должна быть у всех (вроде в статье это писал)

    Reply
  11. Виктор1905
    Urv пишет:

    Партии товаров на складах это прошлый век. Сейчас РАУЗ.

    РАУЗ рассчитан на работу с людьми, не понимающими «заднее число» и отрицательные остатки в течение месяца. РАУЗ — есть попытка защиты программиста от дурака за счет лишения этого же дурака оперативной информации по управлению предприятием.

    А вот ведение по партионке прописано во многих ГОСТах.

    Пример из жизни. Выпускаем ежедневно одну-две партии каждого наименования пищевой продукции. Продукция передается со склада производства на склад готовой продукции. Неопытный рабочий в производстве при составлении перепутал ингридиент, предназначенный для другой продукции. Перед праздником запарка всегда. Хватились на следующий день. Часть той выпущенной партии оказалась отгруженной в магазины. Благодаря партионке, прозвонили в нужные магазины, схватили накладные и замену, разъехались по магазинам и изъяли почти всю партию. Честно сказать, мы знали что там такое, но технологи и директор заставили пробовать понемногу всех работников организации, что бы быть уверенными о изъятии именно каждой единицы продукции… Вначале не чувствуется, а через минут пять начинается…Так что сам и не поймешь, от чего сдох.

    Раз год такие чудеса происходят у всех пищевиков — я езжу часто по командировкам, знаю о чем говорю.

    Преже чем хвалить РАУЗ — подумай сначала (или опроси пользователей)!

    Reply
  12. Urv

    (11) Виктор1905,

    формулировка «Партии товаров на складах» получилась из контекста «пропадает из отчета «ведомость по партиям товаров на складах»». В КА партионного учета уже нет. В УПП 2.0 полагаю его тоже не будет. Имеются ввиду суммовые показатели. В вашем случае речь о количественном учете. Учет по сериям при РАУЗ так же позволит проконтролировать движение конктретной партии выпущенного товара.

    Полагаю мы не станем сейчас обсуждать преимущества и недостатки «традиционного учета» и «РА».

    «Преже чем хвалить РАУЗ…» — Фраза «Партии товаров на складах это прошлый век» — констатация факта, не вижу похвалы.

    Проблема помеченных на удаление КЗР проявляется именно при РАУЗ.

    Reply
  13. Urv

    (10)

    Открою вам еще один секрет :).

    «Тогда бухгалтер создает документ, заполняет его и идет кланяться либо главбуху..» который видимо снимает пометку на удаление.

    Понаблюдайте что происходит с полем «Период» регистра бухгалтерии или накопления, когда бухгалтер у своего созданного помеченного на удаление КЗР поменяет дату. А затем главбух снимет пометку на удаление. В УПП.

    Reply
  14. chmod660

    (13)

    спасибо.

    подтверждаю 🙁

    если только снять пометку удаления — период остается старый (как был на момент создания документа)

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

    я, конечно, знал что этот и подобные документы — опасная бритва, но чтобы она настолько без ручки не ожидал 🙁

    Reply
  15. Виктор1905
    Urv пишет:

    В КА партионного учета уже нет. В УПП 2.0 полагаю его тоже не будет.

    Я отстал от жизни (это про КА). Прийдется оценить возможность перехода к учету по сериям. Боюсь-будут огромные проблемы… Спасибо.Плюсанул.

    Reply
  16. tim_taler

    Да уж, к тем же воротам пришел и лбом уперся. В случае, если в модуле документа

    в процедуре ПриЗаписи снимать активность записей регистров, то запись регистров вообще не происходит.

    В итоге женщины(!) нашли практичный выход — учет в карантинную дату, т.е. документ корректировки забрасывается

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

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

    Reply
  17. chmod660

    (16) спасибо, надо подумать. пока ваш способ — насчет будущего — выглядит очень привлекательно.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *