16 сентября 2017 г.

1C Интересный отбор для журнала документов

Доброго всем времени.

Что-то давно не писал, лень наверное накатила )))

Имеем: Комплексная Автоматизация 1.1.86.1 на платформе 8.3.8.2322
Попросили сделать так, чтобы манагеры видели из банковских документов только ППВходящее.

Принялся решать проблему, изменения в конфигурации должны быть минимальны, ибо мне ее потом обновлять.
Открыл интерфейс "Управление продажами", смотрю, здесь доступен журнал "Банковские документы". Ну все решается просто процедурой ПередОткрытием() с отбором и блокировкой отбора. По желанию добавляем проверку группы пользователя.


Процедура ПередОткрытием()
    ЭтаФорма.ЖурналДокументовСписок.Отбор.ВидДокумента.ВидСравнения = ВидСравнения.Равно;
    ЭтаФорма.ЖурналДокументовСписок.Отбор.ВидДокумента.Значение = Метаданные.Документы.ПлатежноеПоручениеВходящее;
    ЭтаФорма.ЖурналДокументовСписок.Отбор.ВидДокумента.Использование = Истина;
    //Запретим пользователю менять отбор
    ЭлементыФормы.ЖурналДокументовСписок.НастройкаОтбора.ВидДокумента.Доступность = Ложь;

КонецПроцедуры

Потом копаясь уже по другому вопросу натыкаюсь на журнал "Документы контрагентов", где есть все банковские документы О_О
Ну ладно, здесь мы не можем применить тот же метод, т.к. отбор ВидДокументы работает только со сравнением равно. Давай думать, решил что проще создать копии журналов со своими данными. Так и сделал, столкнулся с тем, что надо их прописывать в ролях, проверять ограничение доступа, прописывать в интерфейсах. Короче мало приятного. Но вроде все сделал, тут звонит заказчик и говорит, я хочу чтобы банковские доки отображались только с видом операции "Оплата от покупателя"....

Мда, а здесь уже есть проблема. Мы не можем использовать отбор для вида операции, т.к. данный отбор срабатывает на все виды документов, т.о. мы получим только ПП с видом "Оплата от покупателя". Ковыряясь в конфигураторе в энный раз обратил внимание на ограничение доступа. И вот оно решение всех моих проблем.

Открываем нужный журнал ("Документы контрагентов"), открываем права, находим нужную роль ("Менеджер по продажам"). Он имеет право на чтение/просмотр, но с ограничениями (если таковые имеются, см. ограничения по организации).
Добавляем поле (я выбрал Ссылка) и пишем запрос с нашим ограничением:


ДокументыКонтрагентов ГДЕ (ВЫБОР
 КОГДА ТИПЗНАЧЕНИЯ(ДокументыКонтрагентов.Ссылка) = ТИП(Документ.ПлатежноеПоручениеВходящее)
 ТОГДА ДокументыКонтрагентов.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеБезналичныхДенежныхСредств.ОплатаПокупателя)
 КОНЕЦ
 ИЛИ НЕ ТИПЗНАЧЕНИЯ(ДокументыКонтрагентов.Ссылка) В
 (ВЫБРАТЬ РАЗЛИЧНЫЕ
  БанкДок.Тип
 ИЗ
  ЖурналДокументов.РасчетныеДокументыБанк КАК БанкДок)
 ИЛИ НЕ ТИПЗНАЧЕНИЯ(ДокументыКонтрагентов.Ссылка) В (ТИП(Документ.ПриходныйКассовыйОрдер), 
           ТИП(Документ.ЗаявкаНаРасходованиеСредств),
           ТИП(Документ.ПриходныйОрдерНаТовары),
           ТИП(Документ.РасходныйОрдерНаТовары),
           ТИП(Документ.ЗакрытиеЗаявокНаРасходованиеСредств)
           )
)

Расшифровываю писанину.

  1. Первый блок выгребает ППВходящие с видом операции "Оплата от покупателя".
  2. Второй блок получает у журнала "РасчетныеДокументыБанк" типы всех документов и сверяет. Можно было бы перечислить все типы документов, но мне было лень, тем более в базе встречаются не все типы и лишний раз сравнивать тоже не айс.
  3. Третий блок содержит типы не вошедшие в журнал РДБ, но существующие в журнале ДК. Кстати список был получен при помощи вывести список в вычислить выражение + манипуляции в Экселе 
Втыкая такой или схожий запрос в различные роли мы можем гибко выстраивать доступ к документам в журнале без серьезных вмешательств.

Комментариев нет:

Отправить комментарий