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

Использование переменных в программных модулях

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

Примеры некорректного использования и исключений из этого правила приведены далее. Рекомендации по оформлению переменных в коде программных модулей см. в статье Структура модуля.

2. Неоправданные примеры использования переменных в модулях объектов (справочников, документов, наборов записей, обработок, отчетов и пр.).

Перем КонвертацияФайлов Экспорт;

Если КонвертацияФайлов Тогда
.

// вызывающий код
ФайлОбъект.КонвертацияФайлов = Истина;
ФайлОбъект.Записать();

Если ДополнительныеСвойства.Свойство(«КонвертацияФайлов») Тогда
.

// вызывающий код
ФайлОбъект.ДополнительныеСвойства.Вставить(«КонвертацияФайлов», Истина);
ФайлОбъект.Записать();

В то же время, для передачи внутренних параметров между обработчиками событий модуля объекта целесообразно использовать неэкспортные переменные модуля объекта, которые недоступны из внешнего кода.
Например:

Перем ПредыдущееЗначениеОрганизации; // значение реквизита «Организация» до записи объекта в базу

Процедура ПриЗаписи(Отказ)
Если ПредыдущееЗначениеРеквизита <> Организация Тогда
// отрабатываем изменение значения реквизита при записи
.
КонецЕсли;

2.2. Для обработки кодов возврата (ошибок) в логике программного модуля рекомендуется использовать строковые константы.
Например, неправильно:

Перем НетОшибок,
Ошибка_ОбработкиПроверкиЗаполнения, // возникает, если обработка проверки заполнения вернула отказ
Ошибка_ЗаписиОбъекта, // возникает, если во время записи объекта возникло исключение
Ошибка_БлокировкиОбъекта, // возникает, при попытке блокировки объекта

НетОшибок = 1;
Ошибка_ОбработкиПроверкиЗаполнения = 2;
Ошибка_ЗаписиОбъекта = 3;
Ошибка_БлокировкиОбъекта = 4;

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

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

3. Неоправданные примеры использования переменных в модулях форм.

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

3.2. Для хранения и передачи промежуточных результатов вычислений между разными процедурами и функциями формы следует использовать

Исключение из этого правила составляют случаи использования клиентских переменных формы для хранения промежуточных результатов в обработчиках ожидания формы, в обработчиках внешних событий и в клиентских обработчиках событий элементов формы.
Например:

4. Переменные управляемого и обычного приложения следует использовать для хранения «клиентских параметров сеанса». Подробнее см. статью Использование параметров сеанса.

Источник

Базовый принцип программирования управляемой формы в 1С

Цель статьи – показать применение шаблонов Remote Facade и Data Transfer Object к структуризации кода, управляемой формы в среде 1С 8.2.

Введение

Начнем с небольшого описания понятия «управляемая форма» и связанных концепций платформы 1С. Знатоки платформы могут пропустить этот раздел.

Все дальнейшие рассуждения будут о правой части иллюстрации, о том, как структурировать код модуля и какие принципы позволят реализовать эффективное клиент-серверное взаимодействие.

Обозначим проблему

Прошло уже несколько лет как новая версия платформы 1С активно используется и выпущено множество решений (конфигураций) как фирмой 1С, так и ее многочисленными партнерами.
Сложилось ли за это время у разработчиков единое понимание принципов клиент-серверного взаимодействия при создании форм, и изменился ли подход к реализации программных модулей в новых архитектурных реалиях?

Рассмотрим структуру кода (модуль формы) в нескольких формах одной типовой конфигурации и попробуем найти закономерности.
Под структурой будем понимать секции кода (чаще всего это блоки комментариев) выделенные разработчиком для группировки методов и директивы компиляции этих методов.
Пример 1:

Зачем нужна структура кода?
Почему существующий стандарт разработки от фирмы 1С не помогает?

Шаблоны проектирования или мудрость поколений

Примеры шаблонов в платформе 1С

Прикладной программный интерфейс доступный разработчику при разработке управляемой формы, содержит много примеров данных принципов.
Например метод ОткрытьФорму(), типичный «огрубленный» интерфейс.

Сравните с принятым в v8.1 стилем.

Структурируем код

Источник

Переменные в управляемой форме

делаю в обработке управляемую форму
на форме ставлю поле для ввода удостоверения личности (применительно к УПП аналогичная форма но доработанная мной и управляемая это ФормаВводаНового из справочника КонтактныеЛицаКонтрагентов
в ней в начале модуля

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

это она ругается на последнюю строку еще до запуска каких либо процедур

Сервер, толстый клиент, внешнее соединение.

да блин.
а) нету глобальных переменных
б) в тонком клиенте не набора записей.

Меняй логику.
Нафига набор создавать заранее?

вот полный код модуля УФ:

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

(34) прежде чем создавать переменные или другуие модели данных, нужно задавать себе вопросы

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

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

сейчас у меня без комментов код выглядит так:
и проверка модуля даже говорит что один фиг переменная мНаборЗаписейДокументаУдостоверяющегоЛичность не определена уже и в последней строке :(, блин а без процедур все ок

.
(39) начал писать и увидел сообщение :)

и о чудо УФ наконец-то открылась выдав в поле формы пресловутую надпись «Ввести данные об удостоверении личности» в поле удостоверение

всем спасибо огромное буду теперь дальше сам копать :)

в модулях форм используй только переменные для клиента, т.е. с директивой &Клиент.

Если в разных серверных методах модуля формы или и серверных и клиентских нужна какая-то постоянная сущность, то для этого используют

(40) это совершенно разные методы, хоть вы их назвали одинаково, конфликта имен компилятор не дает, так как компилит одельно блок для серва и клиента

в сп пишут контесты для каждого метода или свойства, нужно просто найти денек и пройтись по дереву сп, запоминая ключевые моменты, потом еще раз и еще раз.

после трех раз простого листания сп у вас отпадут многие вопросы

Источник

1с переменные в модуле управляемой формы

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

Примеры некорректного использования и исключений из этого правила приведены далее. Рекомендации по оформлению переменных в коде программных модулей см. в статье Структура модуля.

2. Неоправданные примеры использования переменных в модулях объектов (справочников, документов, наборов записей, обработок, отчетов и пр.).

Перем КонвертацияФайлов Экспорт;

Если КонвертацияФайлов Тогда
.

// вызывающий код
ФайлОбъект.КонвертацияФайлов = Истина;
ФайлОбъект.Записать();

Если ДополнительныеСвойства.Свойство(«КонвертацияФайлов») Тогда
.

// вызывающий код
ФайлОбъект.ДополнительныеСвойства.Вставить(«КонвертацияФайлов», Истина);
ФайлОбъект.Записать();

В то же время, для передачи внутренних параметров между обработчиками событий модуля объекта целесообразно использовать неэкспортные переменные модуля объекта, которые недоступны из внешнего кода.
Например:

Перем ПредыдущееЗначениеОрганизации; // значение реквизита «Организация» до записи объекта в базу

Процедура ПриЗаписи(Отказ)
Если ПредыдущееЗначениеРеквизита <> Организация Тогда
// отрабатываем изменение значения реквизита при записи
.
КонецЕсли;

2.2. Для обработки кодов возврата (ошибок) в логике программного модуля рекомендуется использовать строковые константы.
Например, неправильно:

Перем НетОшибок,
Ошибка_ОбработкиПроверкиЗаполнения, // возникает, если обработка проверки заполнения вернула отказ
Ошибка_ЗаписиОбъекта, // возникает, если во время записи объекта возникло исключение
Ошибка_БлокировкиОбъекта, // возникает, при попытке блокировки объекта

НетОшибок = 1;
Ошибка_ОбработкиПроверкиЗаполнения = 2;
Ошибка_ЗаписиОбъекта = 3;
Ошибка_БлокировкиОбъекта = 4;

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

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

3. Неоправданные примеры использования переменных в модулях форм.

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

3.2. Для хранения и передачи промежуточных результатов вычислений между разными процедурами и функциями формы следует использовать

Исключение из этого правила составляют случаи использования клиентских переменных формы для хранения промежуточных результатов в обработчиках ожидания формы, в обработчиках внешних событий и в клиентских обработчиках событий элементов формы.
Например:

4. Переменные управляемого и обычного приложения следует использовать для хранения «клиентских параметров сеанса». Подробнее см. статью Использование параметров сеанса.

Платформа:

Конфигурация:

Помогите понять с описанием перемнных в данном случае Перем Штрих должна быть глобальной в модуле формы

: Переменная не определена (штрих)
Этаформа.Объект.инфа= >штрих; (Проверка: Тонкий клиент)
: Переменная не определена (штрих)
Сообщить ( >штрих); (Проверка: Тонкий клиент)

&НаКлиенте
Процедура Искать(Команда)

Добавьте реквизит формы нужного типа и не мучайтесь.

Надо добавить директиву &НаКлиенте непосредственно перед объявлением переменной «штрих». Иначе она объявляется на сервере. Т.е. надо написать так:

Иногда возникает необходимость передачи параметров 1С, установленных в определенной управляемой форме документа 1С, в модуль объекта 1С 8.3. При этом крайне нежелательно создавать отдельные реквизиты для этого документа. Поэтому в данной ситуации можно пользоваться глобальными переменными 1С. В дальнейшем они могут быть использованы в процедурах и функциях этого модуля. Если переменная определена с ключевым словом «экспорт», то она будет доступна вне данного модуля.

1. Задача передачи параметров 1С

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

2. Реализация с модулем объекта документа 1С

В самом начале модуля объекта документа 1С необходимо определить переменную, в которую будут передаваться выбранные настройки. Также необходимо ей присвоить признак «экспорт», чтобы переменная была доступна в любом месте документа.

1

В модуле основной формы документа в обработчике события 1С кнопки, открывающей форму с выбором настроек, необходимо указать процедуру Новый ОписаниеОповещения(). Это определяет результат после закрытия формы настроек в 1С 8.3.

2

В форме настроек для сохранении и передачи параметров 1С (в нашем случаи это структура) необходимо указывать процедуру ОповеститьОВыборе()

3

Далее нужно создать саму процедуру оповещения, в которой будем обрабатывать в результате закрытия формы настроек. В качестве приемника создаем реквизит основной формы ПараметрыПереоценки (можно создать глобальную переменную в модуле основной формы) и в нее передаем результат закрытия.

4

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

5

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

Источник

Переменные в 1С 8.2 и 8.3

category Программирование системы clock24.08.2018 08:06 eye28262

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

Локальные переменные

Локальные переменные определяются внутри процедур или функций. Перед ними необязательно писать ключевое слово «Перем». Область доступности таких переменных ограничена границами своей процедуры или функции. То есть, к такой переменной нельзя обратиться в другой процедуре или функции или из глобального контекста.

Глобальные переменные

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

Экспортные переменные

Глобальную переменную можно сделать экспортной, указав ключевое слово «Экспорт». Например, если экспортная переменная создаётся в модуле объекта справочника, то к ней можно обратиться через объект этого справочника, СправочникОбъект.ИмяПеременной.

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Источник

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