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

АйТиБложик

Маленький IT блог с характером 1С.

Задание типа значения для реквизита с типом СписокЗначений в управляемых формах

В управляемых формах невозможно задать тип значения для реквизита, который имеет тип СписокЗначений, хотя в обычных формах такая возможность есть. Если реквизит с типом СписокЗначений является реквизитом формы, то здесь особых сложностей нету, достаточно в обработчике события формы ПриСозданииНаСервере написать код по установке типа для значения списка:

ТипыСписка = «Строка»;
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;

Как видно из примера, тип значения устанавливается через свойство списка значений ТипЗначения, которое имеет тип ОписаниеТипов.

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

5
1. Реквизит ТЧ с типом СписокЗначений

Для этого напишем код по установке типа значения в обработчике события элемента формы НачалоВыбора:

Процедура РеквизитыТаблицыСписокДоступныхЗначенийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

ТипыСписка = «Строка»;
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
Элемент.Родитель.ТекущиеДанные.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;

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

ТипыСписка = Массив;
ТипыСписка.Добавить(Тип(«Строка»));
ТипыСписка.Добавить(Тип(«Число»));
ДоступныеТипы = Новый ОписаниеТипов(ТипыСписка);
ЭтаФорма.РеквизитСписокЗначений.ТипЗначения = ДоступныеТипы;

Источник

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

ДокументСсылка.ПлатежныйОрдерСписаниеДенежныхСредств, ДокументСсылка.ПередачаОС, ДокументСсылка.АвансовыйОтчет, ДокументСсылка.ГТДИмпорт, ДокументСсылка.ПлатежноеПоручениеИсходящее, ДокументСсылка.ДокументРасчетовСКонтрагентом, ДокументСсылка.ПлатежныйОрдерПоступлениеДенежныхСредств, ДокументСсылка.РасходныйКассовыйОрдер, ДокументСсылка.АктОбОказанииПроизводственныхУслуг, ДокументСсылка.ПоступлениеНМА, ДокументСсылка.КорректировкаДолга, ДокументСсылка.ПоступлениеТоваровУслуг, ДокументСсылка.ВозвратТоваровОтПокупателя, ДокументСсылка.СчетНаОплатуПокупателю, ДокументСсылка.ПередачаТоваров, ДокументСсылка.ПлатежноеПоручениеВходящее, ДокументСсылка.ОтчетКомиссионераОПродажах, ДокументСсылка.ОтчетКомитентуОПродажах, ДокументСсылка.ПередачаНМА, ДокументСсылка.ПриходныйКассовыйОрдер, ДокументСсылка.ПоступлениеИзПереработки, ДокументСсылка.РеализацияУслугПоПереработке, ДокументСсылка.РеализацияТоваровУслуг, ДокументСсылка.ВозвратТоваровПоставщику, ДокументСсылка.СчетНаОплатуПоставщика, ДокументСсылка.ПоступлениеДопРасходов

Создаю программно документ

НалНакСозд=Документы.НалоговаяНакладная.СоздатьДокумент();
НалНакСозд.Дата = ПеремДат;
НалНакСозд.Организация = ОргИмя;
НалНакСозд.Контрагент = СтрТабВыб.ИмяКонтр;
НалНакСозд.Комментарий = «Документ создан автоматически»;
НалНакСозд.Сделка = ДокВыб;
.
НалНакСозд.Записать();

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

Переменная ДокВыб имеет тип «ДокументСсылка.ДокументРасчетовСКонтрагентом»

Знаю что надо как то программно присвоить тип для реквизита Сделки «ДокументСсылка.ДокументРасчетовСКонтрагентом», но не пойму как. Если кто то знает, подскажите, пожалуйста. Заранее спасибо.

Источник

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

empty

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.
Вместо этого:

Источник

[Шпаргалка] Предустановка типа для составного реквизита

Добрый день, Коллеги!

Задача

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

Пример

Есть реквизит «Водитель», составной тип: СправочникСсылка.Пользователи, СправочникСсылка.ФизическиеЛица, СправочникСсылка.Сотрудники и Строка. Необходимо реализовать диалог выбора из списка типов с ограничением до двух: СправочникСсылка.Сотрудники и Строка.

Тестовый стенд

Конфигурация 1C:ERP 2.4.6.230

Конфигурация 1C:ERP 2.4.11.56

Решение

Реквизит формы «ВыборТипа» (тип: Булево) – хранит состояние вызова диалога выбора типа.

Реквизит формы «Водитель» содержит составной типа, описанный в примере, для его элемента формы «Водитель» необходимо установить свойство «КнопкаОчистки» в состояние «Истина» и определим события: НачалоВыбора и Очистка.

1dde41f107973a5a924ee55cd60e6322

Результат

58e62b50a312d62784ea670585787d15

Резюме

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

e2a0ac3a83abb68b477701b183268e46

Специальные предложения

f71a8c4e70c0ff03708038e2b0210df8

9c2808762ec294cd4c55532520b9c521

895fb1e0f7afc3c0ed0d73bf5ee9d9d0

egais promo

b34b292ed32e9501f98cc31df406353e

789363929b9f37ddc5641a069a5fe52e

5b19cd6c4494a88b2abefce64a1b7565

199e2be4fd21dd8f4209d8ec34616c76

Но даже такую примитивную задачу автор решил кривовато. Можно было проще и изящнее.

(2) Одна тыща рублей и оно ваше)

Хотя если чисто теоретически. Во-первых, не забывайте в явном виде делать Поле=ОписТипа.ПривестиЗначение(), потому что Элементы.Поле.ОграничениеТипа это далеко не всё, у вас там может быть нетипизированная или неверно типизированная пустота, или мусор от предыдущего типа, и в работе формы выйдет лажа. Во-вторых, в значения списка выбора проще сразу пихать сами типы, а не числовые коды.

Могу ещё накидать замечаний, но недосуг.

Обновление 30.09.21 03:37

e391aca28d6cd9dd823719e0f4ae6a6c

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020 4316 Eugen-S 23

Полезные примеры СКД, ч.2

Еще несколько примеров решения задач в СКД.

06.04.2021 10479 Neti 8

Обзор полезных методов БСП 3.1.4

25.03.2021 39424 rayastar 51

Звуковое управление в 1С 8.3

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

16.03.2021 7084 velemir 33

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016 85514 Serginio 115

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions

28.12.2020 8787 comol 31

Форма выбора (подбор) в управляемых формах

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020 76327 user5300 19

Программная работа с настройками СКД

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020 64729 ids79 26

Использование программных перечислений, ч.1: строковые константы Промо

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016 41046 unichkin 74

[СКД] Программное создание схемы компоновки данных

Сделаем отчет на СКД полностью программно, без использования макета «схема компоновки данных».

15.01.2020 43204 John_d 22

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019 34889 kuzyara 38

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

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

07.10.2019 39480 HostHost 41

Вспомогательные инструкции в коде 1С Промо

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018 36033 tormozit 106

Таблица значений. Нюансы

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019 52580 Yashazz 56

[Шпаргалка] Программное создание элементов формы

Программное создание практически всех популярных элементов формы.

06.09.2019 100810 rpgshnik 75

Агрегатные функции СКД, о которых мало кто знает

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019 76955 ids79 56

Оформление и рефакторинг сложных логических выражений Промо

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

20.09.2012 82768 tormozit 131

Регистры бухгалтерии. Общая информация

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019 46177 YPermitin 25

Три костыля. Сказ про фокусы в коде

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019 30125 YPermitin 81

Отслеживание выполнения фонового задания

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

17.08.2019 44940 ids79 22

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

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

11.07.2007 54288 tormozit 51

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019 150276 ids79 75

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

02.08.2019 60123 avalakh 26

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019 104510 ids79 17

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017 51075 tormozit 74

Обработчики событий при записи объектов. Зачем и что за чем?

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта. Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019 110413 AlbinaAAA 48

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «<…>», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

Источник

Программное приведение типа значения поля ввода и колонки табличного поля формы 1С8

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

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

14ebcd9ef5d8a2b136f130c0b3fae784

Если требуется использовать элемент справочника Номенклатура, но в разных конфигурациях этот объект метаданных может называться по-разному, например Товары или же Номенклатура, то программное определение наименования типа при открытии формы упростит жизнь пользователю.

Следовательно, настроим автоматический выбор и первичное преобразование полей на форме к типу значения Справочник.Номенклатура, если такой есть в метаданных конфигурации. В противном случае, выбираем в качестве начального значения первый в списке имён справочников.

Для примера разработана управляемая форма и форма в обычном режиме (см. скриншоты публикации).

Обычный режим

Ниже приведен алгоритм на языке 1С8 для формы в обычном режиме. На форме есть поле список ВыбранныйТип, для которого настроено событие ПриИзменении. В поле ВыбранныйТип пользователь выбирает тип, который желает использовать для преобразования полей. При открытии формы считываем список справочников из метаданных конфигурации. Ищем справочник Номенклатура в списке, далее инициализируем на форме поле ВыбранныйТип полученным списком имён и найденным значением. Запускаем событие ВыбранныйТипПриИзменении, для преобразования типа полей ввода. В переменную модуля формы СтрокаТипЗнч сохраним полное имя выбранного типа для использования в других процедурах.

Далее необходимо выполнить преобразование типа значения колонки табличного поля. Для этого воспользуемся событием НачалоВыбора.

0df44f6f62d13bfbf8da5804cb6b6023

Код преобразования приведен ниже. В нём используется ранее инициализированная переменная СтрокаТипЗнч для получения имени выбранного типа. Алгоритм можно найти в справке по ключевому слову ПривестиЗначение.

Новый тип назначается полям динамически после каждого выбора значения в списке ВыбранныйТип.

Управляемые формы

Для управляемых форм алгоритм изменяется незначительно. Для преобразования используется свойство ОграничениеТипа. Работа с метаданными только на сервере. Для быстрого доступа к колонке табличного поля при срабатывании события НачалоВыбора сохраним в переменной на клиенте СсылкаЭлементКолонкаТП ссылку с адресом элемента.

Рассмотренный пример алгоритма можно протестировать, скачав обработку по ссылке из публикации. Работа выполнялась на 1С:Предприятие 8.3 (8.3.15.1747), с использованием конфигураций «Управление торговлей», редакция 10.3 (10.3.46.3), Управление торговлей, редакция 11 (11.4.7.150). В составе обработки одновременно присутствует управляемая форма и форма обычного режима.

Спасибо за внимание! Критика приветствуется.

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с программно создать элементы формы
  • 1с программно создать документ и открыть его форму