Форум ДИЦ

Пользовательский и Дилерский форум ДИЦ
Текущее время: Сб дек 16, 2017 1:38 am

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: BAU: библиотека с поддержкой классов-сервисов
СообщениеДобавлено: Пн ноя 27, 2017 3:49 pm 
Не в сети

Зарегистрирован: Вт мар 30, 2004 12:30 pm
Сообщения: 4760
Откуда: Москва, Кустарь-одиночка с мотором
Версия 1.01
Подробности - опишу в этой ветке, см. текст от 2017-12-03

1. ВАЖНО - исправлена опечатка в имени метода добавления блока кнопок
BAU.Диспетчер.AbbBtnBlock --> AddBtnBlock
ИЗВИНИТЕ - все примеры пришлось заменить

2. Добавлена возможность задать вертикальное смещение добавляемых кнопок - BAU.Диспетчер.AddBtnBlock
Позволяет обойти проблему с кнопками, динамически добавляемыми ДИЦ с явным указанием координат (например, кнопка "Проверить контрагентов" в "Справочники.картКонтрагент")

3. Доработаны примеры
Исправлен Сервисы.ПримерыСервисов.srvкартБухСкладскиеДокументы_Удалить - имя метода AddBtnBlock
Заменён srvкартСчетФактурыВсе_Замок.cod на srvкартРазные_Замок - так как теперь позволяет работать сразу с несколькими картотеками
Добавлен Сервисы.ПримерыСервисов.srvкартКонтрагент_Замок - как пример обхода проблемы с перекрытием кнопок

Вложение:
ClassService.7z [69.73 Кб]
Скачиваний: 8

Во вложении:
BAU_Publicated.7z - проект BAU как публикация
BAU-v1.01.rar - проект BAU как rar-архив
ПримерыСервисов.7z - ТРИ примера

На семинаре я сделал доклад "Расширение функционала Турбо9.Бухгалтерия с помощью классов-сервисов"
К сожалению, из-за ограничений по времени я рассказал всё исключительно по презентации, не показав работу функционала вживую.
Спасибо тем, кто всё-таки хоть немного со мной тему пообсуждал, их мнения я учёл ;)

Итак, предлагаю упрощённый метод расширения функционала. Постараюсь написать и подробную инструкцию. Но пока минимум, чтобы вы смогли пощупать.

Часто возникает необходимость добавить к стандартному функционалу что-нибудь своё. Наиболее частая просьба от пользователей - сделать в картотеке кнопочку, чтобы на выделенных записях поставить/снять флаг, изменить дату и т.п. Стандартный подход требует в рамках отдельного проекта сделать расширение, где всё прописать - а это требует определённых знаний Турбо.Студии.

Предлагаемое решение позволяет, во-первых, сильно облегчить добавление простого функционала, а, во-вторых, упростить его перенос, например, передачу коллеге :)

Класс-сервис - это библиотечный cod-файл, содержащий в себе минимально необходимый код для выполнения некоторой модификации существующего визуального объекта (бланк или картотека), включая и выдачу подсказки пользователю. При этом наиболее общая часть функционального кода вынесена в библиотеку с тем, чтобы для добавления нового схожего функционала было достаточно скопировать образец и внести в него минимальные изменения.

Особенности реализации: функционирование класса-сервиса НЕ зависит ни от имени файла, ни от места файла среди папок проекта типа "Библиотечные файлы", ни от проекта, куда файл класса-сервиса положен ;).

В приложенных простейших примерах демонстрируется автоматическое добавление кнопок в картотеки для обработки выделенных записей. Я же теперь любые доработки выполняю именно с помощью своих классов-сервисов. В примерах максимально прокомментированы все действия.
Хотите сделать свой сервис - создайте новый пустой файл, скопируйте туда пример целиком, посмотрите, что получится ;) Потом модернизируете под свои нужды

Краткая инструкция:
1. Установите в систему проект BAU. Он включает в себя и функционал для управлениями сервисами, и некоторые другие применяемые мной методы.

2. Подключите проект BAU к своему проекту. Проект НЕ лицевой, для использования подключать его следует как подпроект лицевого.

3. Положите cod-файлы примеров в любой свой проект, откомпилируйте.

Обратите внимание - для управления подключенными сервисами добавляется бланк Настройки.блBAU_Сервисы. Помимо того, что он демонстрирует подробную информацию о сервисах, он позволяет:
- отключить сервис. Отключенный сервис остаётся в системе, однако весь его функционал отключается.
- посмотреть подсказку к сервису
- поменять порядок демонстрации кнопок (двигая строки секции со списком)
Кроме того - там есть флаг, при установке которого при открытии любого бланка/картотеки в подвале демонстрируется его служебное имя, необходимое для указания в новом сервисе

Рекомендации
Единственное требование к размещению сервиса - его проект должен давать доступ к проекту, с чьими объектами сервис будет работать. Ну и, естественно, это НЕ должен быть проект от ДИЦ, чтобы не страдать при обновлении. Поэтому варианты такие:
- МойПроект - у многих, вероятно, осталось нечто подобное? Тогда в нём можно создать/использовать папку Сервисы
- собственный объединяющий проект. Помните, у ДИЦ есть проект БухгалтерскийУчет, который функционала не содержит, и нужен для упрощения компиляции всех стандартных проектов? Я делаю подобный проект для собственных проектов - и именно его подключаю к инфобазам (дополнительное преимущество - при подключении/отключении подпроектов НЕ требуется реорганизация инфобазы :)).

Если будете использовать собственный объединяющий проект, то
- включите в него БухгалтерскийУчет, и тогда все его подпроекты получат доступ ко всем стандартным проектам (учтите занятие лицензий)
- включите в него проект BAU
- используйте папку проекта типа "Библиотечные файлы" с именем Сервисы для размещения сервисов (положите туда примеры).

Напоминаю - можно все такие файлы хранить в одной папке. У меня сервисов много, потому для простоты администрирования я их раскладываю в соответствии с объектами, для которых они предназначены.
Кроме того, имя файла должно содержать имя объекта и отражать назначение сервиса. Это облегчает администрирование – при взгляде на файл должно быть понятно, для чего он предназначен. Например: srvкартРазные_Замок.cod – сервис, предназначенный для нескольких картотек, добавляющий кнопку управления флагом Замок

_________________
Андрей Булетов, Москва
PS Не стесняйтесь, поправьте меня, если я не прав!


Последний раз редактировалось Buletov Вс дек 03, 2017 2:45 pm, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAU: библиотека с поддержкой классов-сервисов
СообщениеДобавлено: Ср ноя 29, 2017 8:51 pm 
Не в сети

Зарегистрирован: Вт мар 30, 2004 12:30 pm
Сообщения: 4760
Откуда: Москва, Кустарь-одиночка с мотором
Ни одного отклика :(
Неинтересно или непонятно?

_________________
Андрей Булетов, Москва
PS Не стесняйтесь, поправьте меня, если я не прав!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAU: библиотека с поддержкой классов-сервисов
СообщениеДобавлено: Ср ноя 29, 2017 8:55 pm 
Не в сети

Зарегистрирован: Пн мар 29, 2004 10:25 am
Сообщения: 4393
Откуда: Таганрог
Андрей, вчера скачал - огромное спасибо. Пока все понятно, но смотреть внимательно на предмет использования буду не раньше выходных.

_________________
Александр Золотько, г.Таганрог


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAU: библиотека с поддержкой классов-сервисов
СообщениеДобавлено: Ср ноя 29, 2017 9:29 pm 
Не в сети

Зарегистрирован: Пн мар 29, 2004 11:50 pm
Сообщения: 6032
Откуда: Новороссийск
Аналогично - скачал, но пока не смотрел...

_________________
Ян Терновский, Новороссийск


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAU: библиотека с поддержкой классов-сервисов
СообщениеДобавлено: Ср ноя 29, 2017 10:39 pm 
Не в сети

Зарегистрирован: Ср июн 18, 2008 3:03 pm
Сообщения: 890
+

_________________
С уважением, Владимир Миронычев.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAU: библиотека с поддержкой классов-сервисов
СообщениеДобавлено: Чт ноя 30, 2017 12:20 am 
Не в сети

Зарегистрирован: Пн мар 29, 2004 12:48 pm
Сообщения: 413
Откуда: Ростов-на-Дону
+

_________________
Ковалевский А.


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAU: библиотека с поддержкой классов-сервисов
СообщениеДобавлено: Вс дек 03, 2017 2:51 pm 
Не в сети

Зарегистрирован: Вт мар 30, 2004 12:30 pm
Сообщения: 4760
Откуда: Москва, Кустарь-одиночка с мотором
Описание изменений к версии библиотеки BAU v.1.01
Помимо исправления ошибок и доработок

Чтобы активизировать интерес к библиотеке, сделал универсальный сервис для работы с флагом Замок srvкартРазные_Замок

Флаг Замок присутствует во многих картотеках.
Так вот, чтобы кнопка управления замком появилась ещё и в другой картотеке, в общем случае в сервисе достаточно было сделать следующее:
1. Добавить имя этой картотеки в параметр aTarget
Код:
VAR aTarget  []: String=["Документы.УчетНДС.СчетаФактуры.картСчетФактурыВсе"
                         ,"Документы.УчетТМЦ.картБухСкладскиеДокументы"
                         ]; -- Список объектов для сервиса

2. Обезличить обращение к картотеке в методе "PROC OnClick" - сделать его универсальным
То есть убрать оператор WITH и использовать прямое обращение к модифицируемому объекту
Код:
--  WITH B.Owner.Owner AS Первичка.Документы.УчетНДС.СчетаФактуры.картСчетФактурыВсе DO
--{ Блок, работающий в полученном контексте
    n=B.Owner.Owner.Cardfile.SelectedCount;


    If n=0 Then Message('Не выбрано ни одной записи'); Return; End;     -- Входная проверка

    i=Enquiry('','Что делать с флагом?',['Установить','Сбросить','Отказ'],1);
    IF not i IN [1,2] THEN Return; END;
    lValue=(i=1);

    sHint='Обработано '+Str(n)+'/';
    FOR i = 1..n DO Hint(sHint+Str(i),i,n);                             -- Перебираю выбранные
      B.Owner.Owner.Cardfile.Selected[i].Замок=lValue;                                -- Новое значение флага
    END; -- For    --  выделенные записи
--} Блок, работающий в полученном контексте
--  END; -- With B.Owner.Owner


Забавно, что добавив "Справочники.картКонтрагент", я вдруг НЕ увидел свои добавленные кнопки.
Чтобы увидеть, где же они, я использовал при вызове AddBtnBlock необязательный параметр - задал побольше ширину основной кнопки.
Оказывается, они просто спрятались за большой кнопкой "Проверить контрагентов" ;)

Причина - то, что в стандартном комплекте не учитывается, что кто-то будет что-то дорабатывать.
Мои кнопки добавляются в начале формирования визуальной формы и используют относительное положение на фрейме, а ДИЦ свою кнопку добавляет тоже динамически потом, причём координаты указывает фиксированные - вот и накладывает поверх моих.

Так что для подобной ситуации сделал отдельный сервис, указывая кнопкам ещё и дополнительное смещение по вертикали.
Для этого пришлось доработать метод AbbBtnBlock, добавив соответствующий параметр.
Библиотеку перевыложил.

_________________
Андрей Булетов, Москва
PS Не стесняйтесь, поправьте меня, если я не прав!


Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB