Откладка модулей, переменные и параметры сеанса в 1С (8 из 100 дней)
Откладка в модулях
Откладка - это этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки
Точка останова - это точка прерывания, наткнувшись на которую, программа остановится и передаст управление в конфигуратор, где разработчик сможет посмотреть значение любой переменной
- Чтобы установить точку останова, нужно выбрать строку, где надо прервать выполнение и нажать на клавиатуре "F9" или дважды щелкнуть мышкой на серое поле
- Перед установкой точки программный код должен быть сохранен
- Точка останова отображается в виде красного круга:
- Установив точку, нужно вызывать соответствующее событие в режиме откладки
- Когда 1С остановится в точке, желтой стрелкой будет подсвечена та строка, которая ещё не выполнена:
Разработчик может пошагово выполнить программный код и посмотреть, как меняется значение в переменных.
Чтобы пошагово выполнить код, нужно использовать:
- Клавишу "F10" - перейти к следующей строке текущего алгоритма
- Клавишу "F11" - в этом случае 1С попытается зайти во вложенный алгоритм (подпрограмму)
- При помощи специальных кнопок в конфигураторе
Просмотр значений переменных
Чтобы посмотреть значение в переменной, когда выполнение программы остановлено в режиме откладки, надо выделить переменную и нажать сочетание клавиш "Shift+F9" или выбрать соответствующий пункт в контекстном меню.
1. В открывшемся окне будет видно текущее значение переменной
2. Для динамического отслеживания переменной можно поместить её в табло
3. В конфигураторе откроется дополнительная панель, в которой можно наблюдать значение переменной
Процесс откладки - это один из важнейших этапов при разработке программного обеспечения.
Если программный код работает не так, как вы ожидаете, выполните откладку и разберитесь, какие строки кода выполняются и что попадает в переменные модуля.
Давайте рассмотрим на примере:
1. Поставим точки останова в модуле формы нашем документе
2. Запустим платформу в режиме откладке и попробуем воспользоваться нашем модулем - увидим, что ход выполнения программы остановился и указывает в конфигураторе, где конкретно она остановилась.
3. Теперь шагнем на пару шагов вперед, через "F10" и увидим, что результат вычислился в конечном итоге
Теперь давайте проследим в динамике за "показателем":
1. Запустим откладку, перейдем внутрь функции и выберем следующий пункт "Вычислить выражение"
2. В открытом окне выберем "Включить в табло", чтобы отслеживать значение динамически
3. Шагнем на несколько строк вперед до "Возврат показатель" и увидим, что у нас определился тип и значение параметра
4. Завершая ход выполнения программы, увидим наш ответ на платформе
Переменные и параметры сеанса
Переменная - это некая переменная величина, которая в данный момент неизвестна. Вместо неё в формулу может быть подставлено нечто, и формула будет правильной.
Примеры "переменной":
"Именованный контейнер" для значения
Такая запись "МояПеременная" называется "Присваивание", а само символ "=" - оператор присваивания.
Мы можем использовать эту же переменную для объявления других переменных, например:
То как мы воспользовались переменной называется "Неявным" объявлением переменных, однако есть объявление переменных явно:
Давайте разберемся на практике:
1. Создадим новую обработку "ОбработкаПеременной", а также зададим ровно одну команду "СозданиеПеременной"
2. Пропишем три переменные с разным типом объявления
- Объявление через "Перем" и через "Неопределено" выполняет одну и ту же функцию, но объявление "Перем" требует, что она всегда находилась в НАЧАЛЕ модуля.
Простейшим аналогом в реальной жизни может быть заметка в блокноте:
Важно:
- При присваивании нового значения в переменную старое значение исчезает
- Одна переменная может хранить только одно значение
Посмотрим на практике:
1. Пропишем следующий код и поставим точку остановки в начало процедуры, чтобы проследить ход изменения программы
2. Пройдем несколько шагов и увидим, что значение приобрели следующее
3. Пройдя ещё несколько шагов, увидим что случилось переобъявление переменных
И это показывает, что переменная может хранить только одно значение, а старое стирается, когда объявляют его заново.
Теперь рассмотрим, как можно менять значения переменных местами:
1. Объявим наши переменные
2. Создадим переменную "Временная" и присвоим ей "МояПеременная1", а для "МояПеременная1" присвоим "МояПеременная2" и сделать это наоборот соответственно
3. Увидим, как изменились значения
Именование переменных
Имя переменной - формально любая непрерывная последовательность из букв, цифр и подчеркивания, не начинающая с цифры.
- Регистр букв (прописные или строчные) и алфавит (латиница или кириллица) не имеют значения
- Программе все равно, как вы назовете переменную
- Существуют рекомендации в самой фирме 1С, они являются стандартами разработки
Называть переменные нужно:
1. С большой буквы, избегать подчеркивания и излишние сокращения
2. Называть переменные на том языке, на котором вы пишите код модулей
3. Должны полно и точно описывать её значение в терминах предметной области
Для более быстрой разработки используйте "ctrl + backspace (пробел)"
Область видимости
Каждая переменная имеет имя, и это имя несет какой-то значение.
Существует определенная "популярность" имен. Например, переменная "Сумма" довольно часто может использоваться в финансовой программе во многих местах
Переменная "Сумма" может использоваться для разных смыслов и разных сумм:
- Сумма зарплаты
- Сумма по счету
- Сумма НДС
ВАЖНО:
Область видимости - это зона, граница, в которой имя переменной считается одним и тем же контейнером значения.
Существует 3 области видимости:
1. Глобальный контекст
2. Контекст модуля
3. Контекст метода
- Большинство переменных существуют и доступны только в той области кода, где созданы
Значение переменной "ТекстСообщения" недоступно вне обработчика события "ПриНачалеРаботыСистемы" и не существует после завершения обработчика.
- Не стоит объявлять переменные вдали от места их первого использования. Это ухудшает читаемость кода и приводит к ошибкам.
- Созданные объекты не нужно специально уничтожать. Платформа сама следит за тем, чтобы ненужные переменные не занимали память, и уничтожает их
Ключевое слово "Экспорт"
Существует возможность "расширить" область видимости для того или иного имени.
Если нужно, чтобы переменная была видна за пределами модуля, её нужно пометить словом "Экспорт".
Это сделает её доступной извне модуля.
Давайте на примере рассмотрим область видимости переменных:
1. Создадим в нашей обработке ещё две новые команды "ОбластьВидимости1" и "ОбластьВидимости2", а также пропишем следующий код, установив две точки остановки
2. Проследим ход работы увидим два разных значения при выполнении двух обработчиков, что говорит нам о том, что переменная "Сумма" находится только в области видимости конкретного обработчика.
Попробуем расширить область определения:
1. Создадим в форме реквизит "Сумма", который будет работать глобально в рамках этого модуля
2. Попробуем запустить обработчик и проследим, что изначально сумма уже объявлена, как число со значением "0". Пока мы будем проходить наши обработки, то сумма будет записывать/перезаписывать в себя результат работы и запоминать его.
Чтобы объявлять переменные, процедуры, функции и многое другое глобально - нужно прописывать в конце всего "Экспорт"
Модуль сеанса и параметры сеанса
Сеанс - это один конкретный вход пользователя в систему
В 1С это важное понятие
Например:
- Если пользователь с одного компьютера откроет пять окон 1С и каждое будет открыто под его учетными данными, все равно будет пять сеансов
Все взаимодействия, права доступа, сообщения и режимы работы системы определяются в рамках конкретного сеанса - конкретного открытого окна.
- Сеанс начинается в момент входа в система, сразу после ввода пароля
- Сеанс начинается на сервере, и в момент начала сеанса мы можем вмешаться в процесс и определить какие-либо настройки нового сеанса
Параметры сеанса нужны, чтобы отличать один сеанс от другого на сервере 1С, также их применяются для хранения параметров работы пользователя.
Важно
Параметр сеанса - это способ сохранить какое-либо значение на время работы сеанса пользователя, переменная на сервере, характеризующая сеанс.
Примеры параметра сеанса:
- Текущий пользователь
- Тип запущенного приложения: мобильное приложение, веб-клиент, тонкий клиент
- Операционная система
- Настройки
Параметры сеанса добавляются в дереве метаданных, в ветке "Общие".
Для каждого параметра сеанса надо назначить тип данных, который будет храниться в этом параметре
- Обычно начальные значения параметров сеанса устанавливают в модуле сеанса
- Модуль сеанса вызывает первым при начале работы пользователя с системой. В момент открытия клиентского окна уже можно обращаться к сеансовым параметрам
Директивы препроцессора
Препроцессор означает "Предобработчик":
1. Препроцессор вырезает из кода программы те или иные конструкции
2. Получившийся текст отдается программе для выполнения
3. Внутри вырезаемого блока может быть любой текст, даже тот, который не является синтаксически корректной программой
Инструкции препроцессора позволяют разметить код так, чтобы исключить его выполнение в недопустимом контексте.
- Параметров сеанса должно быть немного, а их изменение - происходить как можно реже.
Давайте рассмотрим работу параметра сеанса на практике:
1. Создадим "параметр сеанса" с именем "ВидКлиента" с длинной "25" и пропишем следующий код в модуле сеанса:
2. Соберем протип кода в "модуле приложения" с помощью директив препроцессора, так как модуль приложения выполняется на стороне клиентского сервера, а модуль сеанса на стороне сервере, нам понадобится общий модуль для сервера
3. Создадим общий модуль "ПараметрыСеансаСервер" и пропишем следующий код
4. Для работы с сервером создадим общий модуль "ПараметрыСеансаВызовСервера" и пропишем следующий код, который несет в себе интерфейсные процедуры (Выполняют лишь вызов этих функций)
5. Вызовем наши процедуры в модуле приложения
6. Поставим точку постановки в модуле сеанса и запусти откладку в разных клиентах
Сначала увидим, что переменная "ВидКлиента" - "не задан".
Когда мы пройдем весь по всей программе значение изменится и мы увидим, что клиент запущен с тонкого клиента:
Возможно пример не понятен, поэтому рассмотрим другой - позволим клиенту видеть сколько секунд прошла с момента запуска сеанса:
0. Создадим новый параметр сеанса "ТекущаяДата" с типом дата и объявим это в модуле сеанса
1. Создадим новую команду в форме обработке "СколькоСекундПрошло"
2. Пропишем следующий код в общем модуле "ПараметрыСеансаСервер"
3. Пропишем код в общем модуле "ПараметрыСеансаВызовСервера"
4. Пропишем код для формы обработки
Запустим платформу и пройдемся через точки остановки по нашим значениям:
- Увидим, что поступила текущая дата
- Теперь шагнем дальше и увидим, что уже вычислилась наша переменная и вывелось сообщение
На сегодня все, встретимся с вами уже завтра!