1с экспортная процедура в модуле формы

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

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

image001

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

Выполним контекстный серверный вызов. На сервере преобразуем основной реквизит формы в прикладной объект, выполним экспортируемую функцию этого объекта и преобразуем объект обратно в основной реквизит формы.

image002

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

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

Контекстная серверная функция ПересчитатьЦеныНаСервере() будет выглядеть следующим образом:

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

Источник

v8. Выполнить процедуру из формы документа, вызвав её из модуля документа

snfr1c 12.11.2010 14:51
Прочитано: 31100
00
snfr1c 12.11.2010 14:51
Прочитано: 31100
00
Здравствуйте!
Подскажите, как выполнить процедуру или функцию из формы документа, вызвав её из модуля этого же документа?
Процедура в форме, например ПриИзмененииКонтрагента() Экспорт
при попытке выполнения ЭтотОбъект.ПриИзмененииКонтрагента() выдаётся ошибка «Метод не обнаружен»
Yandex
Возможно, вас также заинтересует
rekl150103
snfr1c 12.11.2010 15:18
Ответ № 1
00
Поясню. Обратится можно
Согласно 1С: «Можно ли обращаться к переменным, процедурам и функциям модуля снаружи объекта?

В 1С:Предприятии 8 любая переменная, процедура и функция модуля объекта (документа, справочника, обработки, формы и т.д.) может быть объявлена как экспортируемая. Для этого достаточно в ее объявлении указать слово Экспорт.

Например:
Код 1C v 8.х
После этого к таким переменным, процедурам и функциям можно обращаться так же, как и к системным свойствам и методам объектов.

Источник

Вызов процедуры модуля формы

Здравствуйте. Заранее спасибо. Программно создается новый документ
НовДок = Документы. СоздатьДокумент();
.
НовДок.Записать(РежимЗаписиДокументов.Проведение);

И вот здесь необходимо вызвать процедуру модуля формы этого документа. Можно ли это сделать вообще?

Если стоит формекс, то можно поступить вот так:

оСистема = СоздатьОбъект(«Система»);
Д = СоздатьОбъект(«Документ.ГТД»);
Пока Запрос.Группировка(1) = 1 Цикл
Д.НайтиДокумент(Запрос.ГТД);
ОткрытьФорму(Д.ТекущийДокумент(), Конт,0);
Конт.СуммаПеревозка = 0;
Сп = СоздатьОбъект(«СписокЗначений»);
Сп.ДобавитьЗначение(2);
Сервис.ВыполнитьПроцедуру(Конт, «ИзмСуммаУслуг», Сп);
оСистема.StartBatch(Конт);
Конт.Провести();
оСистема.EndBatch(Конт);
оСистема.ЗакрытьФорму(Конт);
КонецЦикла;

Если стоит формекс, то можно поступить вот так:

оСистема = СоздатьОбъект(«Система»);
Д = СоздатьОбъект(«Документ.ГТД»);
Пока Запрос.Группировка(1) = 1 Цикл
Д.НайтиДокумент(Запрос.ГТД);
ОткрытьФорму(Д.ТекущийДокумент(), Конт,0);
Конт.СуммаПеревозка = 0;
Сп = СоздатьОбъект(«СписокЗначений»);
Сп.ДобавитьЗначение(2);
Сервис.ВыполнитьПроцедуру(Конт, «ИзмСуммаУслуг», Сп);
оСистема.StartBatch(Конт);
Конт.Провести();
оСистема.EndBatch(Конт);
оСистема.ЗакрытьФорму(Конт);
КонецЦикла;

попробуйте после записи документа:

Однако, можно поступить как описано в (10) и (14), главное чтобы в самой процедуре не было обращения к элементам формы и т.п.

(15) главное чтобы в самой процедуре не было обращения к элементам формы и т.п.

интерес продолжился :), и я засунул код по созданию документа в обработку:

В документе в модуле формы пишу:

В итоге, выполняя обработку, получаю сообщения:

Номер из документа:000000007
Дата из документа: 20.01.2012 20:27:16
Дата из обработки: 20.01.2012 20:27:16

Источник

Модуль объекта в 1С 8.3

reklama http

Модуль объекта

Модуль объекта есть почти у всех основных прикладных объектов конфигурации в 1С.

У справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, планов обмена, бизнес-процессов и задач он называется Модуль объекта. У константы — Модуль менеджера значения. У последовательностей, регистров сведений, регистров накопления, регистров бухгалтерии, регистров расчета и перерасчетов — Модуль набора записей.

Чтобы открыть модуль объекта нужно в окне свойств объекта на закладке «Прочее» нажать кнопку «Модуль объекта»

%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C %D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0 1

Также модуль объекта можно открыть из контекстного меню объекта:

modul objekta

Или из меню Действия:

modul objekta 1

Модуль объекта выполняется при создании объекта. В нем можно объявлять переменные модуля. Экспортные процедуры и функции можно вызывать у созданных программных объектов. К экспортным переменным можно обращаться как к свойствам программных объектов. В модуле есть прямой доступ к реквизитам и табличным частям объекта.

Вызов методов модуля объекта

Для примера создадим в конфигурации справочник «Номенклатура» с реквизитом «Артикул» и табличной частью «Остатки». У табличной части будет 2 реквизита: «Склад» и «Остаток»:

%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA 5

В модуле объекта напишем следующий код:

Теперь создадим обработку с одной формой и в модуле обработки в событии ПриСозданииНаСервере напишем следующий код:

Здесь мы сначала создаем новый программный объект справочника Номенклатура вызвав встроенный метод Справочники.Номенклатура.СоздатьЭлемент(). Потом через ссылку на этот объект обращаемся к экспортным переменной и функции объекта.

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

Теперь поменяем код в модуле формы обработки на следующий:

Здесь мы делаем все то же самое, но обращаемся к не экспортным переменной и функции.

При открытии формы возникнет ошибка «Поле объекта не обнаружено ПолноеНаименование»:

%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA 7

Так как переменная ПолноеНаименование не является экспортной, то к ней нет доступа из других модулей.

Теперь попробуем обратиться к не экспортной функции модуля объекта. Вставим в модуль формы следующий код и откроем обработку:

Выйдет ошибка «Метод объекта не обнаружен ПолноеНаименованиеНоменклатуры»:

%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA 6

Теперь вставим в форму обработки такой код и откроем обработку:

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

В результате в базе данных будет создан новый элемент, у которого заполнен артикул и добавлены 2 строки в табличную часть:

%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA 8

В методе ЗаполнитьРеквизиты() мы обращались напрямую к реквизитам объекта, после чего записали его методом Записать(). Значения реквизитов сохранились в базе данных.

Обработчики событий

В модуле объекта есть множество различных обработчиков событий, которые вызываются в определенные моменты времени. Чтобы увидеть все события нужно нажать на кнопку «Процедуру и функции» в панели инструментов:

%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C %D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0 2

В результате откроется список возможных событий:

%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C %D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0 3

Если выделить какое-то событие и нажать кнопку «Перейти» или просто щелкнуть по нему два раза левой кнопкой мыши, то в модуле объекта будет создана процедура для обработки данного события.

Рассмотрим основные события модуля объекта:

Для примера создадим в модуле объекта 3 обработчика события и вставим в них следующий код:

Источник

Как в Модуле Формы вызвать процедуру из Модуля Объекта?

(17)
2. Модуль менеджера объекта предназначен для размещения «статической» функциональности, которая логически неразрывно связана с объектом метаданных, но не зависит от состояния конкретного экземпляра объекта данных. Это могут быть процедуры и функции:

относящиеся не к одному, а сразу к некоторой совокупности объектов. Например, это функции для вывода на печать списка объектов; функции, возвращающие информацию, общую для всех экземпляров объекта метаданных; процедуры обновления данных информационной базы, которые связаны с объектом метаданных; и т.п.
которые работают с объектом, записанным в ИБ. В таких функциях входным параметром является ссылка на объект. Например, это функции для получения печатной формы по ссылке на объект, процедуры формирования движений по ссылке на объект и т.п.

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

(26) так учись, читая буквари. где сначала учат про упр. приложение и обычное

метод научного тыка удлиняет путь в понимании 1с. это уже не 7.7

(46) Смотрел. И ни в одной из них не видел методов работающих с одним экземпляром объекта. Просто общих процедур тоже не заметил, все относятся именно к этому. эм. Хотел написать «классу», но у нас же не ООП. К этому виду объектов.
Все экспортные процедуры модуля менеджера так или иначе относятся к расширении функционала менеджера объектов этого вида.

Само название этого модуля в терминологии 1с вам ни о чем не говорит, нет? Может у вас есть примеры, где используется не так, как я описываю?

(47) видимо уже исходный посыл потерялся.
> Есть процедура [skip].
> Ее необходимо вызвать в определенный момент из модуля формы.

С чего сделан такой вывод? Как следует из приведенной цитаты, что из модуля формы объекта нельзя использовать процедуры из модуля менеджера?

2. какие типовые смотрели, какие документы? нигде не вызываются процедуры модуля менеджера?

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

Т.е. в прынцыпе-ООП, такие функции должны размещаться в модуле объекта. Но в 1С оптимальнее делать через модуль менеджера, что есть, конечно, чистой воды утинная типизация. Можно начать с того, что коллекция на форме может тупо не содержать всех полей настоящего объекта.

(32), (34)
А если не булево, то в условии будет проверка на пустое значение:

здесь отсутствует проверка на Неопределено и на Null. То есть дополнительно всякой херней придется заниматься.

проверяет только, было присваивание в истину или не было, что и нужно в 95% случаев. То есть программе по барабану, Док.Флаг = Неопределено или Ложь. Тогда применяем этот вариант.

В модуле ОБЪЕКТА должны быть только те процедуры, которые использует ОБЪЕКТ. В управляемой форме у вас объекта нет.

empty

(60) Ясно. Замер производительности стало быть вы не проводили.

> В модуле ОБЪЕКТА должны быть только те процедуры, которые использует ОБЪЕКТ.
Ну так и размещайте эти методы в модуле объекта, а не используйте модуль менеджера как его замену ПАТАМУШТА ЗЛЫЕ АДИНЭСНИКИ ПЕРДЕЛАЛИ ВСЕ НИ ДАЮТ МИНЕ ИСПОЛЬЗОВАТЬ АБЪЕКТ БЕЗ ДАПАЛНИТЕЛЬНЫХ СТРОЧЕК.

Как думаешь что быстрее?
Defender aka LINN прав использовать метод (8) нужно в крайнем случае, когда дешевле преобразовать Форма-Объект, чем извращаться с процедурами в менеджере объекта, например, когда требуется возможность сложного преобразования объекта из разных мест конфигурации, но и тут вопрос, возможно, лучше разместить данную процедуру/функцию в общем модуле.

(66) Это оптимизаторство уровня получения внутреннего значения функцией ЗначениеВСтрокуВнутр() а работа с этой билебердой. Это нарушение методики работы с объектами, нарушении логики приложения.
Я веду к тому, что возможные затраты на вызов преобразования не стоят того, чтобы нарушать логику работы и парадигму программирования.
Я, конечно, не знаю про какую конкретно задачу Вы спрашивали своего собеседуемого, возможно в том конкретном случае Вы были правы.

Ви таки разработчик платформы? Признайте уже.

Источник

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