Как определить, что есть "Системные перечисления" и "Предопределенные значения"?
Я не понимаю, в СП написано — Тип предопределенного значения> может быть:
Справочник (Catalog);
ПланВидовХарактеристик (ChartOfCharacteristicTypes);
ПланСчетов (ChartOfAccounts);
ПланВидовРасчета (ChartOfCalculationTypes);
Документ (Document) — только пустая ссылка;
Перечисление (Enum);
БизнесПроцесс (BusinessProcess) — только пустая ссылка и получение точек бизнес процесса;
Задача (Task) — только пустая ссылка.
А по каким критериям то это определилось? Ну Перечисление это понятно, я создаю его в конфигураторе, пишу значения, и все, после запуска программы значения перечислений предопределены. Ну а остальное?
А вот определение "Системные перечисления" из гугла:
Системные перечисления предназначены для определения некоторого набора предопределенных значений и используются в качестве: значений параметров некоторых методов; значений некоторых свойств объектов.
Ну и что это? Это тоже получается Перечесление? И все? А в значение параметров методов можно что угодно установить.
Объясните пожалуйста с примерами.
1С 8.2 Розница — "Текущая цена розницы", "Остаток" в форме элемента "Номенклатура"
Всем добрый день! Нужна помощь. В Форму элемента "Номенклатура" нужно добавить два поля с выводом.
Сообщение было отмечено Чеволек Павук как решение
COM, OLE.
В ТЗ можно передавать только значения примитивных типов.
при условии, что и идентификатор вида объекта и сама ссылка в двух базах совпадают;
если совпадают только ссылки;
если ни идентификатор вида объекта ни ссылка на объект не совпадают, то остается поиск по коду, наименованию и прочим полям.
Чтение листа Excel через OLE соединение
Получение значений перечислений через внешнее соединение или Automation сервер
Системные перечисления и их элементы
Системные перечисления предназначены для определения некоторого набора предопределенных значений и используются в качестве значений параметров некоторых методов, а также в качестве значений некоторых свойств объектов 1С:Педприятия. Доступ к системным перечислениям осуществляется как к свойствам глобального контекста. Значения элементов системных перечислений указываются через точку от имени системного перечисления. Например:
В качестве значений параметров метода Записать() заданы два значения элементов системных перечислений: элемент «Проведение» системного перечисления «РежимЗаписиДокумента» и элемент «Оперативный» системного перечисления «РежимПроведенияДокумента».
И системные перечисления, и значения их элементов являются объектами, и могут быть переданы в другие приложения через COM посредством интерфейса IDispatch. При этом любое системное перечисление имеет набор свойств, каждое из которых позволяет получить соответствующее значение элемента данного системного перечисления. Элемент системного перечисления также является объектом и доступен через интерфейс IDispatch, однако ни свойств, ни методов он не имеет.
По этой причине анализ полученных значений системных перечислений возможен только посредством их сравнения со значениями системных перечислений, полученными через свойства глобального контекста. Например, на встроенном языке 1С:Предприятия проверка значений системных перечислений, полученных через внешнее соединение, может быть выполнена так:
Важно иметь в виду, что значения одних и тех же системных перечислений, полученные из разных экземпляров клиентского приложения или внешнего соединения 1С:Предприятия, являются разными объектами и между собой несравнимы.
Перечисления, определенные в конфигурации
В отличие от системных перечислений, определенные в конфигурации перечисления являются объектами базы данных. Элемент такого перечисления является ссылкой на объект базы данных. Например, если в конфигурации определено перечисление «Перечисление1» с элементами «ЗначениеПеречисления1» и «ЗначениеПеречисления2», а реквизит «Реквизит1» справочника «Справочник1» имеет тип «ПеречислениеСсылка.Перечисление1», то следующий код на встроенном языке 1С:Предприятия:
выведет «Равно», если значением реквизита «Реквизит1» является «ЗначениеПеречисления1» и «Не равно» в противном случае.
Однако если значение элемента перечисления получить через внешнее соединение, то оно будет являться COM объектом, и подобное сравнение будет всегда приводить к отрицательному результату. Например, следующий код на встроенном языке 1С:Предприятия:
будет всегда выводить «Не равно». Это происходит потому, что значение элемента перечисления является объектом типа ссылка на объект базы данных. Для объектов ссылок определена операция сравнения значений, которая может работать только для «своих» объектов 1С:Предприятия. Объекты, полученные через внешнее соединение «своими» не являются, поэтому операция их сравнения является проверкой идентичности. Поскольку для объектов ссылок идентичность не поддерживается, их сравнение может дать отрицательный результат, даже если значения ссылок, заключенные в этих объектах, одинаковые.
Для сравнения значений элементов перечислений, определенных в конфигурации, необходимо выполнить преобразование этих элементов к одному из примитивных типов, сравнение которых не вызывает трудности. Такими типами могут быть либо числовой, либо строковый тип. Преобразовать значение элемента перечисления к числовому типу можно так:
Если тип перечисления, значение которого может содежать переменная «ЭлементПеречисления», известен заранее, то приведенный выше пример может быть записан проще:
Значение элемента перечисления может быть приведено к строковому типу, например, при помощи следующего фрагмента кода на встроенном языке 1С:Предприятия:
Как работать с перечислениями в 1с 8.2 — 8.3
Работаем с перечислениями 1с 8
Иногда требуется по значению синонима найти имя перечисления или имя значения перечисления и преобразовать найденный результат к типу ПеречислениеСсылка. Для решения такой задачи программирования можно предложить варианты функций рассмотренные в данной статье. Рассматривается алгоритмический метод с использованием языка 1С и языка запросов.
Перечисление — объект конфигурации, имеющий значения данных описанное свойствами Имя и Синоним. Имя используется в алгоритмической части конфигурации, Синоним — для получения представления при выводе в элементы формы объектов или печатные формы. Другое определение перечисления — это именованные списки значений, задаваемых на этапе конфигурирования.
Как получить имя перечисления по синониму
Алгоритмически можно получить коллекцию перечислений из конфигурации и перебрав их в цикле сравнить значение реквизита синоним с параметром функции вернуть имя перечисления.
Исходный код функции ИмяПеречисленияПоСинониму (СинонимПеречисления):
Функция размещена в примере конфигурации к данному разделу в общем модуле «Работа с перечислениями».
Как получить имя значения перечисления, если известен синоним значения
Если известно перечисление, и известно, что одно из значений имеет известный нам синоним, то перебрав в цикле коллекцию значений перечисления можно получить его имя. Совокупность имени перечисления и имени значения перечисления позволяют получить ссылку на перечисление, которую уже можно применять в качестве значения реквизитов справочников, документов и регистров.
Исходный код функции ИмяЗначенияПеречисленияПоСинониму(ИмяПеречисления, СинонимЗначения):
Функция размещена в примере конфигурации к данному разделу в общем модуле «Работа с перечислениями».
Получение ссылки на значение перечисления по имени перечисления и по имени его значения
Если известно имя самого перечисления и имя его значения, то получить ссылку которая будет являться значением, например субконто, можно следующим образом:
ПеречислениеСсылка = Перечисления[пИмяПречисления][пИмяЗначения];
Исходный код функции ПолучитьСсылкуНаЗначениеПеречисления( пИмяПеречисления, пИмяЗначения )
Функция размещена в примере конфигурации к данному разделу в общем модуле «Работа с перечислениями».
Использование значения перечисления в запросе
Возможность использования перечислений в запросах появилась в версии 8.1.5. В учебной версии 8.1.9.57 она описана во встроенной справке конфигуратора в разделе: 1С:Предприятие -> Встроенный язык -> Работа с запросами -> Язык запросов -> Использование предопределенных данных конфигурации.
Текст запроса может содержать значения системных перечислений, которые могут быть присвоены полям в таблицах базы данных: ВидДвиженияНакопления, ВидСчета и ВидДвиженияБухгалтерии.
Обращение в запросах к предопределенным данным конфигурации и значениям системных перечислений осуществляется с помощью литерала функционального типа:
ЗНАЧЕНИЕ(<ПредставлениеЗначения>)
Для системных перечислений представление значение имеет вид:
<ИмяСистемногоПеречисления>.<Значение>
Пример запроса может выглядеть следующим образом:
Внешний вид экранной формы обработки по работе с синонимами перечислений для платформы 1С:
Выдержка из справочной системы 1С по назначению перечислений:
Перечисления используются в системе 1С:Предприятие для описания постоянных наборов значений, не изменяемых в процессе работы конфигурации. В отличие от справочника, значения перечислений задаются на этапе конфигурирования, и не могут быть изменены на этапе исполнения.
Типичными примерами перечислений являются виды оплаты (наличная, безналичная, бартер), статус клиента (постоянный, разовый) и т.д.
Одной из главных особенностей перечислений, отличающую их от справочников, является то, что набор значений перечисления не изменяется при работе конечного пользователя с программой. Например, алгоритм конфигурации может быть ориентирован на то, что каждый клиент имеет один из двух статусов — либо «постоянный», либо «разовый», в этом случае указание статуса клиента выполняется путем выбора одного из значений перечисления. Пользователь не может добавить новый статус.
В отличие от перечислений, для справочников конкретные значения обычно вводятся пользователем при работе с программой, например: наименования товаров, контрагентов и прочее.
Если Вы хотите больше узнать о программировании в 1С, тогда регистрируйтесь на курс: 1С 8.3 Старт >>>
Что такое системные перечисления
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: функция ЗНАЧЕНИЕ
Автор уроков и преподаватель школы: Владимир Милькин
Функция ЗНАЧЕНИЕ предназначена для обращения в тексте запроса к значениям системных перечислений и предопределенным данным .
Что ещё за перечисления и предопределенные данные, спросите вы. Давайте обо всём по порядку.
Перечисления
Перечисления — это прикладной объект (вы помните, что ещё существуют Справочники и Документы). Зачем он понадобился?
Дело в том, что перечисление — это особенный объект. В отличие от справочников и документов все возможные значения перечислений задаются на этапе конфигурирования и не могут быть в дальнейшем изменены в пользовательском режиме.
Неизменность — это их главный козырь. Это своеобразные константы базы данных.
И если программист в режиме конфигурирования создал перечисление с именем Пол и значениями Мужской и Женский, то при написании программы он может быть уверен, что в дальнейшем значения этого перечисления не изменятся. Поэтому он может смело обращаться к этим значениям из кода.
Представьте, что будет, если он попытается для этих целей использовать справочник?
Во-первых, какой-нибудь пользователь возьмёт да и добавит какой-нибудь «Марсианский пол».
Во-вторых, другой пользователь возьмёт да и удалит один из уже имеющихся полов или имя ему поменяет.
А программа от этого сломается, потому что для её работы необходимо, чтобы было ровно два пола и именно с именами «Мужской» и «Женский».
Вот для таких случаев, как раз и существуют перечисления: чтобы один раз (ещё на этапе конфигурирования) жестко задать все возможные варианты значений и в дальнейшем использовать их в коде программ.
Давайте рассмотрим пример такого перечисления в нашей базе «Гастроном». Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Вот оно наше перечисление с именем Пол. Какие значения оно может принимать?
Всего два значения. С именами «Мужской» и «Женский». То что нам надо.
Где мы в дальнейшем можем использовать это перечисление? Ну, конечно, в справочнике Клиенты. Обратите внимание, что в его списке появился новый реквизит с именем Пол и типом Перечисление.Пол:
Таким образом, при заполнении карточки клиента уже в режиме пользователя мы сможем в качестве пола клиента выбирать всего из двух значений Мужской и Женский:
Теперь давайте составим запрос, выбирающий клиентов и их пол из базы:
А теперь давайте изменим запрос, чтобы остались только мужчины. Если мы попробуем написать что-то типа:
то ничего не получим:
Потому что к значениям перечисления так обращаться нельзя. К ним нужно обращаться используя функцию ЗНАЧЕНИЕ:
Итак, одна из задач функции ЗНАЧЕНИЕ — использование в запросах значений перечислений.
Предопределенные данные
Я лучше покажу на примере, что такое предопределенные данные для справочников. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
В нашей базе «Гастроном» (в режиме пользователя) откройте справочник «Единицы измерения»:
Присмотритесь к его элементам. Видите жёлтые кружочки рядом с некоторыми из элементов? Вот эти элементы (у которых кружочки) и есть предопределенные данные .
Вообще же, если какой-либо элемент справочника является предопределенным (то есть на нём стоит жёлтый кружочек), то это особенный элемент.
Во-первых, это означает, что элемент был создан ещё на этапе конфигурирования программистом (в нашем случае это элементы с кодами 1, 2 и 3).
А, во-вторых, это значит, что этот элемент очень важен для функционирования программы. Что на него (вернее на его предопределенное имя) завязан какой-то код в базе данных.
Именно поэтому просто удалить такой элемент не получится. Попробуйте пометить его на удаление:
Давайте теперь перейдём в режим конфигурирования и посмотрим где же эти самые предопределенные элементы (в данном случае для справочника Единицы измерения) создаются:
Вот они все наши предопределенные элементы для справочника Единица измерения. Обратите внимание, что все предопределенные элементы имеют специальное имя, которое не отображается в режиме пользователя.
Для элемента с кодом 1 это имя Тонна, с кодом 2 — Грамм и так далее. Это имя называется предопределенным именем элемента и именно по этому имени можно обращаться к нему из кода (или из запроса в нашем случае).
Вы спросите почему же было не сделать единицы измерения просто перечислением с элементами Тонна, Грамм и Пачка? А всё потому, что в данном случае нам важно, чтобы справочник единицы измерения всегда содержал какие-то определенные элементы (тонна, грамм и пачка), но в то же время мы не хотим запрещать пользователю добавлять какие-то свои элементы (килограмм, штука и так далее). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Поэтому здесь безусловно больше подходят предопределенные элементы, чем перечисления.
А обращаться к нашим предопределенным элементам из запроса мы сможем используя уже знакомую нам функцию ЗНАЧЕНИЕ: