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

15.07.18

Разработка - Универсальные функции

Пара полезных процедур для работы с дополнительными реквизитами на форме. Далее в статье: 1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме? 2. Как проверить до записи корректность заполнения пользователем дополнительного реквизита? 3. Как заполнить значение дополнительного реквизита по другому событию и обновить данные на форме? 4. Как расположить дополнительный реквизит в указанном месте на форме?

Вот пара задач на размышление:

  1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме?

  2. Как проверить корректность заполнения пользователем дополнительного реквизита, если значение некорректно – уведомить и отказать в записи объекта? Напоминаю, что до записи объекта в ТЧ Дополнительные реквизиты – данных еще нет, а на форме – уже есть.
  3. Как заполнить значение дополнительного реквизита при записи (или по другому событию) и обновить данные на форме?
  4. Как расположить дополнительный реквизит в указанном месте на форме?

 

Далее привожу решение этих задач - поковыряться с отладчиком пришлось изрядно…

Итак, вот решение:

  1. Для начала смотрим с отладчиком, появились ли Допреквизиты на форме после ПриСозданииНаСервере? Нет. А после ПриОткрытии? Тоже нет. А вот после активизации закладки «Дополнительно»  - появились со страшными именами как на скриншоте. Это было создано типовой процедурой  УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект), которая создала реквизиты на форме
		ОписаниеСвойства.ИмяУникальнаяЧасть = 
			СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Набор.УникальныйИдентификатор())), "-", "x")
			+ "_"
			+ СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор())), "-", "x");
		
		ОписаниеСвойства.ИмяРеквизитаЗначение =
			"ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть;

 После чего Система располагает реквизиты на форме

Добавление /изменение реквизитов на форме возможно благодаря следующей интересной конструкции.

Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение, ФорматированнаяСтрока, , ОписаниеСвойства.Наименование, Истина);
            ДобавляемыеРеквизиты.Добавить(Реквизит);

  Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

 

Но это нам сейчас все не нужно, так, для любопытства.
 

А вот чтобы работать с реквизитами нужно научиться получать их имена на форме по имени дополнительного реквизита. На радость разработчикам при работе с допреквизитами на форме Система создает служебный реквизит «Свойства_ОписаниеДополнительныхРеквизитов» который содержит на форме коллекцию данных, где есть все необходимы нам данные, можно найти и по имени, и найти соответствующее свойство ПланаВидаХарактеристик

Далее дело техники. По имени дополнительного реквизита получаем Поле дополнительного реквизита, и делаем с ним что хотим

Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) Экспорт 
	
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизита);
	
	Если ЗначениеЗаполнено(Свойство) Тогда
	    НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		Если НайденныеСтроки.Количество() > 0 Тогда
			Возврат НайденныеСтроки[0];		
		КонецЕсли; 		
	КонецЕсли;
	
КонецФункции
  1. Используя функцию из п1 - нужно проверить значение поля дополнительного реквизита на форме     
Функция ПолучитьЗначениеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) Экспорт
	Перем ЗначениеРеквизита;
	
	ПолеДополнительногоРеквизитаНаФорме = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);
	
	Если не ПолеДополнительногоРеквизитаНаФорме = Неопределено Тогда
		Возврат Форма[ПолеДополнительногоРеквизитаНаФорме.ИмяРеквизитаЗначение];
	КонецЕсли;
	
КонецФункции

 3. Используя функцию из п1 - нужно установить значение поля дополнительного реквизита на форме

Процедура УстановитьЗначениеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита, ЗначениеРеквизита) Экспорт
	
	ПолеДополнительногоРеквизитаНаФорме = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);
	
	Если не ПолеДополнительногоРеквизитаНаФорме = Неопределено Тогда
		Форма[ПолеДополнительногоРеквизитаНаФорме.ИмяРеквизитаЗначение] = ЗначениеРеквизита;
	КонецЕсли;
	
КонецПроцедуры

4. Используя функцию из п1 – нужно выполнить волшебную процедуру «Переместить» для коллекции Элементов формы                      

Процедура ПереместитьДополнительныйРеквизит(Форма, ИмяРеквизита, ИмяГруппы, Доступность = Истина) Экспорт
	Попытка
		Поле = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);
		Группа = Форма.Элементы.Найти(ИмяГруппы); 
		ПолеФормы = Форма.Элементы[Поле.ИмяРеквизитаЗначение];
		Если не ПолеФормы = Неопределено Тогда
			Форма.Элементы.Переместить(ПолеФормы, Группа); 
			ПолеФормы.Доступность = Доступность;
		КонецЕсли; 
	
	Исключение
	
	КонецПопытки;
	
КонецПроцедуры

В итоге, можно управлять дополнительными реквизитами на форме – почти так же комфортно, как и собственными. И ничего менять в конфигурации – не пришлось – все управление находится в расширении

Вывод: таким образом, не меняя конфигурацию, и используя механизмы дополнительных реквизитов и расширений всех типовых конфигураций, мы управляем расположением реквизитов и программно контролируем их заполнение и содержание.

Проверено на КА 2.4.2.132, но вполне универсально для всех БСП неустановленной версии 

Вот собственно и все, чем хотел поделиться, ставим лайк, если полезно

расширение конфигурации БСП дополнительные реквизиты дополнительные реквизиты на форме

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    20123    dimanich70    81    

144

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4091    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    18059    atdonya    24    

56

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5502    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14730    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3580    56    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18478    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. qwinter 683 16.07.18 11:22 Сейчас в теме
Работа с дополнительными реквизитами очень сильно разнится в зависимости от версии БСП. Например в последних имя реквизита на форме можно указать (просмотреть) в пользовательском виде. Об этом тоже стоило упомянуть.
KhromovA; adhocprog; PLAstic; gorakh; kild; bulpi; +6 Ответить
2. papche 617 16.07.18 11:58 Сейчас в теме
(1)можно задать значение реквизита "Имя" в Плане видов характеристик "Дополнительные реквизиты". И соответственно этот параметр я и передаю в приведенные процедуры. Но чтобы задавать имена на формах - не видел/не слышал. Если приведете пример - буду рад
4. Jestery 16.07.18 13:53 Сейчас в теме
(2) Может имеется ввиду вот это. Честно говоря пока не понятно как это можно использовать.
Прикрепленные файлы:
5. fxmike 78 16.07.18 14:18 Сейчас в теме
(4) Как непонятно, все же понятно. В этом поле задается значение реквизита "Имя" для доп свойства. Подразумевается, что оно уникальное в пределах базы данных, система следит за этим. Поиск свойства и обращение к нему удобно вести по этому имени. Можно даже задать его, но только при первоначальном создании доп, потом уже редактировать не дает. Во встроенных функциях также можно использовать обращение по этому имени.
6. Denis S 16.07.18 18:04 Сейчас в теме
(5) Редактировать можно, в группе "Еще" есть команда "Разрешить редактирование реквизитов".
Stref75; fxmike; +2 Ответить
7. kembrik 10 16.07.18 19:20 Сейчас в теме
(4) Использую частенько, особенно в запросах как параметр, не надо тогда следить за принадлежностью к конкретному набору и городить конструкции с "Где" и коротким заголовком
38. KazanKokos 11 20.08.20 20:02 Сейчас в теме
(2) Например в расширении не дает добавить новый вид справочника в типы свойств. Тогда сам реквизит можно сделать строковым в котором хранится код, а выборку осуществлять через реквизит формы.
3. fxmike 78 16.07.18 13:45 Сейчас в теме
Спасибо! Только вчера сидел разбирался с этими непонятными абракадабрами на форме :) А тут очень кстати ваша статья!
kabantus; volkov-mv; adhocprog; it4hr; papche; +5 Ответить
8. PerlAmutor 155 31.08.18 08:11 Сейчас в теме
Когда внедряли ERP по первой "развлекались" с этими доп.реквизитами, чтобы конфигурацию не кочеряжить. Потом началось. То им отчеты нужны, то печатные формы где используются эти реквизиты. Потом они хотят больше бантиков. Потом они должны участвовать в планах обменов... И все в таком духе. Это кошмар.

Если организация решила сэкономить на программисте 1С, то этот вариант ей подойдет до момента пока им не понадобится этот дополнительный реквизит использовать где-то еще.
programmer_87; HalWin; Brawler; graphbuh; aap290680; +5 Ответить
9. gorakh 26 31.08.18 09:16 Сейчас в теме
(8)Доп реквизиты полезная штука. Положим у нас есть 100 тыс. элементов справочника номенклатуры. в 1000 элементов характерезует какое-то свойство. А всем остальным элементов это свойство не нужно и всегда будет пустым. Вот в этолм случае очень хорошо помогают дополнительные реквизиты. А в отчетах на СКД их использовать очень просто. И в обменах не сложнее чем обычные элементы.
ИНТЕГРА; +1 Ответить
10. kolya_tlt 88 31.08.18 11:22 Сейчас в теме
(8) самое страшное будет когда будет меняться бизнес логика документов в зависимости от реквизитов.
еще сложнее когда начнутся зависимости друг от друга. например в примере автора можно водителя закреплять за определенным авто в определенные дни, и поступит требование чтобы водителя можно было выбрать в зависимости от этой связки.
кстати вроде есть функционал упаковок в программе. зачем было городить доп реквизиты Количество мест и тип упаковки?
11. papche 617 01.09.18 11:26 Сейчас в теме
(10)Собственно, статья не про полезность и необходимость использования доп реквизитов, а про то как решать указанные в топике задачи, если уж вступили на "скользкую дорожку" использования доп реквизитов.
Сама по себе тема необходимости и оптимальности использования дополнительных реквизитов заслуживает целой серии статей и сотен сломанных копий )). Я тут - пас
ixijixi; adhocprog; men1949; Fox-trot; it4hr; +5 Ответить
12. triviumfan 97 02.09.18 23:08 Сейчас в теме
Коротко: автор рассказал, что есть такая штука как БСП и какие методы есть в подсистеме доп свойств/реквизитов.
Эта статья для самых ленивых, не способных воспользоваться отладчиком любого справочника с доп. реквизитом.
13. papche 617 03.09.18 13:56 Сейчас в теме
(12) БСП не упоминал, ни прямо, ни косвенно)))
14. men1949 11.10.18 17:42 Сейчас в теме
Спасибо! Когда "дело дошло до тела", потребовалось разместить доп. реквизиты на форме в нужном порядке и в нужных местах, вспомнил об этой статье. Помогло сберечь уйму времени)))
user612514_andreymokrov; papche; +2 Ответить
15. user820037 22.10.18 13:56 Сейчас в теме
Наверно что-то недопонимаю, но Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) исполняется на сервере, а форма туда не передается "Отсутствует отображение для типа 'УправляемаяФорма'"
16. papche 617 22.10.18 18:17 Сейчас в теме
(15) На сервере, да. Форма вполне себе передается.
Вот рабочий код с формы с вызовом серверных модулей из статьи

&НаСервере
Процедура СвойстваВыполнитьДополнительнуюИнициализацию();
	пп_Сервер.ПереместитьДополнительныйРеквизит(ЭтаФорма,"СерийныеНомера_ЗаданиеНаПеревозку", "пп_ГруппаДопРеквизиты", Истина);
	пп_Сервер.ПереместитьДополнительныйРеквизит(ЭтаФорма,"Комплектовщик_ЗаданиеНаПеревозку", "пп_ГруппаДопРеквизиты", Истина);
КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьЭлементовФормы(Доступность)
	Элементы.МаршрутДобавитьРаспоряжение.Доступность = Доступность;
	
	ПолеСерийныеНомера = пп_Сервер.ПолучитьПолеДополнительногоРеквизитаНаФорме(ЭтаФорма, "СерийныеНомера_ЗаданиеНаПеревозку");
	Элементы[ПолеСерийныеНомера.ИмяРеквизитаЗначение].Доступность = Истина;
	
	ПолеКомплектовщик = пп_Сервер.ПолучитьПолеДополнительногоРеквизитаНаФорме(ЭтаФорма, "Комплектовщик_ЗаданиеНаПеревозку");
	Элементы[ПолеКомплектовщик.ИмяРеквизитаЗначение].Доступность = Доступность;
	
	Элементы.Маршрут.Доступность = Доступность;
КонецПроцедуры

&НаКлиенте
Процедура пп_ПриОткрытииПосле(Отказ)
	//СвойстваВыполнитьОтложеннуюИнициализацию();
	//УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	СвойстваВыполнитьДополнительнуюИнициализацию();
	Если ПризнакЗаданиеНаОтборНапечатано Тогда
	
		//ТолькоПросмотр = Истина;	
		УстановитьДоступностьЭлементовФормы(Ложь);
		Состояние("Сформирована печатная форма ""Задания на отбор"", редактирование ограничено");
	
	КонецЕсли; 
КонецПроцедуры
Показать
Toliban; johnyb2002; kompas-dm; +3 Ответить
17. user820037 06.11.18 13:11 Сейчас в теме
(16) Разобрался. Очень, очень помогла Ваша публикация.
20. user594726_artyem.romanenkov 06.12.18 14:36 Сейчас в теме
(16) Помогите разобраться - что делаю не так?

&НаКлиенте
Процедура ДТ_ПриОткрытииПосле(Отказ)
	
	Если Строка(Объект.ВидДокумента) = "Акт выполненных работ" Тогда
		МожноМенятьАкт = ПроверитьИзменениеАкта();	
	КонецЕсли;
	
	ДопРеквизитНаФорме = ПолучитьПолеДополнительногоРеквизитаНаФорме(ЭтаФорма, "Номер заказа в SAP");
	
	Если МожноМенятьАкт Тогда
		Элементы.ДопРеквизитНаФорме.Доступность = Истина;
	Иначе 	
		Элементы.ДопРеквизитНаФорме.Доступность = Ложь;
	КонецЕсли;	
		
КонецПроцедуры

&НаСервере
Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) Экспорт 
	
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Наименование", ИмяРеквизита);
	
	Если ЗначениеЗаполнено(Свойство) Тогда
	    НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		Если НайденныеСтроки.Количество() > 0 Тогда
			Возврат НайденныеСтроки[0];		
		КонецЕсли; 		
	КонецЕсли;
	
КонецФункции
Показать
18. manb 07.11.18 10:28 Сейчас в теме
Статья очень помогла. Спасибо))
19. user895773 21.11.18 13:09 Сейчас в теме
Вот как раз сижу разбираюсь.
УТ(11.3.4.47)
Мне надо, чтобы поле доп. реквизита имело вид "ПолеНадписи"
В расширении в процедуре формы
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Вызываю:
УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект,,Истина); \\Параметр ПоляНадписей = Истина
Но поле все равно имеет вид "ПолеВвода", да еще в список значений попадают лишние значения.

Что то делаю не так или это ошибка в конфигурации?
PS: Попытался в УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме
Исправить
Если ПоляНадписей Тогда
				Элемент.Вид = ВидПоляФормы.ПолеВвода;

На
Если ПоляНадписей Тогда
				Элемент.Вид = ВидПоляФормы.ПолеНадписи;


Заработало ....
21. Светлый ум 415 30.12.18 23:35 Сейчас в теме
22. mnb-next 15 29.04.19 16:06 Сейчас в теме
Спасибо! Статья сразу помогла решить мою сегодняшнюю проблему! Очень своевременно!
23. Sergafan10 20.06.19 10:22 Сейчас в теме
Спасибо за статью! Информативно.
24. mikleRo 03.07.19 08:49 Сейчас в теме
Спасибо,
помогло, только для нужной конфигурации (ЭДО вер. 2.1.12.2) пришлось изменить в функции
ПолучитьПолеДополнительногоРеквизитаНаФорме
строку
у Вас :
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизита);

заработало

Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
johnyb2002; papche; +2 Ответить
25. awe007 13.08.19 10:41 Сейчас в теме
(24)
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);

А не могли бы вы полностью привести пример работающей функции для 1С ДО ?
И как к ней обращаться, какие параметры в неё передать, чтобы получить значение интересующего доп. реквизита?
26. papche 617 13.08.19 16:37 Сейчас в теме
(25) На ДО не тестировал, вообще не в курсе, будет ли там работать или нет.
27. awe007 15.08.19 13:39 Сейчас в теме
(26) Отлично работает именно в том виде, как вы и предложили
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
v1d; johnyb2002; +2 Ответить
28. papche 617 15.08.19 14:49 Сейчас в теме
(27) Ну и хорошо. Только это mikleRo про ДО предложил.
Посмотрел - в ДО у реквизита "Имя " ПВХ ДополнительныеРеквизитыИСведения не выставлен признак индексирования, в отличие от ЕРП образных. Для универсальности нужно запросом получать
84. v1d 29.08.23 18:31 Сейчас в теме
(27)
Попытка ПолучитьЗначениеДопРеквизита(Контрагенты.Ссылка, ИмяРеквизита); // Если существует ДопРеквизит
	ЕстьДопРеквизит = ЗначениеЗаполнено(Контрагенты.Ссылка.ДополнительныеРеквизиты.Найти(Свойство)); // Истина / Ложь
// Исключение
	//
КонецПопытки;
29. kotov2000 5 10.09.19 09:57 Сейчас в теме
Воспользовался готовыми функциями в ERP 2.4.8.
ПолучитьЗначениеДополнительногоРеквизитаНаФорме
УстановитьЗначениеДополнительногоРеквизитаНаФорме

Все работает! разбираться с БСП гораздо дольше.
30. papche 617 12.09.19 14:58 Сейчас в теме
(29)
2.4.8
Алексей, появились готовые функции? Ооо, здорово! А в каком модуле?
31. kotov2000 5 13.09.19 10:46 Сейчас в теме
(30) в Этой статье появились, которые я перенес в свой модуль.
Автору респект!
32. SashinPapa 01.10.19 18:25 Сейчас в теме
Низкий поклон автору!
Очень-очень полезно тем, кто допиливает 1С:Документооборот v2.1
v1d; papche; +2 Ответить
33. morgershtern 17.10.19 12:16 Сейчас в теме
Может оффтоп, но подскажите, а реально ли сделать множественный выбор "дополнительных значений" в "дополнительный реквизит"?
34. Xershi 1555 17.10.19 12:22 Сейчас в теме
(33) это реквизит и он содержит тип данных. Среди них нет списка значений. Поэтому нельзя. Можно только сделать несколько реквизитов и туда их пихать.
Вам нужна таблица, а тут реквизит. Логика вашей задачи другая.
35. PavelKolobkov 27.03.20 13:14 Сейчас в теме
(0) Спасибо! Очень выручил!
36. kpdozer 06.05.20 00:21 Сейчас в теме
Подскажите, а в принципе в каком порядке выводятся дополнительные реквизиты на форму? У меня при создании дополнительных реквизитов один порядок, а на форме другой ((
37. kpdozer 06.05.20 00:48 Сейчас в теме
(36)Вопрос снят. Вручную в через "Ещё-Изменить Форму" случайно переместил реквизит в другую Группу.
39. 79123890854 15.09.20 09:35 Сейчас в теме
ERP.
Необходимо добавить реквизит в справочник.
Используются доп реквизиты но нельзя добавить доп реквизит с нужным мне типом,
поэтому добавляю реквизит непосредственно в объект конфигурации.
Программно добавил реквизит на форму.
Нужно разместить новый реквизит между старыми доп реквизитами.
Делаю так:
40. 79123890854 15.09.20 09:36 Сейчас в теме
ИмяРеквизита = "Заявка";
                                                               Поле = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);
                                                               
                                                               АктОтбораОбразцов = Форма.Элементы.Найти("АктОтбораОбразцов"); 
                                                               Группа = Форма.Элементы.Найти("ГруппаДополнительныеРеквизиты");
                                                               ПолеФормы = Форма.Элементы[Поле.ИмяРеквизитаЗначение];
                                                               
                                                               Форма.Элементы.Переместить(АктОтбораОбразцов, Группа, ПолеФормы);        //перемещаемый элемент, новый родитель, перед которым
41. 79123890854 15.09.20 09:36 Сейчас в теме
Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) 
                
                Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
                Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
                
                Если ЗначениеЗаполнено(Свойство) Тогда
                    НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
                               Если НайденныеСтроки.Количество() > 0 Тогда
                                               Возврат НайденныеСтроки[0];                              
                               КонецЕсли;                       
                КонецЕсли;
                
КонецФункции
Показать
42. 79123890854 15.09.20 09:37 Сейчас в теме
Но поле «Акт отбора образцов» упорно не хочет вставать перед полем «Заявка»,
а размещается в начале групппы, если не казывать что нужно поместить перед полем «Заявка», помещается в конце группы доп реквизитов(что правильно).

Ну вот оно либо вначале либо в конце, а в середину не перемещается.
Пробовал отследить дальше где оно может перемещается, но не нашел.
Ещё не понятно как в режиме отладки посмотреть порядок полей? Есть просто список Форма.Элементы, а где зраниться их порядок?
67. COMPER 341 20.04.22 18:12 Сейчас в теме
(42) полагаю, что сортируется по идентификатору.
43. mp40 13 04.11.20 10:03 Сейчас в теме
Еще бы добавил в поиск допреквизита, выбор родителя. Вдруг есть совпадающие имена допреквизитов у разных справочников или документов.
44. mp40 13 04.11.20 10:06 Сейчас в теме
А как например отловить событие изменения значения допреквизита? Всегда перепроверять?
45. samvani 35 12.11.20 11:22 Сейчас в теме
В статье приведены серверные функция для определения и поиска дополнительных реквизитов. В случае событий, в которых нельзя использовать серверные вызовы, будет проблема. Как альтернатива - это создать реквизит формы с типом фиксированное соответствие, в котором будет храниться соответствие имен доп. реквизитов и соотвествующие ему имена реквизитов на форме. Пример: Ключ соответствия: "Контрагент", Значение: "ДополнительныйРеквизитЗначение_..."
Тогда обращение к ним будет проводить и на клиенте и на сервере. Пример: "ЭтаФорма[ЭтаФорма.ФиксированоеСоответствиеДопреквизитов["Контрагент"]].
46. kompas-dm 781 05.12.20 20:47 Сейчас в теме
(0) Отработало на BAS Комплексное управление предприятием (2.1.15.5) . Практически 1:1. Спасибо.
47. Darklight 33 26.01.21 17:34 Сейчас в теме
Хорошая статья. Не хватило только упоминания о событиях доп .реквизитов на форме, например по событии "ПриИзменении" - функция на форме "Подключаемый_ПриИзмененииДополнительногоРеквизита" - срабатывает при интерактивном изменении доп. реквизита
48. EddieTocha 28 29.01.21 17:55 Сейчас в теме
(47) Подскажите, как из этого обработчика изменить ДопРеквизит?
49. Darklight 33 01.02.21 11:20 Сейчас в теме
(48)Описанная в статье функция "УстановитьЗначениеДополнительногоРеквизитаНаФорме" Вам не помогает?
50. EddieTocha 28 01.02.21 14:55 Сейчас в теме
(49) Попытался вызвать ее из ПриИзмененииДополнительногоРеквизита получил ошибку.
51. Darklight 33 02.02.21 09:24 Сейчас в теме
(50)Если определение и реализация этой функции размещено внутри или доступно в контексте точки своего вызова, тогда приведите, пожалуйста текст ошибки, чтобы был предмет обсуждения Вашей проблемы
52. user816558 08.02.21 10:40 Сейчас в теме
Спасибо за публикацию. А каково назначение переменной: Перем ЗначениеРеквизита;
в функции: Функция ПолучитьЗначениеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) Экспорт

Может её убрать из функции?
53. papche 617 08.02.21 15:37 Сейчас в теме
(52) Точно, она не нужна!
Конечно, можно убрать
user816558; +1 Ответить
54. rpgshnik 3795 30.03.21 10:29 Сейчас в теме
Спасибо, вы сэкономили время. Особенно для ДО очень актуально.
55. Bespechnii_kot 30.03.21 13:47 Сейчас в теме
Благодарю, помогло
56. johnyb2002 31.05.21 02:10 Сейчас в теме
Большая, человеческая благодарность! Очень помогло.
57. Tommy82 65 04.10.21 17:00 Сейчас в теме
Что я делаю не так?
Ошибка отображения типов:
Отсутствует отображение для типа "УправляемаяФорма"

&НаКлиенте
Процедура Пуск(Команда)

НаименованиеДляПечатиПолное = "НПП;
НаименованиеДляПечатиСокращенное = "НПС";

ИмяРеквизита = НаименованиеДляПечатиПолное;
ЗначениеРеквизита = "111";

Форма = ЭтаФорма;

УстановитьЗначениеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита, ЗначениеРеквизита);

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

&НаКлиенте
Процедура УстановитьЗначениеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита, ЗначениеРеквизита) Экспорт

ПолеДополнительногоРеквизитаНаФорме = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);

Если не ПолеДополнительногоРеквизитаНаФорме = Неопределено Тогда
Форма[ПолеДополнительногоРеквизитаНаФорме.ИмяРеквизитаЗначение] = ЗначениеРеквизита;
КонецЕсли;

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

&НаСервере
Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) Экспорт

Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;

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

Если ЗначениеЗаполнено(Свойство) Тогда
НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
Если НайденныеСтроки.Количество() > 0 Тогда
Возврат НайденныеСтроки[0];
КонецЕсли;
КонецЕсли;

КонецФункции
Показать
58. Tommy82 65 04.10.21 17:47 Сейчас в теме
(57)

Разобрался
&НаКлиенте
Процедура Пуск()

	УстановитьЗначениеДополнительногоРеквизитаНаФорме(ИмяРеквизита, ЗначениеРеквизита);	
	
КонецПроцедуры

&НаСервере
Процедура УстановитьЗначениеДополнительногоРеквизитаНаФорме(ИмяРеквизита, ЗначениеРеквизита) Экспорт
	
	ПолеДополнительногоРеквизитаНаФорме = ПолучитьПолеДополнительногоРеквизитаНаФорме(ЭтаФорма, ИмяРеквизита);
	
	Если не ПолеДополнительногоРеквизитаНаФорме = Неопределено Тогда
		ЭтаФорма[ПолеДополнительногоРеквизитаНаФорме.ИмяРеквизитаЗначение] = ЗначениеРеквизита;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) Экспорт
	
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(ИмяРеквизита);
	
	Если ЗначениеЗаполнено(Свойство) Тогда
	    НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		Если НайденныеСтроки.Количество() > 0 Тогда
			Возврат НайденныеСтроки[0];		
		КонецЕсли; 		
	КонецЕсли;
	
КонецФункции
Показать
59. serganteg 24.10.21 12:15 Сейчас в теме
Спасибо! Полезные функции. Хочу только одно добавить. Т.к. процедура УстановитьЗначениеДополнительногоРеквизитаНаФорме не отработает корректно, если пользователь не щелкнет по вкладке Дополнительно, то можно добавить в нее проверку на заполненность реквизита в базе данных.

Процедура УстановитьЗначениеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита, ЗначениеРеквизита) Экспорт
	
	ПолеДополнительногоРеквизитаНаФорме = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);
	
	Если ПолеДополнительногоРеквизитаНаФорме = Неопределено Тогда
               ПараметрыОтбора = Новый Структура;
	       ПараметрыОтбора.Вставить("Свойство", 
                                       ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизита));
	       
               НайденныеСтроки = Объект.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);
	
		Если НайденныеСтроки.Количество() = 0 Тогда    
			Возврат Неопределено;
		Иначе
			Возврат НайденныеСтроки[0].Значение;
		КонецЕсли;	
        Иначе
		Форма[ПолеДополнительногоРеквизитаНаФорме.ИмяРеквизитаЗначение] = ЗначениеРеквизита;
	КонецЕсли;
	
КонецПроцедуры
Показать
65. Brawler 458 23.03.22 21:19 Сейчас в теме
(59) Замечание дельное, только пример кода у вас не совсем верен. Два Возврата данных хотя там нужно их устанавливать наоборот.

Действительно пока документ не отрисовал доп реквизиты, нужно проводить манипуляции с табличной частью документа, а как только доп реквизиты отрисованы, то нужно уже проводить манипуляции с ними на форме.
60. Scroudge 4 06.01.22 21:57 Сейчас в теме
большущий респект! никак не мог в расширении записать значение в допреквизит Документа в унф 1,6.
и так и эдак. с помощью БСП (УправлениеСвойствами.ЗаписатьСвойстваУОбъекта) не получалось.
все, что нужно передавал в параметры, но всё улетало куда-то в нирвану, форма с документом не открывалась.
получилось с помощью описанных в статье процедур и функций .
но осталась проблемка.
вижу вроде бы заполненный реквизит, но если ставлю ему в свойства
отображать в виде гиперссылки, то он не заполняется с помощью функции, описанной в статье. буду дальше разбираться, но вдруг у кого-то есть ответ.
тип реквизита строка ограниченной длины, которая хранит веб-ссылку.
61. eka609 1 13.01.22 00:22 Сейчас в теме
От меня тоже спасибо! Вы здорово мне сэкономили время!!! Код рабочий, описано понятно.
62. Lakord 17.02.22 17:52 Сейчас в теме
Добрый день!

Помогите, пожалуйста, разобраться как "разбросать" дополнительные реквизиты в документе ЗаказПоставщику по разным группам. В расширении создана дополнительная вкладка (страница) ГруппаЛогистика и в нее из ГруппаДополнительно перетянута "вручную" ГруппаДополнительныеРеквизиты. Т.е. сейчас все дополнительные реквизиты размещены на вкладке Логистика (ГруппаЛогистика).

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




&НаКлиенте
Процедура нн_ГруппаСтраницыПриСменеСтраницыВместо(Элемент, ТекущаяСтраница)
			
		//Перемещаем поля
		ПереместитьДопРеквизиты();
		//END Перемещаем поля

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



&НаСервере
Процедура ПереместитьДопРеквизиты();
	
		нн_ДопХарактеристики.ПереместитьДополнительныйРеквизит(ЭтаФорма,"НачалоПроизводства","нн_ГруппаЗадачи", Истина);
	
    
КонецПроцедуры
Показать



Как можно разбросать допреквизиты по разным группам на вкладке, чтобы они отображались более логично и сгруппированно?
63. RosagroleasingURIS 21.03.22 18:41 Сейчас в теме
ПолеФормы = Форма.Элементы[Поле.ИмяРеквизитаЗначение];

Это что за бред?
64. papche 617 23.03.22 18:43 Сейчас в теме
66. Brawler 458 23.03.22 21:39 Сейчас в теме
На основании идеи изложенной в статье смастерил следующие реализации методов, часть из них уже была написана ранее для других целей, но делюсь и ими.

// серверный модуль ХХХ_УправлениеСвойствами

// Возвращает свойство по имени.
// Использовать в тех случаях, когда нет других методов для поиска.
//
// Параметры:
//   ИмяСвойства - Строка - Уникальное имя дополнительного свойства.
//   ЭтоДополнительноеСведение - Булево - Искомое свойство должно быть дополнительным сведением, а не реквизитом. (опционально)
//   ВызватьИсключениеЕслиСвойствоНеНайдено - Булево - Признак того, нужно ли вызывать исключение, если свойство не найдено, по умолчанию Ложь. (опционально)
//
// Возвращаемое значение
//   ПланыВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - Найденное свойство или пустая ссылка, если свойство не найдено.
//
Функция ПолучитьСвойствоПоИмени(ИмяСвойства, ЭтоДополнительноеСведение = Ложь, 
	ВызватьИсключениеЕслиСвойствоНеНайдено = Ложь) Экспорт
	
	Возврат ХХХ_УправлениеСвойствамиПовтИсп.ПолучитьСвойствоПоИмени(
		ИмяСвойства, ЭтоДополнительноеСведение, ВызватьИсключениеЕслиСвойствоНеНайдено);
	
КонецФункции

// Устанавливает значение свойства объекту. Пустые значения свойств удаляются.
// ВНИМАНИЕ! Процедура не проверяет корректность установки реквизитов 
// и могут ли они быть использованы в данном типе объектов или нет!!!
//
// Параметры:
//  ИзменяемыйОбъект - СправочникОбъект, ДокументОбъект - Объект в котором нужно задать свойства
//  Свойство - ПланыВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - Свойство
//  Значение - Произвольный - Значение свойства
//
Процедура УстановитьЗначениеДополнительногоРеквизита(ИзменяемыйОбъект, Свойство, Значение) Экспорт
	
	Если Не ЗначениеЗаполнено(Свойство) Тогда
		ВызватьИсключение СтрШаблон("Не удалось установить значение дополнительного реквизита для объекта %1! Свойство не задано!", ИзменяемыйОбъект);
	КонецЕсли;
	
	СтрокаРеквизита = ИзменяемыйОбъект.ДополнительныеРеквизиты.Найти(Свойство, "Свойство");
	
	Если ЗначениеЗаполнено(Значение) Тогда
		Если СтрокаРеквизита = Неопределено Тогда
			СтрокаРеквизита = ИзменяемыйОбъект.ДополнительныеРеквизиты.Добавить();
			СтрокаРеквизита.Свойство = Свойство;
		КонецЕсли;
		СтрокаРеквизита.Значение = Значение;
	Иначе
		Если СтрокаРеквизита <> Неопределено Тогда
			ИзменяемыйОбъект.ДополнительныеРеквизиты.Удалить(СтрокаРеквизита);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

// Возвращает значение дополнительного свойства объекту.
// ВНИМАНИЕ! Не делается проверка на корректнось существования свойства в данном типе объектов.
//
// Параметры:
//  ОбъектВПамяти - СправочникОбъект, ДокументОбъект - Объект в котором нужно найти значение свойства
//  Свойство - ПланыВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - Свойство
//
// Возвращаемое значение
//  Произвольный - Заданное значение свойства или ЗначениеПоУмолчанию, если никакого значение не удалось найти.
//
Функция ПолучитьЗначениеДополнительногоРеквизита(ОбъектВПамяти, Свойство, ЗначениеПоУмолчанию = Неопределено) Экспорт
	
	Если Не ЗначениеЗаполнено(Свойство) Тогда
		ВызватьИсключение СтрШаблон("Не удалось получить значение дополнительного реквизита для объекта %1! Свойство не задано!", ОбъектВПамяти);
	КонецЕсли;
	
	СтрокаРеквизита = ОбъектВПамяти.ДополнительныеРеквизиты.Найти(Свойство, "Свойство");
	
	Если СтрокаРеквизита = Неопределено Тогда
		Возврат ЗначениеПоУмолчанию;
	Иначе
		Возврат СтрокаРеквизита.Значение;
	КонецЕсли;
	
КонецФункции

Функция ПолучитьПолеДополнительногоРеквизитаНаФормеПоИмениРеквизита(Форма, ИмяРеквизита) Экспорт
	
	Свойство = ПолучитьСвойствоПоИмени(ИмяРеквизита, Ложь, Истина);
	
	Возврат ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, Свойство);
	
КонецФункции

Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, Свойство) Экспорт
	
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	Если ЗначениеЗаполнено(Свойство) Тогда
		НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		Если НайденныеСтроки.Количество() > 0 Тогда
			Возврат НайденныеСтроки[0];
		КонецЕсли;
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

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

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

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

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

Процедура ПереместитьДополнительныйРеквизитПоИмениРеквизита(Форма, ИмяРеквизита, ИмяГруппы, Доступность = Истина) Экспорт
	
	Свойство = ПолучитьСвойствоПоИмени(ИмяРеквизита, Ложь, Истина);
	
	ПереместитьДополнительныйРеквизитНаФорме(Форма, Свойство, ИмяГруппы, Доступность);
	
КонецПроцедуры

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

// серверный модуль ХХХ_УправлениеСвойствамиПовтИсп с повторным использованием

// Возвращает свойство по имени.
// Использовать в тех случаях, когда нет других методов для поиска.
//
// Параметры:
//   ИмяСвойства - Строка - Уникальное имя дополнительного свойства.
//   ЭтоДополнительноеСведение - Булево - Искомое свойство должно быть дополнительным сведением, а не реквизитом. (опционально)
//   ВызватьИсключениеЕслиСвойствоНеНайдено - Булево - Признак того, нужно ли вызывать исключение, если свойство не найдено, по умолчанию Ложь. (опционально)
//
// Возвращаемое значение
//   ПланыВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - Найденное свойство или пустая ссылка, если свойство не найдено.
//
Функция ПолучитьСвойствоПоИмени(ИмяСвойства, ЭтоДополнительноеСведение = Ложь, 
	ВызватьИсключениеЕслиСвойствоНеНайдено = Ложь) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка
		|ИЗ
		|	ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
		|ГДЕ
		|	ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение = &ЭтоДополнительноеСведение
		|	И ДополнительныеРеквизитыИСведения.Имя = &ИмяСвойства";
	Запрос.УстановитьПараметр("ИмяСвойства", ИмяСвойства);
	Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение);
	
	Результат = Запрос.Выполнить().Выбрать();
	
	Если Результат.Следующий() Тогда
		Возврат Результат.Ссылка;
	Иначе
		Если ВызватьИсключениеЕслиСвойствоНеНайдено Тогда
			ВызватьИсключение СтрШаблон("Не удалось найти дополнительное свойство '%1'.", ИмяСвойства);
		Иначе
			Возврат Неопределено;
		КонецЕсли;
	КонецЕсли;
	
КонецФункции
Показать
KazanKokos; dimaster; papche; +3 Ответить
86. KazanKokos 11 30.09.24 18:15 Сейчас в теме
(66)

Спасибо большое.

Для тех кто в танке или в заказе клиента УТ11. Допреквизиты в некоторых формах инициализируются отдельно при открытии вкладки и до этого не видны.
Поэтому я сделал так (код для расширения):

&НаСервере
Процедура АРИАН_СвойстваВыполнитьДополнительнуюИнициализацию()
	Свойство = ХХХ_УправлениеСвойствами.ПолучитьСвойствоПоИмени("ОснованиеОбщее",,,Истина); 
	ХХХ_УправлениеСвойствами.ПереместитьДополнительныйРеквизитНаФорме(ЭтаФорма, Свойство, "ГруппаДополнительныхРеквизитов");
КонецПроцедуры

&НаКлиенте
Процедура ARIAN_ПриОткрытииПосле(Отказ)
        // ТУТ выполняем отложенную инициализацию
	СвойстваВыполнитьОтложеннуюИнициализацию();
	УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
	АРИАН_СвойстваВыполнитьДополнительнуюИнициализацию();
КонецПроцедуры

Показать


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

      //.......//.........
Показать
68. AlbinaAAA 1483 11.05.22 21:42 Сейчас в теме
Спасибо большое! Помогли быстро разобраться и сэкономили много времени.
69. kns77 103 17.06.22 14:15 Сейчас в теме
Невозможно сформировать наименование по заданному для вида номенклатуры "Сумки" шаблону. Проверьте правильность шаблона.
Сделал характеристики, он даже в них создал 1 номенклатуру и 1 характеристику. Что может быть ?
70. papche 617 17.06.22 19:50 Сейчас в теме
(69)Эээ.. Не понял вопрос. Это точно по теме?
71. kns77 103 17.06.22 23:25 Сейчас в теме
(70) Все уже разобрался, надо для вида номенклатуры характеристики задать шаблон наименования в соответствии с доп свойствами, да все по теме, если у кого возникнет вопрос отпишу, это просто не прописано в инструкции к расширению, там очень много нюансов которые методом тыка не поймешь сразу. А так расширение очень неплохое.
72. lazarsr 5 30.09.22 09:57 Сейчас в теме
Встал вопрос по размещению допреквизита номенклатуры в табчасть документа. Конфа УТ 11.5 , это расширение в таком случае не сыграет?
73. ANF-BR 25.10.22 13:26 Сейчас в теме
А где это взять: "Форма.Свойства_ОписаниеДополнительныхРеквизитов"?
MaCCapAkIII; +1 Ответить
75. MaCCapAkIII 01.03.23 11:04 Сейчас в теме
(73) Тот же вопрос - у меня нет в форме такого метода? Где Вы его взяли?
76. papche 617 01.03.23 16:37 Сейчас в теме
(75)Это не метод-это реквизит формы, добавленный БСП программно . Данные форма коллекция. Посмотрите отладчиком, сразу станет все ясно
Прикрепленные файлы:
77. MaCCapAkIII 01.03.23 17:03 Сейчас в теме
(76) У меня БСП 2.2, нет там такого... (
78. papche 617 01.03.23 17:59 Сейчас в теме
(77) А процедура УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(..) - есть?
79. MaCCapAkIII 02.03.23 09:34 Сейчас в теме
80. MaCCapAkIII 02.03.23 09:55 Сейчас в теме
(78) Разбираюсь. Получается, что методы в УправлениеСвойствами предназначены в основном для заполнения формы дополнительными реквизитами какого-либо объекта, из основного реквизита формы. В моем случае основного реквизита нет, на форму может быть добавлен любой дополнительный реквизит из соответствующего ПВХ, причем произвольного типа (или нескольких типов). Поэтому прогонять через УправлениеСвойствами.ПриСозданииНаСервере и далее через УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыФормы у меня скорее всего не получится.
Сейчас пытаюсь решить проблему исключения дополнительных реквизитов из контроля заполнения при закрытии формы. У полей формы, связанных с дополнительными реквизитами, АвтоОтметкаНезаполненного и ОтметкаНезаполненного ставлю в Ложь, визуально красный пунктир пропадает, но при попытке закрытия формы проверка все равно срабатывает и дополнительный реквизит становится обязательным. Почему платформа не отрабатывает этот нюанс непонятно.
Пока подсказали попробовать использование собственного алгоритма в ОбработкаПроверкиЗаполненияНаСервере, сформировать массив ПроверяемыеРеквизиты в зависимости от необходимости проверки тех или иных реквизитов (включая дополнительные).
74. CheBurator 2712 06.11.22 20:52 Сейчас в теме
Для меня как пользователя на 8-ке (программил/программлютолько на 77) - жесточайшим разочарованием явилось то, что я не смог настройками формы вытащить важные дополнительные реквизиты на закладку "основное". Вот акая вот гибкость, туды ее в качель.. .
81. loky_imp 29.05.23 05:52 Сейчас в теме
Огромное спасибо за публикацию
82. Kontakt 109 22.06.23 08:27 Сейчас в теме
есть процедура при создание документа на основание заполнять дополнительные реквизиты идентичные .
83. Kontakt 109 22.06.23 14:17 Сейчас в теме
(82)
&После("ОбработкаЗаполнения")
Процедура XXX_ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	ТЗ = ДанныеЗаполнения.ДополнительныеРеквизиты.Выгрузить();
	ЭтотОбъект.ДополнительныеРеквизиты.Загрузить(ТЗ);

КонецПроцедуры
85. denv77 01.03.24 08:47 Сейчас в теме
Спасибо автору. Очень полезно.
Оставьте свое сообщение