Программно изменить дополнительные реквизиты (сведения) |
Я |
17.12.15 — 15:02
Здравствуйте друзья.
Для документа поступления добавил 2 доп реквизита: ВремяРазбора(Тип Дата) и Проверено (Тип Булево).
Как я могу получить доступ к этим реквизитам, через ссылку на документ? И возможно ли вообще через ссылку на документ изменить их?
Или же обязательно нужно ПВХ ковырять, или где там они хранятся?
1 — 17.12.15 — 15:16
через ссылку ты даже НЕдополнительные не сможешь изменить, придется объект получать…
2 — 17.12.15 — 15:17
(1) так я получил, на сервере
&НаСервере
Процедура ПеренестиВДокументНаСервере()
// Вставить содержимое обработчика.
ДокПоступления = ДокументПоступления.ПолучитьОбъект();
ДокПоступления.Проверено = Истина;
КонецПроцедуры
3 — 17.12.15 — 15:18
{Форма.Форма.Форма(222)}: Поле объекта не обнаружено (Проверено)
ДокПоступления.Проверено = Истина;
4 — 17.12.15 — 15:21
(3) а ДокументПоступления то заполнено?
5 — 17.12.15 — 15:22
нет конечно, раз параметра нет
и записать после ДокПоступления не забудь
6 — 17.12.15 — 15:24
(4) Док Поступления заполнено на форме. В нем хранится ссылка на Документ.
7 — 17.12.15 — 15:28
(6) а что нам говорит отладчик на строке
ДокПоступления.Проверено = Истина; ?
8 — 17.12.15 — 15:28
Непонятно как добраться до Доп Реквизитов?
9 — 17.12.15 — 15:29
(7) я ж показал что он говорит
{Форма.Форма.Форма(222)}: Поле объекта не обнаружено (Проверено)
ДокПоступления.Проверено = Истина;
10 — 17.12.15 — 15:30
*отладчик*
11 — 17.12.15 — 15:31
(8) конфа какая, для начала? в управлении борделем 3.1 это табчасть объекта, например
12 — 17.12.15 — 15:31
тоже самое говорит. Shift+F9 Выдает
поле объекта не обнаружено.
13 — 17.12.15 — 15:31
(11) конфа УТ 11
14 — 17.12.15 — 15:32
(12) так надо ж смотреть что у тебя в ДокументПоступления
(13) ну та в УТ 11 тоже в ТЧ объекта
15 — 17.12.15 — 15:35
Кстати для Ссылки на документ доступны свойства ДополнительныеРеквизиты и ДоаолнительныеСведения
16 — 17.12.15 — 15:36
(14) Вы наверное вопрос не поняли. Я создал в ПВХ дополнительные сведения для Документа поступления. Теперь я хочу их программно изменить.
17 — 17.12.15 — 15:36
(15) продолжайте наблюдения
18 — 17.12.15 — 15:36
(16) я то как раз все прекрасно понял.
но судя по ошибке в (9) что-то там не то
19 — 17.12.15 — 15:40
к доп реквизитам через точку не добраться…. через точку только к нормальным реквизитам…
20 — 17.12.15 — 15:41
(18) Добраться не могу до Дополнительного Реквизита.
Неудивительно, напрямую это навероне и не должно делаться.
https://yadi.sk/i/2clt5shAmHyg5
21 — 17.12.15 — 15:41
(19) ну вот и я о том же. Как же к ним обращаться?
22 — 17.12.15 — 15:44
(21) они лежат в ТЧ ДополнительныеРеквизиты
23 — 17.12.15 — 15:45
(21) Через ТЧ ДополнительныеРквизиты
24 — 17.12.15 — 15:46
//Объект = Объект-владелец доп реквизита
//НаименованиеДопРеквизита — Имя доп реквизита
//ЗначениеДопРеквизита — новое значение доп реквизита
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаименованиеДопРеквизита, Истина);
СтрокаТЧ = Объект.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Свойство»);
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = ОбъектОбъект.ДополнительныеРеквизиты.Добавить();
СтрокаТЧ.Свойство = ДопРеквизитСсылка;
КонецЕсли;
СтрокаТЧ.Значение = ЗначениеДопРеквизита;
25 — 17.12.15 — 15:52
(20) да, кстати, наименование доп реквизита нужно посмотреть в ПВХ, это не просто «Проверено», а что то вроде «Проверено (Поступление товаров и услуг)»
26 — 17.12.15 — 15:54
(25) {Форма.Форма.Форма(224)}: Ошибка при вызове метода контекста (Найти)
СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Проверено»);
по причине:
Неверное имя колонки
эт точно. Сейчас посмотрю
27 — 17.12.15 — 15:56
(26) ну ты даешь.
СтрокаТЧ = Объект.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Свойство»);
это менять не надо, искать доп реквизит надо тут
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаименованиеДопРеквизита, Истина);
28 — 17.12.15 — 15:56
(25) ссылку на реквизит получаю, дальше ошибка
{Форма.Форма.Форма(224)}: Ошибка при вызове метода контекста (Найти)
СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Проверено»);
по причине:
Неверное имя колонки
код такой
// Получаем ссылку на документ
ДокПоступления = ДокументПоступления.ПолучитьОбъект();
//Получаем ссылку на доп реквизит
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Проверено (Поступление товаров и услуг)», Истина);
СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Проверено»);
СТрокаТЧ.Значение = Истина;
ДокПоступления.Записать();
29 — 17.12.15 — 15:57
(27) расслабься я так и сделал)
30 — 17.12.15 — 15:57
(26) Проверено действительно колонки в тч нет, есть колонка «свойство»
31 — 17.12.15 — 15:58
(29) да я и не напрягался
32 — 17.12.15 — 15:59
(29) я вижу как ты сделал
33 — 17.12.15 — 16:03
(30) сделал свойство теперь такая ошибка
{Форма.Форма.Форма(225)}: Значение не является значением объектного типа (Значение)
СТрокаТЧ.Значение = Истина;
&НаСервере
Процедура ПеренестиВДокументНаСервере()
// Получаем ссылку на документ
ДокПоступления = ДокументПоступления.ПолучитьОбъект();
//Получаем ссылку на доп реквизит
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Проверено (Поступление товаров и услуг)», Истина);
СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Свойство»);
СТрокаТЧ.Значение = Истина;
ДокПоступления.Записать();
КонецПроцедуры
34 — 17.12.15 — 16:05
(33) Слушай я тебе написал код, который проверяем на неопределено строку. Но ты его решил не писать, ты же лучше знаешь как надо. Прочитай лучше (24), ты думаешь «если» там зря написано?
35 — 17.12.15 — 16:08
(34) Зачем мне проверять есть ли реквизит «Проверено» если я знаю что он есть
36 — 17.12.15 — 16:10
(35) Ну видишь, ты лучше знаешь как устроен этот механизм
37 — 17.12.15 — 16:11
(36) ))
38 — 17.12.15 — 16:11
(36) Ну Морган ну не томи
39 — 17.12.15 — 16:11
(35) Зачем тогда на форуме спрашивать?
40 — 17.12.15 — 16:12
(38) его там нет. В табличную часть доп реквизиты добавляются при записи объекта
41 — 17.12.15 — 16:12
(38) При чем только если они заполнены
42 — 17.12.15 — 16:15
(40) упс.. нестыковочка. Так реквизиты я добавлял разве не к объекту? причем тут табличная часть? я ж не для каждой строки меняю, а для объекта Документ Поступления в целом.
43 — 17.12.15 — 16:16
(42) А ты не троль?)
44 — 17.12.15 — 16:18
(43) нет, честно
45 — 17.12.15 — 16:18
(44) Ты создавал элемент плана видов характеристик, к документу это не имеет отношения. Чтобы заполнить доп реквизит в документе, нужно добавить его в табличную часть «ДополнительныеРеквизиты» документа.
46 — 17.12.15 — 16:19
(44) Его там может не быть. А может быть. Поэтому нужно найти эту строку табличной части и проверить неопределено она или нет. И если ее нет, то добавить.
47 — 17.12.15 — 16:25
(46) Спасибо что объяснили на пальцах. я и не знал что допреквизиты в отдельной тч хранятся.
Переписал код как вы посоветовали, ошибок нет, но значение реквизита не меняется.
&НаСервере
Процедура ПеренестиВДокументНаСервере()
// Получаем ссылку на документ
ДокПоступления = ДокументПоступления.ПолучитьОбъект();
//Получаем ссылку на доп реквизит
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(«Проверено (Поступление товаров и услуг)», Истина);
СТрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Найти(ДопРеквизитСсылка, «Свойство»);
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = ДокПоступления.ДополнительныеРеквизиты.Добавить();
СтрокаТЧ.Свойство = ДопРеквизитСсылка;
КонецЕсли;
СТрокаТЧ.Значение = Истина;
ДокПоступления.Записать();
КонецПроцедуры
Может я значение неправильно присваиваю. Так как в СтрокаТЧ я получаю ссылку парвильно
48 — 17.12.15 — 16:28
В форме меняешь?
49 — 17.12.15 — 16:28
Или из обработки?
50 — 17.12.15 — 16:36
из обработки
51 — 17.12.15 — 16:37
Кароче, если это форма обработки — значит должно меняться, нужно перечитать данные формы или переоткрыть документ.
Если из формы документа, нужно по-другому делать:
Доп реквизиты на форме генерятся автоматически причем наименование складывается из гуида ПВХ ДополнительныеРеквизитыИСведения и гуида спр НаборыДополнительныхРеквизитовИСведений
надо найти на форме в отладке реквизит, он будет типа такого:
ДопРеквизит = «ДополнительныйРеквизитЗначение_F04809F9x137Dx11E4x93F1x002590F36D23_F26DC8FFx2E7Fx11E4x93FFx002590F36D25»;
и просто присвоить ему значение
ЭтаФорма[«ДополнительныйРеквизитЗначение_F04809F9x137Dx11E4x93F1x002590F36D23_F26DC8FFx2E7Fx11E4x93FFx002590F36D25»] = Истина;
52 — 17.12.15 — 16:38
(50) Тогда не может не меняться =)
53 — 17.12.15 — 16:47
(50) А ты точно доп реквизит создал или доп сведение?
54 — 17.12.15 — 16:47
(52) буду провобовать. Вам спасибо. по результатам отпишусь
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 Тогда // Обработка условия КонецЕсли;
Как изменить значения дополнительных реквизитов:
Задействуем общий модуль УправлениеСвойствами, который входит в состав БСП.
ДопРеквизитДатаОтправки = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата отправки", Истина); ДопРеквизитДоставка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Доставка", Истина); МассивСтруктур = Новый Массив; МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДатаОтправки, ТекущаяДата())); МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДоставка, Истина)); УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЗаказКлиентаСсылка, МассивСтруктур);