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

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С.

15500 руб.

02.09.2020    180507    1001    403    

954

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

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

8400 руб.

20.08.2024    21803    146    82    

144

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

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

22200 руб.

06.10.2023    19487    50    19    

84

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

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

15000 руб.

10.11.2023    13218    54    33    

74

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

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

9360 руб.

17.05.2024    29647    101    48    

147

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18841    7    32    

43

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

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

3600 руб.

27.12.2024    1975    2    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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)
Хорошо обратили мое внимание на это. Нашел некоторые недочеты. По поводу плана счетов, его выбрать в типах колонок (нижняя таблица) можно, но тип не установился (баг). Но если тип для КОЛОНКИ не выбирать, а выбрать тип для конкретной ячейки при выборе значения, то позволяет выбирать план счетов.
Прикрепленные файлы:
Оставьте свое сообщение