Как обратиться к функции 1с
Есть прога 1С:Предприятие 8.3 (8.3.20.1674), она работает как в толстом на обычных формах, так и в тонком (На УФ). Есть обработка(НЕ внешняя) которая пока работала только в толстом. Моя задача создать УФ, аналогичную Обычной. Форму создала, проблем нет. Но в модуле этой формы (УФ), на сервере ,не видит функции из модуля объекта этой обработки. Вот код:
В модуле объекта:
#Если Сервер Тогда
Процедура Печать() Экспорт
#КонецЕсли
В Модуле формы
&НаСервере
Обработки.ПечатьЦенниковЭтикеток.Создать().Печать();(Печать() он видит, выбирать здесь дает, по F12 тоже переходит в эту функцию, но при запуске ругается «Метод объекта не обнаружен»)
Подскажите как обратиться к функции в модуле объекта из модуля формы (УФ Тонкий клиент)?
Как обратиться к функции 1с
Функции 1С и процедуры в 1С работают аналогично другим языкам — функция это именованная подпрограмма для вызова из других мест программного кода.
Далее подробнее про функции 1С и процедуры 1С.
Порядок объявления функций в модуле произвольный (то есть можно в тексте процедуры, расположенной в самом начале модуля использовать процедуры, текст которых будет расположен ниже в этом модуле). Аналогично переменным 1С, функции 1С могут быть экспортными.
Чтобы «выйти» из выполнения функции 1С и процедуры — используют команду «Возврат;». Функция (в отличии от процедуры) «возвращает» результат вычислений, то есть необходимо написать «Возврат ЗНАЧЕНИЕ;». Функции 1С не типизированы, значит могут возвращать значение разных типов, в зависимости от параметров или условий.
Функция отличается от процедуры возможностью вернуть результат вычислений, например:
Функция Функция1(Параметр)
Возврат Параметр * 2;
КонецФункции
Переменная1 = Функция1(10);
//Переменная1 будет равна 20
Параметры функции 1С и процедуры — это ссылки на переменные, существующие в месте вызова. «Ссылка» — значит при изменении значения параметра «внутри» функции 1С, он будет изменен и «снаружи». Чтобы такого не происходило — параметр передают со значением ПЕРЕМ. Однако это не работает со значениями-объектами (списками, таблицами, объектами базы данных), они все-равно будут переданы по ссылке.
При передаче параметра в процедуру/функцию, он передается «по ссылке». Это значит, что изменяя его внутри процедуры, Вы изменяете его значение, при доступе после окончания функции 1С. Таким образом, предыдущий пример можно написать так:
Процедура Процедура1(Параметр)
Параметр = Параметр * 2;
КонецПроцедуры
Переменная1 = 10;
Процедура1(Переменная1);
Сообщить(Переменная1);
//Результатом будет 20
Чтобы передать внутрь процедуры значение переменной, а не ее саму:
Процедура Процедура1(ЗНАЧ Параметр)
//действия..
КонецПроцедуры
При работе с объектами (справочники, документы) необходимо помнить, что внутри функции 1С/процедуры 1С над ними могут быть выполнены действия.
Если у функции 1С/процедуры 1С несколько параметров, то ненужный можно пропустить (указав запятую, если пропущен параметр в середине), при этом будет передано или Неопределено (см. ниже) или значение по-умолчанию:
Функция Функция1(Параметр1, Параметр2, Параметр3 = «Строковое значение»)
//Чтото делаем
КонецФункции
//Вызов функции без некоторых параметров
//параметр2 будет равен Неопределено
//параметр3 будет равен «Строковое значение»
Функция1(10);
//Вызов функции без второго параметра
Функция1(10, , «Значение»);
Как уже говорилось ранее, процедуры 1С используются в качестве обработчиков событий, возникающих при работе пользователя с формой (открытие, закрытие, нажатие кнопок и т.п.) или работе платформы (старт, завершение и т.п.). Возможные виды обработчиков формы или ее элементов можно увидеть в свойствах — щелкнув мышью на соответствующий элемент формы (и прокрутив окно свойств вниз). Виды обработчиков в модуле объекта можно увидеть с помощью выпадающего списка на панели в конфигураторе — где отображается список еще неопределенных и уже определенных событий. У разных событий различные параметры, при добавлении обработчика 1С автоматически прописывает список параметров.
В модуле формы, объекта располагаются обработчики событий. Обработчик можно добавить (назначить) следующими способами:
Только зарегистрированные пользователи VIP группы могут видеть этот контент.
Проголосовать за этот пост:
1С функции и процедуры
Работа функций и процедур 1С аналогична прочим языкам. Функцией принято называть именную подпрограмму, посредством которой программный код вызывается из других источников.
Объявляются функции в модуле в произвольном порядке. То есть имеется возможность использования в тексте процедуры не в порядке очередности, а находящейся в конкретном модуле существенно ниже. Как и в случае с переменными 1С, доступно экспортирование функции 1С.
С помощью команды «Возврат;» осуществляется «выход» из выполняемой функции и процедуры 1С.
Функцией (и в этом заключается ее отличие от процедуры), выполняется «возврат» полученного результата вычислений, если будет написано «Возврат ЗНАЧЕНИЕ;».
Типизация функции 1С отсутствует, а потому возможно возвращение значения различных типов. Зависит это от параметров либо условий.
Возвращение функцией результата вычислений
Возврат Параметр * 2;
//Переменная1 будет равна 20
Параметры функции 1С и процедуры являются ссылками на переменные, присутствующие в месте вызова. Они подразумевают, что, если изменится параметр в «теле» функции1С, то аналогичное действие произойдет и «снаружи». Чтобы это исключить, передача параметра осуществляется со значением ПЕРЕМ.
Но когда речь идет о значениях-объектах (объекты базы данных, таблицы, списки), эта схема не работает, и их передача будет выполняться по ссылке. А это означает, что в результате изменения параметра внутри процедуры, происходит его изменение после завершения функции 1С.
Изменение параметра функции внутри процедуры
Параметр = Параметр * 2;
//Результатом будет 20
Передача в процедуру значения переменной
Процедура Процедура1(ЗНАЧ Параметр)
Работая с объектами (документами, справочниками), нельзя забывать о возможности выполнения действий внутри функции/процедуры 1С. В том случае, когда функция 1С/процедура 1С имеет несколько параметров, то ненужные могут быть пропущены (указывается запятая или пропускается номер в середине).
Действия внутри функции, процедуры
Функция Функция1(Параметр1, Параметр2, Параметр3 = “Строковое значение”)
//Вызов функции без некоторых параметров
//параметр2 будет равен Неопределено
//параметр3 будет равен “Строковое значение”
//Вызов функции без второго параметра
Выше по тексту уже говорилось, об использовании процедур 1С для обработки событий, которые возникают если пользователь работает с формой:
- нажимает кнопки;
- открывает, закрывает форму;
- прочие подобные действия.
Или платформой:
- осуществляет запуск;
- закрывает;
- прочие подобные действия.
Чтобы получить доступ к просмотру возможных видов обработчиков или элементов формы, достаточно перейти в свойства. Для этого достаточно выполнить клик клавишей мыши, наведя курсор на нужный элемент формы, прокручивая вниз окно свойств.
На панели конфигуратора имеется всплывающий список с видами обработчиков в модуле объекта. В нем отображены все события, как уже определенных, как и неопределенных.
Разные события имеют различные характеристики, а потому, когда добавляется обработчик 1С, происходит автоматическое переписывание списка параметров.
Для размещения обработчиков событий используется модуль формы объекта. Для добавления (назначения) обработчика можно использовать несколько соответствующих способов.
Как обратиться к функции 1с
В обработчике события ПриОткрытии() в модуле документа надо получить значение константы. На клиенте — естественно через серверную функцию
&НаСервере
Функция ПолучитьЗначениеКонстанты(ИмяКонстанты)
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Объект.Ссылка.Пустая() Тогда
Если ПолучитьЗначениеКонстанты(«ЗапрашиватьТипТранзакцииПриОткрытииДокумента») Тогда
Все бы ничего. Решил перенести функцию получения константы в общий модуль. В свойствах общего модуля стоят оба флажка «Клиент (Управляемое приложение)» и «Сервер».
Исправил в ПриОткрытии()
Если ОбщегоНазначения.ПолучитьЗначениеКонстанты(«ЗапрашиватьТипТранзакцииПриОткрытииДокумента») Тогда
Начал ругаться «Метод объекта не обнаружен».
Работает только вот в таком виде
&НаСервере
Функция ПолучитьЗначениеКонстанты(ИмяКонстанты)
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Объект.Ссылка.Пустая() Тогда
Если ПолучитьЗначениеКонстанты(«ЗапрашиватьТипТранзакцииПриОткрытииДокумента») Тогда
Внимание вопрос: как можно вызвать функцию в общем модуле напрямую?
Или только через «перевалочную» функцию в модуле формы?
