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

29.02.12

Разработка - Математика и алгоритмы

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Внешний справочник
.epf 11,72Kb
114
114 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3151    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    7534    user1959478    51    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3097    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    10891    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4350    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

23.11.2022    3513    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9036    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. charushkin 109 29.02.12 09:52 Сейчас в теме
В 8.2 есть замечательный механизм - хранилище общих настроек :) Почему бы не использовать его?
Кстати, регистр сведений "Сохраненные настройки" - это прошлый век. Например, в УПП, в БП 2.0 используется справочник "Сохраненные настройки". А в самых новых конфигурациях (УТ 11) - используется как раз таки платформенный механизм - хранилище настроек
RodinMax; DrAku1a; vvr908; RustIG; valm0unt; BalVlad; +6 Ответить
4. Damian 909 29.02.12 11:34 Сейчас в теме
(1), платформенный механизм еще не приходилось использовать (руки не доходят), за наводку спасибо.
(2), это не неграмотность, а простонаречие, так сказать, для наглядности повествования
11. saiten 246 01.03.12 16:18 Сейчас в теме
(4)
это не неграмотность, а простонаречие

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

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

А вообще, не вижу суровых минусов хранения настроек во внешних файлах, но спорить не стану - тут каждый выбирает для себя.
35. ms200999 02.03.12 08:29 Сейчас в теме
(11)
А вообще, не вижу суровых минусов хранения настроек во внешних файлах

А как же РИБ?
33. AnryMc 848 02.10.12 09:38 Сейчас в теме
5. BalVlad 29.02.12 13:45 Сейчас в теме
(1) hulio, спасибо за идею надо будет заняться этим по подробнее.
22. Damian 909 06.03.12 11:19 Сейчас в теме
(1), платформенный механизм "Хранилища настроек" можно использовать, если эти хранилища уже созданы. В "Бухгалтерии для Украины", например ни одного хранилища, как объекта метаданных, нет, а снимать ради своей обработки конфу с поддержки, чтобы "осчастливить" пользователей неохота.
23. vasiliy_b 284 06.03.12 11:31 Сейчас в теме
(22) А мой вариант Вам тоже не подойдет7 К сожалению нет конфы "Для Украины"
24. Damian 909 06.03.12 13:09 Сейчас в теме
(23), думаю, доп.реквизиты в данном случае немного не то
31. charushkin 109 30.03.12 15:18 Сейчас в теме
(22)
платформенный механизм "Хранилища настроек" можно использовать, если эти хранилища уже созданы

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

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

Смотрите (1) - использовать справочник "СохраненныеНастройки" либо платформенный механизм ХранилищеОбщихНастроек
32. Damian 909 30.03.12 15:36 Сейчас в теме
(31) таки да, можно использовать и его, действительно недосмотрел. Спасибо.
2. Drak0n 188 29.02.12 10:39 Сейчас в теме
- при закрытии выгружаем табличную часть, ЛОЖИМ в структуру и записываем в регистр.


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

Давайте писать грамотно.
DrAku1a; marsohod; charushkin; +3 Ответить
9. H@N 5 01.03.12 13:10 Сейчас в теме
Спасибо за статью со многим согласен, кроме регистра и группы пользователей. Считаю, что лучше использовать справочник.
1. Всем пользователям необходим доступ для редактирования? (Ответ: Нет).
2. На большинстве предприятий, с которыми я работаю, за справочник отвечает 1-2 человека, а не все пользователи (в справочнике реализована возможность установить какому пользователю можно енто изменять).
3. справочник это стопроцентно один элемент (естественно если так написан код ;) дело лично программиста!)

(2) Drak0n, давайте обсуждать публикацию, а не сдавать экзамен по великому и могучему!
3. Notorius 29.02.12 10:56 Сейчас в теме
6. pumbaE 29.02.12 14:05 Сейчас в теме
Спасибо за статью и донесение идеи в массы.
7. AlX0id 01.03.12 10:27 Сейчас в теме
Если уж извращаться, то мне в голову приходит мысль завести внешнюю БД с нужными справочниками и обращаться к ней, как к внешнему источнику данных :)
8. Damian 909 01.03.12 11:46 Сейчас в теме
(7), точно! А обмен данными между ними организовать по e-mail файлами в формате HTML :)
10. sstar90 01.03.12 15:49 Сейчас в теме
Я для себя сделал: в справочнике "Сохраненные настройки" сохраняю значения реквизитов внешних обработок
12. 1cinfo1 7 01.03.12 18:42 Сейчас в теме
Интересны оба варианта, предложенные автором и hulio. За наводку плюс.
17. RustIG 1747 03.03.12 15:53 Сейчас в теме
(0) написали бы алгоритмы... читать "родной язык" удобнее, чем линейный текст идеи. а так статья даже очень ничего, полезная :)
18. 116hrus 7 04.03.12 15:05 Сейчас в теме
Очень познавательно, о некоторых методах хранения инфы вообще не задумывался.
Всем спасибо за информативные комментарии!
Автору "+" за "простоНАречие" и идею в общем.
Казалось бы очевидная тема, а нет, есть над чем поразмышлять.
19. пользователь 05.03.12 14:15
Сообщение было скрыто модератором.
...
20. ooosnika 06.03.12 09:14 Сейчас в теме
Мне интересно а скорость записи где выше при записи в хранилище или справочник или региср сведений,или вообще в отдельный файл.Впринципе настроек не так много бывает,но все же хотелось бы знать,какой самый быстрый
21. Damian 909 06.03.12 11:03 Сейчас в теме
(20), надо попробовать, но думаю быстрее всего будет в регистр сведений. Если руки дойдут, выложу сюда скрины замеров производительности для всех 4 вариантов.
25. vec435 17 07.03.12 10:02 Сейчас в теме
26. artbear 1563 09.03.12 15:46 Сейчас в теме
Идея не нова, но слабоприменима :(
В реальной жизни проще снять с поддержки и получить все плюсы, чем заморачиваться с поддержкой подобного решения.
27. alexmz 1 11.03.12 02:18 Сейчас в теме
А в ЗУПе 8.2 нету регистра "Сохраненные настройки", как быть ?
28. petrov_al 10 13.03.12 21:31 Сейчас в теме
(27) alexmz, зато есть одноименный справочник который выполняет схожие функции...
29. Alex_E 2374 13.03.12 21:38 Сейчас в теме
(16) Василий,
"Дополнительные реквизиты", Данный функционал присутствует в конфигурациях уже давно, но на практике ни где не видел реального применения.
А я давно использую и другим предлагаю:
http://infostart.ru/public/105715/
30. vvr908 449 15.03.12 12:46 Сейчас в теме
(16) Василий, можно и такие данные использовать для отчетов - было бы желание. Вытащить таблицу значений из сохраненной настройки, загрузить в СКД и работать с ней как с источником данных. Это вполне можно сделать из внешнего отчета.
34. galinka1c8 14.11.12 18:16 Сейчас в теме
Идея интересная, но если требуется хранить большой объем данных, по-моему лучше использовать первый предложенный вариант-сохранение файла на жестком диске, иначе база быстро разрастается и начинает притормаживать.
36. saiten 246 02.03.12 09:11 Сейчас в теме
(13)
А как же РИБ?
Не во всех типовых конфах справочник и регистр сведений "Сохранённые настройки" включены в планы обмена. Хранилища настроек - тем более.
37. alon 171 02.03.12 10:44 Сейчас в теме
Я им говорю: «Не ложьте зеркало в парту!». А они все ложат и ложат, все ложат и ложат.
© «Доживем до понедельника» :)
38. vasiliy_b 284 02.03.12 11:16 Сейчас в теме
Года два тому назад использовал данную методику для одних клиентов. На практике же удобно только использование во внешних печатных формах. в остальных случаях все равно придется снимать конфигурацию с поддержки... а там уже проще добавлять новые реквизиты и если надо справочники. И такие данные нельзя будет использовать для отчетов.

И еще, почему-то мало кто использует такие вещи как "Дополнительные реквизиты", Данный функционал присутствует в конфигурациях уже давно, но на практике ни где не видел реального применения.
RodinMax; DrAku1a; artbear; saiten; +4 Ответить
Оставьте свое сообщение