1С передача параметра по значению
Содержание
Существует несколько вариантов передачи данных между формами в режиме обычного приложения 1С предприятия
Список способов
- Непосредственная запись в реквизиты формы
- Оповещение формы
- Оповещение владельца формы (о выборе, о записи)
- Оповещение подчиненным формам (об активизации строки, объекта)
- Оповещение об изменении
- Через объекты посредники (справочники, регистры сведений, файлы)
Механизм работы в первом случае:
- получается объект типа «Форма», например через метод Справочники.Контрагенты.ПолучитьФорму () или ЭтаФорма.Владелец (если форма является подчиненной и владелец задан)
- запись в известные заранее реквизиты формы
Форма не дает средств для перебора доступных реквизитов. Поэтому в момент записи в отсутствующий реквизит возможна ошибка, например, в случае, если формой владельцем оказалась форма отличная от ожидаемой. Тип передаваемого значения определяется доступным типом реквизита, т.е. если тип реквизита «ссылка на справочник», то передать строку не получится, либо необходимо использовать другой реквизит. Если проблем с типами нет (в частности через тип строки без ограничения длины, возможно передать любые типы данных воспользовавшись ЗначениеВСтрокуВнутр()) то между формами Владелец-Подчиненная форма возможен двухсторонний обмен.
Метод Оповестить() второго способа
Является самым универсальным для обмена, поскольку предоставляет возможности:
- Передавать сообщение всем созданным и открытым формам («широковещательное» оповещение) с подключенным событием ОбработкаОповещения
- Передавать данные условно произвольного типа
- Позволяет идентифицировать получателя и источника, но не ограничивает по ним
- Работает и в формах управляемого приложения
Обмен через объекты-посредники:
- Требует наличия объекта, доступа к нему
- Не вызывает события изменения как и в первом случае
- Требует периодического считывания данных для проверки
- Позволяет передавать известные заранее типы значений
Используется, например, при организации чатов, оповещениях пользователей об обновлениях
Остальные методы:
ОповеститьОбАктивизации, ОповеститьОбАктивизацииОбъекта, ОповеститьОбИзменении, ОповеститьОВыборе, ОповеститьОЗаписиНового, ОповеститьОЗаписиНовогоОбъекта являются узкоспециализированными и односторонними (владельцу формы, подчиненным формам)
24.21. Процедуры и функции «1С»
Действия, заданные в диалоге, оформляются в модуле как процедуры. Процедурой является некоторый отдельный алгоритм, имеющий имя — имя процедуры. Процедура оформляется строкой начала процедуры и строкой конца процедуры .
Процедура МояПроцедура()
<Тело процедуры>
КонецПроцедуры
Между этими строками располагается тело процедуры — алгоритм, описывающий действия, которые процедура будет выполнять. В процедуре можно определить список передаваемых параметров, значения которым передаются при вызове процедуры и используются в теле процедуры. По умолчанию параметру процедуры всегда передается ссылка на значение. Для передачи самого значения используется ключевое слово Знач.
Пример 24.2. Передача параметров по ссылке
Процедура Моя (а) а = 12; КонецПроцедуры Процедура А1(а) а=10; б = а ; Моя (б); КонецПроцедуры
В конце процедуры А1 переменная «б» равна 12, потому что и переменная «б», и параметр процедуры Моя «а» идентифицируют один и тот же адрес.
Пример 24.3. Передача параметров по значению
Процедура Моя (а) а=12; КонецПроцедуры Процедура А1(а) а=10; б = а; Моя (Знач б); КонецПроцедуры
В конце процедуры А1 переменная «б» равна 10 , потому что при вызове процедуры Моя передавалась не ссылка, а значение.
Функция отличается тем, что возвращает значение, используя, оператор «Возврат».
Пример 24.4. Функция в 1С
Функция МояФункция() Возврат Авс; КонецФункции КонецПроцедуры
В языке также определено предварительное описание процедур и функций с помощью ключевого слова Далее.
Если нужно по кнопке на произвольной форме запустить отчет с параметрами (отбором) написанный на СКД, можно сделать как показано далее. Создадим простой отчет — продажи по номенклатурным группам (Конфигурация 1С Бухгалтерия 3.0). Запрос отчета:
ВЫБРАТЬ
РеализацияУслугОбороты.НоменклатурнаяГруппа,
РеализацияУслугОбороты.СуммаОборот
ИЗ
РегистрНакопления.РеализацияУслуг.Обороты КАК РеализацияУслугОбороты
Настройки отчета в СКД:
Обратим внимание на форму отчета, в верхней части размещен отбор ФИКСИРОВАННЫХ НАСТРОЕК, обратите на это внимание.
Отчет надо поместить в конфигурацию. Допустим, есть обработка и надо вывеси отчет с отбором по номенклатурной группе, в обработке создаем команду и в клиентском обработчике пишем код:
ОтборОтчета = новый Структура(«НоменклатурнаяГруппа», Ссылка_НоменклатурнаяГруппа);
ПараметрыОтчета = Новый Структура(«СформироватьПриОткрытии, Отбор», истина, ОтборОтчета);
ОткрытьФорму(«Отчет.ПродажиПоНоменклатурнымГруппам.Форма», ПараметрыОтчета);
В переменной «Ссылка_НоменклатурнаяГруппа» указана номенклатурная группа по которой делается отбор. В результате, получим такой вид сформированного отчета: