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

Программно изменить дополнительные реквизиты (сведения)

Я
   tabarigen

17.12.15 — 15:02

Здравствуйте друзья.

Для документа поступления добавил 2 доп реквизита: ВремяРазбора(Тип Дата) и Проверено (Тип Булево).

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

Или же обязательно нужно ПВХ ковырять, или где там они хранятся?

  

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

   Живой Ископаемый

1 — 17.12.15 — 15:16

через ссылку ты даже НЕдополнительные не сможешь изменить, придется объект получать…

   tabarigen

2 — 17.12.15 — 15:17

(1) так я получил, на сервере

&НаСервере

Процедура ПеренестиВДокументНаСервере()

    // Вставить содержимое обработчика.

    ДокПоступления = ДокументПоступления.ПолучитьОбъект();

    ДокПоступления.Проверено = Истина;

КонецПроцедуры

   tabarigen

3 — 17.12.15 — 15:18

{Форма.Форма.Форма(222)}: Поле объекта не обнаружено (Проверено)

    ДокПоступления.Проверено = Истина;

   pessok

4 — 17.12.15 — 15:21

(3) а ДокументПоступления то заполнено?

   IlyaSR

5 — 17.12.15 — 15:22

нет конечно, раз параметра нет

и записать после ДокПоступления не забудь

   tabarigen

6 — 17.12.15 — 15:24

(4) Док Поступления заполнено на форме. В нем хранится ссылка на Документ.

   pessok

7 — 17.12.15 — 15:28

(6) а что нам говорит отладчик на строке

ДокПоступления.Проверено = Истина; ?

   tabarigen

8 — 17.12.15 — 15:28

Непонятно как добраться до Доп Реквизитов?

   tabarigen

9 — 17.12.15 — 15:29

(7) я ж показал что он говорит

{Форма.Форма.Форма(222)}: Поле объекта не обнаружено (Проверено)

    ДокПоступления.Проверено = Истина;

   pessok

10 — 17.12.15 — 15:30

*отладчик*

   pessok

11 — 17.12.15 — 15:31

(8) конфа какая, для начала? в управлении борделем 3.1 это табчасть объекта, например

   tabarigen

12 — 17.12.15 — 15:31

тоже самое говорит. Shift+F9  Выдает

поле объекта не обнаружено.

   tabarigen

13 — 17.12.15 — 15:31

(11) конфа УТ 11

   pessok

14 — 17.12.15 — 15:32

(12) так надо ж смотреть что у тебя в ДокументПоступления

(13) ну та в УТ 11 тоже в ТЧ объекта

   tabarigen

15 — 17.12.15 — 15:35

Кстати для Ссылки на документ доступны свойства ДополнительныеРеквизиты и ДоаолнительныеСведения

   tabarigen

16 — 17.12.15 — 15:36

(14) Вы наверное вопрос не поняли. Я создал в ПВХ дополнительные сведения для Документа поступления. Теперь я хочу их программно изменить.

   pessok

17 — 17.12.15 — 15:36

(15) продолжайте наблюдения

   pessok

18 — 17.12.15 — 15:36

(16) я то как раз все прекрасно понял.

но судя по ошибке в (9) что-то там не то

   АдинС

19 — 17.12.15 — 15:40

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

   tabarigen

20 — 17.12.15 — 15:41

(18) Добраться не могу до Дополнительного Реквизита.

Неудивительно, напрямую это навероне и не должно делаться.

https://yadi.sk/i/2clt5shAmHyg5

   tabarigen

21 — 17.12.15 — 15:41

(19) ну вот и я о том же. Как же к ним обращаться?

   singlych

22 — 17.12.15 — 15:44

(21) они лежат в ТЧ ДополнительныеРеквизиты

   АдинС

23 — 17.12.15 — 15:45

(21) Через ТЧ ДополнительныеРквизиты

   DexterMorgan

24 — 17.12.15 — 15:46

//Объект = Объект-владелец доп реквизита

//НаименованиеДопРеквизита — Имя доп реквизита

//ЗначениеДопРеквизита — новое значение доп реквизита

ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаименованиеДопРеквизита, Истина);

СтрокаТЧ = Объект.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Свойство»);

Если СтрокаТЧ = Неопределено Тогда

СтрокаТЧ = ОбъектОбъект.ДополнительныеРеквизиты.Добавить();

СтрокаТЧ.Свойство = ДопРеквизитСсылка;

КонецЕсли;

СтрокаТЧ.Значение = ЗначениеДопРеквизита;

   DexterMorgan

25 — 17.12.15 — 15:52

(20) да, кстати, наименование доп реквизита нужно посмотреть в ПВХ, это не просто «Проверено», а что то вроде «Проверено (Поступление товаров и услуг)»

   tabarigen

26 — 17.12.15 — 15:54

(25) {Форма.Форма.Форма(224)}: Ошибка при вызове метода контекста (Найти)

    СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Проверено»);

по причине:

Неверное имя колонки

эт точно. Сейчас посмотрю

   DexterMorgan

27 — 17.12.15 — 15:56

(26) ну ты даешь.

СтрокаТЧ = Объект.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Свойство»);

это менять не надо, искать доп реквизит надо тут

ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаименованиеДопРеквизита, Истина);

   tabarigen

28 — 17.12.15 — 15:56

(25) ссылку на реквизит получаю, дальше ошибка

{Форма.Форма.Форма(224)}: Ошибка при вызове метода контекста (Найти)

    СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Проверено»);

по причине:

Неверное имя колонки

код такой

    // Получаем ссылку на документ

    ДокПоступления = ДокументПоступления.ПолучитьОбъект();

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

    ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Проверено (Поступление товаров и услуг)», Истина);

    СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Проверено»);

    СТрокаТЧ.Значение = Истина;

    
    ДокПоступления.Записать();

   tabarigen

29 — 17.12.15 — 15:57

(27) расслабься я так и сделал)

   DexterMorgan

30 — 17.12.15 — 15:57

(26) Проверено действительно колонки в тч нет, есть колонка «свойство»

   DexterMorgan

31 — 17.12.15 — 15:58

(29) да я и не напрягался

   DexterMorgan

32 — 17.12.15 — 15:59

(29) я вижу как ты сделал

   tabarigen

33 — 17.12.15 — 16:03

(30) сделал свойство теперь такая ошибка

{Форма.Форма.Форма(225)}: Значение не является значением объектного типа (Значение)

    СТрокаТЧ.Значение = Истина;

&НаСервере

Процедура ПеренестиВДокументНаСервере()

    // Получаем ссылку на документ

    ДокПоступления = ДокументПоступления.ПолучитьОбъект();

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

    ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Проверено (Поступление товаров и услуг)», Истина);

    СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Свойство»);

    СТрокаТЧ.Значение = Истина;

    ДокПоступления.Записать();

КонецПроцедуры

   DexterMorgan

34 — 17.12.15 — 16:05

(33) Слушай я тебе написал код, который проверяем на неопределено строку. Но ты его решил не писать, ты же лучше знаешь как надо. Прочитай лучше (24), ты думаешь «если» там зря написано?

   tabarigen

35 — 17.12.15 — 16:08

(34) Зачем мне проверять есть ли реквизит «Проверено» если я знаю что он есть

   DexterMorgan

36 — 17.12.15 — 16:10

(35) Ну видишь, ты лучше знаешь как устроен этот механизм

   tabarigen

37 — 17.12.15 — 16:11

(36) ))

   tabarigen

38 — 17.12.15 — 16:11

(36) Ну Морган ну не томи

   DexterMorgan

39 — 17.12.15 — 16:11

(35) Зачем тогда на форуме спрашивать?

   DexterMorgan

40 — 17.12.15 — 16:12

(38) его там нет. В табличную часть доп реквизиты добавляются при записи объекта

   DexterMorgan

41 — 17.12.15 — 16:12

(38) При чем только если они заполнены

   tabarigen

42 — 17.12.15 — 16:15

(40) упс.. нестыковочка. Так реквизиты я добавлял разве не к объекту? причем тут табличная часть? я ж не для каждой строки меняю, а для объекта Документ Поступления в целом.

   DexterMorgan

43 — 17.12.15 — 16:16

(42) А ты не троль?)

   tabarigen

44 — 17.12.15 — 16:18

(43) нет, честно

   DexterMorgan

45 — 17.12.15 — 16:18

(44) Ты создавал элемент плана видов характеристик, к документу это не имеет отношения. Чтобы заполнить доп реквизит в документе, нужно добавить его в табличную часть «ДополнительныеРеквизиты» документа.

   DexterMorgan

46 — 17.12.15 — 16:19

(44) Его там может не быть. А может быть. Поэтому нужно найти эту строку табличной части и проверить неопределено она или нет. И если ее нет, то добавить.

   tabarigen

47 — 17.12.15 — 16:25

(46) Спасибо что объяснили на пальцах. я и не знал что допреквизиты в отдельной тч хранятся.

Переписал код как вы посоветовали, ошибок нет, но значение реквизита не меняется.

&НаСервере

Процедура ПеренестиВДокументНаСервере()

    // Получаем ссылку на документ

    ДокПоступления = ДокументПоступления.ПолучитьОбъект();

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

    ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Проверено (Поступление товаров и услуг)», Истина);

    СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Свойство»);

    Если СтрокаТЧ = Неопределено Тогда

     СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить();

     СтрокаТЧ.Свойство = ДопРеквизитСсылка;

    КонецЕсли;

    СТрокаТЧ.Значение = Истина;

    ДокПоступления.Записать();

КонецПроцедуры

Может я значение неправильно присваиваю. Так как в СтрокаТЧ я получаю ссылку парвильно

   DexterMorgan

48 — 17.12.15 — 16:28

В форме меняешь?

   DexterMorgan

49 — 17.12.15 — 16:28

Или из обработки?

   tabarigen

50 — 17.12.15 — 16:36

из обработки

   DexterMorgan

51 — 17.12.15 — 16:37

Кароче, если это форма обработки — значит должно меняться, нужно перечитать данные формы или переоткрыть документ.

Если из формы документа, нужно по-другому делать:

Доп реквизиты на форме генерятся автоматически причем наименование складывается из гуида ПВХ ДополнительныеРеквизитыИСведения и гуида спр НаборыДополнительныхРеквизитовИСведений

надо найти на форме в отладке реквизит, он будет типа такого:

ДопРеквизит = «ДополнительныйРеквизитЗначение_F04809F9x137Dx11E4x93F1x002590F36D23_F26DC8FFx2E7Fx11E4x93FFx002590F36D25»;

и просто присвоить ему значение

ЭтаФорма[«ДополнительныйРеквизитЗначение_F04809F9x137Dx11E4x93F1x002590F36D23_F26DC8FFx2E7Fx11E4x93FFx002590F36D25»] = Истина;

   DexterMorgan

52 — 17.12.15 — 16:38

(50) Тогда не может не меняться =)

   DexterMorgan

53 — 17.12.15 — 16:47

(50) А ты точно доп реквизит создал или доп сведение?

   tabarigen

54 — 17.12.15 — 16:47

(52) буду провобовать. Вам спасибо. по результатам отпишусь

   tabarigen

55 — 18.12.15 — 11:05

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

Теперь бы еще осмыслить как быть если хочу изменить больше одного Доп реквизита.

&НаСервере

Процедура ПеренестиВДокументНаСервере()

    // Получаем ссылку на документ

    ДокПоступления = ДокументПоступления.ПолучитьОбъект();

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

    ДопРеквизитПроверено = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Проверено (Поступление товаров и услуг)», Истина);

    ДопРеквизитВремяРазбора = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Время Разбора (Поступление товаров и услуг)», Истина);

    
    ПараметрыОтбора = Новый Структура;

    ПараметрыОтбора.Вставить(«Свойство», ДопРеквизитПроверено);

    ПараметрыОтбора.Вставить(«Свойство», ДопРеквизитВремяРазбора);

    ЕстьСтроки = ДокПоступления.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);

    Если ЕстьСтроки.Количество() = 0 Тогда

     СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить();

     СтрокаТЧ.Свойство = ДопРеквизитПроверено;

    Иначе

     СтрокаТЧ = ЕстьСтроки[0];

    КонецЕсли;

    СтрокаТЧ.Значение = Истина;

    СтрокаТЧ.ТекстоваяСтрока = «Да»;

    ДокПоступления.Записать();

КонецПроцедуры

Если сделаю так то думаю будет ошибка.

Если ЕстьСтроки.Количество() = 0 Тогда

     СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить();

     СтрокаТЧ.Свойство = ДопРеквизитПроверено;

    СтрокаТЧ.Свойство = ДопРеквизитВремяРазбора;

    Иначе

  

tabarigen

56 — 18.12.15 — 14:48

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

&НаСервере

Процедура ПеренестиВДокументНаСервере()

    // Получаем ссылку на документ

    ДокПоступления = ДокументПоступления.ПолучитьОбъект();

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

    ДопРеквизитПроверено = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Проверено (Поступление товаров и услуг)», Истина);

    ЕстьСтроки = ДокПоступления.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура(«Свойство», ДопРеквизитПроверено));//Пусть результатом поиска будут «ЕстьСтроки»

    Если ЕстьСтроки.Количество() = 0 Тогда

     СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить();

     СтрокаТЧ.Свойство = ДопРеквизитПроверено;

    Иначе

     СтрокаТЧ = ЕстьСтроки[0];

    КонецЕсли;

    СТрокаТЧ.Значение = Истина;

    ДокПоступления.Записать();

    
    ДопРеквизитВремяРазбора = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Время Разбора (Поступление товаров и услуг)», Истина);

    ЕстьСтроки = ДокПоступления.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура(«Свойство», ДопРеквизитВремяРазбора));//Пусть результатом поиска будут «ЕстьСтроки»

    Если ЕстьСтроки.Количество() = 0 Тогда

     СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить();

     СтрокаТЧ.Свойство = ДопРеквизитВремяРазбора;

    Иначе

     СтрокаТЧ = ЕстьСтроки[0];

    КонецЕсли;

    СТрокаТЧ.Значение = ТекущаяДата();

    ДокПоступления.Записать();

    
    
    
КонецПроцедуры

1.    Создание на форме дополнительных реквизитов в 1С 8.3 и их функции

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

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

Имена значений дополнительных реквизитов на форме

Из-за этого возникают сложности с программным обращением к дополнительным реквизитам в 1С 8.3.

Дополнительные реквизиты на форме создаются типовой процедурой УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме:


Создание дополнительных реквизитов на форме

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

Форма с созданными на ней дополнительными реквизитами в 1С 8.3  

2.     Установка значения дополнительного реквизита в 1С 8.3 с помощью обращения к нему по имени

Чтобы иметь возможность программного обращения к созданным дополнительным реквизитам, нужно знать их имена на форме. Помочь разработчику узнать имена дополнительных реквизитов может специальный реквизит Свойства_ОписаниеДополнительныхРеквизитов. Его автоматически создает система, когда используется механизм дополнительных реквизитов. Тип этого служебного реквизита ДанныеФормыКоллекция. Он содержит список всех дополнительных реквизитов объекта и все сведения о них. Теперь, мы сможем найти нужный дополнительный реквизит в 1С 8.3 по имени, или по соответствующему ему свойству плана видов характеристик. Итак, обращаясь по имени к доп.реквизиту можно присвоить ему нужное значение, либо, наоборот, получить его значение и, например, как-то проверить.

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

Раздел Для разработчиков в нижней части формы характеристики

Вот вариант процедуры, которая получает поле доп. реквизита по его имени:

Параметры функции: форма и имя дополнительного реквизита

Функция принимает два параметра – форма и имя дополнительного реквизита (имя для разработчиков). Сперва получим тот самый служебный реквизит, в котором содержатся данные о всех дополнительных реквизитах на форме. Затем по имени дополнительного реквизита в 1С 8.3 найдем свойство в плане видов характеристик. Теперь по этому свойству можем в списке реквизитов найти соответствующий реквизит.

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

Код, вызывающий процедуру и устанавливающий значение дополнительному реквизиту в 1С 8.3

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

Специалист компании «Кодерлайн»

Екатерина Редько

Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
Характеристика.Владелец = Товар.Ссылка;

Размер = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Размер");
Рост = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Рост");
Цвет = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Цвет",истина);

ЗначениеРазмер = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.RAZM),Истина,,Размер);
Если ЗначениеРазмер.Пустая() Тогда
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
НовоеЗначение.Владелец = Размер.Ссылка;
НовоеЗначение.Наименование = ФайлОбмена.RAZM;
НовоеЗначение.Записать();
ЗначениеРазмер = НовоеЗначение.Ссылка;
КонецЕсли;

ЗначениеРост = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.ROST),Истина,,Рост);
Если ЗначениеРост.Пустая() Тогда
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
НовоеЗначение.Владелец = Рост.Ссылка;
НовоеЗначение.Наименование = ФайлОбмена.ROST;
НовоеЗначение.Записать();
ЗначениеРост = НовоеЗначение.Ссылка;
КонецЕсли;

ЗначениеЦвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(СокрЛП(ФайлОбмена.COL),Истина,,Цвет);
Если ЗначениеЦвет.Пустая() Тогда
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
НовоеЗначение.Владелец = Цвет.Ссылка;
НовоеЗначение.Наименование = ФайлОбмена.COL;
НовоеЗначение.Записать();
ЗначениеРазмер = НовоеЗначение.Ссылка;
КонецЕсли;

КоллекцияЗначений = Новый СписокЗначений();
КоллекцияЗначений.Добавить(ЗначениеРазмер);
КоллекцияЗначений.Добавить(ЗначениеРост);
КоллекцияЗначений.Добавить(ЗначениеЦвет);

Наим = Характеристика.СформироватьНаименование(КоллекцияЗначений);
Характеристика.Наименование = Наим;
Характеристика.Записать();

ТаблицаДляЗаписиВРегистр = Новый ТаблицаЗначений;
ТаблицаДляЗаписиВРегистр.Колонки.Добавить("Свойство");
ТаблицаДляЗаписиВРегистр.Колонки.Добавить("Значение");

НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
НоваяСтрока.Свойство = Размер;
НоваяСтрока.Значение = ЗначениеРазмер;

НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
НоваяСтрока.Свойство = Рост;
НоваяСтрока.Значение = ЗначениеРост;

НоваяСтрока = ТаблицаДляЗаписиВРегистр.Добавить();
НоваяСтрока.Свойство = Цвет;
НоваяСтрока.Значение = ЗначениеЦвет;

ЗаписьЗначенияВРегистр=РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();

НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();

Для каждого Строка Из ТаблицаДляЗаписиВРегистр Цикл
Если НЕ ЗначениеНеЗаполнено(Строка.Значение) Тогда
Запись = НаборЗаписейЗначенияСвойств.Добавить();

Запись.Объект = Характеристика.Ссылка;
Запись.Свойство = Строка.Свойство;
Запись.Значение = Строка.Значение;
КонецЕсли;
КонецЦикла;
НаборЗаписейЗначенияСвойств.Записать();

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

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

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

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

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

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

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

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

"ВЫБРАТЬ 
|	ДоговорыКонтрагентовДополнительныеРеквизиты.Значение, 
|	ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство 
|ИЗ 
|	Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты 
|ГДЕ 
|	ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка = &Ссылка 
|	И ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство = &Свойство"; 

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

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

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

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

Если ЕстьСтроки.Количество() = 0 Тогда
	// Обработка условия
КонецЕсли;

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

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

ДопРеквизитДатаОтправки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата отправки", Истина);
ДопРеквизитДоставка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Доставка", Истина);

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

Понравилась статья? Поделить с друзьями:
  • Какой бизнес можно открыть в анапе с минимальными вложениями
  • Как установить сбербанк бизнес онлайн на андроид в 2022 году
  • Какой бизнес можно открыть в гараже с минимальными затратами
  • Как учитывается время в пути при разъездном характере работы
  • Какой бизнес можно открыть в цокольном помещении жилого дома