Найти в Дзене
Заметки об 1с

Практическое пособие разработчика, занятие 5. (Радченко)

Занятие 5 у нас теоретическое, и вопросов к этому занятию нет. Но я постараюсь пересказать эту главу более понятным языком. Поэтому сначала читайте главу, потом читайте меня. А если не поняли, то ничего страшного, потом произойдет понимание)
Итак, сначала рассказывают, что для всех объектов можно создать Формы, а там, где формы будут не созданы в конфигураторе, платформа при запуске сама создаст их "на лету". На самом деле в вашей жизни программиста такого не будет, автоматическая форма никогда не нужна, и вы всегда будете создавать или редактировать типовые формы.
Что вообще такое форма простым языком? Это некое окно, в котором работает пользователь, и мы, как программисты, обрабатываем действия пользователя в этом окне и производим манипуляции с данными.
Жмем правым кликом мыши на вкладке "Формы" и можем создать нужную нам. Например, у документа Приходная накладная: Основную форму мы добавили на уроке, можем добавить еще форму списка (как будет отображаться окно со списком документо

Занятие 5 у нас теоретическое, и вопросов к этому занятию нет. Но я постараюсь пересказать эту главу более понятным языком. Поэтому сначала читайте главу, потом читайте меня. А если не поняли, то ничего страшного, потом произойдет понимание)

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

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

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

-2

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

-3

Видите, тут появились уже чисто "табличные" фишки, типа "ПриАктивизацииСтроки", "НачалоПеретаскивания" (перетаскивания строк) и т.д.

А если мы перейдем на самый верхний уровень формы, то у формы в целом тоже будет куча событий!

-4

Ну сделаем самое простое. Создадим событие "ПриСозданииНаСервере" и напишем "листинг":

-5

Перейдем в конфигуратор, откроем документ "Приходная накладная" (или создадим новый):

-6

В общем, понятно. При создании формы теперь всегда будет выходить это сообщение. Да, вас может напутать, а почему у нас есть "ПриСозданииНаСервере" и "ПриОткрытии", ведь мы же открыли документ, а не создали новый... это уже особенности терминологии. В общем, форма всегда "создается", и к созданию документа/открытию существующего документа это никак не относится. Если кратко, то алгоритм такой:
- платформа создала форму, но еще не показала её пользователю (и не передала на клиент);
- происходят действия, описанные в процедуре "ПриСозданииНаСервере" (в нашем случае сообщает приветствие);
- передаем форму на клиент;
- происходят действия, описанные в обработчике "ПриОткрытии()".

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

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

-7

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

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

-8

Как быть крутой переменной? Задать её заранее (но так делают не часто)

-9

Такой код при изменении количества запишет переменной цифру 1, а при изменении цены сообщит цифру 1.

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

-10

То есть обращение к дате будет Объект.Дата.
А так же можем обратиться непосредственно к самой форме, и поиграться с её внешним видом - то можем пользоваться ЭтотОбъект. (хотя я к элементам формы обращаюсь через Элементы.). Обратите внимание, идет доступ к конечной цели "через точку". Сам Объект - это совокупность всех вещей, которые видим на скриншоте, и через точку уже доходим до нужного.

Правило 4. В платформе уже есть свои методы, к которым мы можем обратиться. Например, узнать текущую дату. Эти методы называются методами и функциями глобального контекста. Их много, все знать наизусть не нужно, но глазами просмотреть и вообще сначала гуглить, прежде чем сидеть и изобретать велосипед). Например, функция ПолучитьСклоненияСтроки. Мы ей даем на вход какую строку хотим склонить, какой род и какой падеж, а она сама возвращает нам нужное. Ну не круто ли? И ничего изобретать не нужно:

-11

Правило 5. Особо понравившуюся процедуру можно вызывать из других мест (если у процедуры написать слово "Экспорт"). Тут есть свои нюансы, но как-нибудь потом)

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

-12

и дальше в синтакс-помощнике ищу нужный раздел.

Дальше идет изучение отладчика. В общем, коротко - отладка - это способ прогнать свою программу построчно. Как я это делаю - создаю точку останова (как в учебнике, два раза кликаю мышкой слева)

-13

Запускаю 1с и выполняю процедуру, чтобы точка останова сработала. В табло я перетаскиваю интересующие меня переменные (просто выделяю мышкой что мне интересно и тащу вниз в табло) и перехожу по строкам кода с помощью клавиши F11 (я пользуюсь именно ей потому что мне часто надо "проваливаться" глубже, на следующие уровни. Если проваливаться не надо, то пользуюсь F10). Там рассказано про табло и вычисление выражений, но как будто бы для начального этапа можно работать и так:

-14

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

Ну и последним этапом в этой главе идет краткое погружение в 1сный клиент-сервер. Вроде там все лаконично написано и вопросов не вызовет. А если и вызывает - пока не парьтесь, для начала обучения этот вопрос можно до конца и не понимать, разберемся с ним чуть позже)