Как программно назначить тип реквизиту?
ДокументСсылка.ПлатежныйОрдерСписаниеДенежныхСредств, ДокументСсылка.ПередачаОС, ДокументСсылка.АвансовыйОтчет, ДокументСсылка.ГТДИмпорт, ДокументСсылка.ПлатежноеПоручениеИсходящее, ДокументСсылка.ДокументРасчетовСКонтрагентом, ДокументСсылка.ПлатежныйОрдерПоступлениеДенежныхСредств, ДокументСсылка.РасходныйКассовыйОрдер, ДокументСсылка.АктОбОказанииПроизводственныхУслуг, ДокументСсылка.ПоступлениеНМА, ДокументСсылка.КорректировкаДолга, ДокументСсылка.ПоступлениеТоваровУслуг, ДокументСсылка.ВозвратТоваровОтПокупателя, ДокументСсылка.СчетНаОплатуПокупателю, ДокументСсылка.ПередачаТоваров, ДокументСсылка.ПлатежноеПоручениеВходящее, ДокументСсылка.ОтчетКомиссионераОПродажах, ДокументСсылка.ОтчетКомитентуОПродажах, ДокументСсылка.ПередачаНМА, ДокументСсылка.ПриходныйКассовыйОрдер, ДокументСсылка.ПоступлениеИзПереработки, ДокументСсылка.РеализацияУслугПоПереработке, ДокументСсылка.РеализацияТоваровУслуг, ДокументСсылка.ВозвратТоваровПоставщику, ДокументСсылка.СчетНаОплатуПоставщика, ДокументСсылка.ПоступлениеДопРасходов
Создаю программно документ
НалНакСозд=Документы.НалоговаяНакладная.СоздатьДокумент();
НалНакСозд.Дата = ПеремДат;
НалНакСозд.Организация = ОргИмя;
НалНакСозд.Контрагент = СтрТабВыб.ИмяКонтр;
НалНакСозд.Комментарий = «Документ создан автоматически»;
НалНакСозд.Сделка = ДокВыб;
.
НалНакСозд.Записать();
После чего документ нормально создается, но с не заполненным реквизитом Сделка.
Смотрю отладчиком как до ходит до НалНакСозд.Сделка вычисляю выражение смотрю на тип определился как неопределенный. Думаю поэтому и не присвоилась переменная ДокВыб реквизиту Сделка.
Переменная ДокВыб имеет тип «ДокументСсылка.ДокументРасчетовСКонтрагентом»
Знаю что надо как то программно присвоить тип для реквизита Сделки «ДокументСсылка.ДокументРасчетовСКонтрагентом», но не пойму как. Если кто то знает, подскажите, пожалуйста. Заранее спасибо.
Как установить тип для реквизита «произвольного» типа
Надеюсь кому поможет
А как бы назначить тип полю формы произвольного типа для УФ?
Метода Значение там нет.
Вообще не могу толком сделать что то типа отбора в СКД.
Есть ТЧ у справочника, там есть счет, некое поле (реквизит по которому фильтр), условие (это сз типа В списке), а потом поле формы типа произвольный в каждой строке в представлении этой ТЧ. Так вот при выборе «в списке» нужно как то сделать это поле списком значений с ограниченным типом справочников на выбор. Иначе если условие Равно, то просто это поле ТЧ пусть будет типом самого типа реквизита для выбора одного элемента.
Так вот назначить тип не получается. А потом еще как то это хранить в БД нужно.
2(1): только после вот такой вот установики типа реквизита, при нажатии кнопки «Очистить» пользователю прийдется выбирать тип реквизита из специального списка.
Правильно делать надо так, если это реквизит формы:
ОписаниеТипа = Новый ОписаниеТипов(«СправочникСсылка.Организации»);
ЭлементыФормы.Организация.ОграничениеТипа = ОписаниеТипа;
ЭлементыФормы.Организация.Значение = ОписаниеТипа.ПривестиЗначение();
ЭлементыФормы.ВыбиратьТип = Ложь; //это на всякий случай
вот тогда при очистке значения реквизита не будет необходимости заново выбирать тип реквизита
(6): спасибо за подробный пример, но в итоге тип значения остается по прежнему строковым, при том что ОписаниеТипа установилось как надо (((
Плюс ко всему в поле ввода ничего не получается вести кнопка выбора срабатывает впустую, вручную ни одного символа не получается ввести.
приведите еще пример пожалуйста.
(8) сработало частично, установилось значение элемента фирмы, но по прежнему не допускает открыть форму списка справочника для перевыбора.
присваивал как пустую ссылку, так и конкретное значение. Перебрал много вариантов:
1.
Фирма=Справочники.Фирмы.найтипокоду(«00000001»).Ссылка;
ЭлементыФормы.фирма.Значение = Фирма;
2.
Фирма=Справочники.Фирмы.найтипокоду(«00000001»);
ЭлементыФормы.фирма.Значение = Фирма;
.
Реквизиты Доступность и Только Просмотр проверял.
но доступа к списку справочника почему то нет (((
навреное потому, что тип значения поля ввода на самой форме продолжает оставаться строковым.
АйТиБложик
Маленький IT блог с характером 1С.
Задание типа значения для реквизита с типом СписокЗначений в управляемых формах
В управляемых формах невозможно задать тип значения для реквизита, который имеет тип СписокЗначений, хотя в обычных формах такая возможность есть. Если реквизит с типом СписокЗначений является реквизитом формы, то здесь особых сложностей нету, достаточно в обработчике события формы ПриСозданииНаСервере написать код по установке типа для значения списка:
ТипыСписка = «Строка»;
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
Как видно из примера, тип значения устанавливается через свойство списка значений ТипЗначения, которое имеет тип ОписаниеТипов.
Другое дело, когда форма содержит таблицу значений, у которой имеется реквизит с типом СписокЗначений. В такой ситуации через обработчики событий формы к этому реквизиту не достучаться, поэтому нужно использовать обработчики событий элемента формы, связанного с данным реквизитом.
1. Реквизит ТЧ с типом СписокЗначений |
Для этого напишем код по установке типа значения в обработчике события элемента формы НачалоВыбора:
Процедура РеквизитыТаблицыСписокДоступныхЗначенийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ТипыСписка = «Строка»;
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
Элемент.Родитель.ТекущиеДанные.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
Что бы для типа значения задать составной тип, необходимо в конструктор объекта ОписаниеТипов передать первым параметром массив типов:
ТипыСписка = Массив;
ТипыСписка.Добавить(Тип(«Строка»));
ТипыСписка.Добавить(Тип(«Число»));
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;
1с назначить тип реквизиту формы
v8: Тип реквизита и тип значения
Разница между этими понятиями | Автор статьи: Волшебник | Редакторы: Rovan, acsent Последняя редакция №5 от 11.08.06 | История URL: http://kb.mista.ru/article.php?id=74 |
Ключевые слова: составной, тип, реквизита, значения
Понятие «тип реквизита» отличается от понятия «тип значения»
Конкретное значение не может быть составного типа. Одно конкретное значение может быть только одного типа данных.
Реквизит может быть как одного типа, так и составного типа. В последнем случае его тип описывается объектом «ОписаниеТипов», т.е. список возможных типов, значения которых могут храниться в этой колонке. Например, СправочникСсылка.М1, СправочникСсылка.М2, Строка, Число, ДокументСсылка.Д1.
Чтобы реквизиту составного типа установить конкретный тип, достаточно присвоить ему пустое значение этого типа.
Более подробное описание работы со составными типами
Взято с itland.ru
http://itland.ru/forum//index.php?showtopic=2577
Вопрос:
Какие существуют особенности работы с составными типами данных.
Ответ
Этот вопрос имеет два стороны:
1) Сторона элемента формы.
Для элемента формы мы можем установить только ограничение на типы которые можно выбрать.
Т.е. с помощью кода:
Мы ограничиваем возможный типы только одним «СправочникСсылка.Контрагенты».
НО это не действует на значение которое хранится в источнике данных.
Поэтому если реквизит который связан с «ПолеВвода1» имеет «составной» тип, например Любая ссылка,
он будет неопределенного типа даже после «ЭлементыФормы.ПолеВвода1.ОграничениеТипа=Новый ОписаниеТипов(МассивТипов);»
2) Сторона источника данных.
Здесь ограничение на тип накладывается либо в конфигураторе, либо в момент создания этого элемента из языка.
Но если у реквизита установлен «составной» тип значение реквизита будет неопределенно до тех пор, пока ему не будет присвоено значение конкретного типа.
Присвоить конкретное значение можно либо из языка, либо выбрав это значение в форме.
Из выше описанного можно сделать вывод:
Если у реквизита установлен «Составной» тип данных, то даже при ограничении возможных типов у элемента формы до одного возможного, у пользователя будет запрошен тип который нужно будет присвоить реквизиту.
Если мы хотим оградить пользователя от лишних движений, т.е. выбора единственно возможного типа, нам нужно предварительно установить тип реквизита.
Сделать это можно следующим образом:
Добавление от ezh (особенности при работе с элементами в табличном поле):
1.
Вместо этого:
Программное приведение типа значения поля ввода и колонки табличного поля формы 1С8
При создании формы возникает вопрос настройки типа значения поля ввода. Не всегда заранее точно известен используемый тип, поскольку это может зависеть от метаданных конфигурации и условий использования.
Если, как минимум, известно, что в поле потребуется вводить и использовать элемент Справочника или Документ, то можно настроить тип на общий вид значения, например СправочникСсылка или ДокументСсылка. Далее решить вопрос программно при открытии формы, для уточнения используемого типа.
Если требуется использовать элемент справочника Номенклатура, но в разных конфигурациях этот объект метаданных может называться по-разному, например Товары или же Номенклатура, то программное определение наименования типа при открытии формы упростит жизнь пользователю.
Следовательно, настроим автоматический выбор и первичное преобразование полей на форме к типу значения Справочник.Номенклатура, если такой есть в метаданных конфигурации. В противном случае, выбираем в качестве начального значения первый в списке имён справочников.
Для примера разработана управляемая форма и форма в обычном режиме (см. скриншоты публикации).
Обычный режим
Ниже приведен алгоритм на языке 1С8 для формы в обычном режиме. На форме есть поле список ВыбранныйТип, для которого настроено событие ПриИзменении. В поле ВыбранныйТип пользователь выбирает тип, который желает использовать для преобразования полей. При открытии формы считываем список справочников из метаданных конфигурации. Ищем справочник Номенклатура в списке, далее инициализируем на форме поле ВыбранныйТип полученным списком имён и найденным значением. Запускаем событие ВыбранныйТипПриИзменении, для преобразования типа полей ввода. В переменную модуля формы СтрокаТипЗнч сохраним полное имя выбранного типа для использования в других процедурах.
Далее необходимо выполнить преобразование типа значения колонки табличного поля. Для этого воспользуемся событием НачалоВыбора.
Код преобразования приведен ниже. В нём используется ранее инициализированная переменная СтрокаТипЗнч для получения имени выбранного типа. Алгоритм можно найти в справке по ключевому слову ПривестиЗначение.
Новый тип назначается полям динамически после каждого выбора значения в списке ВыбранныйТип.
Управляемые формы
Для управляемых форм алгоритм изменяется незначительно. Для преобразования используется свойство ОграничениеТипа. Работа с метаданными только на сервере. Для быстрого доступа к колонке табличного поля при срабатывании события НачалоВыбора сохраним в переменной на клиенте СсылкаЭлементКолонкаТП ссылку с адресом элемента.
Рассмотренный пример алгоритма можно протестировать, скачав обработку по ссылке из публикации. Работа выполнялась на 1С:Предприятие 8.3 (8.3.15.1747), с использованием конфигураций «Управление торговлей», редакция 10.3 (10.3.46.3), Управление торговлей, редакция 11 (11.4.7.150). В составе обработки одновременно присутствует управляемая форма и форма обычного режима.
Спасибо за внимание! Критика приветствуется.