Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Павел Чистов. Конспект к курсу Комплексная подг...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
28.21 Mб
Скачать

Занятие 1.02

Представление объекта на примере справочника «Сотрудники»:

Реквизиты – на основе настроек реквизитов система определяет их представление в формах. Влияют на структуру таблиц БД.

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

Модуль формы – для описания событий, связанных с формой, поведения формы.

Можно наделить форму определенным поведением по умолчанию, если связать ее с прикладным объектом (справочником, документом и т.д.)

Также можно создать независимую форму, тогда все ее события придется описывать самостоятельно.

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

Макеты – для вывода данных.

В справочник «Сотрудники» добавим признак «Работающий/Уволенный». В зависимости от настройки этого реквизита будем описывать проверку заполнения даты рождения.

Добавим реквизит «Работающий»:

Имя – Работающий.

Синоним – Работающий.

Тип – Булево.

Чтобы проверка заполнения реквизита «Дата рождения» в зависимости от признака «Работающий» выполнялась, необходимо создать форму элемента справочника самостоятельно.

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

Создадим форму элемента справочника «Сотрудники» с помощью конструктора:

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

Один из реквизитов (объектов) формы может являться «Основным» (помечен жирным). Его тип определяет поведение формы по умолчанию.

Можно добавить собственные реквизиты, которые не будут записываться в БД.

Если надо описать собственные команды, т.е. создать дополнительные кнопки на форме, то на правой верхней панели надо перейти на закладку «Команды». При создании команды, в модуле формы записывается определенная процедура (функция), которая будет выполняться.

Если надо перехватить какое-либо системное событие формы, то на левой верхней панели двойным щелчком или через меню ПКМ «Формы» надо открыть свойства формы и там выбрать событие, которое надо перехватить.

В примере это будет событие «ПередЗаписью» - отрабатывает на форме со стороны клиента:

&НаКлиенте

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

// Вставить содержимое обработчика.

КонецПроцедуры

«&НаКлиенте» - директива процессору компиляции для обозначения места выполнения процедуры. Процедуры в форме могут исполняться либо «На клиенте», либо «На сервере».

«На клиенте» - пользователь работает только с формой, не может обратиться к структуре БД (построить запрос и т.д.). К структуре БД можно обратиться только через вызов другой процедуры, которая, в свою очередь, выполняется «На сервере»

Процедуру можно вызвать в любом месте модуля (перед или после ее описания), написав ее название.

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

Синтаксис:

Процедура ИмяПроцедуры([Параметр1, Параметр2])

КонецПроцедуры

В примере система вызывает процедуру самостоятельно и передаваемые параметры нужны для управления событиями, связанными с записью:

Отказ – флаг отказа от записи в систему.

Операторы друг от друга отделяются символом «;».

Например, Оператор условия:

Если УСЛОВИЕ Тогда

// Истина

Иначе

// Ложь

КонецЕсли;

Оператор объявления переменной:

Перем ИмяПеременной;

Дата в 1С записывается в формате:

Дата = ‘ГодМесяцЧислоЧасыМинутыСекунды’

Сегодня = ‘20120709033759’

Для повышения читабельности в дату можно добавить незначащие знаки (любые знаки, не являющиеся числом):

Дата = ‘Год-Месяц-Число Часы:Минуты:Секунды’

Сегодня = ‘2012-07-09 03:37:59’

Если при описании даты не указывать ЧасыМинутыСекунды, то это всегда будет 00 часов, 00 минут, 00 секунд.

Сегодня = ‘2012-07-09’ // 00:00:00

Пустая (незаполненная дата) – первое число первого месяца первого года:

ПустаяДата = ‘00010101’

Процедура примера:

&НаКлиенте

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

Если Объект.Работающий И Объект.ДатаРождения = '00010101' Тогда

Сообщить("Не заполнена Дата рождения");

Отказ = Истина;

КонецЕсли;

КонецПроцедуры

Теперь, если стоит галочка «Работающий» и поле «Дата рождения» не заполнена, то будет выдаваться ошибка:

Если дату заполнить, то сотрудник запишется. Если признак «Работающий» снят и поле «Дата рождения» не заполнено, то сотрудник тоже запишется

Синтаксис:

Числа:

А = 10; // положительное

Б = -45; // отрицательное

В = 1.78; // дробное

«+» «-» «*» «/» «%» - действия над числами.

«%» - остаток от деления.

А = 10 % 3 //ответ 1

А = 10 % 4 //ответ 2

При написании кода система не воспринимает регистр, пробелы, знаки переноса строки и т.д.

Дата:

Всегда включает часы, минуты и секунды. К дате всегда можно добавить число:

Сегодня = ‘20120709033759’

Завтра = Сегодня + 86400 // + сутки

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

От большей даты можно отнять меньшую дату. в результате получится разница В СЕКУНДАХ. Если разделить ее на 86400, то получится результат в днях.

Булево:

А = Истина;

Б = Ложь;

А = 10 < 3;

А = 10 = 10 ИЛИ 3 <> 5; // результат «Истина»

В = НЕ А; //результат «Ложь»

Строка:

А = «Строка»;

Конкатенация:

А = «Строка1» + «Строка2»; // результат «Строка1Строка2»

Многострочные строки – первая строка не заканчивается символом кавычки, а вторая и последующие будут начинаться с символа «|». Последняя строка закрывается символом кавычки и «;»

А = «Строка1

|Строка2

|Строка3»;

Если между записями поставлены пробелы, то они распознаются как символы переноса строки:

А = «Строка1» «Строка2» «Строка3»; // результат «Строка1

Строка2

Строка3»

Процедура:

Процедура Сумма(Перам1, Парам2)

КонецПроцедуры

При вызове данной процедуры используется ее имя и передается два параметра:

Сумма(10, 20);

Один параметр передавать нельзя. Это приведет к ошибке.

Если в процедуру будут передаваться переменные, то они будут передаваться «По ссылке», а не «По значению»

А = 10; Б = 20;

Сумма(А, Б);

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

Процедура Сумма(Перам1, Парам2)

Парам1 = 0;

КонецПроцедуры

А = 10; Б = 20;

Сумма(А, Б);

После отработки процедуры А = 0.

Если надо прервать эту связь, то надо перед принимаемым параметром написать ключевое слово «Знач»

Процедура Сумма(Перам1, Знач Парам2)

Парам1 = 0;

Парам2 = 0;

КонецПроцедуры

При этом «Парам2» будет являться не синонимом переменной «Б», а его копией. Действия с «Парам2» внутри процедуры никак не отразятся на переменной «Б».

Если предполагается вызов процедуры из других модулей, то процедура записывается с ключевым словом «Экспорт»:

Процедура ИмяПроцедуры() Экспорт

КонецПроцедуры

Модули конфигурации:

  • Модуль управляемого приложения – описание событий интерактивного старта и завершения системы в режиме управляемого приложения.

  • Модуль сеанса.

  • Модуль внешнего соединения.

«Дерево – Конфигурация – ПКМ – Модуль управляемого приложения»

кнопка «ПРОЦ» - список событий формы.

Нам нужно событие «ПриНачалеРаботыСистемы» - отрабатывает при запуске системы.

Процедура ПриНачалеРаботыСистемы()

Предупреждение("Добро пожаловать!", 5);

Сообщить("Сегодня " + ТекущаяДата());

КонецПроцедуры

Если

Сообщить(ТекущаяДата() + "Сегодня");

то при запуске в режиме исполнения будет ошибка:

Это вызвано тем, что «Сегодня» - это строковое выражение, и когда к нему присоединяется «ТекущаяДата()», то ее тип преобразуется в строковое значение.

«ТекущаяДата()» имеет тип «Дата», а к дате можно прибавить только число, а слово «Сегодня» числом не является, из-за этого возникает ошибка. Система пытается преобразовать значение «Сегодня» к типу число, но не может.

Результат: