1с получить значение дополнительного реквизита программно
В этой статье я хотел бы рассказать об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С БСП).
Для начала предлагаю разобраться с терминологией 1С БСП: согласно ИТС дополнительные реквизиты и сведения — это свойства. По моему мнению, подсистема «Свойства» (Управление свойствами) — это очень мощный функционал, который позволяет во многих случаях отказаться от снятия конфигурации с поддержки или внесения ненужных изменений и ошибок в конфигурацию.
Архитектура
Описание работы с подсистемой «Свойства» на сайте ИТС 1С является исчерпывающим для типовых конфигураций, но в любом случае, для того, чтобы начать работать со свойствами в любой конфигурации с внедрённым 1С БСП необходимо установить установить константу «Использовать дополнительные реквизиты и сведения» в значение «Истина». После этого мы можем открыть справочник «Наборы дополнительных реквизитов и сведений», который содержит список объектов для которых можно создавать дополнительные реквизиты и сведения. При добавлении через стандартные формы 1С БСП пользователь создаёт новый элемент «Плана видов характеристик», который добавляется в табличную часть элемента.
Дополнительные сведения отличаются от дополнительных реквизитов прежде всего расположением, дополнительные сведения содержатся в отдельном регистре с одноименным названием, а дополнительные реквизиты являются табличной частью объекта, к которому относятся. На рисунке ниже слева-направо изображены: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и список регистра сведений «Дополнительные сведения».
Следующий рисунок изображает пример дополнительного реквизита, слева-направо: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и элемент справочника, в который был добавлен дополнительный реквизит.
Также стоит учитывать, что большая часть объектов метаданных в справочнике «Наборы дополнительных реквизитов и сведений» является предопределённой:
Однако, заполнение этих данных происходит программно, при внедрении 1С БСП или обновлении информационной базы — для этого в общих модулях добавляют процедуру ПриПолученииПредопределенныхНаборовСвойств. Уникальный идентификатор задаётся в явном виде, в т.ч. для того чтобы облегчить процедуры обмена между базами.
С точки зрения интеграции с объектами механизм работы с формами не сильно отличается от аналогичных у других подсистем 1С БСП: из модуля УправлениеСвойствами вызываются процедуры и функции с названиями соответствующими названиям событий для которых они вызываются, например:
Полный список функций и процедур находится в общем модуле УправлениеСвойствами в блоке, озаглавленным: «Процедуры и функции для стандартной обработки дополнительных реквизитов».
Использование
Каждый дополнительный реквизит или свойство содержит поле «Имя», подразумевается, что для программного использования будет использоваться этот реквизит.
Пример использования имени для получения дополнительного реквизита:
Пример запроса для получения всех дополнительных свойств:
Примеры получения свойств без запроса:
Особенности реализации
Если с запросами и функциями всё более менее ясно неприятным сюрпризом может стать то, что дополнительный реквизит на форме содержит название, отличающееся от этого реквизита, например, такое:
Чтобы найти реквизит на форме 1С БСП создаёт новые реквизиты формы Свойства_ОписаниеДополнительныхРеквизитов и Свойства_ОписаниеЗависимыхДополнительныхРеквизитов, с помощью них можно установить однозначное соответствие между элементом и значением объекта:
Второй особенностью реализации можно выделить невозможность создания свойства с мутабельным типом, с одной стороны это очевидное ограничение, с другой тип «Список значений» вполне допустим, но только для дополнительного реквизита (у дополнительных сведений невозможность связана с архитектурными ограничениями, так как объект и свойство — это измерения регистра «Дополнительные сведения»). Возможно, отсутствие такого типа связано со сложностями при обмене, а возможно в скором времени это будет реализовано, предлагаю посмотреть на пример такой реализации ниже.
Добавим новый дополнительный реквизит для справочника физические лица «Номера счетов»
Добавляем программно, вторую запись в табличную часть «Дополнительные реквизиты» справочника «Физические лица» с тем же самым свойством:
Немного модифицируем код функции ЗначенияСвойств в общем модуле УправлениеСвойствамиСлужебный:
А также код процедуры ЗаполнитьДополнительныеРеквизитыВФорме в общем модуле УправлениеСвойствами:
Таким образом мы можем сохранять и восстанавливать значения реквизитов, которые, принимают множество значений.
Создал в справочнике "Договора" дополнительный реквизит.
Как с помощь запроса получить значение этого реквизита?
Дайте пример кода или ссылку its где это описано. Как работать с дополнительными реквизитами.
У меня управляемое приложение
пишу вот так вот и нечего не получается
(3) PavelZnaikin, а что именно не получается ? ты бы в консоли запросов сначала добился результата. Запрос то элементарный, регистр тоже.
(3) PavelZnaikin, Вы создали дополнительный реквизит, а ищите дополнительное сведение? Про разницу писал тут: http://infostart.ru/public/188152/ . Дополнительный реквизит хранится в табличной части объекта "ДополнительныеРеквизиты", поэтому запрос надо делать не к регистру, а к табличной части в Вашем случае справочника "Договоры".
(3) Дело не в регистре а в измененной архитектуре хранения доп данных
в конфигурациях построенных на БСП
теперь есть 2 вида доп. сведения
1. Доп. реквизиты (хранятся в подчиненной табличной части Объекта) редактируются в форме объекта (Документ, Справочник)
2. Доп. сведения (вызывается отдельная форма данные хранятся в регистре
поэтому если вы создали реквизит данные нужно искать в Доп.реквизитах так именуется табличная часть того объекта для которого создали реквизит
Если писать вот так
то получается ТЗ где хранится значение.
Тут надо соединять справочник и ПВХ
но как только не соединял, значение доп реквизита получить не могу
Ступил, не допер обратиться к ТЧ доп.реквизитов))))
Получился вот такой запрос
У меня вопрос, а дополнительный реквизит можно найти только по наименованию?
Просто код доп.реквизита я негде не увидел.
Или другой какой способ есть. Так как поиск по наименованию хреновая идея, потому что его можно изменить
(12) PavelZnaikin, есть элементарная дисциплина ))) Проще обучить и мотивировать пользователя, чем вносить изменения в конфигурацию.
В ТЧ "ДдополнительныеРеквизиты" есть поля "Свойство" и "Значение". Свойство дополнительного реквизита - это план видов характеристик, имеющий много реквизитов, в числе которых есть Наименование и Заголовок (я программно ищу нужное свойство именно по нему, но это конечно дело вкуса). Пользователь видит дополнительный реквизит на форме элемента, поенять свойство он оттуда не может, так что по наименованию (заголовку) поиск в этом случае не "хреновая идея" - запретите менять план видов характеристик пользователям - и будет вам счастье :-). Вообще добраться до установки дополнительных реквизитов и свойств - дело не рядового пользователя - доступ к этому механизму должен быть ограничен. Я широко использую и то и другое, доп. реквизиты и доп. свойства задаю программно, пользователь может только устанавливать их значения, поменять в дополнительных реквизитах/свойствах (в плане видов характеристик) ничего не может - всё работает.
(12) У меня по данному запросу выдавало пустую таблицу, если нет какого то допреквизита. По моему лучше через временную таблицу. Как то так.
Ой ребята, чуть с ума не сошёл пока не нашёл эту тему. уже три дня и три ночи ищу. Пусть расцветут в Ваших садах финики!!
У меня вопрос: ТОЛЬКО запросом можно получать значение доп.реквизита? Ещё какие-нибудь варианты есть?
помогите, если есть время.
Проблема следующая: сделал доп реквизиты для справочника "Физические лица" - Размер обуви, одежды, рост и т.п.
Пишу самый простой отчет на СКД
На управляемом приложении выдает пустой отчет, а если запустить отладку на обычном приложении - все работает.
Платформа 8.3.6.2100 конф БП 3.0.40.41 версия серверная.
(20) chesnokov-a-v, У тебя здесь нет условия. Тебе условие надо сделать по свойству "ФизическиеЛицаДополнительныеРеквизиты.Свойство" и указать свой доп реквизит.
А в качестве поля которое будет выводить значение выбрать "ФизическиеЛицаДополнительныеРеквизиты.Значение"
При загрузке из экселя поиск значения по наименованию. Но это среди присвоенных значений, а как найти в списке значений свойств?
KirinaAS; dmstepanov121212; ivprovotorov; mybracho; rpgshnik; Invodev; diar01; alexovik; user1446119; arturlix; elephant_x; EugeneMIPT; Ворчун; user717534; mikl79; Ctrl P; gogik2006; romankoav; + 18 – Ответить
(26) Мне кажется из всех комментов самый полезный. Ко всем: Хватит велосипеды рожать пользуйтесь тем что есть
В 1с дополнительные сведения представляют — это механизм позволяющий хранить дополнительные данные для различных объектов метаданных (справочник, документ и т.п.). Это удобно тем, что не требуется вносить изменений в конфигурацию. В конфигурациях использующих управляемое приложение (Бухгалтерия 3.0, Управление торговлей 11 и т.п.) дополнительные сведения хранятся в регистре ДополнительныеСведения, у него два измерения: Объект — ссылка на объект к которому относится дополнительное сведение, Свойство — идентификатор конкретного сведения, тип план видов характеристик ДополнительныеРеквизитыИСведения.
1с дополнительные сведения в режиме Предприятие
Рассмотрим, как добавить в документе дополнительное сведение. Для примера возьмем конфигурацию Управление торговлей 11, документ Авансовый отчет.
- Откроем любой документ для которого необходимо дополнительное сведение;
- На форме документа нажмем кнопку Открыть дополнительные сведения;
- Откроется форма дополнительных сведений;
- Нажимаем кнопку Все действия -> Изменить состав дополнительных сведений;
- Нажимаем кнопку Добавить -> Новое;
- В открывшемся окне заполняем Наименование свойства и его Тип;
- Жмем Записать и закрыть;
- Теперь снова откроем наш документ и нажмем кнопку Открыть дополнительные сведения;
- В форме 1с дополнительные сведения появится строчка с добавленным свойством. Ему можно задать любое значение заданного типа;
- Данное свойство будет доступно во всех документах Авансовый отчет, для каждого документа можно задать свое значение.
Функция получающая в 1с дополнительные сведения
- Ссылка. Тип: Любая ссылка. Ссылка на объект имеющий дополнительные сведения;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Свойство, значение которого для данного объекта мы хотим получить.
1с дополнительные сведения функция программной записи
Данная функция осуществляет программную запись значения в дополнительные сведения объекта по переданному свойству. Предназначена для конфигурации Управление торговлей 11. Возвращает значение Истина в случае успешной записи и Ложь в случае ошибки.
- Объект Тип: Любая ссылка. Ссылка на объект для которого записывается сведение;
- Свойство Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство;
- Значение Тип: Произвольный(Задается при создании (редактировании) свойства в плане видов характеристик ДополнительныеРеквизитыИСведения). Значение, которое будет записано в дополнительные сведения.
Если вы еще не знаете, как правильно работать с механизмом дополнительных реквизитов в 1с 8, то прочтите об этом в статье Получить / записать дополнительные реквизиты программно.
- Главная
- Программирование 1С
- 1С. Дополнительные реквизиты. Как получить доступ к событию "ПриИзменении" элемента формы дополнительного реквизита.
1С. Дополнительные реквизиты. Как получить доступ к событию "ПриИзменении" элемента формы дополнительного реквизита.
Получаем доступ к событиям элементов формы дополнительных реквизитов на примере конфигурации "Управление торговлей 11.2".
Допустим, для документа "Поступление услуг и прочих активов" у нас создан дополнительный реквизит "Не выгружать при синхронизации" с типом "Булево". Задача: использовать событие элемента формы "При изменении".
Дополнительные реквизиты – штука тонкая. Они могут присутствовать на форме объекта, а могут и не присутствовать. Например, в конфигурации "Управление торговлей 11.2", когда мы открываем форму документа "Поступление услуг и прочих активов", дополнительные реквизиты там отсутствуют. Это можно видеть в отладчике. И только когда мы переходим на вкладку "Дополнительно", происходит отложенная инициализация формы и после этого дополнительные реквизиты появляются в форме.
В связи с таким поведением формы, нам придётся назначать обработчик для события элемента формы дополнительного реквизита программно. Сделаем это с помощью метода УстановитьДействие () .
Как мы уже отметили, в УТ 11.2 в документе "Поступление услуг и прочих активов" дополнительные реквизиты появляются на форме при переходе на вкладку "Дополнительно". Переход обрабатывается в следующей процедуре, которая расположена в модуле формы документа:
В этой процедуре дополнительные реквизиты уже должны появиться на форме. Воспользуемся отладчиком. Поставим точку останова в конце процедуры и запустим отладку. Создадим условия для захода в точку останова. Далее в "Табло" найдём элемент формы необходимого нам дополнительного реквизита. Примерный его вид и расположение:
В модуле формы создаём серверную процедуру:
В этой процедуре мы задали, что событие элемента формы "ПриИзменении" будет обрабатываться в процедуре с названием "МойОбработчик". Нам осталось только создать эту процедуру. Нужно учесть, что контекст её выполнения должен быть "На клиенте".
В библиотеке стандартных подсистем 1С дополнительные реквизиты и сведения включены и активно применяются. Эти механизмы позволяют добавить дополнительный реквизит к объекту метаданных без изменения типовой конфигурации. В публикации хочу продемонстрировать работу дополнительных реквизитов и сведений, их добавление и получение значений.
Краткое описание механизма дополнительных реквизитов и сведений
Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.
Отличие дополнительного реквизита от дополнительного сведения в том, что
- Дополнительные реквизиты – список реквизитов, доступных в форме документа или справочника; причем эти реквизиты хранятся в табличной части объекта, к которому они добавлены;
- Дополнительные сведения – список значений доступных по дополнительной кнопке; причем доп. сведения хранятся в отдельном регистре.
После ввода дополнительного реквизита или сведения 1С, можно создать подключаемую обработку, где считать введенные дополнительные данные и задать необходимую логику обработки данных, в которой использовать этот реквизит или сведение.
Как получить 1С дополнительные реквизиты и сведения
Для получения дополнительных данных приведу примеры запросов, в которых получу 1С дополнительные реквизиты и сведения.
Для получения дополнительного сведения использую запрос вида:
Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):
Теперь вы без труда сможете добавить и получить необходимые дополнительные 1С данные без снятия конфигурации 1С с поддержки и изменения типовой конфигурации. Без сомнения, такой инструмент должен быть в арсенале 1С программиста и активно использоваться в работе.
1С дополнительные реквизиты и сведения : 5 комментариев
Ценное замечание! Надо дополнить статью этим нюансом.
Запрос написан потому, что, обычно, по значению доп. реквизита необходимо сделать какую либо дополнительную выборку, а через стандартные функции это сделать не всегда получится. Мне видится, что этот путь более универсален. Хотя спорно… нужно покопаться в стандартных функциях.
В бсп 2.4 это методы УправлениеСвойствами.ЗначениеСвойства() и УправлениеСвойствами.ЗначенияСвойств(), УправлениеСвойствами.ПолучитьЗначенияСвойств() — устаревший методо
Добрый день! Подскажите пожалуйста, как записать значение дополнительному реквизиту, если значение — это выбор из списка дополнительных значений (тип строки). Пытаюсь просто записать нужную строку, но программа не понимает, что эта строка из этого списка.
Проверьте тип через конфигуратор, может там не строка, а коллекция или что-либо ещё.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Читайте также: