Сохранить информацию о записи типового справочника.

7 11

Сценарий будет интересен разработчикам на ISBL.

Рассматривая код, можно для себя почерпнуть понимание базовых вещей. Обращение к реквизиту карточки и таблицы, найти элемент управления на форме и получить его заголовок, получение действий формы и даже те, которые скрыты от разработчика, работа с Excel, добавление листов в Excel, быстрый вывод данных в Excel, поиск на листе Excel, создание гиперссылок на ячейки в Excel.

Также интересно то, что этот сценарий делает обратное действие. Разработчик идет от визуального программирования и переходит к программному коду. Как бы сверху вниз. Данный код идет снизу вверх. Он достает сначала все, что есть программного, и поднимается к визуальным элементам формы. В связи с этим вы можете для себя обнаружить, что в книгу Excel выводится значительно больше информации, чем когда вы пользуетесь стандартным инструментами разработки системы Directum. Например, в списке реквизитов в режиме редактора уже давно не видно реквизита с именем «ИД», однако он присутствует у записи ТС, и к нему можно обратиться по этому имени. Также вы увидите действия сохранения записи или перехода к следующей и, как вариант, приложив немного смекалки, можете переопределить действие кнопки «Сохранить».

Разработчику часто требуется "живьем" посмотреть на данные, лежащие в записи справочника, а не как он думает. Конечно, можно вытащить столбцы в форму-список справочника. Попробуйте сделать 28 колонок, и часть этих колонок будут отображать занчения системных реквизитов.

Иногда требуется понимание общей обстановки в целом. Например, в случаях когда:

  • заведено несколько наших организаций, и нужно узнать текущую 
  • элемент управления или реквизит отображает значение, взятое из других реквизитов в зависимости от контекста.
  • на данных организована сложная логика.
  • нужно посмотреть код записи ТС записанный в реквизите.
  • табличные данные, которые так же содержат реквизиты типа "Справочник".
  • реквизит не вынесен на форму, а его содержание нужно узнать.

С помощью этого функционала удобно:

  • Тестировать логику работы взаимосвязанных элементов.
  • Отыскать спрятанный элемент формы или действие.
  • Узнать то, что не описано в документации по Directum.
  • Изучить структуру данных как она есть.
  • Использовать при программировании имена реквизитов, действий, элементов управления.
  • Использовать для разработки справочника, сценария и т.п., использующего данный справочник.

Можно использовать полученный файл как протокол разработки при сдаче проекта, т.е. какие элементы разработки содержатся в ТС на момент сдачи заказчику.

Среда объектов ISBL позволяет циклично получить информацию по объекту. Для данной цели создан данный программный код. Код выводит информацию по записи справочника в Excel. Запись должна быть создана в справочнике. Информация раскладывается по листам рабочий книги Excel. Основной лист (первый), см. приложенный снимок экрана, объединяет результаты остальных листов. Через гиперссылки в ячейках можно перейти на соответствующий лист, на котором будут более подробные данные или дополнительная информация. На листы выводится информация по составу реквизитов, о каждом реквизите в частности и его событиях, сопоставление элементов формы реквизитам, список действий формы.

Код специально написан без использований функций, так как иногда требуется посмотреть информацию по проблемной записи, например, в БД заказчика. Импорт функций не всегда возможен в БД заказчика, так как потом может потребоваться удаление импортированных функций. А так можно воспользоваться стандартным функционалом Directum - «Выполнить внешний сценарий». Данная разработка работает на версии Directum 4.9 и на более ранних версиях. Поскольку в более поздних версиях Directum были добавлены новые типы данных и элементы управления, то наблюдается не опознавание типов данных.

 Прикреплен файл: Сценарий Экспорт Excel.txt

Видеоролик как это работает https://youtu.be/-WvFnsROD4E

Алексей Семакин

Константин, вопрос по самому сценарию:

1) почему имя справочника и даже ИД записи захардкодили в текст сценария? удобнее же ввести в диалоге.

2) поменял на свой справочник, поставил ИД реальной записи — открывается Excel, но ни на одном листе ничего нет sad Что я делаю не так?

Константин Дружков
  1. При тестировании, отладке как правило настраиваешься на определенную запись и гоняешь ее до умопомрачения. Необходимости выбирать каждый раз запись – нет. Если каждый раз будет запрашивать одну и ту же запись, то после 10 раза это надоедает. Диалоговое окно каждый может приделать сам какое нравится. Благо с версии Directum 5.0 появилось возможность создавать просто диалоговые окна. Для этого можно использовать компоненту «Диалоги».
  2. Код построен так что бы не падать. Т.е. если записи нет, то ни один цикл не отработает. Можно посмотреть по первому листу его имя должно отображать: имя справочника + ИД записи (WorkSheet_Reference_Requisite.Name = ReferenceКСК.Name & RefID). Ну или под дебагером посмотреть заходит в цикл while not ReferenceКСК.Eof(стр. 39) если нет то проблема либо с именем справочника либо с ИД записи в этом справочнике. Я отлаживал под версией Directum 5.2 – работает. Взял еще раз код с сайта, запустил ­– работает.

 

Константин Дружков

В моем случа сценарии именует лист - "КСК152789"

Константин Дружков

Сделал видеоролик как это работает https://youtu.be/-WvFnsROD4E

Алексей Семакин
При тестировании, отладке как правило настраиваешься на определенную запись и гоняешь ее до умопомрачения. Необходимости выбирать каждый раз запись – нет.

Вот этого (порядка работы со сценарием) не хватает в описании работы сценария в материале. Пусть будет в комментариях.

Если каждый раз будет запрашивать одну и ту же запись, то после 10 раза это надоедает.

Не факт. Выбор можно и запоминать с предыдущего запуска и подставлять по умолчанию. Останется только нажать OK в диалоге.

Код построен так что бы не падать. Т.е. если записи нет, то ни один цикл не отработает.

Было бы неплохо, если бы сценарий сам сообщал, что ему не понравилось. А то получается, чтобы понять как правильно запустить сценарий, нужно изучить его код, да еще и под отладчиком погонять.

Можно посмотреть по первому листу его имя должно отображать

Это есть. Лист создался и назвался правильно. Видимо, я уже в двух шагах от успеха smiley, перепроверю данные.

while not ReferenceКСК.Eof

А с какой целью тут цикл? Ведь перед открытием набора данных вы фильтруете его: MBAnalit.Analit = . Вы ожидаете увидеть более одной записи в наборе?

Константин Дружков

    Данный сценарий - это часть огромного. Часть кода по выводу данных писалась как универсальный код. Я предпочитаю писать универсальный код. Но это отнимает много времени и сил.

    Почему же он универсальный. Потому что он использовался для ЭД, ТП, ТС и т.п. В данном случае он формализован под ТП. Но если подставить объект ЭД, ТП, то он то же будет работать. Я начинал с ранних версий директум и документация была слабой. А задачи ставились не выполнимые(переопределить действия по кнопке сохранить!) и тогда появился этот код который выводил не документированный возможности. Есть код который показывает что же всетаки можно достать из объекта задания. Результат выглядит очень круто. Я был ввосторге. Мне больше не надо было ломать голову как написать SQL запрос.

Андрей Доличенко

Сценарий падает на строке 111 при попытке обработать реквизит формы справочника типа "Документ"

Константин Дружков

Мда. Я с таким реквизитом не тестировал. Реквизит пявился в версии 5.5.
А вам нужен текст заплатки или целиком рабочий сценарий?

Константин Дружков

Прикреплен файл: Экспорт данных записи спр в Excel.txt
Внес исправления, теперь работает.

Константин Дружков

Проверил под версией 5.5.1

Константин Дружков

В основном фале есть ошибка. В виду того что у директума в нумераторе типа данных(TReqDataType) есть пропуск в порядке типов. Поэтому начиная с 5 типа, тип данных выводится не верно.

Авторизуйтесь, чтобы написать комментарий