Данная разработка предназначена для гибкой настройки ввода документов на основании другого документа и контроля (проведения/не проведения) документов .
Причины создания(предыстория)
В свое время когда была одна точка и текучка кадров была практически равна 0,проблем не было с условиями ввода на основании документов и проведения.
С увеличение точек(магазинов) ,и быстрым обучением сотрудников на точках,
(недели 2 на обстрел и в бой),разгребать «косяки» отделу товародвижения пришлось в разы больше и начало отнимать кучу времени.(то сбросят не на тот склад,то укажут не ту серию,то какие то поля незаполнены и т.п. и т.д.).
Поступали задачи допиливать эти момент в коде отделу разработки.
С учетом роста точек, «допиливание» надоело, и легко можно было запутаться в условиях.
Решено было сделать какую то настройку что бы пользователь(обладающий определенными правами) мог указывать условия разрешения (ввода/запрета) ,и указывал на каких узлах применяется данная настройка(постольку база РИБ).
КАК ЭТО РАБОТАЕТ
Для указания условий (ввода/запрета) в базе предоставлен справочник «Настройка условий(отбор ввода на основании)».
в справочнике имеются:
-стандартные реквизиты;
Кроме них есть :
- Объекта основания(док. основание);
- Вводиться на основании док. основания;
- Статус;
- Текст сообщения пользователю;
-закладки(Настройка отборов/ Страница настройка узлов);
Поговорим о 2-х вариантах настройки этого справочника по статусам:
Первый – Запрет проведения документа / Разрешено проведение документа
Второй - Запрет(ввод на основании)/ Разрешено(ввод на основании)
Рассмотрим первый вариант
Выбираем (Запрет проведения документа / Разрешено проведение документа)
При выборе одного из приведенных статусов поле «Вводиться на основании док. основания» пропадает и очищается.(Сделано для того что бы исключить ошибку пользователя при заполнении).
Предположим что выбрали статус «Запрет проведения документа».
В табличной части «Настройка отборов» настраиваем условия запрета проведения.
Настраивается все это как отборы в отчетах СКД.
Тут я думаю проблем не должно возникнуть.
*Забегая вперед,скажу что есть кнопка на закладке условий «Проверить документ на условие»,при нажатии которой появлятся форма выбора документа указанного в поле «Объекта основания(док. основание)».При выборе его можно проверить удовлетворяет нашим условиям или нет.Это так скажем для теста.
*Еще один момент,немаловажный, если добавляем поле ,и не указываем «левое значение» а галочка использование стоит ,то могут быть ошибки при выполнении проверки,для этого я подсветил эти поля цветом(если галка снята следовательно и учитываться это условие не будет).
Настраиваем наши условия.Указываем узлы на какие данная настройка распростроняется (закладка-«Страница настройка узлов»).
Далее в нужном нам документе,в конфигурации находим наш объект,открываем модуль объекта,находим процедуру ПередЗаписью() и добавляем
#Если Клиент Тогда
Если РежимЗаписи=РежимЗаписиДокумента.Проведение Тогда
отказ1 =не модуль_Работы_СВводимымиОбъектамиНаОсновании.УдовлетворяетУсловиямПроведенияДокумента(ЭтотОбъект.Ссылка);
отказ=отказ1;
КонецЕсли;
#КонецЕсли
Обновляем и проверяем.
Такой же подход для статуса « Разрешено проведение документа» .
Рассмотрим Второй вариант
В данном пункте будем рассматривать ввод документа на основании какого нить другого документа.
Когда выбираем какой то объект («Объекта основания(док. основание»),в поле
(«Вводиться на основании док. основания»), подтягиваются документы которые можно ввести на основании «Объекта основания».
Условия отборов заполняется из реквизитов поля «Объекта основания»,.
Приведу пример:
Запрещено вводить «заявку на склад»,если у реализации организация равна "Фейковая организация".
Далее заходим в модуль объекта вводимого документа (Вводиться на основании док. основания),и в обработке ОбработкаЗаполнения() добавляем код
ДокументОснование = ДанныеЗаполнения;
Разрешено = модуль_Работы_СВводимымиОбъектамиНаОсновании.РазрешеноОформлятьЗаявкуНаСклад(ДокументОснование,этотОбъект);
Если не Разрешено тогда
ДокументОснование = неопределено;
КонецЕсли;
Небольшое пояснение
у меня в документе «Заявка на склад» есть ссылка на документОснование.
если не удовлетворяет условиям я ему присваимаю неопределено;
и так пробуем ввести заявку на склад для документа Реализация товаров и услуг
попадает под наше условие запрета!
так же настраивается условие для разрешения.
Что надо для того что бы это все заработало в новой базе.
Модуль - модуль_Работы_СВводимымиОбъектамиНаОсновании
справочник – НастройкаУсловий
перечисления – ВидыСтатусов
РегистрСведений – ПривязкаНастройкиКУзлу
-измерения
Настройка (тип – справочникСсылка. НастройкаУсловий)
УзелОбмена (тип – строка)
*РС – настройкаРИБ это для того что бы указать что данная настройка вкл/Выкл.
в вашем случае можете завязаться на что нить другое.
только тогда в модуле надо пройтись и переписывать условия определения (вкл./выкл.).
Все это добавляем в базу и прописываем документы в нужным процедурах.
вот и все..
Приложена к публикации база из которой можно взять все нужное что бы заработало у Вас!)
p/s
Можно развить и далее обработку,и поставить проверки в другие модули в которые нужны.
тестировалось все на УТ 10.3
1С:Предприятие 8.3 (8.3.5.1625)