1с получить значение доп реквизита в запросе

Опубликовано в Статьи по 1С 27.10.2018

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

Отличие дополнительного реквизита от дополнительного сведения в том, что

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

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

Как получить 1С дополнительные реквизиты и сведения программно:

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

////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеСведения.Свойство,
| ДополнительныеСведения.Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект»;
Запрос.УстановитьПараметр(«Объект», СсылкаДокумент);
////

Для получения дополнительного реквизита использую код вида:

////
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| НоменклатураДополнительныеРеквизиты.Свойство,
| НоменклатураДополнительныеРеквизиты.Значение
|ИЗ
| Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
|ГДЕ
| НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
| И НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», СсылкаДокумент);
Запрос.УстановитьПараметр(«Свойство», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Коэффициент бруто»));
////

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

Запрос дополнительных реквизитов справочника

Я
   Khan7779

23.12.15 — 14:21

Здравствуйте! Очень нужна помощь! 1С 8.3, УТ 11.1. Как запросом получить дополнительные реквизиты добавленные справочнику через режим предприятия?

  

Партнерская программа EFSOL Oblako

   Naumov

1 — 23.12.15 — 14:21

а как вы пытались?

   Naumov

2 — 23.12.15 — 14:21

+ доп реквизиты  скорее через ТЧ объекта.

   Cyberhawk

3 — 23.12.15 — 14:22

Значения сидят в ТЧ каждого объекта, а сами реквизиты (их описание) — в соответствующем ПВХ и в справочнике «Наборы значений реквизитов»

   Khan7779

4 — 23.12.15 — 14:36

(1) вот именно, что никак, потому что первый раз с этим сталкиваюсь

   Khan7779

5 — 23.12.15 — 14:37

(3) вижу у объекта ТЧ доп. реквизиты, но что из нее взять, чтоб работать с нужным мне доп. реквизитами? Под описанием реквизитов имеется ввиду их название из предприятия? Не нашел ничего подобного.

   Naumov

6 — 23.12.15 — 15:14

(5) Реквизит Значение из ТЧ — это значение доп.реквизита.

   Cyberhawk

7 — 23.12.15 — 15:46

(5) ИР тебе в помощь — там увидишь стркутуру ТЧ и данные, в ней хранящиеся

   vicof

8 — 23.12.15 — 15:50

(0)

ВЫБРАТЬ * ИЗ Документ.Мегадокумент.ТЧ_Допреквизитов

   Khan7779

9 — 24.12.15 — 09:27

В общем у меня получилось достать данные доп. реквизитов.

Вот код запроса:

Запрос = Новый Запрос;

    Запрос.УстановитьПараметр(«МассивОбъектов»,МассивОбъектов);

    Запрос.Текст = «ВЫБРАТЬ

                   |    ЗаказКлиента.Номер,

                   |    ЗаказКлиента.Дата КАК ДатаДоговора,

                   |    ЗаказКлиента.Контрагент.Наименование КАК ПокупательКратко,

                   |    ЗаказКлиента.Контрагент.НаименованиеПолное КАК ОрганизацияПокупатель,

                   |    ЗаказКлиента.Контрагент.ИНН КАК ИННПокупателя,

                   |    ЗаказКлиента.Контрагент.КПП КАК КПППокупателя,

                   |    ЗаказКлиента.СуммаДокумента,

                   |    ЗаказКлиента.БанковскийСчетКонтрагента.НомерСчета,

                   |    ЗаказКлиента.БанковскийСчетКонтрагента.БанкДляРасчетов,

                   |    ЗаказКлиента.БанковскийСчетКонтрагента.БИКБанкаДляРасчетов,

                   |    ЗаказКлиента.Контрагент.ДополнительныеРеквизиты.(

                   |        Свойство.Ссылка КАК Название,

                   |        Значение КАК Значение

                   |    ),

                   |    ЗаказКлиента.Товары.(

                   |        НомерСтроки,

                   |        Номенклатура.Наименование,

                   |        Упаковка.ЕдиницаИзмерения,

                   |        КоличествоУпаковок,

                   |        Цена,

                   |        Сумма

                   |    )

                   |ИЗ

                   |    Документ.ЗаказКлиента КАК ЗаказКлиента

                   |ГДЕ

                   |    ЗаказКлиента.Ссылка В(&МассивОбъектов)»;

                  
    Запрос.Выполнить().Выгрузить();

Как теперь достать из массива нужные мне доп. реквизиты по отдельности?

   Khan7779

10 — 24.12.15 — 09:59

Ну пожалуйста, помогите! Нигде в гугле не могу найти как это сделать.

   cw014

11 — 24.12.15 — 10:04

(10) ты же в (9) все уже сделал

   Khan7779

12 — 24.12.15 — 10:06

(11) не все. У меня доп. реквизиты в массиве кучей. Теперь мне нужно вычленить их по отдельности.

   cw014

13 — 24.12.15 — 10:07

Вычленяй

   cw014

14 — 24.12.15 — 10:07

У тебя в результате есть поле «ДополнительныеРеквизиты»

   cw014

15 — 24.12.15 — 10:07

Это таблица значений из двух колонок «Название» и «Значение»

   cw014

16 — 24.12.15 — 10:08

Свойство.Ссылка КАК Название, замени на  Свойство КАК Название,

   Khan7779

17 — 24.12.15 — 10:10

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

   Khan7779

18 — 24.12.15 — 10:13

(16) заменил. Так что мне это даст?

   cw014

19 — 24.12.15 — 10:14

(17) У тебя три реквизита. Значит в таблице 3 строки. Что именно ты хочешь?

   cw014

20 — 24.12.15 — 10:14

Отдельно получаю:

СтрокаТЧ.ДополнительныеРеквизиты[0].Значение — 1 реквизит

СтрокаТЧ.ДополнительныеРеквизиты[1].Значение — 2 реквизит

СтрокаТЧ.ДополнительныеРеквизиты[2].Значение — 3 реквизит

   cw014

21 — 24.12.15 — 10:15

Отдельно? Отдельно

   Nolan

22 — 24.12.15 — 10:17

(0) А запрос где ты писать будешь?

   Khan7779

23 — 24.12.15 — 10:19

(22) запрос уже написан, смотри выше

   Khan7779

24 — 24.12.15 — 10:21

(19) нужно получить значение доп. реквизита и присвоить его отдельной переменной, для дальнейшего использования.

   Khan7779

25 — 24.12.15 — 10:21

(20) этот код не работает

   Nolan

26 — 24.12.15 — 10:22

(23) я понял, что написан. ты его в конфигураторе пишешь или где?

   cw014

27 — 24.12.15 — 10:23

(23)Что именно у тебя не получается?

   cw014

28 — 24.12.15 — 10:23

Спорим работает?

   Khan7779

29 — 24.12.15 — 10:23

(26) эм, ну да, через конфигуратор, в модуле внешней обработки.

   cw014

30 — 24.12.15 — 10:24

ТЗ = Запрос.Выполнить().Выгрузить();

СтрокаТЧ = ТЗ[0];

СтрокаТЧ.ДополнительныеРеквизиты[0].Значение; // 1 реквизит

СтрокаТЧ.ДополнительныеРеквизиты[1].Значение; // 2 реквизит

СтрокаТЧ.ДополнительныеРеквизиты[2].Значение; // 3 реквизит

   cw014

31 — 24.12.15 — 10:24

И почему у меня то все получается?

   Khan7779

32 — 24.12.15 — 10:26

(31) вылетает ошибка: неопознанный оператор.

   cw014

33 — 24.12.15 — 10:26

В какой строке?

   Nolan

34 — 24.12.15 — 10:26

(30) так должно работать)

   Khan7779

35 — 24.12.15 — 10:29

(33) в этих трех:

                  СтрокаТЧ.ДополнительныеРеквизиты[0].Значение;// 1 реквизит

            СтрокаТЧ.ДополнительныеРеквизиты[1].Значение;// 2 реквизит

            СтрокаТЧ.ДополнительныеРеквизиты[2].Значение;// 3 реквизит

   cw014

36 — 24.12.15 — 10:30

1) точку с запятой пропустил

2) Это просто пример. Ну сделай так:

Реквизит1 = СтрокаТЧ.ДополнительныеРеквизиты[0].Значение;

Реквизит2 = СтрокаТЧ.ДополнительныеРеквизиты[1].Значение;

Реквизит3 = СтрокаТЧ.ДополнительныеРеквизиты[2].Значение;

   Khan7779

37 — 24.12.15 — 10:32

(36) Ошибок нет. Теперь этим реквизиту 1,2 и 3 присвоено значение тех доп. реквизитов?

  

Nolan

38 — 24.12.15 — 10:34

(37) Посмотри как пользоваться отладчиком. Тогда ты сможешь сам проверять значения.

Получение доп реквизита справочника в запросе

Автор NAPYTO1613, 03 авг 2018, 23:31

0 Пользователей и 1 гость просматривают эту тему.

ВЫБРАТЬ
ЖурналПроводокЕПСБУОбороты.Субконто1 КАК Контрагент,
КонтрагентыДополнительныеРеквизиты.Значение КАК СтранаМестонахождения
ИЗ
РегистрБухгалтерии.ЖурналПроводокЕПСБУ.Обороты(, , Регистратор, Счет В ИЕРАРХИИ (&Группа), , , , ) КАК ЖурналПроводокЕПСБУОбороты
ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.ДополнительныеРеквизиты КАК КонтрагентыДополнительныеРеквизиты
ПО (КонтрагентыДополнительныеРеквизиты.Ссылка.Код = ЖурналПроводокЕПСБУОбороты.Регистратор.Контрагент.Код )
ГДЕ
КонтрагентыДополнительныеРеквизиты.Свойство = &Свойство

Пытаюсь прикрутить к контрагенту доп реквизит путем соединения по условию
Дело в том, что, если реквизит не заполнен, то  запись не выводится вообще
можно ли как-нибудь решить такую проблему?


Оберни КонтрагентыДополнительныеРеквизиты.Значение КАК СтранаМестонахождения в ЕСТЬNULL.
Cоединяй не полным, а левым соединением.


Цитата: AIFrame от 04 авг 2018, 15:03
Оберни КонтрагентыДополнительныеРеквизиты.Значение КАК СтранаМестонахождения в ЕСТЬNULL.
Cоединяй не полным, а левым соединением.

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



ВЫБРАТЬ
ЖурналПроводокЕПСБУОбороты.Счет КАК Счет,
ЖурналПроводокЕПСБУОбороты.Субконто1 КАК Контрагент,
ЖурналПроводокЕПСБУОбороты.СуммаОборот КАК СуммаОборот,
ОперацииДокументов.Операция КАК Операция,
ЕСТЬNULL(КонтрагентыДополнительныеРеквизиты.Значение, 0) КАК СтранаМестонахождения
ИЗ
РегистрБухгалтерии.ЖурналПроводокЕПСБУ.Обороты(, , Регистратор, Счет В ИЕРАРХИИ (&Группа), , , , ) КАК ЖурналПроводокЕПСБУОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОперацииДокументов КАК ОперацииДокументов
ПО (ОперацииДокументов.Документ.Дата = ЖурналПроводокЕПСБУОбороты.Регистратор.Дата)
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.ДополнительныеРеквизиты КАК КонтрагентыДополнительныеРеквизиты
ПО ЖурналПроводокЕПСБУОбороты.Регистратор.Контрагент.Код = КонтрагентыДополнительныеРеквизиты.Ссылка.Код
ГДЕ
ЖурналПроводокЕПСБУОбороты.Регистратор ССЫЛКА Документ.КассовоеПоступление
И КонтрагентыДополнительныеРеквизиты.Свойство = &Свойство

Целиком запрос так выглядит


Цитата: NAPYTO1613 от 05 авг 2018, 12:28И КонтрагентыДополнительныеРеквизиты.Свойство = &Свойство

в условии сравнение с таблицей, с которой соединение и может быть NULL , но NULL никогда не  равно &Свойство, по этому строки в запрос не попадают.

можно например так:
КонтрагентыДополнительныеРеквизиты.Свойство = &Свойство
или КонтрагентыДополнительныеРеквизиты.Свойство is null

Спасибо за Сказать спасибо


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


Цитата: alex0402 от 05 авг 2018, 14:25

Цитата: NAPYTO1613 от 05 авг 2018, 12:28И КонтрагентыДополнительныеРеквизиты.Свойство = &Свойство

в условии сравнение с таблицей, с которой соединение и может быть NULL , но NULL никогда не  равно &Свойство, по этому строки в запрос не попадают.

можно например так:
КонтрагентыДополнительныеРеквизиты.Свойство = &Свойство
или КонтрагентыДополнительныеРеквизиты.Свойство is null

Помогло, спасибо

Добавлено: 05 авг 2018, 20:27


Цитата: AIFrame от 05 авг 2018, 18:46
Положи КонтрагентыДополнительныеРеквизиты во вложенный запрос или предварительно отбери все во временную таблицу и уже в конце соединяй с журналом проводок.

от вложенного запроса было решено отказаться (изначально использовался он, но тоже кстати работал не так как надо )


На чтение 2 мин. Просмотров 635 Опубликовано 15.12.2019

Примеры работы с дополнительными реквизитами.

Как получить значение дополнительного реквизита:

Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».

Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».

Получается вот такой запрос:

Также можно использовать метод НайтиПоНаименованию ( «***» ) .

Переменная Ссылка – это ссылка на «Договор контрагента».

Проверка на предмет того, что дополнительный реквизит заполнен:

Как изменить значения дополнительных реквизитов:

Задействуем общий модуль УправлениеСвойствами , который входит в состав БСП.

Юзайте на здоровья!

3 thoughts on “Получить значение дополнительных реквизитов 1С 8”

Спасибо, очень помогло.

К сожалению, на строчке
Запрос.УстановитьПараметр(«Объект», Объект);
спотыкается и отказывается дальше работать

Как редактировать доп реквизиты:

редактировать их состав можно тут:

хранятся они тут:

где типы реквизитов:

получить их в запросе можно так:

НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка,

НоменклатураДополнительныеРеквизиты.Ссылка.Код КАК Код,

НоменклатураДополнительныеРеквизиты.Свойство КАК Свойство,

НоменклатураДополнительныеРеквизиты.Значение КАК Значение

Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты

Разберем что откуда берется.

Дополнительные реквизиты заводятся в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» и там же указан тип значений допРеквизитов:

ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка,

ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения

ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения

Для справки: Кроме ссыка и типЗначения в «ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения» хранится куча свойств этих реквизитов

Если указан типЗначеня «ДополнительноеЗначение», то виды этих доп значений можем посмотреть тут:

ЗначенияСвойствОбъектов.Владелец КАК Владелец,

ЗначенияСвойствОбъектов.Ссылка КАК Ссылка,

ЗначенияСвойствОбъектов.Владелец.ТипЗначения КАК ВладелецТипЗначения

Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов

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

Google+

  • © 2019 Услуги 1С программиста. Доработка и обслуживание 1С. Удаленное программирование по всей России. Платформы 7.7 8.2 8.3 , битрикс.
  • 1с дополнительные реквизиты и сведения

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

    Краткое описание механизма дополнительных реквизитов и сведений

    Пример добавление дополнительного реквизита вручную вы можете посмотреть в публикации Брутто в ТОРГ12, где добавляется новый реквизит «Коэффициент брутто» в справочнике «Номенклатура». Таким образом можно добавлять реквизиты всех известных типов (число, строка, булево, список значений, ссылки на справочники и т.д.) к распространенным справочникам и документам 1С.

    Отличие дополнительного реквизита от дополнительного сведения в том, что

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

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

    Для получения дополнительных данных приведу примеры запросов, в которых получу 1С дополнительные реквизиты и сведения.

    Для получения дополнительного сведения использую запрос вида:

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

    Для получения дополнительного реквизита использую код вида (пример получения коэффициента брутто в ТОРГ12):

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

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

    Примеры работы с дополнительными реквизитами.

    Как получить значение дополнительного реквизита:

    Пример: мы делаем печатную форму документа «Заказ клиента» и хотим вывести на неё значение определённого дополнительного реквизита — «Должность покупателя».

    Используем вложенный запрос, в котором соединяем левым соединением таблицу «Дополнительные реквизиты» документа «Заказ клиента» с Планом видов характеристик «Дополнительные реквизиты и сведения». Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – «Должность покупателя». Таблицы соединяем по ссылке на «Заказ клиента».

    Получается вот такой запрос:

    "ВЫБРАТЬ
    	|	ДополнительныеРеквизиты.ДолжностьПокупателя КАК ДолжностьПокупателя
    	|ИЗ
    	|	Документ.ЗаказКлиента КАК Заказ
    	|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    	|			ЗаказДополнительныеРеквизиты.Значение КАК ДолжностьПокупателя,
    	|			ЗаказДополнительныеРеквизиты.Ссылка КАК Ссылка
    	|		ИЗ
    	|			Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказДополнительныеРеквизиты
    	|				ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ПВХДополнительныеРеквизитыИСведения
    	|				ПО ЗаказДополнительныеРеквизиты.Свойство = ПВХДополнительныеРеквизитыИСведения.Ссылка
    	|		ГДЕ
    	|			ПВХДополнительныеРеквизитыИСведения.Заголовок = ""Должность покупателя"") КАК ДополнительныеРеквизиты
    	|		ПО (ДополнительныеРеквизиты.Ссылка = Заказ.Ссылка)
    	|ГДЕ
    	|	Заказ.Ссылка В(&МассивОбъектов)";
    

    Также можно использовать метод НайтиПоНаименованию(«***»).

    Пример запроса:

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

    Переменная Ссылка – это ссылка на «Договор контрагента».

     Проверка на предмет того, что дополнительный реквизит заполнен:

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

     Как изменить значения дополнительных реквизитов:

    Задействуем общий модуль УправлениеСвойствами, который входит в состав БСП.

    ДопРеквизитДатаОтправки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата отправки", Истина);
    ДопРеквизитДоставка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Доставка", Истина);
    
    МассивСтруктур = Новый Массив;
    МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДатаОтправки, ТекущаяДата()));
    МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДоставка, Истина));
    УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЗаказКлиентаСсылка, МассивСтруктур);
    

    Yulunga

    1142 / 689 / 203

    Регистрация: 22.04.2013

    Сообщений: 5,159

    Записей в блоге: 1

    1

    запрос к доп реквизитам

    23.03.2021, 08:49. Показов 9619. Ответов 5

    Метки нет (Все метки)


    всем добра.
    есть доп реквизит (для простоты — булево) в документе кадровом документе
    как мне вывести
    иванов иван ИСТИНА если есть этот доп реквизит (если его кто-то уже установил)
    или
    иванов иван ЛОЖЬ если он установлен в ложь или если его ещё никто не устанавливал (ну и как следствие — его нет в ТЧ допреквизиты)
    запросом это можно сделать?

    Добавлено через 3 минуты
    а, да
    вопрос, который я всегда сам задаю — а что вы сделали?
    таки вот

    1C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    ВЫБРАТЬ
        КадровыйПеревод.Сотрудник КАК Сотрудник,
        КадровыйПеревод.Сотрудник.Код КАК СотрудникКод,
        КадровыйПеревод.Ссылка КАК Ссылка
    ПОМЕСТИТЬ ВТ_Сотрудник
    ИЗ
        Документ.КадровыйПеревод КАК КадровыйПеревод
    ГДЕ
        КадровыйПеревод.Сотрудник = &Сотрудник
    ;
     
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        КадровыйПереводДополнительныеРеквизиты.Ссылка.Сотрудник КАК Сотрудник,
        КадровыйПереводДополнительныеРеквизиты.Ссылка.Сотрудник.Код КАК СотрудникКод,
        ВЫБОР КОГДА КадровыйПереводДополнительныеРеквизиты.Свойство = Неопределено
            ТОГДА  "Нету"
            ИНАЧЕ КадровыйПереводДополнительныеРеквизиты.Значение
        КОНЕЦ КАК Значение,
        КадровыйПереводДополнительныеРеквизиты.Ссылка.Номер КАК Номер,
        КадровыйПереводДополнительныеРеквизиты.Ссылка.Дата КАК Дата
    ИЗ
        ВТ_Сотрудник КАК ВТ_Сотрудник
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод.ДополнительныеРеквизиты КАК КадровыйПереводДополнительныеРеквизиты
            ПО ВТ_Сотрудник.Ссылка = КадровыйПереводДополнительныеРеквизиты.Ссылка
    ГДЕ
        КадровыйПереводДополнительныеРеквизиты.Свойство.Имя = "моёиммя"

    танцевал с этим условием по-разному, которое щас выглядит как выбор когда тогда
    но безуспешно

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



    0



    Scratchsv

    369 / 173 / 74

    Регистрация: 04.03.2020

    Сообщений: 659

    23.03.2021, 09:36

    2

    Лучший ответ Сообщение было отмечено Tklwegsd как решение

    Решение

    Может так:

    1C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    "ВЫБРАТЬ
        |   КадровыйПеревод.Сотрудник КАК Сотрудник,
        |   КадровыйПеревод.Сотрудник.Код КАК СотрудникКод,
        |   КадровыйПеревод.Ссылка КАК Ссылка,
        |   КадровыйПеревод.Номер КАК Номер,
        |   КадровыйПеревод.Дата КАК Дата,
        |   ЕСТЬNULL(КадровыйПереводДополнительныеРеквизиты.Значение, ЛОЖЬ) КАК Значение
        |ИЗ
        |   Документ.КадровыйПеревод КАК КадровыйПеревод
        |       ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровыйПеревод.ДополнительныеРеквизиты КАК КадровыйПереводДополнительныеРеквизиты
        |       ПО КадровыйПеревод.Ссылка = КадровыйПереводДополнительныеРеквизиты.Ссылка
        |           И (КадровыйПереводДополнительныеРеквизиты.Свойство.Имя = ""моёиммя"")
        |ГДЕ
        |   КадровыйПеревод.Сотрудник = &Сотрудник"



    1



    Phil

    Эксперт 1С

    434 / 305 / 92

    Регистрация: 28.05.2014

    Сообщений: 1,247

    23.03.2021, 09:40

    3

    Yulunga, Ничего не понял, но очень интересно)

    Есть документ и из него нужно получить значение доп реквизита?

    Если есть БСП более-менее не старая, то

    1C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    // Возвращает значение дополнительного свойства объекта.
    //
    // Параметры:
    //  Объект   - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура,
    //                           ДокументСсылка.ЗаказПокупателя, ...
    //  Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на
    //                           дополнительный реквизит, значение которого нужно получить.
    //           - Строка - имя дополнительного свойства.
    //
    // Возвращаемое значение:
    //  Произвольный - любое значение, допустимое для свойства.
     
     
    УправлениеСвойствами.ЗначениеСвойства(Объект,Свойство)



    0



    1142 / 689 / 203

    Регистрация: 22.04.2013

    Сообщений: 5,159

    Записей в блоге: 1

    23.03.2021, 10:09

     [ТС]

    4

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



    0



    369 / 173 / 74

    Регистрация: 04.03.2020

    Сообщений: 659

    23.03.2021, 10:29

    5

    А чё не получилось-та. Не находит? Даёт ошибку?
    Что говорит, когда нет? Когда истина? Ложь?
    У меня подобный запрос нормально работает.

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



    0



    1142 / 689 / 203

    Регистрация: 22.04.2013

    Сообщений: 5,159

    Записей в блоге: 1

    23.03.2021, 11:10

     [ТС]

    6

    щас получилось. чо не получилось вчера — уже не найти. я запрос удалил. но делал также
    интересно конечно что было не так. раз этот сработал а мой вчерашний — нет.
    а то я уже начал в обработке запроса искать в плане видов арактеристик для данного документа заполнен реквизит или нет и на основании этого уже строить дальнейшие действия свои ))



    0



    Понравилась статья? Поделить с друзьями:
  • 1с получить значения всех реквизитов объекта
  • Asprotect счетчик ограничения времени работы
  • Яндекс маркет поддержка телефон часы работы
  • 1с предопределенные дополнительные реквизиты
  • Aurus автомобилестроительные компании россии