"Внешний" справочник или Хранение данных между сеансами работы внешних обработок

Часто встает задача хранения неких данных между сеансами работы с внешними обработками или печатными формами, а конфигурация находится на поддержке. Хранить на жестком диске в файлах? Нее…

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

Итак, имеем некую, например, внешнюю печатную форму, в которой надо выводить автомобиль с дополнительными реквизитами. Справочника «Автомобили» в конфигурации нет (и действительно, зачем он в бухгалтерии сдался?), конфигурация находится на поддержке и ради одного лишнего справочника лишать ее такого статуса неохота.

Вывод напрашивается сам собой: «А пусть пользователь перед печатью ручками вобьет в специальную форму необходимые данные!».

Вывод правильный, и, в принципе, единственный. НО! Если пользователь печатает такую форму раз в год, на этом можно остановиться. А если 50 раз в день? Встает вопрос, где хранить введенные пользователем данные для возможности их использования в дальнейшем.

По большому счету, вменяемых вариантов только два:

    1) внешний файл на жестком диске;

    2) регистр сведений «Сохраненные настройки».

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

По поводу второго варианта, Вы можете сказать, что этот регистр предназначен вовсе не для этого, однако, посмотрев на его структуру, видим, что типы измерений и ресурсов — строки, хранилище значения и булево. Так почему бы и нет? Ах да, еще одно измерение — пользователь, для которого сохраняются данные.

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

Итак, в качестве «места дислокации» внешнего справочника выбираем регистр сведений «Сохраненные настройки», который есть практически во всех типовых конфигурациях.

Реализация проста до безобразия: 

    — создаем таблицу значений с некоторым набором колонок (это описание реквизитов «внешнего» справочника);

    — добавляем в таблицу строки (это «элементы» справочника);

    — кладем таблицу в структуру и создаем из нее хранилище значения;

    — добавляем запись в регистр сведений.

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

Далее алгоритм следующий:

    — при открытии формы считываем сохраненную структуру

    — извлекаем таблицу значений и заполняем табличную часть обработки

    — в процессе работы добавляем/удаляем записи из табличной части

    — при закрытии выгружаем табличную часть, ложим в структуру и записываем в регистр.

Для того, чтобы все пользователи могли воспользоваться данным «справочником» в измерение регистра «Пользователь» пишем предопределенный элемент справочника «Группы пользователей» — «Все пользователи».

Конечно, не обойтись и без минусов.

Если несколько пользователей одновременно редактируют «внешний» справочник, то запишутся изменения того, кто последний нажал кнопку «Сохранить».

Если в «реквизитах» такого справочника используются значения ссылочного типа (справочники, документы и т.п.), стоит помнить, что при проверке возможности удаления объектов игнорируется факт того, что эти элементы присутствуют в хранилище значения. Соответственно после удаления объектов мы можем получить.

Ну и, конечно, пользователь может банально ручками (неосторожно или умышленно) удалить запись из регистра. Но, как по мне, у записи регистра больше шансов «остаться в живых», чем у файла.

Прилагаемая обработка не несет в себе функциональной нагрузки, а представляет собой лишь пример (шаблон) использования подобного подхода.

PS. Кстати, таким же образом я храню любые настройки внешних обработок, когда не предполагается частое их изменение или индивидуальность (например, Клиент-Банк).

А если далее развить эту тему, то можно в хранилище значения ложить массив структур, каждая из которых описывает «элемент» справочника. Таким образом можно хранить более сложные элементы — с кучей реквизитов и табличных частей. Но это совсем другая история… 🙂

32 Comments

  1. hulio

    В 8.2 есть замечательный механизм — хранилище общих настроек 🙂 Почему бы не использовать его?

    Кстати, регистр сведений «Сохраненные настройки» — это прошлый век. Например, в УПП, в БП 2.0 используется справочник «Сохраненные настройки». А в самых новых конфигурациях (УТ 11) — используется как раз таки платформенный механизм — хранилище настроек

    Reply
  2. Drak0n
    — при закрытии выгружаем табличную часть, ЛОЖИМ в структуру и записываем в регистр.
    А если далее развить эту тему, то можно в хранилище значения ЛОЖИТЬ массив структур, каждая из которых описывает «элемент» справочника.

    Давайте писать грамотно.

    Reply
  3. Notorius

    hulio ++

    Reply
  4. BalVlad

    (1) hulio, спасибо за идею надо будет заняться этим по подробнее.

    Reply
  5. pumbaE

    Спасибо за статью и донесение идеи в массы.

    Reply
  6. AlX0id

    Если уж извращаться, то мне в голову приходит мысль завести внешнюю БД с нужными справочниками и обращаться к ней, как к внешнему источнику данных 🙂

    Reply
  7. Damian

    (7), точно! А обмен данными между ними организовать по e-mail файлами в формате HTML 🙂

    Reply
  8. H@N

    Спасибо за статью со многим согласен, кроме регистра и группы пользователей. Считаю, что лучше использовать справочник.

    1. Всем пользователям необходим доступ для редактирования? (Ответ: Нет).

    2. На большинстве предприятий, с которыми я работаю, за справочник отвечает 1-2 человека, а не все пользователи (в справочнике реализована возможность установить какому пользователю можно енто изменять).

    3. справочник это стопроцентно один элемент (естественно если так написан код 😉 дело лично программиста!)

    (2) Drak0n, давайте обсуждать публикацию, а не сдавать экзамен по великому и могучему!

    Reply
  9. sstar90

    Я для себя сделал: в справочнике «Сохраненные настройки» сохраняю значения реквизитов внешних обработок

    Reply
  10. saiten

    (4)

    это не неграмотность, а простонаречие

    просторечие 🙂

    (8)

    точно! А обмен данными между ними организовать по e-mail файлами в формате HTML 🙂

    Зря смеётесь, кстати. Делал хранение доп. документов и справочников в отдельной базе, когда «высшие силы» были сильно против снимать конфу с поддержки. Правда, не через HTML, конечно, а через COM… Но, можно и HTML, и XML через WS и ещё как-нить 🙂

    А вообще, не вижу суровых минусов хранения настроек во внешних файлах, но спорить не стану — тут каждый выбирает для себя.

    Reply
  11. 1cinfo1

    Интересны оба варианта, предложенные автором и hulio. За наводку плюс.

    Reply
  12. ms200999

    (11)

    А вообще, не вижу суровых минусов хранения настроек во внешних файлах

    А как же РИБ?

    Reply
  13. saiten

    (13)

    А как же РИБ?

    Не во всех типовых конфах справочник и регистр сведений «Сохранённые настройки» включены в планы обмена. Хранилища настроек — тем более.

    Reply
  14. alon

    Я им говорю: «Не ложьте зеркало в парту!». А они все ложат и ложат, все ложат и ложат.

    © «Доживем до понедельника» 🙂

    Reply
  15. vasiliy_b

    Года два тому назад использовал данную методику для одних клиентов. На практике же удобно только использование во внешних печатных формах. в остальных случаях все равно придется снимать конфигурацию с поддержки… а там уже проще добавлять новые реквизиты и если надо справочники. И такие данные нельзя будет использовать для отчетов.

    И еще, почему-то мало кто использует такие вещи как «Дополнительные реквизиты», Данный функционал присутствует в конфигурациях уже давно, но на практике ни где не видел реального применения.

    Reply
  16. Rustig

    (0) написали бы алгоритмы… читать «родной язык» удобнее, чем линейный текст идеи. а так статья даже очень ничего, полезная 🙂

    Reply
  17. 116hrus

    Очень познавательно, о некоторых методах хранения инфы вообще не задумывался.

    Всем спасибо за информативные комментарии!

    Автору «+» за «простоНАречие» и идею в общем.

    Казалось бы очевидная тема, а нет, есть над чем поразмышлять.

    Reply
  18. ooosnika

    Мне интересно а скорость записи где выше при записи в хранилище или справочник или региср сведений,или вообще в отдельный файл.Впринципе настроек не так много бывает,но все же хотелось бы знать,какой самый быстрый

    Reply
  19. Damian

    (20), надо попробовать, но думаю быстрее всего будет в регистр сведений. Если руки дойдут, выложу сюда скрины замеров производительности для всех 4 вариантов.

    Reply
  20. Damian

    (1), платформенный механизм «Хранилища настроек» можно использовать, если эти хранилища уже созданы. В «Бухгалтерии для Украины», например ни одного хранилища, как объекта метаданных, нет, а снимать ради своей обработки конфу с поддержки, чтобы «осчастливить» пользователей неохота.

    Reply
  21. vasiliy_b

    (22) А мой вариант Вам тоже не подойдет7 К сожалению нет конфы «Для Украины»

    Reply
  22. Damian

    (23), думаю, доп.реквизиты в данном случае немного не то

    Reply
  23. vec435

    полезно.спасибо

    Reply
  24. artbear

    Идея не нова, но слабоприменима 🙁

    В реальной жизни проще снять с поддержки и получить все плюсы, чем заморачиваться с поддержкой подобного решения.

    Reply
  25. alexmz

    А в ЗУПе 8.2 нету регистра «Сохраненные настройки», как быть ?

    Reply
  26. petrov_al

    (27) alexmz, зато есть одноименный справочник который выполняет схожие функции…

    Reply
  27. Alex_E

    (16) Василий,

    «Дополнительные реквизиты», Данный функционал присутствует в конфигурациях уже давно, но на практике ни где не видел реального применения.

    А я давно использую и другим предлагаю:

    http://infostart.ru/public/105715/

    Reply
  28. vvr908

    (16) Василий, можно и такие данные использовать для отчетов — было бы желание. Вытащить таблицу значений из сохраненной настройки, загрузить в СКД и работать с ней как с источником данных. Это вполне можно сделать из внешнего отчета.

    Reply
  29. hulio

    (22)

    платформенный механизм «Хранилища настроек» можно использовать, если эти хранилища уже созданы

    Да, только я говорил про ХранилищеОбщихНастроек. Почувствуйте разницу … И почитайте мануалы 😉

    (27) alexmz,

    А в ЗУПе 8.2 нету регистра «Сохраненные настройки», как быть ?

    Смотрите (1) — использовать справочник «СохраненныеНастройки» либо платформенный механизм ХранилищеОбщихНастроек

    Reply
  30. Damian

    (31) таки да, можно использовать и его, действительно недосмотрел. Спасибо.

    Reply
  31. AnryMc

    (4)

    «-» за пункт 2.

    Reply
  32. galinka1c8

    Идея интересная, но если требуется хранить большой объем данных, по-моему лучше использовать первый предложенный вариант-сохранение файла на жестком диске, иначе база быстро разрастается и начинает притормаживать.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *