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

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

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

Объект.ОтветЛицо = ПредопределенноеЗначение("Справочник.ФизическиеЛица.ПустаяСсылка");

Если запретить выбор типа в поле ввода (свойство ВыбиратьТип), то реквизиту ОтветЛицо будет назначен тип ссылки на справочник ФизическиеЛица, и для выбора будут предлагаться значения только этого справочника.

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

Массив = Новый Массив();
Массив.Добавить(Тип("СправочникСсылка.ФизическиеЛица"));
НашеОписание = Новый ОписаниеТипов(Массив);
Элементы.ОтветЛицо.ОграничениеТипа = НашеОписание;
Объект.ОтветЛицо = НашеОписание.ПривестиЗначение(Объект.ОтветЛицо);

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

Автор Алексей_1985_06, 24 мая 2022, 20:08

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

Уважаемые товарищи, подскажите вот с таким вопросом:

1.   Создан реквизит «Комплекс» с составным типом данных (СправочникСсылка.ТехническиеКомплексы, СправочникСсылка.СтартовыеКомплексы)
2.   Созданы два реквизита формы ТК (булево) и СК (булево)
3.   Необходимо что бы при ТК = Истина,  реквизит «Комплекс» — имел тип СправочникСсылка.ТехническиеКомплексы, а при СК = Истина реквизит «Комплекс» — имел тип СправочникСсылка.СтартовыеКомплексы.

 :befhbt: Или кто подскажет может по другому как-то реализуется процесс определения типа данных реквизита в зависимости от значения другого реквизита (типа Булево)


Непонятно, зачем переустанавливать типы? У вас они уже назначены составным типом. При записи элементов справочника в этот реквизит, тип сам будет устанавливаться в нужный.
Я бы действовал в обратную сторону. При записи в реквизит «Комплекс» элемент из СправочникСсылка.ТехническиеКомплексы, присваивать ТК = Истина. А при записи СправочникСсылка.СтартовыеКомплексы — СК = Истина.


Алексей_1985_06, сильно зависит от того какие формы, управляемые или обычные, действительно, когда у реквизита составной тип
(и не два как у вас а десяток) до задалбывает каждый раз для перевыбора элемента того-же типа, сначала выбирать этот-же тип а затем и сам элемент
для избежания этого, использую такой код

&НаКлиенте
Процедура ТаблицаОбработкиДубльНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

лкТекушаяСтрока = Элементы.СсылкиДублей.ТекущиеДанные;
Если лкТекушаяСтрока <> Неопределено Тогда
Элемент.ВыбиратьТип = Не ЗначениеЗаполнено(лкТекушаяСтрока.Значение);
КонецЕсли;

КонецПроцедуры
в вашем случае
вообще отключите возможность выбора Типа,
а при использовании булевых переключателей в их событии ПриИзменении(..), реквизиту Комплекс присваивайте Пустую ссылку нужного справочника!
тогда по кнопке Выбор, будут выбираться элементы из этого справочника.

  • 3 пользователя сказали спасибо!

если помогло нажмите: Спасибо!


LexaK, Большое Вам спасибо за помощь!!!!


Ключевые слова: составной, тип, реквизита, значения

Понятие «тип реквизита» отличается от понятия «тип значения»

Конкретное значение не может быть составного типа. Одно конкретное значение может быть только одного типа данных.

Реквизит может быть как одного типа, так и составного типа. В последнем случае его тип описывается объектом «ОписаниеТипов», т.е. список возможных типов, значения которых могут храниться в этой колонке. Например, СправочникСсылка.М1, СправочникСсылка.М2, Строка, Число, ДокументСсылка.Д1.

В каждой строке (элементе, записи) содержится какое-то свое значение, но каждое из них — одного типа. Например, «СправочникСсылка.М1». Если же в ячейке колонки, имеющей составной тип, даже не выбран (не назначен) тип значения, то оно содержит значение «Неопределено» (это значение и одновременно тип). Если же тип выбран (кнопкой Т или установлен программно), то ячейка содержит пустое значение этого типа, например, пустую ссылку на элемент справочника (см. v8: Пустые ссылки), пустую строку «» или 0.

Чтобы реквизиту составного типа установить конкретный тип, достаточно присвоить ему пустое значение этого типа.

Более подробное описание работы со составными типами

Взято с itland.ru

http://itland.ru/forum//index.php?showtopic=2577

Вопрос:

Какие существуют особенности работы с составными типами данных.

Ответ

Этот вопрос имеет два стороны:

1) Сторона элемента формы.

Для элемента формы мы можем установить только ограничение на типы которые можно выбрать.

Т.е. с помощью кода:

 МассивТипов=Новый Массив();
 МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
 ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);

Мы ограничиваем возможный типы только одним «СправочникСсылка.Контрагенты».

НО это не действует на значение которое хранится в источнике данных.

Поэтому если реквизит который связан с «ПолеВвода1» имеет «составной» тип, например Любая ссылка,

он будет неопределенного типа даже после «ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);»

2) Сторона источника данных.

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

Но если у реквизита установлен «составной» тип значение реквизита будет неопределенно до тех пор, пока ему не будет присвоено значение конкретного типа.

Присвоить конкретное значение можно либо из языка, либо выбрав это значение в форме.

Из выше описанного можно сделать вывод:

Если у реквизита установлен «Составной» тип данных, то даже при ограничении возможных типов у элемента формы до одного возможного, у пользователя будет запрошен тип который нужно будет присвоить реквизиту.

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

Сделать это можно следующим образом:

//"Значение1" это реквизит связанный с "ПолеВвода1".
Значение1 = ЭлементыФормы.ПолеВвода1.ОграничениеТипа.ПривестиЗначение(Значение1);

Добавление от ezh (особенности при работе с элементами в табличном поле):

1.

Вместо этого:

ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);

Пишем это:

ЭлементыФормы.ИмяТабличнойЧасти.Колонки.ИмяКолонки.ЭлементУправления.ОграничениеТипа = Новый ОписаниеТипов(МассивТипов);

2.

Вместо этого:

Значение1 = ЭлементыФормы.ПолеВвода1.ОграничениеТипа.ПривестиЗначение(Значение1);

Пишем это:

ЭлементыФормы.ИмяТабличнойЧасти.ТекущаяСтрока.ИмяКолонки = ПривестиЗначение(ЭлементыФормы.ИмяТабличнойЧасти.ТекущаяСтрока.ИмяКолонки);

// можно так, а можно как в примере ниже...

Вот работающий пример:

 МассивТипов = Новый Массив();
 МассивТипов.Добавить(Тип("ПеречислениеСсылка."+Элемент.Значение));
 ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
 
 ЭлементыФормы.ТабличнаяЧасть1.Колонки.ЗначениеПеречисления.ЭлементУправления.ОграничениеТипа = ОписаниеТипов;
 // ЭлементыФормы.ТабличнаяЧасть1.ТекущаяСтрока.ЗначениеПеречисления = ОписаниеТипов.ПривестиЗначение(ЭлементыФормы.ТабличнаяЧасть1.ТекущаяСтрока.ЗначениеПеречисления);
 ЭлементыФормы.ТабличнаяЧасть1.Колонки.ЗначениеПеречисления.ЭлементУправления.Значение = ОписаниеТипов.ПривестиЗначение(ЭлементыФормы.ТабличнаяЧасть1.Колонки.ЗначениеПеречисления.ЭлементУправления.Значение);

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

&НаКлиенте
Процедура ОсновнаяВидПоступленияДСПриИзменении(Элемент)
    ТекСтрока = Элементы.Основная.ТекущиеДанные;
    Если ТекСтрока.ВидПоступленияДС = ПредопределенноеЗначение("Перечисление.ВидыПоступленияДС.ОплатаОтКлиента") Тогда
        ОписаниеТипов = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");
    ИначеЕсли ТекСтрока.ВидПоступленияДС = ПредопределенноеЗначение("Перечисление.ВидыПоступленияДС.ПрочиеПоступленияДС") Тогда
        ОписаниеТипов = Новый ОписаниеТипов("СправочникСсылка.СтатьиПриходаДС");
    Иначе
        ТекСтрока.Аналитика = Неопределено;
        Возврат;
    КонецЕсли;
    ТекСтрока.Аналитика = ОписаниеТипов.ПривестиЗначение(ТекСтрока.Аналитика);
КонецПроцедуры

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Мозголом

Дата регистрации: 27.02.2007
Сообщений: 145

Платформа: 1С 8.2<br>Конфигурация: 1С УТ 10.3, 1С: Розница<br> <br>Описание: на форме имеется табличная часть, у которой есть некоторый реквизит. Он составной. По умолчанию я его делаю Номенклатурой и документом Установка Цен. При работе просто выбираю необходимый мне тип и заполняю значение в каждой строке.<br> <br>Вопрос: как программно назначать тип реквизиту. нужно чтобы обработка была универсальна, а для этого нужно чтобы для УТ типы были Номенклатура и становка Цен, а для Розницы Номенклатура и Установка цен в магазине (это документ). Вот собственно вопрос: можно ли программно в зависимости от того, какая конфигурация загружена, назначать тип выбираемого реквизита в таблице?<br> <br>P.S.: Прошу в ответе не учитывать метод определения конфигурации, это моя проблема и я ее решил.

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20842

«<pre>// установим тип Справочник.Контрагенты<br>МойРеквизит = Справочники.Контрагенты.ПустаяСсылка(); <br></pre>»

Мозголом

Дата регистрации: 27.02.2007
Сообщений: 145

А если мне нужно чтобы назначалось 2 типа? справочник и документ? чтобы потом при работе уже выбирать нужный тип для каждой строки

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20842

Мозголом

Дата регистрации: 27.02.2007
Сообщений: 145

При создании обработки для реквизита я могу казать, что он составного типа, и выбрать для него типы «СправочникСсылка.Номенклатура» и «ДокументСсылка.УстановкаЦенНоменклатуры». При интерактивном вводе строки я сначала выбираю значение какого типа мне нужно добавить в таблицу, а потом выбираю уже непосредственно нужный мне элемент, исходя из типа.<br>Так вот собственно вопрос: можно ли программным способом назначать, какие типы мне можно будет выбрать при добавлении строки в таблицу?<br> <br>Можно конечно просто добавить типы «СправочникСсылка» и «ДокументСсылка», но тогда конечный пользователь может запутаться при добавлении строки. Поэтому выбор типа нужно ограничить.

Мозголом

Дата регистрации: 27.02.2007
Сообщений: 145

«А все, разгадал загадку. Вот такое решение я принял:<br> <br><br><pre>Процедура ТабличнаяЧасть1Реквизит1НачалоВыбора(Элемент, СтандартнаяОбработка) // Вставить содержимое обработчика. ТипСпр = Тип(«СправочникСсылка.Номенклатура»); ТипДок = Тип(«ДокументСсылка.УстановкаЦенНоменклатуры»); Если ТипЗнч(Элемент.Значение) <> ТипСпр И ТипЗнч(Элемент.Значение) <> ТипДок Тогда       Массив = Новый Массив;       Массив.Добавить(ТипСпр);       Массив.Добавить(ТипДок);       ОписаниеТипов = Новый ОписаниеТипов(Массив);       Элемент.ОграничениеТипа = ОписаниеТипов; КонецЕсли;КонецПроцедуры </pre><br><br> <br>ТипДок могу менять в зависимости от конфигурации и настроек обработки.<br> <br>Статья, где нашел примерный метод: http://v8.1c.ru/metod/faq/answer.jsp?id=176″

Показывать по
10
20
40
сообщений

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

&НаКлиенте
Процедура ДобавитьВалюту(Команда)
    
    ТС = Объект.ТЧ.Добавить();
    ТС.Имя = "Валюта";
    ТС.Значение = ПредопределенноеЗначение("Справочник.Валюты.ПустаяСсылка");
    Элементы.ТЧ.ПодчиненныеЭлементы.ТЧЗначение.ВыбиратьТип = Ложь;
    
КонецПроцедуры
 

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

Создаем справочник, имя произвольное. Добавляем табличную часть ТЧ, реквизиты Имя, тип Строка, Значение, тип составной. Для своего примера я установил Строка, Дата, Число, СправочникСсылка. В форме элемента добавляем реквизит ФормаТипы, тип ОписаниеТипов.

Остальное за нас сделает код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 
 //формируем массив типов и удаляем тип текущего справочника, 
 //поскольку у нас тип значения включает все справочники
 фТипы = РеквизитФормыВЗначение("Объект").Метаданные().ТабличныеЧасти.ТЧ.Реквизиты.Значение.Тип.Типы();
 фИндекс = фТипы.Найти(ТипЗнч(Объект.Ссылка));
 фТипы.Удалить(фИндекс);
 //помещаем новое описание типов в реквизит формы
 ФормаТипы = Новый ОписаниеТипов(фТипы);
 //формируем группу контекстного меню
 фГруппа = Элементы.Добавить("ГруппаДополнительно", Тип("ГруппаФормы"), Элементы.ТЧКонтекстноеМеню);
 фГруппа.Заголовок = "Добавить...";
 мТипы = ФормаТипы.Типы();
 Для сч = 0 По мТипы.ВГраница() Цикл
  
  //создаем команды формы, имена формируются с учетом индекса текущего типа в массиве типов
  //потом по этому индексу в имени будем определять необходимый тип данных
  ИндексКоманды = Формат(сч, "ЧН=0; ЧГ=0");
  фКоманда = Команды.Добавить("КомандаДобавитьТипСтроки_" + ИндексКоманды);
  фКоманда.Действие = "ДобавитьЭлементТипа";
  кЭлемент = Элементы.Добавить("ДобавитьТипСтроки_" + ИндексКоманды, Тип("КнопкаФормы"), фГруппа);
  кЭлемент.Заголовок = Строка(мТипы[сч]);
  кЭлемент.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
  кЭлемент.ИмяКоманды = фКоманда.Имя;
  
 КонецЦикла;
 
КонецПроцедуры                                     

&НаКлиенте
Процедура ДобавитьЭлементТипа(Команда)

 //определяем индекс для массива типов
 ИндексТипа = Число(СтрЗаменить(Команда.Имя, "КомандаДобавитьТипСтроки_", ""));
 сТип = ФормаТипы.Типы()[ИндексТипа];
 ТС = Объект.ТЧ.Добавить();
 ТС.Имя = Строка(сТип);
 мТипы = Новый Массив;
 мТипы.Добавить(сТип);
 //формируем новое описание типов и приводим к пустому значению этого типа
 ТипТС = Новый ОписаниеТипов(мТипы);
 ТС.Значение = ТипТС.ПривестиЗначение();
 Элементы.ТЧЗначение.ВыбиратьТип = Ложь;
 
КонецПроцедуры


&НаКлиенте
Процедура ТЧПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)

 //при добавлении через стандартную команду формы будем выбирать тип
 Элементы.ТЧЗначение.ВыбиратьТип = Истина;
 
КонецПроцедуры
 

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

Содержание

  1. Страницы
  2. пятница, 3 января 2014 г.
  3. Назначить конкретный тип элементу формы, который связан с реквизитом формы, имеющим составной тип

Тип значения — классификация значений (то есть данных) по их виду — строки, числа, даты и т.п. Тип значения — это одно из базовых понятий в любом языке программирования.

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

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

Как в языке 1С работать с типами данных и как производить преобразование типов 1С?

Значение 1С Неопределено

Неопределено – это значение 1С, которое обозначает, что значения нет. С помощью этого значения 1С можно «обнулять» переменные, в том числе для неявного вызова деструктора, например COM объектов.
Переменная1 = Новый COMОбъект(«Excel.Application»);
Переменная1 = Неопределено;

Аналогичное значение 1С NULL, которое может вернуть запрос, при попытке получить данные из базы данных, если таковые получить не удалось (точнее — значение в поле NULL означает, что поле в базе данных «не заполнено»).
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Поле1 = NULL Тогда
Продолжить;
КонецЕсли;
КонецЦикла;

Типы значений 1С

В качестве «переменных» возможно использовать:

  • Переменные, созданные в тексте программы (описанными выше способами)
  • Реквизиты объекта метаданных или формы (созданными в конфигураторе, с указанием точного типа 1С).

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

  • Выбор типа значения 1С из доступных
  • Выбор значения 1С.

По умолчанию такой реквизит имеет значение 1С Неопределено. Когда выбран тип 1С, но еще не выбрано значение 1С – пустое значение этого типа 1С (0 для числа, пустая ссылка для ссылочных типов 1С, см. ниже). И наконец потом – значение 1С. Из программы назначения значения производится напрямую, без промежуточного выбора типа 1С.

Определить тип значения 1С возможно несколькими способами:
//способ 1 – сравнение с известными типами 1С
Переменная1 = 12;
Если ТипЗнч(Переменная1) = Тип(«Число») Тогда
//…
ИначеЕсли ТипЗнч(Переменная1) = Тип(«СправочникСсылка.ИмяСправочника») Тогда
//…
КонецЕсли;

Преобразование типов 1С

Значение 1С простых типов 1С можно преобразовывать с помощью оператора — наименования типа 1С:
//в число
ЗнчЧисло = Число(«22»); //при невозможности преобразовать типы 1С будет вызвана ошибка, поэтому лучше использовать обработчик ошибок (см. далее)

//в строку
ЗнчСтрока = Строка(22);
ЗнчСтрока = СокрЛП(22);
ЗнчСтрока = Формат(22, «ЧГ=0»);

//в дату
ЗнчДата = Дата(«20120101120000»); //01.01.2012 12:00:00
ЗнчДата = Дата(2012, 01, 01, 12, 0, 0);
ЗнчДата = Дата(2012, 01, 01);

Преобразование типов 1С — значений сложных типов 1С

Форматирование значений 1С

Для точного указания формата используется функция Формат(), с помощью которой возможно указать требуемое представление.
ЧислоСтрокой = Формат(2400, «Настройки»)

В качестве строки «Настройки» нужно указать требуемый формат 1С. Такие настройки указываются в специальном закодированном виде. Рассмотрим наиболее часто используемые настройки:

Формат 1С даты и числа по правилам различных стран
Если Вам требуется вывести дату или число и не хочется заморачиваться со знанием как они должны быть представлены по правилам нужной страны, есть простейшая настройка, которая позволит Вам это сделать:
L = КраткоеНаименованиеНужнойСтраны

Пример вывода даты по правилам некоторых стран:
Формат( ТекущаяДата(), «L=ru»)
> 28.03.2012 14:21:32
Формат( ТекущаяДата(), «L=en»)
> 3/28/2012 2:21:24 PM
Формат( ТекущаяДата(), «L=fr»)
> 28/03/2012 14:22:08

Формат даты в языке 1С
Если настройки по умолчанию Вам недостаточно и хотелось бы самостоятельно указать порядок частей даты и символы их разделения, необходимо использовать настройку:
ДФ = «дмг чмс»

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

Символ части даты м. б. указан несколько раз подряд, от этого зависит вид этой части даты, например «д» или «дд» или «дддд».

Расшифровка частей даты:

  • д – день
    o маленькая «д»
    o от 1 до 4 раз
  • М – месяц
    o большая «М»
    o от 1 до 4 раз
  • г – год
    o маленькая «г»
    o 1 или 2 или 4 раз
  • ч – часы
    o маленькая «ч» — 12ти часовой формат
    o большая «Ч» — 24х часовой формат
    o 1 или 2 раза
  • м – минуты
    o маленькая «м»
    o 1 или 2 раза
  • с – секунды
    o маленькая «с»
    o 1 или 2 раза
  • вв – отображение AM/PM для 12ти часового формата
  • к – квартал.

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

Формат числа в языке 1С
В отличие от форматирование даты, где все достаточно просто, для форматирования числа есть множество вариантов параметров. Здесь рассмотрены те, которые чаще применяются.

Первая «проблема» связана с группировкой по умолчанию цифр в числах по 3 и разделением групп пробелом, например:
СтрЧисло = Строка(22300500)
> 22 300 500

Это неудобно, когда число преобразовывается к строке не для красивого и понятного вывода пользователю, а для служебных нужд. На это можно повлиять с помощью параметра «ЧГ», например:

Параметр, который позволяет округлить число при выводе до нужного количества цифр после запятой «ЧДЦ»:
Формат(3.535353, «ЧДЦ=»»2″»»)
> 3,54

Параметр, который позволяет указать символ-разделитель целой и дробной части «ЧРД»:
Формат(3.535353, «ЧРД=»».»»»)
> 3.535353

Для некоторых случаев бывает полезно иметь возможность вместо числа «0» отображать что-то другое: пустую строку или «не заполнено». Это позволяет делать параметр «ЧН»:
Формат(0, «ЧН=»» «»»)
>

Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).

Страницы

пятница, 3 января 2014 г.

Назначить конкретный тип элементу формы, который связан с реквизитом формы, имеющим составной тип

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

Если запретить выбор типа в поле ввода (свойство ВыбиратьТип), то реквизиту ОтветЛицо будет назначен тип ссылки на справочник ФизическиеЛица, и для выбора будут предлагаться значения только этого справочника.
Также можно использовать свойство поля ввода ОграничениеТипа, задающее возможные типы данных, которые могут быть введены в поле ввода, и приводить значение соответствующего реквизита к нужному типу:

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

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

Создаем справочник, имя произвольное. Добавляем табличную часть ТЧ, реквизиты Имя, тип Строка, Значение, тип составной. Для своего примера я установил Строка, Дата, Число, СправочникСсылка. В форме элемента добавляем реквизит ФормаТипы, тип ОписаниеТипов.

Остальное за нас сделает код:

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

  • Распечатать

Оцените статью:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

(0 голосов, среднее: 0 из 5)

Поделитесь с друзьями!

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