📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Марафон "Основы программирования в 1С". Урок 3. Встроенный язык

Программирование в 1С с Ильясом Низамутдиновым1:15:12

Transcription

Всем здравствуйте! С вами Низамутдинов. Я рад вас приветствовать на своем марафоне по программированию в 1С. Это третий урок, и в нем мы с вами изучим встроенный язык программирования в 1С.

Пока все видео я выкладываю на YouTube, но YouTube в любой момент могут закрыть. Поэтому сразу же сейчас переходите по ссылкам в мою группу ВКонтакте и также в мой Telegram-канал. И в группе ВКонтакте, и в Telegram-канале я выкладываю вот эти видео, которые полностью дублируются. То есть это не ссылка на YouTube, а именно сами видео залиты в эти соцсети. Поэтому переходите и регистрируйтесь, чтобы не потерять со мной связь.

В этом уроке мы с вами разберемся со встроенным языком программирования в 1С. Мы с вами уже научились конструировать метаданные и также научились настраивать интерфейс. Два урока я уже провел, если что, ссылка на эти уроки есть под видео. Переходите, посмотрите и обязательно сделайте домашнее задание к этим урокам.

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

Первый модуль — это модуль приложения. То есть, вот у меня первый. В нем располагаются все методы и события, которые связаны с началом и концом работы 1С:Предприятие.

Второй модуль — это модуль сеанса. Он необходим для установки параметров сеанса. Параметры сеанса — это такие глобальные переменные, которые доступны в любом месте программы, и мы можем в модуле сеанса самом начале сеанса установить значение этих переменных. Сегодня мы с вами научимся это делать. Мы создадим какой-нибудь параметр сеанса и установим значение.

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

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

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

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

Седьмой вид модуля — это модуль формы. То есть, в нем описываются процедуры и функции, которые нам необходимы для работы с формой.

И восьмой вид — модуль команды. То есть, у нас бывают команды общие и подчиненные какому-то объекту. Модуль команды необходим для описания действий, которые будут отрабатываться при выполнении этой команды.

И так, вкратце с модулями мы ознакомились. Теперь давайте посмотрим, как открывать каждый из этих модулей. Запустим 1С:Предприятие и войдем в нашу конфигурацию "Управление ремонтными работами".

И первым модулем это модуль приложения. Чтобы открыть модуль приложения, нам необходимо выделить корень вот этой нашей конфигурации, то есть "Управление ремонтными работами" (у вас он может называться как-то по-другому) и вызвать с помощью правой клавиши мыши контекстное меню. И здесь у нас есть команда "Открыть модуль приложения". Выполняем. То есть, открылся вот модуль приложения, где мы можем писать какие-то процедуры и функции, которые связаны так или иначе с началом и окончанием работы нашего приложения.

Следующий вид модуля — это модуль сеанса. Он открывается точно так же. У нас выделяется корень нашей конфигурации, вызывается контекстное меню, и здесь есть команда "Открыть модуль сеанса". То есть, вот это модуль сеанса, он нам необходим для установки параметров сеанса.

Модуль внешнего соединения открывается точно так же. То есть, вот мы просто выполняем команду "Открыть модуль внешнего соединения".

Также эти модули можно открыть из другого места. Давайте откроем палитру свойств нашей конфигурации. Здесь вот в палитре свойств есть три свойства: это "Модуль приложения", "Модуль сеанса" и "Модуль внешнего соединения". Если мы нажимаем на гиперссылку какого-то из этого свойства, то откроется соответствующий модуль.

И так, идем дальше. Следующий модуль — это общий модуль. То есть, вот у нас здесь ветки "Общее", есть ветка, которая называется "Общие модули". Здесь мы можем создать какой-то общий модуль. Делается это достаточно просто: мы выделяем эту ветку "Общие модули", вызываем правой клавишей мыши контекстное меню и выполняем единственную команду "Добавить модуль". Создается, и справа у нас открывается палитра свойств этого модуля, где мы можем дать какое-то имя. Например, это у нас будет "Модуль общего назначения". И здесь есть у нас ряд свойств: "Глобальный". То есть, если мы установим вот этот флажок, это значит, что процедуры и функции этого модуля у нас будут глобальными. Пока мы в этот момент углубляться не будем. И также здесь вот есть ряд других флажков: "Клиент", "Сервер", "Внешние соединения", "Вызов сервера" и "Привилегированных". Мы в эти флажки пока углубляться не будем. Смысл их мы изучим тогда, когда будем более подробно изучать вот работу с этими общими модулями.

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

И так, идем дальше. Другой модуль — это модуль объекта. Также мы выделяем нужный объект, вызываем правой клавишей мыши контекстное меню, и в этом меню выполняем команду "Открыть модуль объекта". То есть, вот она.

Чтобы получить доступ к модулю формы, необходимо открыть форму и здесь на форме есть закладка "Модуль". Нажимаем ее, и получаем доступ к модулю формы.

И остался последний модуль — это модуль команды. И общие команды, и подчиненные команды. Модуль команды открывается точно так же: либо просто выделяется команда и кликается несколько раз мышкой, вот модуль открылся, либо просто вызывается контекстное меню, и в этом контекстном меню выполняется команда "Открыть модуль команды". То есть, вот тот же самый модуль. И точно так же в случае подчиненной команды. То есть, вот у нас здесь "Документы", "Заказ", есть подчиненная команда. Также мы выделяем, кликаем. Вот у нас тут есть какая-то даже обработка.

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

Сейчас я вам это покажу. Например, у нас есть модуль приложения вот нашей конфигурации "Управление ремонтными работами". Здесь мы можем просто написать какое-то сообщение. То есть, вот у нас здесь нет никаких процедур, никаких обработчиков, ничего. Мы просто написали какое-то сообщение, и это сообщение у нас сработает.

Сейчас я вам это покажу. Давайте сохраним конфигурацию, обновим конфигурацию базы данных и запустим 1С:Предприятие. То есть, вот видите, у нас вышло сообщение "Работа начата". То есть, вот выше это сообщение — это вот это вот наше сообщение, оно отработало себя, когда запустился наш модуль.

Но если мы сейчас попробуем точно такое же сообщение написать в модуле сеанса, давайте вот мы его скопируем и откроем модуль сеанса. Здесь вот мы его напишем. Если мы сейчас сделаем проверку модуля, то у нас выйдет ошибка, что "Обнаружено логическое завершение исходного модуля". То есть, мы не можем написать здесь какое-то сообщение. То же самое произойдет, если мы попробуем, например, написать это сообщение в модуле менеджера. Пишем в модуле менеджера, делаем проверку — вышло та же самая ошибка.

Хорошо. Но если мы с вами откроем модуль объекта. Ведь это мы закроем и откроем модуль документа "Я заказ". Вот модуль объекта "Заказ". Давайте напишем код сообщения. Давайте сохраним, обновим и запустим 1С:Предприятие. Так, это я закрою. И так, вот у нас документ "Заказ". Давайте мы что-нибудь попробуем с этим документом "Заказ" сделать, не открывая форму, попробуем, например, его провести. Провели, и заметьте, у нас вышло сообщение "Активирован модуль объекта". То же самое сообщение у нас выйдет, если мы попробуем отменить проведение. То есть, вот вышло опять сообщение "Активирован модуль объекта". То есть, по сути, когда мы обращаемся к объекту, а в данном случае мы проводили документ или отменяли проведение, у нас срабатывал вот этот наш модуль объекта.

И давайте точно такой же код, который вне каких-либо процедур, напишем в форме документа. То есть, вот открыли форму документа, и здесь напишем тоже какое-нибудь сообщение. То есть, вот "Активирован модуль формы документа". Давайте это закроем, сохраним, обновим и запустим 1С:Предприятие. То есть, вот у нас документ "Заказ". Так, заметьте, у нас активирован модуль формы. Сработало два раза. То есть, нас форма объекта сначала создается на сервере, а потом на клиенте, соответственно, мы два раза к ней обратились.

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

Давайте откроем модуль приложения. Здесь мы уже использовали метод "Работа начата" — это метод платформы. Давайте я его удалю и сдвину на пару строк ниже. С чего мы начнем? А начнем мы с переменных. Мы с вами можем задавать какие-то переменные, в которых хранится какая-либо информация. Это может быть примитивная информация, например, это может храниться какое-то число или строка, или, например, дата. И также это может быть и какая-то более сложная информация, например, в переменной может храниться массив, таблица значений, а также ссылка на какой-нибудь справочник или документ.

Как задаются переменные? Переменные задаются двумя способами. Первый способ — это задание при помощи ключевого слова "Перем". То есть, мы пишем ключевое слово "Перем", и после этого просто пишем название переменной. Пусть переменная у нас называется "НашаСтрока", и все. После этого мы пишем точку с запятой. Сейчас, если мы с вами запустим модуль приложения, то при запуске у нас будет создана переменная "НашаСтрока", но она будет абсолютно пустой, никакое значение ей не будет присвоено.

Чтобы этой переменной присвоить какое-то значение, необходимо использовать оператор "равно". Мы просто пишем "НашаСтрока", пишем оператор "равно", теперь присваиваем ей какое-то значение. Мы можем присвоить этой переменной, например, число. Такое вот. Что это, конечно, странно, что "НашаСтрока" и что... Давайте присвоим ей строку. Строка у нас присваивается в кавычках, то есть пишутся вот такие кавычки, и в них пишется какой-нибудь текст. Ну, вот такой стандартный текст напишем: "Привет, мир!". Все. Теперь у нас при запуске нашего приложения будет создана переменная "НашаСтрока", и потом вот в этой следующей строке, вот в этой вот, этой переменной будет присвоено значение "Привет, мир!". И также мы с вами можем эту строку теперь вывести в сообщении. Например, пишем "Сообщить", и здесь в качестве параметра этого метода "Сообщить" (мы с параметрами чуть позже с вами познакомимся) мы можем использовать какой-нибудь тип "Строка". То есть, мы просто здесь в качестве параметра укажем вот эту строку. Так, и здесь вот еще нужно точку с запятой поставить. Так, давайте сохраним, обновим базу и запустим 1С:Предприятие. И виде, у нас вышло сообщение "Привет, мир!". То есть, у нас что произошло? При запуске нашего приложения мы создали вот эту нашу строку, записали в нее вот такой вот текст и вывели в сообщении этот текст.

Мы также можем при помощи оператора "Перем" создавать несколько переменных. То есть, мы можем, например, написать запятую, и здесь будет следующая переменная "НашеЧисло". Ну, пусть будет не "Наша", а "Наше". "НашеЧисло". И давайте этой переменной теперь присвоим какое-нибудь значение. Ну, пусть будет вот такое. Что это же выведем сообщение? Здесь была "НашаСтрока", здесь просто выведем "НашеЧисло". Так, закроем, сохраним, обновим и запустим 1С:Предприятие. И вот вышло сообщение "Привет, мир!" и также "100". Заметьте, здесь "Сообщить" в качестве параметра у нас указано число, хотя я вам говорил, что мы должны строку указывать. Ничего страшного, просто платформа преобразует число в строку.

Это первый способ задания переменных, то есть мы задаем переменные при помощи вот этого оператора "Перем". Но есть второй способ: можно задавать переменные напрямую. То есть, мы пишем какую-то переменную и просто ей присваиваем значение. Ну, давайте вот напишем переменную "ФИО" и присвоим этой переменной какую-нибудь строку. И давайте это "ФИО" же выведем в каком-нибудь сообщении. Сейчас скопируем. Заметьте, мы сейчас вот здесь в операторе "Перем" не писали вот эту переменную "ФИО", и ее не создавали. Она создается вот в этой строке. То есть, если у нас в этой строке, когда мы присвоили переменной "НашеЧисло" какое-то значение, переменная "НашеЧисло" уже существовала, то здесь вот эта переменная "ФИО" у нас не существует. То есть, она создавалась именно в этот момент, то есть когда ей было присвоено какое-то значение. До этого этой переменной не существовало, в отличие от этих переменных, они уже существовали, когда им было присвоено какое-то значение, то есть они уже были созданы, им просто присвоили определенные значения.

Давайте сохраним и посмотрим, как у нас все это выполнится. Ну, все, видите, замечательно у нас явилась "Привет, мир!" и "Иванов Петр Сергеевич". То есть, мы с вами разобрались с переменными и с оператором присваивания. Переменные могут храниться как примитивные типы, в данном случае вот мы сейчас с вами работаем с примитивными типами, и также у нас переменные могут храниться сложные какие-то типы, ссылочные. Ну, ссылочными типами мы сейчас разбираться не будем, мы с ними познакомимся позже.

Давайте еще дальше разберем примитивные типы. Примитивных типов несколько. Мы разберем четыре: это строка, число, также дата и булево.

Пройдемся, зададим дату, переменную. Так и назовем "Дата". Как задаются даты? Просто пишутся кавычки ординарные, и в них пишется дата вот в таком формате, сейчас вы увидите. И то есть, здесь у нас год, здесь у нас месяц. Если у нас дата, потом идет час, потом идут минуты и секунды, то есть, вот давайте сделаем так: вот год, месяц, потом дата. Ну, давайте время сделаем. Все. То есть, мы сейчас задали с вами дату. Обязательно ставим точку с запятой, не забываем это делать. На эту точку с запятой обращайте внимание. То есть, после того, как мы написали какое-то действие, всегда необходимо ставить точку с запятой. Единственное, что она не ставится внутри кода оператора. То есть, если мы там пишем "Если", то мы никакие точки с запятой просто ставим после действия. Пока просто запомните, что точка с запятой ставится после того, как какой-то переменной было присвоено какое-то значение. И теперь давайте выведем эту дату. Все, сохраним. Давайте обновим и... [музыка] ...эти закроем, опять обновим, мы запустим. То есть, вот у нас вышла дата. Мы задали в этом формате, она у нас вышла. Все замечательно.

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

И последний тип, который нас интересует, это булево. Булево — это логический тип. У него только два значения: это "Истина" и "Ложь". Третье значение быть не может. Булево используется в некоторых циклах и в операциях сравнения. Сейчас давайте просто присвоим какой-нибудь переменной значение булево. Ну, вот так назовем "b". "Истина". Она сейчас едет. Эти переменные "ФИО", "Дата", "b" — они создаются вот таким образом. Мы просто присваиваем имя, значение. В нашем модуле, и эта переменная уже сразу создается. Все. Вот мы переменной "b" присвоили значение "Истина". Мы теперь можем просто тоже вывести, и она тоже выведет. Причем заметьте, что в простых случаях мы примитивные типы "Сообщить" можем напрямую выводить, хотя здесь "Сообщить" принимает текст, но у нас платформа конвертирует переменную примитивного типа в текст. То есть, в простом случае это можно делать. В более сложных случаях желательно напрямую переменную переводить в текст. Так, давайте сохраним, обновим, мы запустим. Вот видите, вывелось наша переменная "Да". Если мы присвоим "Ложь", выведет с переменной "Нет". Все-таки вывелась переменная "Нет". Почему у нас "Истина" превращалась в "Да", а "Ложь" превращалась в "Нет"? Все из-за настроек нашей информационной базы. Они у нас настраиваются вот здесь вот в "Региональных установках" информационной базы. По умолчанию у нас берет "Установка текущего сеанса", но мы можем убрать этот флажок и задать логическое представление какое-то другое, например, "Выключено" и "Включено". Так, у меня сейчас сеанс закрыт, вернее, открыт. Давайте закроем и еще раз установим "Выключено" и "Включено". Окей. Видите, теперь уже значение поменялось. Но я не рекомендую вам менять таким образом через региональные настройки. Лучше для этого использовать метод "Формат", мы тоже с ним познакомимся. Давайте все это обратно вернем. Там опять этот флажок, и проверим. Все у нас вернулось, как было.

Сейчас мы с вами научились создавать переменные, и этим переменным, и также научились присваивать какие-то определенные значения. Давайте научимся работать вот с этими примитивными типами. Да, мы можем работать с ними напрямую. То есть, например, с числами мы можем выполнять арифметические операции. Например, число мы можем складывать: 100 + 200. Также мы со строкой можем выполнять операции конкатенации, то есть мы можем строки тоже складывать. Например, "Привет, мир!" давайте сложим с еще одной строкой: "Как дела?". То есть, вот эта операция, когда две строки у нас таким образом складываются, называется операция конкатенация. Но с числами мы можем работать и сложнее. Мы можем не только их складывать, например, делить. То есть, вот так вот. И это все умножать, используя те же скобки.

С датами мы тоже можем работать. Мы можем к дате прибавить определенное число. Это значит, что мы к дате прибавим какое-то количество секунд. Например, давайте к дате прибавим 100. Что значит, что мы к дате прибавили 100 секунд. Например, давайте сохраним, обновим конфигурацию и посмотрим, как оно у нас будет запускаться. То есть, вот у нас "Привет, мир!", "Как дела?". Два часа у нас получилось такое вот 6000. Ну, "Иванов" у нас не поменялся. Но дата, заметьте, у нас стала другая. То есть, у нас было чисто дата 31 декабря двадцатого года, а стала дата с минутами и секундами. То есть, мы прибавили 100 секунд, а 100 секунд — нас это, соответственно, 1 минута и 40 секунд. То есть, если нам надо какую-то дату увеличить на 1 день, мы можем это сделать следующим образом: мы к этой дате прибавим то количество секунд, которое соответствует одни суткам. Кратко это будет так: 24 умножим на 60 и умножим на 60. То есть, мы 24 часа умножили на 60 минут, умножили на 60 секунд. Давайте сохраним, обновим и также запустим 1С:Предприятие. Вот видите, у нас стала следующая дата. У нас было 31 декабря, а теперь мы получили 1 января. То есть, у нас уже дата увеличилась на 1 день, мы ее сдвинули.

Так, на этом мы с вами с переменными закончили. Мы научились создавать переменные примитивных типов и присваивать им какие-то значения. Теперь давайте перейдем к процедурам и функциям.

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

Давайте здесь вот прямо в модуле зададим какую-нибудь процедуру и какую-нибудь функцию. В модуле приложения, также в модуле объекта и в модуле формы. Задание процедур и функций идет после операторов объявления переменных, то есть после вот этой строки "Перем", но перед тем, как идет работа с этими переменными, то есть вот до этих строк. То есть, мы напишем наши процедуры и функции прямо здесь, посередине.

Для того, чтобы создать процедуру, необходимо написать ключевое слово "Процедура". После ключевого слова "Процедура" необходимо написать название этой процедуры. Причем название процедуры должно быть уникально в рамках этого модуля. То есть, мы не можем создать две процедуры с одним и тем же названием. Ну, давайте напишем "ВыведемСообщениеЧисло" — ну, вот такое длинное название. И после названия обязательно должны быть открывающая и закрывающая скобка. То есть, вот так вот. Это обязательно. Если мы не поставим такие открывающие и закрывающие скобки, то у нас возникнет какая-то ошибка. И дальше, в конце, как правило, это делается на следующей строке, необходимо написать ключевое слово "КонецПроцедуры". Все, никаких точек с запятой, ничего здесь ставить не надо. Мы с вами создали процедуру "ВыведемСообщениеЧисло". И теперь эту процедуру мы можем использовать в нашем коде. То есть, мы можем написать ее в модуле приложения, и даже она у нас выведется в подсказке. Если я сейчас нажму Ctrl+Пробел, у нас выйдет вот такое сообщение. Эта процедура у нас работает. Процедура у нас работает, но ничего не произойдет. Давайте мы сейчас напишем какой-нибудь код здесь внутри процедуры. В самом начале мы можем также создавать переменные при помощи ключевого слова "Перем". То есть, мы создали переменную. Теперь можем ее как-то использовать. Например, "два" переменной присвоим какое-нибудь число. Я сейчас нажал Ctrl+Пробел, у меня контекстная подсказка. Заметил вот эту нашу переменную "ЧислоПроцедуры". Давайте пусть она будет 100. Причем это число можем не создавать в качестве "Перем", но можем и создавать. То есть, такой синтаксис вполне возможен. Теперь давайте просто выведем сообщение "Это число". Вот так. Мы с вами сейчас сделали такую вот простую процедуру, где, в принципе, выводится какое-то определенное число.

Давайте сохраним, обновим и посмотрим, у нас работает наша процедура или нет. Давайте вот эти все сообщения удалять не буду, а просто их закомментирую. Закомментировать быстро определенный список можно следующим образом: мы просто выделяем, идем в текст, блок "Добавить комментарий". Вот так вот. Все. Давайте сохраним, обновим и запустим наши 1С:Предприятие. И видите, вышло наше число. Вот это наше число, которое мы выводим в процедуре. То есть, наша процедура сработала. Конечно, можно сказать: "А зачем нам писать вот сейчас какую-то процедуру, чтобы просто вывести число?". Да, возможно, в данном примере и как-то это излишне, но если нам этот код необходимо использовать много раз, причем в разных местах, допустим, нашего модуля, то написать процедуру будет гораздо более оптимально.

Если мы сейчас захотим вывести еще раз такое число — 100, мы можем еще раз написать вот такой вот код, который просто это число 100 выведет. Давайте сохраним, обновим, обновим и запустим опять 1С:Предприятие. То есть, видите, вышло два раза "100". Естественно, вы можете спросить: "А если нам необходимо сделать так, чтобы у нас число было не какое-то фиксированное, вот 100, а какое-то число, которое мы могли бы передать в эту процедуру, чтобы она выходила, или, допустим, чтобы с ним что-то произошло, и потом она вышла?". Можем ли мы это сделать? Да, можем. Мы можем при помощи параметра передать это число в процедуру и потом с ним что-то сделать или, допустим, просто вывести. Давайте это сделаем. Давайте у этой процедуры "ВыведемСообщениеЧисло" создадим параметр, который так и назовем "ЧислоДляВывода". И теперь вот нашей этой переменной "ЧислоПроцедуры" присвоим вот это "ЧислоДляВывода". Если сейчас мы с вами попробуем выполнить нашу процедуру, запустить 1С:Предприятие, то у нас возникнет ошибка: "Недостаточно фактических параметров". Давайте завершим. Почему? Потому что здесь мы создали параметр, но у нас вот эти наши с вами процедуры, которые мы здесь используем, в них параметр не указывается. И это ошибка. Такое не должно быть. Давайте укажем. То есть, если мы создаем какой-то параметр, то этот параметр обязательно должен использоваться. Вот так вот. И давайте сохраним.

обновим и опять выведем. То есть, вот вышли, соответственно, два числа: 1 - это число 10, 2 - шт. 200. Мы также с вами задали 10, также задали 200. И вы можете спросить: "А что вот, если в некоторых случаях у нас число, допустим, мы можем вводить, а в некоторых случаях необходимо вывести число по умолчанию? Допустим, мы никакое число не вводим, подразумеваем, что оно равно определённому часу." Вот это число для вывода, можно ли сделать так? Да, можно. Для этого используйте следующий вариант синтаксиса. Мы этому значение часов для вывода присвоим определённое значение. То есть, мы сейчас после этого числа для вывода напишем символ равно, здесь напишем "что". То есть, теперь при таком варианте синтаксиса процедуры, мы можем в параметре ничего не указывать. То есть, мы можем параметры просто вот сделать две скобки, как мы, в принципе, да, это в идеале. Давайте это попробуем. Здесь вот третий способ использования этой процедуры. Мы никакие числа не указываем. Давайте сохраним, обновим, а прикрутим отладку, закроем и давайте запустим 1С:Предприятие. То есть, вы видите, никаких ошибок не возникло. То есть, у нас начало вышло 10 - это вот этот вариант, потом 200 - это вот этот, и потом вышло стоп - то есть, это вот этот третий вариант, когда мы ничего не указали. Такой вариант синтаксиса называется установка значения по умолчанию.

Идём дальше. Мы с вами передаём какое-то число для вывода, но мы также можем это число для вывода уже непосредственно внутри нашей процедуры изменить. Давайте сделаем так, чтобы это число для вывода умножало само себя. То есть, мы будем возводить его в квадрат. Вот эта конструкция, сейчас которую я покажу вам, называется рекурсия переменных. То есть, у нас переменная, вот это число для вывода, изменит саму себя. Вот какой-то операции для возведения в степень в синтаксисе 1С нету, поэтому число для вывода умножим просто "число для вывода" и выведем этого сообщения. Давайте посмотрим, как это всё сработает. Всё замечательно, у нас всё перемножилось. И теперь давайте пойдем дальше. Попробуем вот, мы сюда передавать не конкретные числа, которые мы сейчас сделали, а попробуем передавать переменные. Мы с вами задали какую-то переменную, которую назвали "наше число". Здесь вот ниже мы с ней проделывали какие-то манипуляции. Давайте вот эти манипуляции мы проделаем выше. И теперь вот это "наше число" мы передадим в процедуру. То есть, вот так вот. Давайте вот это мы закомментируем. То есть, то, что мы выделим и двумя вот такими черточками - это значит комментарий. То есть, вот этот код не будет читаться платформой, не будет, как следствие, выполняться. И дальше давайте выведем сообщение "вот это наше число" перед тем, как выполнилась наша процедура, и после того, как выполнится наша процедура. То есть, вот так вот мы выведем его. Давайте сохраним, обновим конфигурацию. Опять я забыл закрыть. Я тебя закрою, обновим конфигурацию и запустим нашу 1С:Предприятие. И давайте разберемся вот с тем, что у нас выше. Сейчас я так вот это, да, сдвину. То есть, сначала мы с вами посчитали какое-то число 6 тысяч, и потом мы это число вывели. То есть, вот это число у нас выведено. После этого мы применили процедуру "выведем часов" сообщение, где возвели это 6 тысяч в квадрат, и вышел вот такое, все 36 миллионов, мы тоже его вывели. И после этого мы вывели с вами изначально число. То есть, вот это "наше число" мы здесь ввели. И заметьте, вот это "наше число" изменилось. То есть, вместо 6000 стала 36 тысяч. То есть, процедура поменяла наше значение. Иногда, в принципе, бывает и этого достаточно, а иногда вот такое поведение может очень критично влиять на работу программы. Что же тогда делать? В этом случае необходимо передавать часов по значению. То есть, передавать как бы ссылку на это число, но изменяться оно не будет. Для того, чтобы нас число было передано по значению, то есть для того, чтобы оно не поменялось в нашей процедуре, то есть вернее, поменялось, но изначально оно каким было, таким осталось, необходимо написать перед параметром ключевое слово "значит". Вот так вот. Причем вот этот синтаксис, когда мы присваиваем по умолчанию какое-то определённое значение часу, он может быть и как с ключевым словом вот этим, значит, так и без этого ключевого слова. Так, давайте сохраним, обновим и посмотрим, будет ли меняться у нас вот это "наше число". И вы видите, наше число не поменялось. То есть, как бы 6000, так эти 6000 и остались.

Параметров у нас может быть несколько. То есть, нам не обязательно именно один параметр использовать. Мы можем сделать два параметра. Например, давайте создадим второй параметр, который мы зовём "текст сообщения". Он у нас меняться не будет, и по умолчанию он будет равен какому-то примеру сообщения. И давайте мы вот здесь вот, и давайте вот мы этот текст сообщения будем использовать в нашем сообщении. Сейчас мы просто применяем операцию конкатенации. Давайте здесь ещё двоеточие. После этого мы можем также выводить наши сообщения. Ну, вот это давайте нашу я удалю или даже не удалю, закомментирую, нам не мешалось. И выведем все 55. Я забыл закрыть. Покроем, обновим, видим. То есть, мы с вами вывели. То есть, мы можем использовать 10 любое количество параметров. И уже каждому параметру мы можем как применять значения по умолчанию, также устанавливать, чтобы этот параметр передавался по значению, взять ключевое слово "значит". То есть, это ключевое слово "значит" относится только вот к этому параметру. Оно не относится ко всем параметрам, оно относится только к одному параметру, перед которым оно написано.

Мы с вами познакомились процедурами. То есть, процедура у нас выполняет определённые действия. Кроме процедур у нас есть ещё и функции. Функция тоже выполняет определённые действия, но эта функция у нас также и возвращает какое-то значение. Давайте вот мы создадим функцию, которая будет вычислять вот такое длинное выражение, которое у нас здесь мы написали для нашего числа. Мало ли, это очень важная формула. И эта функция, соответственно, будет возвращать какое-то число. У этой функции мы также можем создавать параметры, можно её использовать без параметров. Заканчивают функцию обязательно ключевое слово "конец функция". Ну, давайте создадим параметры, которые назовём "число a", "числа b" и "c". И здесь вот это "наше число" мы посчитаем. Где здесь будет число a, здесь будет число b, здесь будет число c. И у функции обязательно должен следовать оператор "возврат", который может, в принципе, возвращать любое значение, и обязательно число. Это может быть строка. Мы с вами вернём число. То есть, вот "возврат" пробел и "наше число". Всё. Теперь давайте посчитаем вот это "наше число" при помощи функции "вычислить выражение". Так, это мы уберем. Что-то. Давайте сохраним и посмотрим, что у нас вообще посчитается. А у нас посчиталась. Нас вывелось вот это число, которое, соответственно, мы посчитали с вами. Причем мы функции и процедуры можем использовать в друг друге. То есть, мы, допустим, можем вот эту функцию "вычислить выражение" использовать вот нашей этой процедуре "выведем сообщение". Число. Давайте мы это сделаем. То есть, мы вот это число для вывода не будем умножать само на себя, будем использовать "вычислить выражение". То есть, я сейчас нажал Ctrl+пробел, у меня тут даже вот вышла контекстная подсказка. И давайте вот мы здесь всё для вывода будем использовать в качестве параметров этого "вычислить выражение". Всё. И давайте посмотрим вообще, что у нас получится. То есть, мы сейчас вот это вот "наше число" сами закомментируем. Здесь просто, давайте 3 присвоим. То есть, мы передадим вот здесь. Вы видите, "вывести сообщение". Вот это "наше число", оно у нас посчитается и потом выведется какое. Давайте посмотрим. То есть, вот он на 3. Точно не выведется. Но 6. 6. 3 плюс 3 будет 6. Делённое на 3 будет 2. 2 умножить на 3 будет 6. Да, правильно. То есть, вы видите, что мы сами можем использовать в любом месте нашего модуля любые процедуры, функции. При, конечно, единственное, что вот мы не можем так сделать. Здесь, допустим, описать "наше число" и потом попробовать вычислить выражение. Допустим, если мы сделаем вот так вот, то есть сначала напишем какое-то выражение, потом использованием процедур и функций, то синтез проверку нас работает нормально. Но если мы попробуем запустить наши 1С:Предприятие, то у нас возникнет вот такая ошибка. То есть, если мы в каком-то модуле описываем процедуры и функции, то они должны идти перед основным выполнением нашего модуля. Очень часто, кстати, в модуле ход вообще такие выражения, которые сейчас я здесь написал, они не применяют. То есть, пишут о процедуре, функции, которые так или иначе определяют какие-то действия.

И давайте еще познакомимся с оператором "если". Конечно же, вы кто знает математику, я надеюсь, все, кто меня тут смотрят, знают хорошо математику. Можете меня спросить, если у нас число с вот это вот будет равно нулю, то у нас тут возникает ошибка. И да, у нас такая ошибка возникнет. Давайте мы попробуем это сделать. Пример. Вот мы наше число здесь посчитаем, и число с последняя мы сделаем, что оно равно нулю, и попробуем вывести это наше число. Сохраним, обновим и запустим 1С:Предприятие. И возникла ошибка "деление на ноль". Поздравляю! То есть, мы с вами не можем поделить на ноль, и это естественно, потому что в математике нельзя делить на ноль. Что же нам делать в этом случае? Как нам отработать эту ситуацию, когда число из каких-то случаях может быть равно нулю? Для этого необходимо использовать слово "если". То есть, мы пишем ключевое слово "если", и здесь необходимо написать логическое условие. Либо мы здесь пишем какую-нибудь переменную с типом "булево", либо мы здесь просто пишем какое-то логическое условие, что, пример, "число с не равно нулю". Вот так вот. После этого мы пишем ключевое слово "тогда" и обязательно записать "конец если". И вот все операторы, которые у нас здесь между вот этим ключевым словом "тогда" и ключевым словом "конец если" - это и являются операторами условий. То есть, они будут выполняться тогда, когда вот у нас "число с не равно нулю". Заметьте, что вот это у нас - это у нас булево значение. То есть, здесь вместо вот этого выражения мы можем указать какую-то переменную. Допустим, я создам переменную "сравнения" и присовою вот это сравнение. И вот это сравнение я укажу здесь. То есть, здесь мы указываем какое-то сравнение. И давайте вот этому нашему числу присвоим какое-то начальное значение. Будет 0, потому что если у нас сравнение не выполнится, у нас нашему чувству ничего не присвоится. Давайте хорошо, сохраним, обновим и посмотрим, чему же будет равно вот наше это с вами число. То есть, вот это вот наше первое вычисление, вот оно равно нулю. Почему оно равно нулю? Сейчас я вам поясню. То есть, смотрите, мы заходим в нашу функцию "вычислить выражение", у нас это число с оно равно нулю. То есть, вот у нас это сравнение, оно не выполняется. То есть, это сравнение. Уж если это сравнение, нож-то у нас, соответственно, вот сюда наша программа не заходит, вот в это место кода, и наше число не пересчитывается. Оно возвращается 0. Естественно, возникнет вопрос: "А что если вот для 0 у нас есть какой-то другой алгоритм вычисления? Можно ли что-то сделать в этом случае?" Конечно, можно. Для этого мы используем оператор "иначе". Здесь вот в этом куске кода у нас будут выполняться те операторы, которые сработают тогда, когда наше условие, что "число с не равно нулю", не выполняется. То есть, в том случае, когда у нас часов с равно нулю. Давайте мы наше число посчитаем по другому. Ну, пусть будет "числа плюс", чтобы так вот. И давайте посмотрим, чем у нас тут произойдет вычисление. При нем, обновим и запустим один из припяти. И вы видите, что у нас впечатление это произошло, нас посчиталась 200. Также у нас, кроме оператора "если", имеется более широкий вариант синтеза. Мы можем с вами использовать оператор "иначе если". Сейчас я вам покажу, как этот вариант синтаксис работает. Для этого давайте создадим функцию, которая будет вычислять "сигнал числа". Сигнал часа, напомню, это такая функция, которая выводит -1, если число меньше 0, 0, если число равно нулю, и 1, если все больше 0. Сейчас мы с вами такую пункту сделаем. Параметр я назову "аргумент". Давайте используем оператор "если". Есть у нас аргумент больше нуля, тогда мы выведем единицу. Причем, давайте выведем сразу же. То есть, мы оператор "возврат" можем использовать несколько раз, сколько хотим. Вот нас вернется единицы. Иначе, если аргумент у нас меньше нуля, тогда у нас "возврат" будет равен минус единице. Иначе, то есть, если у нас аргументы не больше нуля и не меньше нуля, то он равен нулю. У нас "возврат" будет ноль. Всё. В этом случае у нас выполняется следующая логика. Сначала у нас проверяется "аргумент больше нуля" или нет. Если он больше нуля, мы возвращаем единицу или выполняем какие-то здесь операторы. Если же у нас аргумент не больше нуля, то потом проверяется следующая логика: "меньше аргумент 0" или нет. Если он меньше, то вращаться минус единицы. Иначе, если у нас не выполняются не первое условие, ни второе, ни третье, ни четвертое. Если есть выполняются операторы вот здесь вот, которые будут после ключевого слова "иначе". Это важно. То есть, в этом варианте синтаксиса у нас всё выполняется сверху вниз. Это запомните. И давайте попробуем использовать эту функцию. Вот нас наше число. Мы сразу же вот сообщить будем эту функцию использовать "сигнал наше число". Но это два. Тебя закомментирую. Так вот это присвоение нашему. Все я закомментирую. То есть, мы будем выводить "сигнум" вот этого числа. Все. Вот у нас для часа 200 лечение "сигнум" а единица. Ну, давайте пусть у нас теперь наш всего будет равна к ним. Обновим. То есть, все для отрицательного числа у нас "сигнал" равно минус единицы. То есть, вот так вот у нас работают условия.

И раз уж мы с вами изучили условия, давайте немножко доработаем вот этот наш общий код модуля, который идет после функций. Мы этот общий код поместим в отдельные условия, которые назовем "сделали на уроке" или наоборот, мы создадим отдельное условие выполнения домашнего задания. И этот код будет выполняться тогда, когда это условие ложь. А потом, когда уже будете делать домашнее задание, если вы его будете делать, вот здесь вот в общем модуле вы свой код будете помещать туда. Иначе, давайте создадим новую переменную, которую назовем "сделали на уроке" и сразу вот тут в начале кода, то есть после всех функций и процедур, и мы напишем это условие и обязательно режим "конец если". Теперь вот для всех этих операторов условий мы сделаем отступ, чтобы нам было удобно работать. Делается это следующим образом: идем "текст бог", "величия стоп", вот так вот. И присвоим нашей переменной "истина". Потом вы будете присваивать "ложь", а потом еще в дальнейших уроках мы с вами сделаем константу и будем извлекать значение из этой константы. В зависимости от того, какого с константа у вас будет выполняться тот или иной код, мы с вами этому научимся на других уроков. И чтобы не пропустить эти уроки, подпишитесь на мой канал. Пусть даже YouTube в непонятном состоянии, зерно, подпишитесь, нажмите на колокольчик, чтобы вовремя получать все уведомления. И так же вступайте в мои группы вКонтакте и в Телеграме. Я буду выкладывать дубль уроков. Так вот, у меня тут условия, они в принципе могут группироваться, но почему-то не группируются. Давайте сделаем группировку. Делается это следующим образом: идем "сервис", "параметры". Вот здесь вот на закладке "модуле" есть другая закладка "группировка". И здесь вот поставим "условия" и также поставим "цикл". Как раз сейчас мы начнем изучать цикл. То есть, они будут группироваться, но не будут сворачиваться, потому что старая колонка у нас не заполнена. Критики. И то есть, вот появилась рядом с сусу им такой вот пиктограмма, и мы можем свернуть это всё. Давайте обновим и посмотрим, будет ли у нас программа запускаться. Всё запускается. Тут выполняются определенные вычисления. Мы сейчас на них обращать внимание не будем. Так, хорошо. И чтобы у нас вот этот код не выполнялся, мы сейчас этой переменной "сделали на уроке" присвоим "ложь". Потом вы будете домашнее задание делать, и как раз будет код выполняться в домашнем задании. Чтобы он выполнялся, мы сейчас здесь напишем "иначе". То есть, вот в этом оператор или "иначе" будет выполняться наш код. Ну, давайте напишем здесь: "здесь будет домашнее задание". Нету конфигурация. Вы уже дать в облака. Вы можете скачать, потом сделать домашнее задание в этой конфигурации. Давайте сохраним, обновим, и всё. Теперь никаких сообщений не выходит. Так, замечательно.

Теперь давайте идем дальше. Давайте изучим циклы. У нас всего существует три вида цикла: это "для цикл", "пока цикл" и "для каждого цикл". Мы в этом уроке с вами изучим вот эти два вида: "для цикл" и "пока цикл". А "цикл для каждого цикл" мы будем изучать тогда, когда будем проходить универсальные коллекции значений. Рассмотрим простой пример "для цикл". Сделаем его пока вот здесь вот просто в модуле, а потом создадим какую процедуру, где будет этот цикл выполняться. Чтобы вот эту на суде что не скопом, самый простой вариант выполнения этого цикла следующий: пишем твои слова "для", после этого пишем какую-то переменную, пусть она будет "n", и пишем оператор "ровно", и после этого мы пишем число, которое должно быть целым, из которого начинается наш цикл. То есть, это может быть 0, 1 и так далее. То есть, у нас будет, к примеру, один. После этого мы пишем ключевое слово "по" и пишем часа, который закончится наш цикл. Это, допустим, будет 10. После пишем ключевое слово "цикл" и "конец цикла". Вот всё, что у нас вот здесь вот между "цикл" и "конец цикла" - это оператора цикла. То есть, бы они будут выполняться циклично, пока у нас "n" идет от 1 до 10. То есть, первое значение "n" у нас присваивается один, потом два, потом три и так далее до 10. Давайте я вам это продемонстрирую. Мы с вами выведем вот это "n". Всё, сохраним, обновим и запустим 1С:Предприятие. Видите, у нас вышло "n" сначала 1, потом два, потом три, потом 4, потом 5. То есть, это самый простой вариант цикла. То есть, у нас "n" изменяется от одного до двух. И здесь вот внутри цикла, часто свернем, мы с вами можем делать всё, что угодно. Мы с вами можем как-то это "n", допустим, посчитать. К примеру, давайте это "n" пусть у нас будет подробно. То есть, мы будем 1 делить на это "n" и потом получим какое-то значение. Пусть будет некое число "m", которое равно единице делить на "n". Здесь будем выводить это "m". Но она у нас будет выходить длинный. Давайте округлим его. Будем для этого использовать вот такую функцию "окон". Ну, пусть будет 5 символов после запятой. И всё у нас посчиталась. Но причем, заметьте, нам не обязательно "n" начинать с единицы или с нуля. Мы можем и начать с -10, к примеру, из -10 до 10 и так далее. То есть, посчитать вот таким образом. И когда мы с вами пойдем вот таким образом от -10 до 10, то в одной из итерации цикла у нас "n" будет равно нулю. На ноль делить нельзя, поэтому надо эту ситуацию отработать. Давайте мы сделаем условия и что тогда, если у нас "n" равно нулю, то на в принципе дальше операторы выполнять не надо. Нам не нужно 1 делить на ноль. Это нельзя. Давайте мы с вами опять продолжим цикл. То есть, мы опять перейдем на следующую итерацию. Делается это при помощи оператора "продолжить". То есть, когда у нас "n" будет равно нулю, у нас дальнейшее вычисление не пойдет. У нас, соответственно, перейдет на следующую итерацию, когда "n" равно единице, и уже пойдет дальнейшие вычисления. Давайте сохраним и перезапустим 1С:Предприятие. Посмотрим, как это все сработает. Всё замечательно сработало. Сначала у нас было с минусом, потому что мы начали с -10, потом "n" 100 равно -1, потом один. То есть, на 0 мы уже не стали делить. У нас просто пропустите этот расчет и пошел дальше уже до 10. Но также, кроме оператора "продолжить", есть еще и оператор "прервать". Если в случае оператора "продолжить" нас просто переходит на следующую итерацию цикла, то в случае оператора "прервать" мы просто выходим из цикла. Давайте я это продемонстрирую. То есть, вот оператор "прервать". Как я забыл закрыть. То есть, вы видите, мы дошли до нуля, и дальнейшее вычисление у нас уже не прошло. То есть, дальше мы с вами вычислять не стали. Просто цикл закончился. То есть, оператор "прервать" заканчивает наш цикл. Всё, в принципе, цикл "для n равна от -10 до 10" простой. Здесь просто идет перечисление по одному, и никаких вот таких нюансов нету. Давайте мы это цикл в загоне в процедуру, и у этой процедуры будет два параметра: "начало" и "конец". И сейчас я это скопирую сюда и сюда вставлю. Так, нас здесь всё вот так не совсем красиво получилось. Чтобы у нас получилось красиво, сейчас мы сделаем форматирование. Делается это следующим образом: мы выделили вот этот наш кусок кода, потом идем "текст бог", и здесь есть команда "форматировать выполнимые", и у нас получился вот такой более красивый код. Рекомендую вам в вашей работе всегда использовать форматирование вот этим образом делать не надо, потому что те, кто потом будут после вас работать с этой вашей программой, у них будет идти кровь из глаз, и они будут материться. Поэтому, чтобы все было красиво, 5 chi ri днем форматирование. Так вот, здесь вот мы с вами это "начало", "конец" ставим сюда в качестве параметров цикла. То есть, здесь в цикле мы можем использовать какие-то переменные, и единственное, что они должны быть целыми. То есть, здесь дробные переменные мы использовать не можем. Давайте попробуем теперь эту процедуру выполнить, например, у начала будет 5 из 15. Ну, и давайте сообщение немножко доработаем, чтобы было более красивое и понятное. То есть, мы здесь делаем, что у нас единицы деленная на "n", то есть вот так вот сделаем. Так, хорошо, сохраним и перезапустим. Всё, теперь мы посчитали. А давайте попробуем наоборот, от 15 до 5. Ничего не произошло, потому что у нас левый параметр должен быть всегда меньше правого параметра. Но если они будут равны, допустим, сделаем от 5 до 5. Вот так вот. Так, закроем, то у нас одна операция все-таки произойдет. То есть, какое мы имеем сейчас вывод, что первый параметр цикла должен быть всегда меньше или равен второму параметру цикла. Это имейте в виду, противном случае здесь не работают. То есть, обратный цикл в 1С неосуществим. Давайте мы вот этот цикл занесем сюда в это наш условия по нам не мешался. Так, свернем.

В том случае, если нам необходимо использовать какой-то другой вариант цикла, например, цикл от большего к меньшему или наоборот, цикл с какой-то очередностью, например, вот 2, 4, 6, 8 и так далее, то в 1С необходимо использовать цикл "пока". Сейчас я вам покажу, как с ним работать. Этот цикл довольно-таки простой. То есть, нас пишется ключевое слово "пока", после этого пишется какой-то булево условие. Пока это условие у нас истина, цикл выполняется. Когда это условие настанет "хошь", цикл перестанет работать. Ну, давайте мы с вами сделаем такой простой пример, в котором будем выводить число "n" от 10 до нуля. То есть, у нас "n" равно 10 изначально. Мы ставим, и у нас пока "n" больше нуля, мы этот цикл выполняем. То есть, у этого цикла примерно такой же похожий синтез, как у цикл, которую мы с вами изучали только что. То есть, пишется ключевое слово "пока", после этого пишется какое-то логическое условия. Вот это вот. Причем здесь не обязательно должно быть логическое, здесь может быть и какой-то и булево условия. После этого пишется ключевое слово "цикл", идут оператора цикла, какие-то, которые будут выполняться, пока цикл работает, и в конце обязательно, обязательно пишется ключевое слово "конец цикла". Ну, давайте мы выведем "сообщить" вот это "m", и обязательно теперь "n" уменьшим, потому что если мы с вами не будем изменять те, ну, наш цикл будет бесконечно выполняться. То есть, "n" равно 10, паша следующей итерации, и на 5 равно 10 и так далее. У нас программа выглядит по ошибке, потому что, ну, не может у нас бесконечно она выполняться. Здесь такого нету. И давайте мы это "n" уменьшим. Делать мы это будем с помощью рекурсии. То есть, мы сейчас изменим сумму "m". Нас "n" равно "n" минус 1. То есть, нас "nb" 10 вычли 1, но стало 9 и так далее. Так, хорошо, давайте сохраним и перезапустим 1С:Предприятие. Посмотрим, как у нас будет это все работать. И все, теперь у нас "n" пошел от 10 до 1. И также мы можем сделать, чтобы у нас выходило с определенным шагом. Допустим, вот в этом цикле "для цикл", который мы только что изучали, мы не можем работать шагом. То есть, она сначала "n" равно там одному, потом двум и так далее. То есть, он у нас сюда увеличивается на единицу. Здесь же в этом цикле мы можем создать любой шаг, который хотим. Например, мы можем сделать шагом 3, 10. Давайте выведем шагом 10. То есть, мы не будем мешать на 10. Но поскольку у нас здесь так уже 10, давайте им 115, ауди 190 и так далее, пока не идет до 0. 0 у нас не выведется, потому что "n" нас должно быть больше 0. Если же мы хотим, чтобы 0 вывелся, давайте мы вот "больше либо равно" сделаем. Так, хорошо, давайте посмотрим, как он будет работать. Вот все у нас вывелось от 100 до нуля. Причем здесь вот условие цикла "пока" не обязательно писать именно какой-то такой вот условия булево. Мы можем написать здесь какую-то булеву переменную. Например, давайте напишем "перемена проверка". Сразу же сделаем проверку, что "n" больше либо равно 0. Так вот. И теперь эту проверку будем использовать вот здесь вот в цикле. То есть, вот эта проверка у нас булева переменная, и мы можем с вами использовать ее в цикле. И сейчас самое главное, нам необходимо проверять вот эту переменную "проверка". Также оно истинно или ложь, потому что в противном случае у нас получится бесконечный цикл. У нас проверка будет истина, мы зашли в цикл, и она у нас так и осталась истина. То есть, каждый итерации цикла она будет равна истина, и цикл опять станет бесконечным, что, конечно же, плохо. Давайте сделаем вот эту проверку еще раз. Все, давайте сохраним, обновим. 5 я забыл закрыть. И давайте запустим. Всё у нас все посчиталась. Заметьте, замечательно. В этом цикле мы, кстати, можем также применять операторы "прерывайте" "продолжить", которые будут работать точно так же, как и в предыдущем цикле "для цикл". Так, давайте мотоцикл также с вами сделал в процедуре. То есть, в этой процедуры уже будут три параметра: это начальное число, конечное число и шаг. И сюда мы это 100. И давайте сделать так. Теперь вот этот шаг у нас будет вот здесь вот. То есть, мы будем уменьшать на шаг начальное число будет это, конечное число, конечное число у нас будет вот это, и вот это вот таким образом. Так, хорошо. И теперь давайте эту процедуру будем использовать. Ну, давайте начальное пусть у нас будет 1000, конечное пусть будет 500. Сделаем шаг, сделаем 50. И выведем все это. Все, вот у нас появился соответствующий ряд. Все, мы с вами сейчас познакомились с двумя циклами. И третий цикл мы с вами изучим тогда, когда будем изучать уже коллекции значений. На этом мы закончим изучать основные операторы. Их, конечно, больше. Потом, возможно, когда в каких-то новых уроках появится какой-то новый оператор, я буду пояснять об этом операторе, или вы сами самостоятельно почитайте о нем справки. Почти в любом модуле, ну, кроме общих модулей, мы можем создать какой-либо обработчик события. Что такое обработчик события? Это какая-то процедура, которая реагирует на определённые события. То есть, например, в этом вот модуле приложения мы можем создать обработчик события, то есть процедуру, которая будет реагировать на старт нашего приложения, на его запуск. И наоборот, мы можем создать обработчик события, который будет реагировать на прекращение работы нашего приложения. Также с нато создать обработчик события делается это достаточно просто. Мы выделяем этот модуль, то есть нам необходимо поставить на него курсор, идем "текст", и вот здесь есть команда "процедуры и функции". У нас открылось окно процедуры и функции. В этом окне перечислены все процедуры и функции, которые есть наши модули, но также перечислены и обработчики событий. То есть, вот эти стройки - это название процедур обработчиков событий, которые идут вот в таких вот скобках. Если мы с вами выделим такую процедуру, нажмем на кнопку "перейти", то у нас будет создан обработчик события. Причем, заметьте, этот обработчик события был создан после перечисления всех вот этих наших процедур, которые мы сейчас сделали в этом модуле самостоятельно, но до того кода, который мы написали в этом же модуле. Кем мы с вами что-то там выводим. Вот этот обработчик события "при начале работы системы" он срабатывает когда? Когда наша система была запущена. Давайте выведем им какое-нибудь сообщение: "наша система запущена". Всё. И сейчас я, если мы с вами сохраним, обновим конфигурацию базы данных и запустим 1С:Предприятие, то выйдет это сообщение: "наша система запущена". Также мы в этом обработчике событий можем использовать вот все те процедуры и функции, которые мы с вами только что сделали. Вы давайте вот сейчас, когда у нас система запущена, попробуем посчитать "сигнум". Причем я могу это сделать прямо вот здесь вот в качестве аргументов функции "сообщить". Ну, пусть это будет число 100. Давайте им сообщение мы видим. И на всякий случай, штуку я это все сделаю, у нас "сигнум" возвращает число, но чтобы вот при этой конкатенации не было никаких проблем и ошибок возможных, а может и будет, а может и не будет, на всякий случай, а вот этот результат, который возвращает функция "сигнум", как убрать из трубку, сделал я это при помощи метода "строка". Давайте сохраним, обновим. Опять я забыл закрыть. Обновим и запустим опять 1С:Предприятие. Всё, вот у нас "сигнал" отставка считался. Я его неправильно назвал "сигнум". То есть, мы сами в модулях можем создавать определённые обработчики событий, которые срабатывают на те или иные события. Посмотреть на эти обработчики событий можно вот либо при помощи этой иконки "процедуры и функции", либо при помощи вот этой команды "процедуры и функции". У нас здесь уже обработчик событий "при начале работы системы" созданы. Мы можем просто уже перейти в него. Ключи, вот он активируется, то есть установится на него курсор, посмотреть, что из себя представляет тот или иной обработчик события. Для модуля приложения можно "syntax помощники". Давайте зайдем в него, и здесь вот в каталоге "глобальный контекст" есть у нас такой каталог, который называется "события приложения". Вот здесь все эти события приложения, которые у нас есть. Давайте мы на них посмотрим. Поставим курсор на модуль "кекс", "процедуры и функции". То есть, вот они у нас в принципе есть эти события. При глобальном поиске, например, мы здесь вот в этой информации, которая идет "синтез помощники", можем почитать, каких случаях вызывается у нас этот обработчик. Мы сейчас сами поработали с модулем приложения. На этом мы закончим. Давайте его закроем и откроем "модуль сеанса". Также мы выделяем корень нашего дерева конфигурации, правой клавишей мышки вызываем контекстное меню, и здесь выполняем команду "открыть модуль сеанса". Давайте посмотрим, какие у "модули сеанса" есть обработчики событий. Идем "текст", "процедуры и функции". У него есть только один обработчик событий "установка параметров себя". Зачем этот обработчик у нас запускается в момент старта нашего приложения. Давайте мы сейчас это сделаем. Мы создадим параметр сеанса, и вот в этом обработчике будем устанавливать ему значения. Так, давайте создадим параметр сеанса. Мы с вами это еще не делали, и это делается вот в этой ветке "общее". Здесь, в этой ветке "общее", есть пункт "параметр сеанса". Давайте добавим этот параметр сеанса и назовем его "имя компьютера". Это у нас будет строка, длина также пусть будет 10. И теперь давайте установим значение этому параметру сеанса. Как это делается? Пишется свойство глобального контекста, которое так и называется "параметры сеанса". Я сейчас нажал Ctrl+пробел, у меня вышел вот эта подсказка, и здесь в этой подсказке мы выбираем вот этот вариант "параметры сеанса". Если сейчас я поставлю точку, то у меня будет список всех параметров сеанса, которые у нас есть. У нас только один параметр сеанса - это "имя компьютера". И давайте ему установим. Узнать имя компьютера можно при помощи метода глобального контекста, который так и называется "имя компьютера". Всё, мы с вами установили параметр сеанса. Вот этот параметр сеанса мы с вами можем получить только в серверном контексте. Про серверный контекст я расскажу вам чуть позже. Пока же мы просто вот оставим как это есть, а потом к этому вернемся. И теперь давайте посмотрим на обработчики событий, которые есть в других модулях. Например, нас у справочников есть "модуль объекта" и "модуль менеджера". У каждого из этих модулей есть свои обработчики событий, которые срабатывают на это событие. Например, у модуля справочника есть такие обработчики событий: "прочитать", "про каждый" этот обработчик события, когда он срабатывает и на что он срабатывает, вы также можете в "syntax помощники". Давайте откроем "syntax помощник" и с вами посмотрим на те же справочники, прикладные объекты, справочники, справочник менеджер, вернее, это не справочник менеджер, это справочник объект. Ну, что мы модули объекта, значит, это у нас соответственно справочник объект. У него есть вот такие вот события. Мы можем почитать, например, про события "при записи", то есть она возникает при записи объекта, или там "перед записью", она возникает перед записью объекта. Причем есть параметр "отказ". Тут мы можем отменить эту запись. Подробно о работе с объектами сейчас не будем останавливаться, потом по этому вопросу будет отдельный урок. И так же у нас есть обработчики событий "модуле менеджера". Тоже мы можем на них посмотреть. На этом я закончу этот урок. В этом уроке вы узнали об основных операторах встроенного языка программирования в 1С. Следующем уроке мы с вами научимся работать и программировать управляемом приложении. Я обыщу, какие виды доступности есть, что такое тонкий клиент, толстый клиент, что такое клиентский контекст и серверный контекст. Это мы будем все с вами проходить в следующем уроке. А сейчас я рекомендую вам, во-первых, сделать все примеры из этого урока. Это раз. Во-вторых, я рекомендую вам выполнить домашнее задание. Это два. База вот с этим урокам и база с домашним заданием есть у меня выгрузки, и вы можете восстановить эту информацию и потом проверить правильность выполнения своей работы. Так же обязательно подписывайтесь на мой канал, если вы это еще не сделали. Ставьте лайк этому видео, и тем самым вы поможете мне продвинуть это видео, и больше людей увидит этот урок. И также вступайте в группы в соцсетях, куда я бы тут параллельно выкладывать это видео на случай блокировки YouTube. Всего доброго, спасибо вам за внимание, продуктивного и эффективного обучения. До встречи!