как в модуле объекта обратиться к реквизиту формы
Шаблон кода: Как в 1С обратиться к элементу формы
ОБЫЧНЫЕ ФОРМЫ
Для того чтобы обратиться к элементу формы из модуля объекта этой формы и передать значение в переменную:
Шаблон кода:
мМойДокумент = ЭтотОбъект.Ссылка.ПолучитьФорму(«ФормаДокумента»); // получаем форму документа
НашаПеременная = мМойДокумент.ЭлементыФормы.Дата.Значение; // передаем значение переменной
Для того чтобы обратиться к элементу формы из модуля формы документа:
Шаблон кода:
УПРАВЛЯЕМЫЕ ФОРМЫ
Для того чтобы обратиться к элементу формы из модуля формы документа:
Для того чтобы программно установить значение поля в табличной части документа в :
В данном случае при изменении поля ТекущаяДата происходит автозаполнение поля ОстатокОплаченыхДней.
Процедура ТабличнаяЧасть1ПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТекущаяДата = Формат (ТекущаяДата (), «ДФ=dd.MM.yyyy» );
Если НоваяСтрока И Не Копирование Тогда
Элемент.ТекущиеДанные.ТекущаяДата = ТекущаяДата;
Элемент.ТекущиеДанные.Комментарий = «наш комментарий»;
КонецЕсли;
КонецПроцедуры
Для того чтобы записать какие-то данные в поле управляемой формы нужно создать прямо на форме элемент (реквизит создавать не нужно), например, поле ввода и прописать для него, например, результат функции в модуле формы:
Процедура ПриОткрытии(Отказ)
Реквизит1 = ПодсчетИтогаКассы();
КонецПроцедуры
Получение значения реквизита формы из модуля объекта
При записи справочника, срабатывает процедура ПередЗаписью() модуля объекта справочника.
В ней вызываются процедуры, делающие запросы по табличной части справочника, выявляя там необходимое значение.
то есть в ЭтотОбъект
но нет тут Ссылка.РолиКонтактногоЛица в ссылка. Тут имеется значение что было записано. То есть тут не видны текущие значения элементов формы, что пользователь правит интерактивно и ещё не записал.
(0+) ЭтотОбъект не подойдет конечно, если только ЭтотОбъект.Ссылка
>> возможно стоит начать делать это же в модуле формы.
>> нет тут Ссылка.РолиКонтактногоЛица в ссылка.
(4) При открытии формы справочника, нужно что бы отрабатывали проверки на измененные значения в модуле объекта.
Пользователь открыл справочник, поменял значение в табличной части и записывает. А в коде, по заданным условиям, отрабатывает старое значение.
Так как берется все из ссылки. В ней видимо только уже записанные значения.
Я так понял что нужно делать это в модуле формы, ещё одну проверку. что бы отлавливать эти измененные элементы. то есть нужное значение которое есть в табличной части формы, но ещё не записано.
Иначе как это делать в модуле объекта не ясно, как в (3) может, как предлагают
(7) Вы забыли задачу описать. Вы описываете тот бред, который уже есть в Вашей голове. А он никому не интересен. В ответ получите только сообщения, что это бред.
Опишите конкретно задачу.
(10) Задача такая, у справочника контактная информация есть разные роли.
Если роль мастер, то проверок нет и срабатывает возврат.
И вот вопрос встал такой, открывает пользователь контактное лицо, у него в роле стоит юзер, он ставит мастер, а проверка все равно срабатывает.
Так как в процедуру идут данные объекта с юзером, а мастер в элементах формы только. Вот и встал вопрос как правильно поправить это в общем модуле общего назначения сервер.
Или по другому как то делать.
вопрос в текущем элементе, что ели его открываете, там стоит юзер, ставите мастер, а при записи, читается что юзер и не срабатывает, вот в чем вопрос то
я так понял что как вариант делать проверку в модуле формы, где доступны элементы формы
(16) Да, по условию что такой емайл уже введен. Поиск по емайлу идет. Все там нормально. ТОлько вот с старое и новое значение, загвоздка возникла.
(18) Согласен, возможно, многое придется переделывать. Но я вчера это увидел в первые. По этому пытаюсь разобраться как нужно.
1. Если у записываемого контактного лица ЕСТЬ мастер, роль, то проверок нет. Возврат.
Возможно это как то придется править.
2. Если мастера нет, то есть работает дальше проверка, проверяется, есть ли данный емайл у уже введенных контактных лиц.
Исключая из выборки, сам данный элемент.
Вот как.
Я не знаю на сколько это все правильно сделано. Уже выявлено при записи, проблемы со старое. новое значение.
Модуль объекта в 1С 8.3
Модуль объекта
Модуль объекта есть почти у всех основных прикладных объектов конфигурации в 1С.
У справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, планов обмена, бизнес-процессов и задач он называется Модуль объекта. У константы — Модуль менеджера значения. У последовательностей, регистров сведений, регистров накопления, регистров бухгалтерии, регистров расчета и перерасчетов — Модуль набора записей.
Чтобы открыть модуль объекта нужно в окне свойств объекта на закладке «Прочее» нажать кнопку «Модуль объекта»
Также модуль объекта можно открыть из контекстного меню объекта:
Или из меню Действия:
Модуль объекта выполняется при создании объекта. В нем можно объявлять переменные модуля. Экспортные процедуры и функции можно вызывать у созданных программных объектов. К экспортным переменным можно обращаться как к свойствам программных объектов. В модуле есть прямой доступ к реквизитам и табличным частям объекта.
Вызов методов модуля объекта
Для примера создадим в конфигурации справочник «Номенклатура» с реквизитом «Артикул» и табличной частью «Остатки». У табличной части будет 2 реквизита: «Склад» и «Остаток»:
В модуле объекта напишем следующий код:
Теперь создадим обработку с одной формой и в модуле обработки в событии ПриСозданииНаСервере напишем следующий код:
Здесь мы сначала создаем новый программный объект справочника Номенклатура вызвав встроенный метод Справочники.Номенклатура.СоздатьЭлемент(). Потом через ссылку на этот объект обращаемся к экспортным переменной и функции объекта.
Сохраним конфигурацию базы данных и откроем нашу обработку в пользовательском режиме. Событие формы ПриСозданииНаСервере выполняется при открытии формы в итоге в сообщениях мы увидим число 300. То есть через ссылку на программный объект мы можем обращаться к экспортным переменным и функция модуля объекта. Но значения переменных не сохраняются в базе данных. Как только объект будет удален из памяти все значения экспортных переменных будут потеряны.
Теперь поменяем код в модуле формы обработки на следующий:
Здесь мы делаем все то же самое, но обращаемся к не экспортным переменной и функции.
При открытии формы возникнет ошибка «Поле объекта не обнаружено ПолноеНаименование»:
Так как переменная ПолноеНаименование не является экспортной, то к ней нет доступа из других модулей.
Теперь попробуем обратиться к не экспортной функции модуля объекта. Вставим в модуль формы следующий код и откроем обработку:
Выйдет ошибка «Метод объекта не обнаружен ПолноеНаименованиеНоменклатуры»:
Теперь вставим в форму обработки такой код и откроем обработку:
Здесь мы вызываем экспорную процедуру модуля объекта, а потом встроенным методом Записать записываем объект в базу данных.
В результате в базе данных будет создан новый элемент, у которого заполнен артикул и добавлены 2 строки в табличную часть:
В методе ЗаполнитьРеквизиты() мы обращались напрямую к реквизитам объекта, после чего записали его методом Записать(). Значения реквизитов сохранились в базе данных.
Обработчики событий
В модуле объекта есть множество различных обработчиков событий, которые вызываются в определенные моменты времени. Чтобы увидеть все события нужно нажать на кнопку «Процедуру и функции» в панели инструментов:
В результате откроется список возможных событий:
Если выделить какое-то событие и нажать кнопку «Перейти» или просто щелкнуть по нему два раза левой кнопкой мыши, то в модуле объекта будет создана процедура для обработки данного события.
Рассмотрим основные события модуля объекта:
Для примера создадим в модуле объекта 3 обработчика события и вставим в них следующий код:
Как получить доступ к реквизитам формы?
Этот цикл позволяет просмотреть имена а так же типы всех реквизитов формы, в том числе такие реквизиты как надписи, командные панели и тд.
Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.
Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:
Как получить значение отдельного реквизита формы?
Чаще требуется получать не массив реквизитов формы, а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.
Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.
Как получить значение элементов табличной части формы?
Доступ к табличной части формы через объект
Доступ к табличной части формы (например: Товары) можно получить через объект:
Доступ к табличной части формы через ЭлементыФормы
Для того, чтобы код работал правильно, надо чтобы колонка формы табчасти объекта в свойстве данные ссылалась на реквизит табличной части объекта. Этим определяется тип колонки таб части формы.
То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы :
Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.
Результат для документа Авансовый отчет:
Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки
Результат для документа Авансовый отчет:
Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174
Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.
Обращение к ревизитам формы внешней обработки из модуля этой внешней обработки.
Только не кидайтесь тапками))
Вообще вылетело из головы (давно этого не делала) как мне обратиться к реквизитам формы из модуля внешней обработки?)
(21) Все оказалось намного проще)
Нужно было сделать так:
Спасибо Вам огромное, что не остались безучастными к моей проблеме и помогали на протяжении всего времени!)
Если о модуле объекта говоришь, то там никаких реквизитов формы и быть не может. Туда все параметрами надо передавать
(2) Да, я говорю о модуле объекта (внешней обработки). И в этом модуле нужно получить реквизиты формы.
Пример можете привести?
а в модуле объекта, там процедура Процедура ЗагрузкаДанных(ПереносимыеДокументы) Экспорт
(4) В процедуре (1) я, так сказать, вызываю процедуру (2). То есть в процедуре (1) я могу передать в качестве параметров реквизиты формы??
Не реквизиты формы, а значения реквизитов формы. Да, конечно
З.Ы.
я так понимаю, они отчасти итак у вас туда передаются. Имя файла там, база..
(7) Спасибо за исправление моей корявой формулировки))
Вот так, по идее, должно быть?
(10)
т.е.
ДопПараметры = Новый Структура(«ВремяЗавершенияСпящегоСеанса,ВремяЗасыпанияПассивногоСеанса»,Объект.ВремяЗавершения,Объект.ВремяЗасыпания);
далее
еще одну строку
МассивПараметров.Добавить(ДопПараметры);
и в процедуре
Процедура МассоваяНастройкаПараметровИБ(База,ВремяЗавершенияСпящегоСеанса,ВремяЗасыпанияПассивногоСеанса,ВремяОжиданияБлокировкиДанных,МинимальнаяДлинаПаролейПользователей,ПроверкаСложностиПаролейПользователей,ДопПараметры) Экспорт









