gifts2017

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

Опубликовал Damian (Damian) в раздел Программирование - Теория программирования

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А если далее развить эту тему, то можно в хранилище значения ложить массив структур, каждая из которых описывает "элемент" справочника. Таким образом можно хранить более сложные элементы - с кучей реквизитов и табличных частей. Но это совсем другая история... :)

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

Наименование Файл Версия Размер Кол. Скачив.
Внешний справочник
.epf 11,72Kb
28.02.12
107
.epf 11,72Kb 107 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

. Сергей Самошин (saiten) 02.03.12 09:11
(13)
А как же РИБ?
Не во всех типовых конфах справочник и регистр сведений "Сохранённые настройки" включены в планы обмена. Хранилища настроек - тем более.
. Андрей Гореликов (alon) 02.03.12 10:44
Я им говорю: «Не ложьте зеркало в парту!». А они все ложат и ложат, все ложат и ложат.
© «Доживем до понедельника» :)
. Василий (vasiliy_b) 02.03.12 11:16
Года два тому назад использовал данную методику для одних клиентов. На практике же удобно только использование во внешних печатных формах. в остальных случаях все равно придется снимать конфигурацию с поддержки... а там уже проще добавлять новые реквизиты и если надо справочники. И такие данные нельзя будет использовать для отчетов.

И еще, почему-то мало кто использует такие вещи как "Дополнительные реквизиты", Данный функционал присутствует в конфигурациях уже давно, но на практике ни где не видел реального применения.
RodinMax; DrAku1a; artbear; saiten; +4 Ответить
0. Damian (Damian) 29.02.12 09:52
Часто встает задача хранения неких данных между сеансами работы с внешними обработками или печатными формами, а конфигурация находится на поддержке. Хранить на жестком диске в файлах? Нее...

Перейти к публикации

1. Антон Чарушкин (hulio) 29.02.12 09:52
В 8.2 есть замечательный механизм - хранилище общих настроек :) Почему бы не использовать его?
Кстати, регистр сведений "Сохраненные настройки" - это прошлый век. Например, в УПП, в БП 2.0 используется справочник "Сохраненные настройки". А в самых новых конфигурациях (УТ 11) - используется как раз таки платформенный механизм - хранилище настроек
RodinMax; DrAku1a; vvr908; Rustig; valm0unt; BalVlad; +6 Ответить 4
2. Алексей (Drak0n) 29.02.12 10:39
- при закрытии выгружаем табличную часть, ЛОЖИМ в структуру и записываем в регистр.


А если далее развить эту тему, то можно в хранилище значения ЛОЖИТЬ массив структур, каждая из которых описывает "элемент" справочника.

Давайте писать грамотно.
DrAku1a; marsohod; hulio; +3 Ответить 2
3. Иван Василишин (Notorius) 29.02.12 10:56
4. Damian (Damian) 29.02.12 11:34
(1), платформенный механизм еще не приходилось использовать (руки не доходят), за наводку спасибо.
(2), это не неграмотность, а простонаречие, так сказать, для наглядности повествования
5. Владимир Водин (BalVlad) 29.02.12 13:45
(1) hulio, спасибо за идею надо будет заняться этим по подробнее.
6. Евгений Сосна (pumbaE) 29.02.12 14:05
Спасибо за статью и донесение идеи в массы.
7. Алексей 1 (AlX0id) 01.03.12 10:27
Если уж извращаться, то мне в голову приходит мысль завести внешнюю БД с нужными справочниками и обращаться к ней, как к внешнему источнику данных :)
8. Damian (Damian) 01.03.12 11:46
(7), точно! А обмен данными между ними организовать по e-mail файлами в формате HTML :)
9. Иван Гардер (H@N) 01.03.12 13:10
Спасибо за статью со многим согласен, кроме регистра и группы пользователей. Считаю, что лучше использовать справочник.
1. Всем пользователям необходим доступ для редактирования? (Ответ: Нет).
2. На большинстве предприятий, с которыми я работаю, за справочник отвечает 1-2 человека, а не все пользователи (в справочнике реализована возможность установить какому пользователю можно енто изменять).
3. справочник это стопроцентно один элемент (естественно если так написан код ;) дело лично программиста!)

(2) Drak0n, давайте обсуждать публикацию, а не сдавать экзамен по великому и могучему!
10. Сергей (sstar90) 01.03.12 15:49
Я для себя сделал: в справочнике "Сохраненные настройки" сохраняю значения реквизитов внешних обработок
11. Сергей Самошин (saiten) 01.03.12 16:18
(4)
это не неграмотность, а простонаречие

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

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

А вообще, не вижу суровых минусов хранения настроек во внешних файлах, но спорить не стану - тут каждый выбирает для себя.
12. Sidor Petrov (1cinfo1) 01.03.12 18:42
Интересны оба варианта, предложенные автором и hulio. За наводку плюс.
17. г. Казань Рустем Гумеров (Rustig) 03.03.12 15:53
(0) написали бы алгоритмы... читать "родной язык" удобнее, чем линейный текст идеи. а так статья даже очень ничего, полезная :)
18. Руслан Хабибрахманов (116hrus) 04.03.12 15:05
Очень познавательно, о некоторых методах хранения инфы вообще не задумывался.
Всем спасибо за информативные комментарии!
Автору "+" за "простоНАречие" и идею в общем.
Казалось бы очевидная тема, а нет, есть над чем поразмышлять.
20. ooosnika ooosnika (ooosnika) 06.03.12 09:14
Мне интересно а скорость записи где выше при записи в хранилище или справочник или региср сведений,или вообще в отдельный файл.Впринципе настроек не так много бывает,но все же хотелось бы знать,какой самый быстрый
21. Damian (Damian) 06.03.12 11:03
(20), надо попробовать, но думаю быстрее всего будет в регистр сведений. Если руки дойдут, выложу сюда скрины замеров производительности для всех 4 вариантов.
22. Damian (Damian) 06.03.12 11:19
(1), платформенный механизм "Хранилища настроек" можно использовать, если эти хранилища уже созданы. В "Бухгалтерии для Украины", например ни одного хранилища, как объекта метаданных, нет, а снимать ради своей обработки конфу с поддержки, чтобы "осчастливить" пользователей неохота.
23. Василий Зайцев (vasiliy_b) 06.03.12 11:31
(22) А мой вариант Вам тоже не подойдет7 К сожалению нет конфы "Для Украины"
24. Damian (Damian) 06.03.12 13:09
(23), думаю, доп.реквизиты в данном случае немного не то
25. Владимир Чаклин (vec435) 07.03.12 10:02
26. Артур Аюханов (artbear) 09.03.12 15:46
Идея не нова, но слабоприменима :(
В реальной жизни проще снять с поддержки и получить все плюсы, чем заморачиваться с поддержкой подобного решения.
27. Arbaiter (alexmz) 11.03.12 02:18
А в ЗУПе 8.2 нету регистра "Сохраненные настройки", как быть ?
28. al petrov (petrov_al) 13.03.12 21:31
(27) alexmz, зато есть одноименный справочник который выполняет схожие функции...
29. Алексей Ермилов (Alex_E) 13.03.12 21:38
(16) Василий,
"Дополнительные реквизиты", Данный функционал присутствует в конфигурациях уже давно, но на практике ни где не видел реального применения.
А я давно использую и другим предлагаю:
http://infostart.ru/public/105715/
30. Владислав Рожевский (vvr908) 15.03.12 12:46
(16) Василий, можно и такие данные использовать для отчетов - было бы желание. Вытащить таблицу значений из сохраненной настройки, загрузить в СКД и работать с ней как с источником данных. Это вполне можно сделать из внешнего отчета.
31. Антон Чарушкин (hulio) 30.03.12 15:18
(22) Damian,
платформенный механизм "Хранилища настроек" можно использовать, если эти хранилища уже созданы

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

(27) alexmz,
А в ЗУПе 8.2 нету регистра "Сохраненные настройки", как быть ?

Смотрите (1) - использовать справочник "СохраненныеНастройки" либо платформенный механизм ХранилищеОбщихНастроек
32. Damian (Damian) 30.03.12 15:36
(31) таки да, можно использовать и его, действительно недосмотрел. Спасибо.
33. anry mc (AnryMc) 02.10.12 09:38
34. Галина Ивлева (galinka1c8) 14.11.12 18:16
Идея интересная, но если требуется хранить большой объем данных, по-моему лучше использовать первый предложенный вариант-сохранение файла на жестком диске, иначе база быстро разрастается и начинает притормаживать.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа