При работе с программой в режиме 1с предприятие предопределенные элементы справочника можно

Сегодня мы поговорим про один функционал справочника, который называется «Предопределенные элементы».

Что значит слово » Предопределенный «? Это значит, что кто-то что-то предопределил до какого-то момента.

А что значит элемент ? Это, например, в справочнике список сотрудников — список элементов. Если теперь все это объединить, то получается, что это элемент, который был определен заранее кем-то!

А кем он может быть определен заранее, если мы говорим про платформу 1С? Заранее может определить только разработчик!

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

Перейдем к практике!

Откроем режим разработчика и откроем справочник «СписокТоваровИУслуг», перейдем на вкладку «Прочее» (Рисунок 1). Там есть кнопка «Предопределенные», нажмите ее

Предопределенные элементы справочников. #20

Источник: dzen.ru

1С, что такое предопределенный элемент, как создать?

Предопределенный элемент в 1С — это запись справочника заранее созданная в конфигураторе. К предопределенным элементам можно обращаться программно, при этом не используя запросы к базе данных. Данные элементы помечены желтым кружком и их нежелательно редактировать в пользовательском режиме, их нельзя удалить.

Пример создания предопределенного элемента:

Допустим нам необходимо, чтобы в базе изначально присутствовал объект справочника «Договор», а именно «Договор подряда».

  • Заходим в конфигуратор;
  • Открываем справочник договоры -> Прочее -> Предопределенные
  • Нажимаем кнопку «Создать» (зеленый круг с плюсом), затем заполняем «Имя», без пробелов.
  • Обновляем базу;
  • Затем в пользовательском режиме открываем справочник «Договоры». Видим, что уже есть 1 элемент справочника, созданный нами в конфигураторе. Договор помечен желтым кружком, что говорит нам о том, что он предопределенный.

Пример программного обращения к предопределенному элементу

Создадим обработку, с формой, на форму выведем кнопку. При нажатии на кнопку организуем вывод сообщения с наименованием договора созданного в конфигураторе.

Пример процедуры:

Сообщить(Справочники.Договоры.ДоговорПодряда.Наименование); Сообщить(Справочники.Договоры.ДоговорПодряда.Код); КонецПроцедуры

Пример использования предопределенных элементов в СКД

  • Данные элементы мы можем использовать при отборе, в схеме компоновки данных. Создадим отчет СКД, с текстом запроса:

ВЫБРАТЬ ЗаказПокупателя.Ссылка КАК Ссылка, ЗаказПокупателя.ВерсияДанных КАК ВерсияДанных, ЗаказПокупателя.ПометкаУдаления КАК ПометкаУдаления, ЗаказПокупателя.Номер КАК Номер, ЗаказПокупателя.Дата КАК Дата, ЗаказПокупателя.Проведен КАК Проведен, ЗаказПокупателя.Контрагент КАК Контрагент, ЗаказПокупателя.Договор КАК Договор ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя

  • Далее в форме СКД переходим на вкладку Настройки -> Отбор -> Договор, переместить в правую область -> Выбрать «Договор подряда» из доступных значений;
  • Результат запроса будет отфильтрован по договору подряда.

Источник: infofront.su

Предопределенные элементы в 1С

Код Икс Пи ☆ Центр автоматизации, сопровождения и поддержки

При реализации алгоритмов разработчики часто опираются на определенные данные – элементы справочников, планов счетов, планов видов расчета и т.д.

Во встроенном языке существуют методы для поиска данных, например, НайтиПоКоду() или НайтиПоНаименованию().

Однако алгоритмы, опирающиеся на код или наименование, зачастую являются ненадежными.

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

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

Читайте также:
Из чего состоит автомобиль программа

Таким образом, у предопределенных данных есть две “стороны”: во-первых, существует список предопределенных элементов, созданный в конфигураторе, а, во-вторых, для данных информационной базы указывается, является ли конкретный элемент предопределенным.

Предопределенные элементы могут быть созданы у:

  • справочников;
  • планов счетов;
  • планов видов характеристик;
  • планов видов расчета.

В статье рассмотрены новшества, касающиеся предопределенных данных на платформе 8.3, а также особенности работы с ними в распределенных базах (как центральных, так и периферийных) и в информационных базах в режиме разделения данных.

Пиктограмма в списке изменилась:

Чтобы связать предопределенный элемент с новой записью, нужно присвоить свойству ИмяПредопределенныхДанных имя предопределенного элемента:

КонецПроцедуры ОбъектДанных = НайденнаяСсылка.ПолучитьОбъект(); ОбъектДанных.ИмяПредопределенныхДанных = “ОсновнаяОрганизация”; ОбъектДанных.Записать(); КонецПроцедуры

Теперь с пиктограммой предопределенного элемента выводится другой элемент справочника:

Запрос = Новый Запрос; Запрос.УстановитьПараметр(“ИмяПредопределенныхДанных”, ИмяПредопределенныхДанных); Запрос.Текст = “ВЫБРАТЬ | Организации.Ссылка, | Организации.Наименование, | Организации.Код |ИЗ | Справочник.Организации КАК Организации |ГДЕ | Организации.ИмяПредопределенныхДанных = Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = Выборка.Наименование; Сообщение.Сообщить(); КонецЕсли;

Если параметр запроса ИмяПредопределенныхДанных принимает значение “ОсновнаяОрганизация”, запрос выполняется без ошибок.

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

ОбъектДанных= Метаданные.Справочники.Организации; ТекстЗапроса = “ |ВЫБРАТЬ | ИмяОбъекта.Ссылка |ИЗ | “ + ОбъектДанных.ПолноеИмя() + ” КАК ИмяОбъекта | |ГДЕ | ИмяОбъекта.Предопределенный; Запрос = Новый Запрос(ТекстЗапроса); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ИмяПредопределенного = Справочники[ОбъектДанных.Имя].ПолучитьИмяПредопределенного (Выборка.Ссылка); Сообщить(ИмяПредопределенного); КонецЦикла;​

Получение списка предопределенных элементов, заданных в метаданных, при помощи встроенного языка – невозможно.

Однако начиная с платформы 8.3.3, метод ПолучитьИмяПредопределенного() является устаревшим и поддерживается для совместимости, поэтому даже в Синтакс-помощнике платформы 8.3.4 он не отображается.

В платформе 8.3 разрешено помечать предопределенные данные на удаление и производить удаление предопределенных данных. Если же удаление предопределенных элементов в разрабатываемой конфигурации недопустимо, то следует настроить права доступа.

Теперь в платформе присутствуют новые права доступа, определяющие возможность редактирования предопределенных данных:

  • ИнтерактивноеУдалениеПредопределенныхДанных,
  • ИнтерактивнаяПометкаУдаленияПредопределенныхДанных,
  • ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных,
  • ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных.

Однако “интерактивные” права на просмотр и редактирование стандартных реквизитов Предопределенный и ИмяПредопределенныхДанных можно установить по отдельности:

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

Для указания стратегии создания или изменения предопределенных данных было реализовано системное перечисление ОбновлениеПредопределенныхДанных, содержащее следующие значения:

  • Авто – необходимость создания предопределенных элементов и обновление существующих будет определяться системой автоматически;
  • НеОбновлятьАвтоматически – не будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений. В случае отсутствия элемента данных, связанного с предопределенным элементом, будет сгенерировано исключение при попытке обращения к нему;
  • ОбновлятьАвтоматически – будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений.

Чтобы принять решение, нужно ли создавать и обновлять предопределенные данные, система последовательно анализирует следующие значения:

  • значение, установленное для объекта в данных;
  • значение, установленное для объекта метаданных в конфигураторе;
  • значение, установленное в целом для информационной базы;
  • вид информационной базы – центральная (либо не распределенная база) или периферийная база.

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

Подробнее будет рассмотрено ниже.

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

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

Кроме того, разработчик в зависимости от логики прикладного решения должен иметь возможность управлять процессом создания предопределенных элементов.

Читайте также:
Программа для отправки задание

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

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

Получить и установить значение этого свойства для каждого объекта метаданных в пользовательском режиме можно с помощью методов ПолучитьОбновлениеПредопределенныхДанных() и
УстановитьОбновлениеПредопределенныхДанных().

Эти методы доступны у объектов типа СправочникМенеджер, ПланСчетовМенеджер, ПланВидовХарактеристикМенеджер, ПланВидовРасчетаМенеджер.

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

2. Иначе если для объекта метаданных в конфигурации установлен режим обновления, отличный от Авто, то используется это значение.

3. Иначе если для информационной базы установлен режим обновления, отличный от Авто, то используется это значение.

Получить и установить значение этого свойства для каждого объекта метаданных в пользовательском режиме можно с помощью методов ПолучитьОбновлениеПредопределенныхДанныхИнформационнойБазы() и УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы().

4. Иначе анализируется вид узла распределенной базы. Если это периферийный узел, то предопределенные данные не будут обновлены (соответствует значению НеОбновлятьАвтоматически).

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

Если база находится в режиме совместимости “Версия 8.3.3”, то алгоритм определения необходимости обновления предопределенных данных выглядит немного по-другому.

Обновление не будет производиться:

  • если в метаданных или в данных установлено НеОбновлятьАвтоматически;
  • если в метаданных или в данных установлено Авто и текущий узел является периферийным.

В противном случае предопределенные данные будут обновлены.

Создание в информационной базе данных, связанных с предопределенными, может быть выполнено следующими способами:

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

2. При первом обращении к таблице с данными объекта конфигурации. Создание предопределенных элементов будет выполняться при условии, что их создание не запрещено.

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

Обновление данных, связанных с предопределенными, будет выполняться, если:

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

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

Если в конфигураторе удалить предопределенный элемент, то будут выполнены следующие действия:

  • элемент данных, связанный с предопределенным элементом, будет помечен на удаление;
  • в списке субконто элемента плана счетов будут удалены соответствующие записи;
  • в списках ведущих, базовых и вытесняющих видов расчета будут удалены соответствующие записи.

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

В пользовательском режиме у элемента справочника, связанного с предопределенным, значение свойства ИмяПредопределенныхДанных стало равным #708c7031-c7bd-45d4-a8c9-65b2fecfde62, где символы после знака “#” – это уникальный идентификатор удаленного элемента метаданных.

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

А элементы данных, связанные с предопределенными, регистрируются в планах обмена так же, как и обычные данные.

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

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

При работе на платформе 8.3 следует учитывать следующую особенность.

Читайте также:
Как пользоваться программой picasso viewer

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

Чтобы не допустить такого поведения, можно использовать метод глобального контекста УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы() или использовать параметр командной строки в пакетном режиме запуска конфигуратора /SetPredefinedDataUpdate, который предназначен для указания режимов обновления предопределенных данных.

Этот параметр может принимать одно из трех значений:

    • UpdateAutomatically – при реструктуризации информационной базы будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений;
    • DoNotUpdateAutomatically – при реструктуризации информационной базы не будет выполняться автоматическое создание новых предопределенных элементов и обновление их значений;
    • Auto – фактическое значение вычисляется автоматически. Для главного узла информационной базы значение будет равно UpdateAutomatically, для периферийного узла информационной базы будет равно DoNotUpdateAutomatically.

    Командная строка запуска конфигуратора с этим параметром будет выглядеть следующим образом:

    “C:Program Files1cv88.3.4.437bin1cv8.exe DESIGNER /F”ПутьКБазе” /N”Администратор” /P”Пароль” /SetPredefinedDataUpdate -DoNotUpdateAutomatically”

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

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

    Для информационной базы, где создаются предопределенные элементы, следует использовать значение UpdateAutomatically, а для второй информационной базы – DoNotUpdateAutomatically.

    В платформе 8.3 для объектов конфигурации, которые могут содержать предопределенные данные (справочники, планы счетов, планы видов характеристик, планы видов расчета), реализована возможность устанавливать свойство ИмяПредопределенныхДанных в значение специального вида, состоящее из символа “#” и текстового представления уникального идентификатора.

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

    В платформе 8.2.14 появился механизм разделения данных. При использовании разделенной базы предопределенные элементы создавали ряд ограничений.

    Так, было невозможно использовать предопределенные данные для объектов конфигурации, входящих в состав разделителя в режиме “Независимо и совместно”.

    Теперь в платформе 8.3 предопределенные данные можно использовать для объектов, входящих в состав любых разделителей.

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

    Например, рассмотрим предопределенный элемент ОсновнаяОрганизация в справочнике Организации.

    Пусть в базе есть две области: с кодами 01 и 02.

    Значит, уникальный идентификатор элемента данных, связанного с элементом ОсновнаяОрганизация в области с кодом 01, не будет равен уникальному идентификатору элемента данных, связанного с элементом ОсновнаяОрганизация в области 02.

    Подведем итоги. Рассмотрим, для чего было внесено столько нововведений в работу с предопределенными данными.

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

    Так, невозможно было использовать предопределенные данные для объектов конфигурации, входящих в состав разделителя в режиме “Независимо и совместно”. Невозможно было связать существующий объект данных с предопределенными данными.

    Один предопределенный элемент имел одинаковую ссылку во всех областях данных.

    При обмене данными с использованием РИБа предопределенные данные передавались только с изменениями конфигурации прикладного решения. Управлять созданием и обновлением предопределенных данных было невозможно.

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

    You have no rights to post comments

    Источник: codexp.ru

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru