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

24.02.21

Разработка - Инструментарий разработчика

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Вспомогательные таблицы - универсальный инструмент хранения таблиц любой структуры (константы, параметры обработок и т.д.):
.cf 64,28Kb
11
11 Скачать (1 SM) Купить за 1 850 руб.

Выгоды от использования механизма вспомогательных таблиц.

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

  • Как будем получать ссылку на элемент ("Организацию", "Валюту", "Номенклатуру", "Склад" и т.д.)?
  • Где будем хранить настройки для новой обработки, чтобы они были общими для всех?
  • Где будем хранить маппинг?
  • Где будем хранить начальные настройки заполнения?
  • и множество других вопросов, которые неизбежно возникают при разработке.

Любой из вопросов можно решить буквально за 5 минут (не учтено время ввода информации и проектирование структуры таблицы). Необходимо 3 шага:

  1. Создать новый элемент вспомогательной таблицы (далее ВСПТ).
  2. Заполнить структуру колонок.
  3. Заполнить созданную таблицу.

Техническая информация.

 - Протестировано на платформе 8.3.13.1513.

 - Не зависит от конфигурации.

Быстрый старт!

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

Пример #1

Условия задачи.

Необходимо хранить константные значения системы как соответствие "Ключ" -> "Значение".

Решение.

Необходимо создать 2 колонки, одна должна быть с типом строка, вторая позволять выбрать любой тип. Так же желательно константы разбить по группам к примеру "Организации", "Контрагенты", "Склады", "Валюты" и т.д.

Реализация.

1. Создание нового элемента

2. Заполнение структуры колонок и применение изменений

3. Заполнение созданной таблицы

 

Примечание.

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

Данные мы сохранили, но теперь как-то необходимо их использовать. Для этого в модуле менеджера ВСПТ предусмотрены функции, которые позволяют извлекать данные в удобном для нас виде.

В данной задаче можно использовать следующий код

    менВспТаблицы                 = Справочники.XLY_ВспомогательныеТаблицы;    
    ВспТаблицаКонстантныеЗначения = менВспТаблицы.ПолучитьСсылкуПоИдентификатору("КонстантныеЗначенияСистемы");
    
    Если ВспТаблицаКонстантныеЗначения.Пустая() Тогда
    	Возврат;
    КонецЕсли; 
    
    ИменаИтогов                  = "Класс"; //Группирует по значениям колонки "Класс"
    ИмяКолонкиКлючаДетЗаписей    = "Имя";   //Ключ в конечном соответствии 
    ИмяКолонкиЗначенийДетЗаписей = "Значение"; //Значение в конечном соответствии
    ПовторноеИспользование       = Ложь;       //Всп. таблица будет формироваться при каждом вызове
    
    соотКонстантныеЗначенияСистемы = менВспТаблицы.СформироватьСоответствиеРазделовПоВспомогательнойТаблице(ИменаИтогов, 
                                                                           ВспТаблицаКонстантныеЗначения,
                                                                           ИмяКолонкиКлючаДетЗаписей,
                                                                           ИмяКолонкиЗначенийДетЗаписей,
                                                                           ПовторноеИспользование);

Результатом работы кода будет вложенное соответствие следующего вида:

Для удобства получения значения из вложенных соответствий можно воспользоваться функцией модуля менеджера:

    менВспТаблицы                 = Справочники.XLY_ВспомогательныеТаблицы;    
    ВспТаблицаКонстантныеЗначения = менВспТаблицы.ПолучитьСсылкуПоИдентификатору("КонстантныеЗначенияСистемы");
    
    Если ВспТаблицаКонстантныеЗначения.Пустая() Тогда
    	Возврат;
    КонецЕсли; 
    
    ИменаИтогов                  = "Класс"; //Группирует по значениям колонки "Класс"
    ИмяКолонкиКлючаДетЗаписей    = "Имя";   //Ключ в конечном соответствии 
    ИмяКолонкиЗначенийДетЗаписей = "Значение"; //Значение в конечном соответствии
    ПовторноеИспользование       = Ложь;       //Всп. таблица будет формироваться при каждом вызове
    
    соотКонстантныеЗначенияСистемы = менВспТаблицы.СформироватьСоответствиеРазделовПоВспомогательнойТаблице(ИменаИтогов, 
                                                                           ВспТаблицаКонстантныеЗначения,
                                                                           ИмяКолонкиКлючаДетЗаписей,
                                                                           ИмяКолонкиЗначенийДетЗаписей,
                                                                           ПовторноеИспользование);
                                                                           
    //Извлечение данных из сформированного соответствия                                                                        
                                                                           
    ТекстОшибки         = ""; //если значение будет равно Неопределено, в переменную устанавливается текст ошибки
    ПутьКЗначению       = "Организации.Основная"; //указывается путь по которму необходимо получить значение
    ОсновнаяОрганизация = менВспТаблицы.ПолучитьЗначениеИзСоответствия(ПутьКЗначению, соотКонстантныеЗначенияСистемы, ТекстОшибки);

Результат работы функции:

 

Для наглядности несколько изменим пример:

Добавим новую колонку, в пределах значений новой колонки необходимо формировать группировку соответствия

 

Код изменится следующим образом:

Изменения произошли в значении переменной "ИменаИтогов".

    менВспТаблицы                 = Справочники.XLY_ВспомогательныеТаблицы;    
    ВспТаблицаКонстантныеЗначения = менВспТаблицы.ПолучитьСсылкуПоИдентификатору("КонстантныеЗначенияСистемы");
    
    Если ВспТаблицаКонстантныеЗначения.Пустая() Тогда
    	Возврат;
    КонецЕсли; 
    
    ИменаИтогов                  = "Раздел,Класс"; //Группирует по значениям колонки "Раздел и Класс"
    ИмяКолонкиКлючаДетЗаписей    = "Имя";   //Ключ в конечном соответствии 
    ИмяКолонкиЗначенийДетЗаписей = "Значение"; //Значение в конечном соответствии
    ПовторноеИспользование       = Ложь;       //Всп. таблица будет формироваться при каждом вызове
    
    соотКонстантныеЗначенияСистемы = менВспТаблицы.СформироватьСоответствиеРазделовПоВспомогательнойТаблице(ИменаИтогов, 
                                                                           ВспТаблицаКонстантныеЗначения,
                                                                           ИмяКолонкиКлючаДетЗаписей,
                                                                           ИмяКолонкиЗначенийДетЗаписей,
                                                                           ПовторноеИспользование);

 

Результат работы

Таким образом можно создавать соответствия различной вложенности.

 

Пример #2

Условия задачи.

Реализовать заполнение по умолчанию для нового элемента справочника.

Решение.

Создадим новую таблицу с колонками "Ключ", "Значение", получить структуру, заполнить новый объект.

Реализация.

Создадим отдельную таблицу для заполнения договоров

Примечание. Так же можно создать один элемент, разбить на группы и использовать для заполнения различных объектов или создать различные алгоритмы заполнения. (см. пример #1.)

 

    менВспТаблицы                 = Справочники.XLY_ВспомогательныеТаблицы;    
    ВспТаблицаКонстантныеЗначения = менВспТаблицы.ПолучитьСсылкуПоИдентификатору("ЗаполнениеНовогоДоговора");
    
    Если ВспТаблицаКонстантныеЗначения.Пустая() Тогда
    	Возврат;
    КонецЕсли; 
    
    ИмяКолонкиКлюча      = "Ключ"; //Значения колонки будут помещены в ключ коллекции
    ИмяКолонкиЗначения   = "Значение"; //Значения колонки будут помещены в значение коллекции
    ФормироватьСтруктуру = Истина; //Возвращаемое значение будет иметь тип "Структура"
    
    СтруктураЗаполнения = менВспТаблицы.ПолучитьКоллекциюКлючЗначениеИзСохраненнойТаблицы(ВспТаблицаКонстантныеЗначения,
                                                                                          ИмяКолонкиКлюча,
                                                                                          ИмяКолонкиЗначения,
                                                                                          ФормироватьСтруктуру);
    НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
    
    ЗаполнитьЗначенияСвойств(НовыйДоговор, СтруктураЗаполнения);

Результат:

На выходе получается коллекция типа "Структура"

 

Результат заполнения нового объекта:

 

 

Пример #3

Условия задачи.

Если склад присутствует в списке, тогда разрешать отгрузку.

Решение.

Создадим таблицу с колонками "Ключ", "Значение". Для значения разрешим сохранение списка значений.

Реализация.

При выборе типа ячейки указываем, что значение хранит список значений

Примечание. Так же можно вызвать контекстное меню для ячейки, чтобы включить или отключить список значений.

Результат заполнения таблицы:

    менВспТаблицы                 = Справочники.XLY_ВспомогательныеТаблицы;    
    ВспТаблицаКонстантныеЗначения = менВспТаблицы.ПолучитьСсылкуПоИдентификатору("ПроверкаЭлементов");
    
    Если ВспТаблицаКонстантныеЗначения.Пустая() Тогда
    	Возврат;
    КонецЕсли; 
    
    ИмяКолонкиКлюча      = "Ключ"; //Значения колонки будут помещены в ключ коллекции
    ИмяКолонкиЗначения   = "Значение"; //Значения колонки будут помещены в значение коллекции
    ФормироватьСтруктуру = Истина; //Возвращаемое значение будет иметь тип "Структура"
    
    СтруктураЗаполнения = менВспТаблицы.ПолучитьКоллекциюКлючЗначениеИзСохраненнойТаблицы(ВспТаблицаКонстантныеЗначения,
                                                                                          ИмяКолонкиКлюча,
                                                                                          ИмяКолонкиЗначения,
                                                                                          ФормироватьСтруктуру);

 

Результат работы кода:

Одному ключу соответствует несколько значений

 

Описание функциональности.

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

Важно!

- Большинство функций по извлечению значений из всп. таблиц уже реализованы в модуле менеджера, см. область "Получение_данных". 

- При обнаружении ошибок большая просьба сообщать, по мере возможности буду устранять.

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

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169829    939    403    

905

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    12928    100    46    

103

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    26671    90    48    

134

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    16906    41    15    

75

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    190678    1151    0    

918

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

15000 руб.

10.11.2023    11440    40    27    

66

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    914    2    0    

5

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    103983    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. serg-lom89 76 24.02.21 09:46 Сейчас в теме
Прикольная штука!)Пример #2
а что будет тогда,когда например в реквизите
"валюта" , в значение заполнения будет указан предопределенный элемент?
2. xl_yaz 30 24.02.21 10:51 Сейчас в теме
Не знаю правильно ли я понял вопрос ) Но если имеется ввиду, что если в строке с ключом "ВалютаВзаиморасчетов", в колонке "Значение" указать предопределенный элемент, то этим элементом и заполнится значение. По сути таблица возвращает значения, как они были заполнены пользователем, т.е. все что можно выбрать из справочника, можно использовать в таблице.
3. user1542028 24.02.21 11:33 Сейчас в теме
4. Cyberhawk 135 06.03.21 17:05 Сейчас в теме
А зачем каждый раз при получении значений настроек инициализируются и передаются ИмяКолонкиКлюча и ИмяКолонкиЗначения, если выше в коде мы уже через "ПолучитьСсылкуПоИдентификатору" получили сам элемент справочника (экземпляр настройки), в котором описание структуры (эти имена ключа и значения) уже есть?
5. xl_yaz 30 09.03.21 10:20 Сейчас в теме
(4)

Элемент справочника не хранит структуру в виде соответствия, ф-ция "ПолучитьКоллекциюКлючЗначениеИзСохраненнойТаблицы", преобразует таблицу значений в соответствие, поэтому я ее вызываю после получения элемента всп. таблицы.
6. pyrkin_vanya 497 13.03.21 02:27 Сейчас в теме
Лет 10 уже использую подобный механизм, но написать его отдельно всегда было лень. ))) Для себя всегда просто копировал свои объекты из конфы в конфу.
Почему не расширение?
9. xl_yaz 30 13.03.21 14:48 Сейчас в теме
(6)
Не сделал, через расширение так как было лень если честно, у меня уже была часть написана в конфе, немного допилил и выложил) возможно найду время сделать через расширение, тоже об этом думал, но пока не найду в себе сил)
7. 6y6ka_gop 13.03.21 14:22 Сейчас в теме
Бспшное безопасное хранилище данных - и не надо изобретать велосипед
8. xl_yaz 30 13.03.21 14:46 Сейчас в теме
(7)
Возможно я не слишком знаком с безопасным хранилищем. В нем есть возможность графического создания таблицы необходимой структуры с заполнением? И если помеченный на удаление элемент используется в безопасном хранилище, выполняется его удаление, то система удалит или все же он попадет в контроль ссылочной целостности?
10. pyrkin_vanya 497 13.03.21 15:45 Сейчас в теме
(7)
безопасное хранилище данных

А причем тут это вообще? Тут речь идет о произвольных настройках в виде таблиц с произвольным набором колонок и главное с произвольными типами этих колонок. + внешний интерфейс заполнения этого всего.
Автору однозначно + за труды. Доведите до ума через расширение и вообще будет супер.
11. Simonov_NPM 15.03.21 07:38 Сейчас в теме
Среди типов не заметил ПланыВидовХарактеристик, есть такая возможность?
12. xl_yaz 30 15.03.21 10:27 Сейчас в теме
(11)
Хорошо обратили мое внимание на это. Нашел некоторые недочеты. По поводу плана счетов, его выбрать в типах колонок (нижняя таблица) можно, но тип не установился (баг). Но если тип для КОЛОНКИ не выбирать, а выбрать тип для конкретной ячейки при выборе значения, то позволяет выбирать план счетов.
Прикрепленные файлы:
Оставьте свое сообщение