Тестировалось на Управление торговлей ред. 10.3 на релизе 10.3.47.3, но будет работать как на более ранних так и более поздних версиях.
Начну с самого начала, чтобы было понятно даже обычным пользователям. Некоторые вещи будут более чем простые, другие, возможно, достаточно сложные.
По ходу своей деятельности, мне приходится не только программировать, но и администрировать большие базы данных с большим и сложным документооборотом Чтобы быстро обрабатывать данные приходиться многие инструменты дорабатывать вплоть до сочетания клавиш, чтобы одно действие можно было за несколько минут проделать сотней-другой объектов, а не писать для этого обработку. И структура подчиненности как раз такой механизм в который я вывел максимум того что надо и сделал его максимум удобным и настраиваемым для пользователей.
Статья предназначена не только для демонстрации изменений типовой конфигурации, но и показывает как можно сильно упростить работу пользователей и администраторов доработав такой универсальный механизм как Структура подчиненности.
Структура подчиненности - механизм который вызывается из всех документов (вызывается по кнопке Перейти - Структура подчиненности) и предназначена для показа подчиненности связанных объектов через ссылки. Например такой:
Структура подчиненности реализована как встроенная общая форма, но по сути является обработкой хотя в справке называется отчетом, но т.к. не имеет табличного документа для вывода результата с возможностью его печати (что на мой взгляд является одним из основных критериев отчета) то далее я буду называть ее обработкой.
Все дальнейшие использование обработки я бы разделил на несколько групп:
1. выполнения в одном окне универсальные действия с документами
2. просмотр реквизитов у связанных документах
3. история хозяйственной деятельности
Теперь рассмотрим их подробнее.
Универсальные действия с документами
В типовой конфигурации нет способа универсально добавить некую функцию во все объекты. Но зато есть универсальные механизмы добавленные везде в которые можно добавить свои универсальные функции - и самый удобный механизм для этого как раз Структура подчиненности!
Как я уже говорил для ускорения всем действиям назначены сочетания горячих клавиш для быстрого выполнения - когда действий много то это очень сильно ускоряет работу - проверено неоднократно. Увидеть сочетание можно наведя мышкой на кнопу.
Типовые действия весьма скудные: проведение и его отмена, пометка и ее снятие.
ВАЖНО! Эти действия реализованы программно, а следовательно даже если у пользователя нет прав интерактивно выполнять данные действия то он сможет их сделать через эту обработку. По сути это такая дырка в безопасности, и если об этом не знать то можно долго гадать как пользователи обходят права.
Поэтому первым делом эту возможность я убрал сделав доступным данные действия только если есть соответствующие интерактивные права.
Дополнительно добавил действия:
Все они выполняются по выделенному объекту (кроме движений документа), и только если в данной ячейки не объект, тогда берется документ из строки.
Движения документа по регистрам
Стандартное действие вынесенное для упрощения вызова
Задача
Задача - очень важный механизм, который я достаточно сильно развил о чем будет отдельная статья. При ее нажатии открывается форма новой задачи с текущим документ в качестве основания. В типовом решении вызывается из Заказа покупателя и Договора контрагента, но т.к. в работе очень удобно ставить задачи (себе и другим) по разным документам то логично чтобы этот функционал был под рукой.
Задача привязывается к объекту по реквизиту "Объект" который к сожалению имеет ограниченный набор типов. Поэтому при создании новой задачи выполняется проверка содержит и реквизит данный тип и если нет то задача не будет создана будет выдано соответствующее предупреждение.
Свойства Категории
При работе с базами я очень часто использую свойства и категории как справочников так и документов (особенно у последних для настройки различных прав/проверок) . Поэтому вынесение данных функций очень ускоряет работу - к тому же не тратится ресурсы системы на открытие формы.
Печать
При нажатии открывается список печатных форм и можно напечатать нужную. Кнопку легко переделать на печать по умолчанию, но особого смысла это этот вариант более расширенный, а переизбыток кнопок часто мешает. И есть ограничение в типовой - нельзя установить печатную форму по умолчанию если не открыть список печ.форм из самого документа.
Файлы
Механизм много где используется и везде визуально различается - в Заказе покупателя, Реализации, Контрагенте, Договоре. Механизм позволяет прикреплять произвольные файлы к объектам, и часто бывает что прикрепить можно только зайдя в справочник "Хранилище дополнительной информации", а у самого объекта такая функция не выведена.
Также выполняется проверка чтобы объекту можно было добавить файл - по типу данных реквизита Объект в справочнике "Хранилище дополнительной информации"
Настройка.
Содержит несколько настроек меняющие работу обработки, если не устраивает как есть.
Выводимые реквизиты
Это одна из самых полезных доработок позволяющая выводить произвольные колонки. Очень удобно когда структура документов содержит множество разных документов и требуется понять общую картину не открывая каждый из них. Вот небольшой пример как это выглядит (на самом деле бывает что структура не помещается даже на экран):
Особенно удобно просматривать структуру подчиненности когда делается внутренняя продажа-покупка в базе у собственной организации - в этом случае важно понимать откуда взялось поступление - кто кому что продал и у кого закупил, без этого очень легко запутаться и даже с отчетами сложно понять порядок выписки документов т.к. каждый отчет показывает лишь одну хозяйственную операцию - движение товаров или денег или долгов. Но полную картину можно увидеть только по структуре подчиненности.
Конечно для полноценной связки всех документов нужно чтобы у них всех был реквизит с ссылкой, чаще всего он есть и называется "Документ основание". Но в некоторых случаях он не вынесен на форму документа (как например в документе Приходный кассовый ордер") или вообще отсутствует. Если есть возможность изменить конфигурацию, то стоит это сделать ,чтобы добиться максимальной гибкости - добавить в нужных документах данный реквизит и включить его в состав критерия отбора "Связанные документы" по которому работает обработка. Ниже описано как это делается.
Также есть такой нюанс как реквизиты с разным именем в разных документах выполняющие по сути одинаковую роль. Например Склад в документе "Реализация" и СкладГруппа в "Заказ покупателя". Я решил это путем вывода аналогов колонок, т.е. если добавляем колонку с реквизитом "Склад" из "Реализации" то автоматом проставляется аналог его для "Заказ покупателя" - в функции ПолучитьРеквизитыАналоги(), наоборот не делал. Если нужно то можно самостоятельно дописать другие аналоги.
Колонку "Валюта" убрал т.к. редко кто работает с несколькими валютами в базе и ее всегда можно добавить самостоятельно.
Колонки.
Добавление и удаление колонок в таблице производиться через верхнюю панель через меню. При добавлении колонки автоматически в панель добавляется кнопка с именем колонки чтобы можно было ее скрывать если она в данный момент не нужна и мешает. Это удобно когда нужно с десяток колонок для разных анализов, но когда все видны это начинает затруднять анализ.
Добавление производиться из реквизитов активного документа. а удаление - активной колонки.
Сохранение Восстановление.
Стандартный механизм позволяющий сохранить Настройки и Колонки. Удобно когда для разных типов документов нужна своя схема, или посмотреть схему другого пользователя. Работает как и в типовом механизме - при открытии обработки восстанавливается настройка по умолчанию.
История хозяйственной деятельности
В ходе работы с документами разными пользователями неизбежно встает множество вопросов по введенным документам. и если нельзя сразу задать вопрос и получить ответ то он тут же забывается. Простой пример - оператор при создании заказа на покупателя завел покупателя без ИНН, начальник обнаружил это, и сказал оператору об этом, и тот сделал исправление. На практике конечно проблемы бывают гораздо сложнее и решаются они очень долго с привлечением разных сотрудников. Поэтому всем нужно видеть все проблемы которые возникали с документами. Решенные задачи забывается очень быстро, хотя потом при разборе проблем учета часто требуется такая информация.
Для решения всех этих проблем я использую объект "Задачи пользователя". Но без привязки к документам невозможно понять кто с ним что делал и почему. Поэтому я доработал структуру подчиненности так чтобы сразу видеть вместе с документами и задачи по ним, и наоборот - по поставленной задаче пройтись по всей цепочке связанных документов.
В результате это выглядит вот так:
Чтобы полноценно воспользоваться задачами придется внести несколько изменений в конфигурацию:
1. В критерии отбора СвязанныеДокументы в задаче ЗадачиПользователя у реквизита"Объект" - установить флажок.
2. в общем модуле "ОбщегоНазначения" в функция РазобратьПутьКОбъектуМетаданных() в конце нужно вставить после Если Структура.ТипОбъекта = "Документ" Тогда и перед Иначе еще одно условие:
ИначеЕсли Структура.ТипОбъекта = "Задача" Тогда
Структура.Вставить("Метаданные", Метаданные.Задачи[Структура.ВидОбъекта]);
3. также чтобы ставить задачу по любому объекту лучше в реквизите "Объект" в Задаче ЗадачиПользователя поставить тип "ЛюбаяСсылка" тогда не придется выполнять п.4.
4. в общем модуле "ПолныеПрава" в про ПолучитьСписокДокументовПоКритериюОтбора()
перед Запрос.Текст = ТекстЗапроса; прописать
Если Не ЗначениеЗаполнено(ТекстЗапроса) Тогда
Возврат Новый ТаблицаЗначений;
КонецЕсли;
это нужно на случай если задача нигде не будет использована в составе критерия отбора (или в нем не будет реквизита с типом "ЛюбаяСсылка")
ВАЖНО! После всех этих действий кнопкой "Связанные документы" нельзя будет пользоваться как и формой списка для критерия отбора "Связанные документы" - потому что он не предназначен для работы с задачами (будет вылетать ошибка в процедуре ЗаполнитьТаблицуСвязанныхДокументов() при выполнении запроса). Это конечно можно исправить но т.к. я никогда не пользуюсь данным механизмом то не сделал этого, если кому нужно и не сможет сам - напишите и я распишу как исправить.
Несколько моментов в качестве заключения
Обработку можно использовать также как внешнюю - например для базовой поставки, но без тех возможностей которые дают изменение конфигурации.
Чтобы заменить вызов встроенной формы на эту нужно ее добавить как обработку и в общем модуле РаботаСДиалогами в процедуре ПоказатьСтруктуруПодчиненностиДокумента() написать вместо
ФормаСтруктурыПодчиненности = ПолучитьОбщуюФорму("ФормаСтруктурыПодчиненности");
новый вызов:
ФормаСтруктурыПодчиненности = Обработки.СтруктураПодчиненности.ПолучитьФорму();
Или (кому как удобно) сделать вызов с диска как я - чтобы менять не изменяя конфигуратор храню основные инструменты на диске и вызываю оттуда. На скорость пользователя это не сильно влияет, а вот на скорость изменения - очень упрощает и ускоряет, и меньше надо чистить локальный кэш у пользователей.
Кстати данная замена решает большое неудобство что нельзя открыть больше одной формы структуры подчиненности - чтобы сравнить несколько структур приходиться открывать несколько сеансов с базой.
Также я обычно для удобства вытаскиваю кнопку " Структура подчиненности документа" из меню "Перейти" просто на форму (списка и объекта - конечно только основных) и назначаю ей сочетание клавиш чтобы не искать кнопку, например Ctrl+D - чтобы легко было вызывать. Но можно просто назначить сочетание и не придется тратить время на "мышкование".
Если обработка будет пользоваться спросом то планирую подробнее расписать ее работу, т.к. я не включил туда еще некоторые удобные функции.