gifts2017

Структура подчиненности в виде дерева

Опубликовал Андрей Зидорофф (yc_2011) в раздел Обработки - Обработка документов

Обработка выводит структуру подчиненности в виде дерева. Вместо картинок "Коннектор...." использует набор пиктограмм типа "Статусы документов". В предлагаемом виде использует критерий отбора "Связанные документы" по реквизиту "ДокументОснование" и (или) табличной части "Основания". При открытии позиционируется на вызывающем документе.

В конфигурациях "под заказчика" последний просит что попроще, поэтому достаточно просто документа-основания.

Типовая структура подчиненности имеет "устаревший" вид и использует массу картинок, что побудило ее переработать.

Структура процедур сохранена, и предлагаемая обработка может быть адаптирована под типовые решения методом copy - paste.

Номер картинки задается в функции "НомерПиктограммы". 

Обработка в составе конфигурации не обращается к процедурам и функциям конфигурации.

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

 - Группа "Командная панель формы.Важное";

 - ТипПараметра команды - выбрать нужные документы (обычно все).

 - Отображение (картинка, текст) - по желанию, обычно картинка.

 - Модуль команды:

 

 &НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

    Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда
         Документ = ПараметрКоманды.Получить(0);
     Иначе
         Документ = ПараметрКоманды;
     КонецЕсли;


    Если Документ.Пустая() Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Документ не записан.");
        Возврат;
    ИначеЕсли ТипЗнч(ПараметрыВыполненияКоманды.Источник) <> Тип("УправляемаяФорма") Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Команда вызывается из форм журналов и документов.");
        Возврат;
    КонецЕсли;
    ОткрытьФорму("Обработка.СтруктураПодчиненности.Форма.Форма", 
                Новый Структура("Документ", Документ),
                ПараметрыВыполненияКоманды.Источник, 
                ПараметрКоманды,
                ,
                ,
                ,
                РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры // ОбработкаКоманды

В обработке есть кнопки "Обновить", "Печать" (код пустой) и "Вывести список".

Следующий шаг  - учет множественности документов-оснований.

В некоторых случаях оплачиваются несколько документов, поэтому для кассовых и банковских документов вместо реквизита "ДокументОснование" пришлось сделать табличную часть "Основания" с реквизитами "Документ" (ДокументСсылка) и "Сумма" (Число). Единый подход позволяет при добавлении родительских документов обойтись без запроса по критерию отбора (Функция ДобавитьРодительскиеДокументы) и обойтись "малой кровью".

Первый файл при использовании реквизита "ДокументОснование", второй - при сипользовании реквизита "ДокументОснование" и табличной части "Основания"

Скачать файлы

Наименование Файл Версия Размер
Структура подчиненности для подчинения "один к одному" 46
.epf 9,00Kb
29.04.16
46
.epf 20140905 9,00Kb Скачать
Структура подчиненности для одинарного и множественного подчинения 5
.epf 9,52Kb
29.04.16
5
.epf 20160401 9,52Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. deevil deevil (deevil) 06.09.14 03:47
А чем она лучше типовой структуры подчиненности?
2. Андрей Зидорофф (yc_2011) 06.09.14 07:15
Когда 1,5 года назад начинал внедрять типовую структуру в свою конфигурацию, увидел где-то структуру в виде дерева на скриншоте.
Думал, что 1С сделает такую же, но перед публикацией посмотрел последнюю торговлю, там все по-старому.
Может, подобный отчет появился в других типовых решениях, тогда конечно.
Вообще, пользовался следующими доводами.
1. Библиотека картинок сокращается за счет неиспользования пиктограмм типа "Документ проведен коннектор вверх" - их штук 20.
2. Структура подчиненности не в табличном документа, а в дереве на форме, поэтому реакция более "живая".
3. Эстетически лучше (чисто мое мнение).
3. Геннадий (kejsi) 06.09.14 21:45
а по скорости - она такая же? на тех же операторах? или как то по другому?
4. Андрей Зидорофф (yc_2011) 07.09.14 13:49
(3) Не проверял, для этого надо переделать под типовой критерий. То, что открывается моментом, не показатель, т.к. используется в самописных базах, где и формы попроще, и данных поменьше.
5. Владимир (white_ven) 11.09.14 16:41
6. Семён Павлюков (7OH) 26.04.16 12:28
В обработкаКоманды первое же условие не полное

Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда
		Документ = ПараметрКоманды.Получить(0);
	Иначе // вот этого не хватает кусочка
		Документ = ПараметрКоманды;
	КонецЕсли;
...Показать Скрыть


Далее : "Обработка в составе конфигурации не обращается к процедурам и функциям конфигурации."

Таки обращается.
ОбщегоНазначения.ЕстьРеквизитСсылки(...)

7. Семён Павлюков (7OH) 26.04.16 12:35
ну и
"Переполнение стека встроенного языка на сервере"
в процессе вызова
8. Андрей Зидорофф (yc_2011) 29.04.16 07:42
Для (6) 7OH, поторопился скопипастить, поправлю.
ЕстьРеквизитСсылки - в новой версии есть.
9. Андрей Зидорофф (yc_2011) 29.04.16 07:46
(7) 7OH, Эта диагностика для меня неизвестна. Пока обходились файловой БД, но одна фирма планирует перейти на sql, ибо база уже большая, может, что и скажу. после этого