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

24.02.21

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

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

Скачать исходный код

Наименование Файл Версия Размер
Вспомогательные таблицы - универсальный инструмент хранения таблиц любой структуры (константы, параметры обработок и т.д.):
.cf 64,28Kb
10
.cf 64,28Kb 10 Скачать

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

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

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

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

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

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

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

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

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

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

Пример #1

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

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

Решение.

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

Реализация.

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

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

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

 

Примечание.

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

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

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

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

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

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

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

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

 

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

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

 

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

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

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

 

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

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

 

Пример #2

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

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

Решение.

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

Реализация.

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

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

 

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

Результат:

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

 

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

 

 

Пример #3

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

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

Решение.

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

Реализация.

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

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

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

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

 

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

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

 

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

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

Важно!

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

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

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

См. также

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    125073    683    389    

732

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

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

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

18000 руб.

06.10.2023    7797    24    6    

42

Infostart УДиФ: Управление данными и формами 1С

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

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

10000 руб.

10.11.2023    4297    12    2    

36

SALE! %

PowerTools

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

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

3600 2280 руб.

14.01.2013    178681    1084    0    

862

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

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

5000 руб.

07.02.2018    99653    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18410    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23864    16    15    

33

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28331    3    10    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 488 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 488 13.03.21 15:45 Сейчас в теме
(7)
безопасное хранилище данных

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