Передача переменной из модуля формы, в модуль объекта |
Я |
12.12.21 — 17:17
Здравствуйте, есть обработка, в модуле формы переменная НачДата, заполняется значением на форме, как можно передать это значение в модуль объекта?
1 — 12.12.21 — 17:19
Параметром функции, например.
2 — 12.12.21 — 17:24
(1) Гении обычно передают через справочник дор_ЗПСлужебный
3 — 12.12.21 — 17:26
(2) Тут не геня, не надо плохого…
4 — 12.12.21 — 17:35
А можно пример кода?
5 — 12.12.21 — 17:41
(0) только не в модуль объекта, а в объект:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект.ДополнительныеСвойства.Вставить(«НеобходимаяНачДата»,НачДата);
КонецПроцедуры
6 — 12.12.21 — 17:41
(5) естественно этот метод должен быть соответствующим событием формы
7 — 12.12.21 — 17:46
А без использования процедуры ПередЗаписью?
В обработке поле ввода типа Дата, вводится дата и выполняется запрос, который лежит в модуле объекта, вот туда нужно передать эту дату для фильтра запроса и всё
8 — 12.12.21 — 17:56
(7) Где хранятся данные, которые вводятся через это @поле типа Дата»? В реквизитах объекта или реквизитах формы?
9 — 12.12.21 — 18:00
Реквизит объекта
10 — 12.12.21 — 18:02
(9) > Реквизит объекта
В этом случае эта дата доступна в том же самом реквизите объекта при работе метода внутри контекста объекта.
11 — 12.12.21 — 18:10
(9) люди на пустом месте себе проблемы создают
12 — 12.12.21 — 18:28
Как это в коде написать?
13 — 12.12.21 — 19:40
(12) что это? Если это реквизит объекта, то вынеси его на форму. Всё будет сохраняться в объекте «само»
14 — 12.12.21 — 20:30
(13) ты мне уже раз в 7 помогаешь, спасибо.)
15 — 12.12.21 — 21:33
(14) Максим, а ты когда (9) писал, что в виду-то имел?
16 — 12.12.21 — 21:39
Нет, не помогло, он уже на форме, но запрос всё равно не выполняется по дате
17 — 12.12.21 — 21:41
Если указать дату строкой в модуле объекта, то всё работает, а перенести значение с формы не получается
18 — 12.12.21 — 21:46
(17) в процедуре ПередЗаписью реквизит еще не записан. Поэтому запросом не вариант.
19 — 12.12.21 — 21:50
(18) Откуда вы взяли, что это все происходит прт записи?
20 — 12.12.21 — 22:34
(19) да, ошибся. Но если как в (7), то у него вообще ничего в базу не пишется, а он пробует запросом прочитать дату из базы.
21 — 12.12.21 — 22:43
Нет, у меня на форме реквизит Дата, и кнопка, кнопка выполняет запрос который в модуле объекта, в запросе есть фильтр по дате и мне нужно передать из формы реквизит Дата в модуль объекта
22 — 12.12.21 — 23:30
(21) тогда (1)
23 — 13.12.21 — 04:36
(0)Завести реквизит объекта не предлагать?
24 — 13.12.21 — 07:54
(0), (21)
Модуль формы:
&НаСервере
Процедура МояКнопкаНаСервере()
ОбъектОбработки = РеквизитФормыВЗначение(«Объект»);
ОбъектОбработки.ВыполнитьМоюОбработку(Объект.Дата);
КонецПроцедуры
&НаКлиенте
Процедура МояКнопка(Команда)
МояКнопкаНаСервере();
КонецПроцедуры
Модуль объекта:
Процедура ВыполнитьМоюОбработку(Дата = Неопределено) Экспорт
Сообщить(Дата);
КонецПроцедуры
Это решение. Но судя по тому, что ты пишешь, это будет решением на неправильно поставленную задачу. Если ты что-то проверяешь запросом, то логичнее всего, что это должно происходить при записи, и скорее всего, в подписке на событие. Если же это проверка интерактивных действий пользователя, то вряд ли тут нужен модуль объекта вообще, и все проверки следует делать на форме.
25 — 13.12.21 — 15:45
(24) При таком раскладе параметр Дата вообще не нужен, т.к. судя Дата это реквизит объекта!
26 — 13.12.21 — 16:13
(25) Речь идёт не про модуль обработки как я пони
27 — 13.12.21 — 16:18
(26) > не про модуль обработки
Каким органом вы все читаете?
В (0) прямым текстом же указано «есть обработка, в модуле формы переменная заполняется значением на форме, как можно передать это значение в модуль объекта»
Вы вот, т-щи 1Сники, и с ТЗ же так поступаете.
28 — 13.12.21 — 16:19
(27)
не сказано какого объекта
29 — 13.12.21 — 16:22
(28) Тогда предлагаю модуль менеджера перечисления, как самый часто используемый =)
30 — 13.12.21 — 16:24
Я так понимаю ТС не может в процедуру/функцию модуля объекта параметр передать из формы? Что мешает ВашаПроцедура(НужнаяДата) использовать?
Kassern
31 — 13.12.21 — 16:25
Так же есть ДополнительныеСвойства, для этого дела, а если еще и БСП есть в конфе и речь о внешней обработке встроенной, то можно воспользоваться хранилищем настроек
Содержание
1. Задача передачи параметров 1С
2. Реализация с модулем объекта документа 1С
Иногда возникает необходимость передачи параметров 1С, установленных в определенной управляемой форме документа 1С, в модуль объекта 1С 8.3. При этом крайне нежелательно создавать отдельные реквизиты для этого документа. Поэтому в данной ситуации можно пользоваться глобальными переменными 1С. В дальнейшем они могут быть использованы в процедурах и функциях этого модуля. Если переменная определена с ключевым словом «экспорт», то она будет доступна вне данного модуля.
1. Задача передачи параметров 1С
Предположим, есть некий документ, на основной форме документа которого располагается гиперссылка в 1С, вызывающая другую форму с вводом определенных настроек. Необходимо чтобы после выбора настроек они были переданы в модуль объекта 1С 8.3 документа для последующей обработки в процедуре проведения.
2. Реализация с модулем объекта документа 1С
В самом начале модуля объекта документа 1С необходимо определить переменную, в которую будут передаваться выбранные настройки. Также необходимо ей присвоить признак «экспорт», чтобы переменная была доступна в любом месте документа.
В модуле основной формы документа в обработчике события 1С кнопки, открывающей форму с выбором настроек, необходимо указать процедуру Новый ОписаниеОповещения(). Это определяет результат после закрытия формы настроек в 1С 8.3.
В форме настроек для сохранении и передачи параметров 1С (в нашем случаи это структура) необходимо указывать процедуру ОповеститьОВыборе()
Далее нужно создать саму процедуру оповещения, в которой будем обрабатывать в результате закрытия формы настроек. В качестве приемника создаем реквизит основной формы ПараметрыПереоценки (можно создать глобальную переменную в модуле основной формы) и в нее передаем результат закрытия.
И в заключительном этапе (например, в процедуре ПередЗаписьНаСервере() передадим из реквизита формы сохраненную структуру настроек в глобальную переменную, которую определяли в модуле объекта документа.
В итоге настройки, выбранные на дочерней форме открытой из основной формы документа, теперь доступны в модуле объекта и могут быть обработаны в любой его процедуре, например, в процедуре проведения.
Разработчик 1С компании ООО “Кодерлайн”
Игорь Цебоев.
Перейти к содержимому
При необходимости передать значение из модуля формы в модуль объекта нужно в в любой предопределенной процедуре производящей запись через ДополнительныеСвойства() добавить необходимые данные
Код в модуле формы:
Затем через ДополнительныеСвойства()в модуле объекта можно обратиться к данным значениям по индексу
Код в модуле объекта:
Подобным образом можно передать данные из модуля объекта в модуль формы. Для этого необходимо так же, в предопределенной процедуре производящей запись добавить нужные значения в структуру ДополнительныеСвойства()
Код в модуле объекта:
Затем через ДополнительныеСвойства()в модуле объекта можно обратиться к данным значениям по индексу
Код в модуле формы:
1С, получить из модуля объекта элемент формы
В разработке иногда возникает следующая ситуация:
- Из модуля объекта требуется получить реквизит формы элемента;
- При этом реквизит формы элемента (который необходимо получить) не сохраняется в реквизиты объекта;
План действий для решения задачи
- Создать реквизит объекта «АдресВХ», тип строка неограниченной длины;
- В свойствах формы элемента добавим обработчик «Перед записью»:
- В обработчик добавим следующий программный код:
&НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Объект.АдресВХ = ПоместитьВоВременноеХранилище(ТабДок); КонецПроцедуры
В нашем случае во временной хранилище мы помещаем «ТабДок», данный реквизит будем получать в модуле объекта;
- Переходим в модуль объекта и создаем процедуру «Перед записью», добавляем код:
Процедура ПередЗаписью(Отказ) ТабДок = ПолучитьИзВременногоХранилища(АдресВХ); КонецПроцедуры
В результате мы передали элемент из формы в модуль объекта, хоть и добавили в дерево метаданных вспомогательный реквизит «АдресВХ»;
Связанные статьи
Adara |
|
||
---|---|---|---|
Доброго Всем!
Возникла проблема: Как передать из модуля формы внешней обработки в модуль объекта этой же обработки какое-либо значение? Добавляла в реквизиты формы (СтрокаДанных ) — не видит в модуле объекта.Более того почему-то из модуля объекта реквизит «Объект»тоже не виден О_О Может что-то не так делаю…всегда реквизиты были видны в модуле объекта, а уж основной тем более. |
Yandex |
|
||
---|---|---|---|
Mokey |
|
||
---|---|---|---|
Объявите в модуле обработки переменную на экспорт и передавайте значение через эту переменную из модуля формы в модуль объекта. |
Adara |
|
||
---|---|---|---|
Спасибо! Попробовала. Все равно АдресХранилищаПроба = «Неопределенно».Код 1C v 8.2 УП
— экспортная переменная. В модуле формы заполняю Код 1C v 8.2 УП
. В модуле объекта: Код 1C v 8.2 УП
Возможно это из-за этого: сначала заполняю переменную в модуле формы обработки, потом открываю общую форму, а уже из нее перехожу в модуль объекта моей обработки…неужели после передачи управление общей форме, все реквизиты и переменные обнуляются? П.С. Форму своей обработки не закрываю. Она открыта все время. Изменено 20.08.12 12:13:18 |
Mokey |
|
||
---|---|---|---|
ЭтотОбъект.АдресХранилищаПроба = ПоместитьВоВременноеХранилище(Объект.КомплектПечатныхФормОсновной.Выгрузить(),ЭтаФорма.УникальныйИдентификатор); |
Adara |
|
||
---|---|---|---|
|
Чтобы получить объект в модуле формы преобразовала «Объект»:Код 1C v 8.2 УП
Но даже так переменная пустая, хотя при данном коде записывается (проверенно отладчиком). *09 Изменено 21.08.12 10:41:05 |
Mokey |
|
||
---|---|---|---|
А ЭтотОбъкект нет такого реквизита из модуля формы? |
Adara |
|
||
---|---|---|---|
Нет нету…в том-то и странность — всегда было и «Объект» и «ЭтотОбъект». |
Mokey |
|
||
---|---|---|---|
В реквизитах ФОРМЫ прописать, что ЭТОТОБЪЕКТ = ВнешняяОбработка.ИмяОбработки. В принципе, не важно, как будет называться, ЭтотОбъект или ОбработкаОбъект. |
Mokey |
|
||
---|---|---|---|
Да, только это под 8.1 Изменено 22.08.12 10:16:12 |
Adara |
|
||
---|---|---|---|
Увы… 8.2 управляемое. |
Подсказка: Для быстрого поиска ответов — используйте ‘Поиск’ |
-
Как передать значение из модуля формы, в модуль объекта?
-
Судя по обсуждению в чате вопрос более широкий чем его текущая формулировка.
Уточни, плз.
— Объединение сообщений, 26 ноя 2015 —
а то см .»РеквизитФормыВЗначение»
-
Короче. У меня есть отчет на СКД. Все формируется стандартным путем. В модуле объекта есть процедура ПриКомпоновкеРезультата. Там у меня в зависимости от условий формируется определнный варинат отчета. Сейчас получилось так, что когда деалешь расшифровку, то срабатывает опять эта процедура и опять устанавливается вариант. Так вот. Хочу поставить условия, что если сейчас отчет формируется из расшифроки то не загружать вариант отчета. А если нет, то загружать. В процедуре ОбработкаРасшифровки хочу определить значений переменной. А в модуле объекта хочу его получить. Как?
-
Offline
shurikvz
Модераторы
Команда форума
Модератор- Регистрация:
- 1 окт 2009
- Сообщения:
- 8.547
- Симпатии:
- 344
- Баллы:
- 104
Почему нельзя завести в отчете реквизит и через него гонять?
-
Да не получается. Не гоняется.
— Объединение сообщений, 26 ноя 2015 —
А я походу понял почему. При расширофровке формируется новая форма. Объект то другой. Блин.
— Объединение сообщений, 26 ноя 2015 —
А как тогда быть в моем случае?
-
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтруктураНастроек = КомпоновщикНастроек.Настройки.Структура; Для Каждого ЭлементСтруктуры Из СтруктураНастроек Цикл ИмяЭлементаСтруктуры = ЭлементСтруктуры.Имя; Если ИмяЭлементаСтруктуры = "Расшифровка" Тогда // Сделать что то при расшифровке КонецЕсли; КонецЦикла; КонецПроцедуры
— Объединение сообщений, 26 ноя 2015 —
Можно зайти через доп. свойства :
Если КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ВариантНаименование = "Расшифровка" Тогда // Сделать что то при расшифровке КонецЕсли;
Последнее редактирование: 26 ноя 2015
nbIpKuH_BaH9I нравится это.
-
Не канает. Но мальца по-другому сделал. Спасибо за идею.
-
Подход в общем банальный, точка останова и смотрим, что есть в настройках компоновщика
-
Это называется выход из положения. Но такая реализация мне не нравится
-
Если поковырять все новые ЗУП, БУХ, ERP там кругом сплошной «выход из положения»
Хай всем! Суть вопроса. Мне нужно учитывать значение данных на форме при проведении документа. Вроде банальная ситуация. Но объясните мне, как учесть тот факт, чтоб НЕ обращаясь к форме выполнить перепроведение документа? К примеру стандартной обработкой или из формы списка через контекстное меню. Находил решение создавать экспортную переменную в модуле объекта, присваивать ей значение из модуля формы и использовать дальше в модуле объекта. Не подходит, потому что тогда значения моих экспортных параметров естественно не определены. Кусок кода: Здесь «ВидКомиссии» — это та же экспортная переменная, которой НЕ присваивается значение, если проведение делать НЕ из формы. «РазмерКомиссии» — дальше использую в модуле объекта, где мне нужно. Прощу помощи! P.S.: И всех с праздниками!!!)
сделай ее реквизитом объекта и всего делов
«Комиссия» и «Сумма» — это реквизиты документа. Сразу говорю, что вариант создания реквизитов — это на худой конец! Хочется узнать, есть ли решения без этого метода?
Все нужные при проведении значения должны быть в реквизитах документа.
иначе, например, при программном перепроведении ты огребешь много интересного
ты подумай о том, что документ может проводиться корректно не только из формы, а при массовом перепроведении или из формы списка, например.
А это, собственно, и есть тот ответ, который аргументирует необходимость создания реквизитов объекта для моего дела. Спасибо всем!
А потом на форуме холиварят, мол, зачем эти долбаные сертификаты от 1С, это всего лишь бумажка, получите и распишитесь!
А доп. свойства объекта не подходят?
Они заполняются стиоронне.И не факт, что при программном перепроведении будут заполненны
Я встречал о них статьи, но в сообщениях, следующих за ними также были замечания, что есть проблемы при программном перепроведении. Потому способ добавления реквизитов к объекту пока что остается самый надёжный и правильный.
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям