Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на платформе 1С Предприятие 8.3. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
2.2. Виды данных информационной базы
31
Для работы с объектными данными существуют два основных типа:
ссылка и объект.
Ссылка
Используется везде, где требуется однозначно идентифицировать
объект базы данных.
Фактически является значением внутреннего идентификатора. Ссылки можно сравнивать между собой. Две ссылки считаются
равными, если они содержат один и тот же идентификатор одного и того же вида объекта.
Используется только для доступа к данным объекта на чтение.
Объект
Предназначен для модификации (чтения и изменения) данных, со-
держащихся в объекте базы данных. Остальные типы данных встроенного языка позволяют только читать информацию базы данных.
Используется при создании новых объектов, для редактирования и
удаления существующих объектов, а также для отображения и редактиро­вания всех данных объекта в форме объекта.
К необъектным данным относятся все виды регистров, константы,
последовательности. Их отличительные особенности перечислены ниже.
Не имеют собственной ценности и полностью описываются значе-
ниями своих полей.
Представляют собой записи, для которых не поддерживаются
внутренние уникальные идентификаторы.
Удалив некоторую запись и создав новую с точно такими же зна-
чениями полей, мы получим то же самое состояние базы данных, которое было до удаления записи.
Представляют собой набор записей, которые хранятся в таблице. Каждая из этих записей полностью описывается значениями своих
полей. Запись можно удалить, а затем создать новую, с такими же значени­ями полей.
Для чтения, модификации и удаления необъектных данных исполь-
зуется тип данных Набор записей. Он представляет собой коллекцию от­дельных записей, принадлежащих некоторому объекту конфигурации.
2. Встроенный язык
32
Для наборов записей не существует понятия удаления. Их можно только записать, причем запись может быть выполнена либо с замещением суще­ствующих записей, либо с добавлением новых записей к существующим. Для удаления всех записей нужно записать новый пустой набор записей.
2.3. Типы данных встроенного языка
Все типы данных встроенного языка можно разделить на 3 кате­гории:
примитивные типы – простые типы, для которых можно задать константу;
типы, образуемые в прикладном решении – соответствуют объек- там, созданным разработчиком в дереве конфигурации; предназначены для работы с этими объектами средствами встроенного языка;
типы, предопределенные во встроенном языке – объекты сложной структуры, создаваемые и обрабатываемые исключительно средствами встроенного языка (список значений, таблица значений, массив, структура).
Примитивные типы предназначены для переменных, используемых в программных модулях, и полей информационной базы. Используются следующие типы.
Null – пустая ссылка на объект базы данных. Константа – Null. Это значение может появиться в поле базе данных после удаления объ­екта, на которое ссылалось данное поле. Значение Null может также по­явиться в таблице, которая выступает результатом выполнения запроса к базе данных.
Булевский – имеет 2 значения: Истина и Ложь, которые и явля- ются его константами. Операции – сравнение (= <> < <= > >= ), логические (И, ИЛИ, НЕ). Порядок операций – НЕ, И, ИЛИ. При сравнении Ложь счи­тается меньше, чем Истина.
Числовой – число, в общем случае с дробной частью. Записыва- ется в виде целого, либо в виде десятичного с фиксированной точкой: 50 или 50.5. Чисел с плавающей точкой в системе нет. Фактически – это цело­численный тип. Все операции производятся над целыми числами, а дроб­ное значение получается применением показателя точности, т.е. переносом
2.3. Типы данных встроенного языка
33
запятой на заданное количество разрядов влево. Операции над числовыми данными: +, -, *, /, % (остаток от деления), сравнение (<, <=, >, >=, =, <>).
Строковый – строка символов в формате Unicode. Константа
этого типа заключается в двойные кавычки. Например “Пример константы строки”. Операции над строковыми данными: + (конкатенация), сравнение
(<, <=, >, >=, =, <>).
Дата – значение даты от рождества Христова и время с точностью
до секунды, в формате: ‘ГГГГММДДччммсс’. Константа этого типа указы­вается в одинарных кавычках с разделителями или без них: '25.10.08 10:15:25' или '25102008101525'. В значении даты время можно опустить – оно будет считаться равным 00:00:00. Операции над датами: сложение даты и числа (к дате прибавляется заданное число секунд), разность даты и числа, разность дат – количество секунд между этими датами, сравнение дат (более поздняя дата считается большей). Операции сложения дат не су­ществует.
Неопределено – пустое значение, не принадлежащее ни к одному
типу. Имеет единственное значение Неопределено. Этот тип имеет пере­менная, которой не присвоено никакого значения. Некоторые системные функции возвращают значение Неопределено, если не удалось найти задан­ный результат.
Типы, образуемые в прикладном решении, определяются деревом объектов конфигурации, созданным в конфигураторе при разработке при­ложения. Такие типы создаются в конкретном прикладном решении в мо­мент добавления в конфигурацию какого-либо объекта метаданных. Например, справочника, документа и т.п. Эти типы создаются платформой автоматически и позволяют работать с данными, хранящимися в тех струк­турах, которые описываются созданным объектом конфигурации.
Перечень таких типов перечислен в табл. 2.1.
Например, при добавлении в дереве конфигурации справочника Но­менклатура, в приложении будут созданы типы данных:
СправочникМенеджер.Номенклатура
СправочникСсылка.Номенклатура
СправочникОбъект.Номенклатура
СправочникВыборка.Номенклатура.
2. Встроенный язык
34
Таблица 2.1
Типы, образуемые в прикладном решении
Объект
Тип данных
Мене-
джер
Вы-
борка
Ссылка
Объект
Набор
значений
Запись
Ключ
записи
Константа
+
Журнал документов
+
+
Перечисление
+ +
Справочник
+ + +
+
Документ
+ + +
+
Бизнес- процесс
+ + +
+
Задача
+ + + +
Отчет + + Обработка
+
+
Последователь­ность
+
+
+
Регистр сведений
+
+
+ + +
Регистр накоп­ления
+
+
+ + +
К типам, предопределенным во встроенном языке, относятся массив, список значений, таблица значений и структура. Все эти типы являются наследниками универсальной коллекции значений. К ним можно приме­нять методы и свойства универсальной коллекции.
Массив является простейшей коллекцией значений. Можно описать многомерные массивы, массивы с фиксированной длиной и динамические массивы. Работу с массивами рассмотрим на практических примерах.
2.3. Типы данных встроенного языка
35
Работа со статическим массивом
Массив = Новый Массив(99); // Создать массив из 99 элементов Для сч = 0 По Массив.Количество() – 1 Цикл Сообщить(Массив[сч]); // Вывод значений элементов массива КонецЦикла;
Работа с динамическим массивом
Массив = Новый Массив();// Создать массив без элементов Массив.Добавить(10); // Добавить 3 элемента со значениями 10, 20, 30 Массив.Добавить(20); Массив.Добавить(30); … Для сч = 0 По Массив.Количество() – 1 Цикл Сообщить(Массив[сч]); КонецЦикла;
Описание многомерного массива
МногомерныйМассив = Новый Массив (2, 4, 10); Список значений – это коллекция значений, представляющая таб-
лицу с фиксированным набором колонок (полей):
значение – обязательно для заполнения, собственно значение в
списке;
представление – текстовое представление значения для отображе-
ния в интерфейсе;
пометка – значение булевского типа (Истина или Ложь); картинка – значение типа картинка, изображающее элемент.
Все поля, кроме значения, необязательны. Пример. Составить список всех имеющихся в конфигурации доку-
ментов и вывести пользователю их имена и синонимы.
СЗ = Новый СписокЗначений; // Создаем пустой список значений //На всякий случай сразу ее очищаем СЗ.Очистить(); //Начинаем перебирать все имеющиеся документы Для Каждого Документ Из Метаданные.Документы Цикл
//Добавляем информацию об очередном документе в наш список
СЗ.Добавить(Документ.Имя, Документ.Синоним);
2. Встроенный язык
36
КонецЦикла; //Теперь выводим все содержимое нашего списка значений
Для сч = 0 по СЗ.Количество() - 1 Цикл
Сообщить("Представление: " + СЗ[сч].Представление + "; Значение: " + СЗ[сч].Значение);
КонецЦикла;
Таблица значений – более функциональный вариант списка значе­ний с переменным количеством колонок. Этот тип обладает следующими возможностями, которых нет у списка значений.
1. Колонки – можно создать сколько угодно колонок и использовать
их в своих целях. Каждая колонка может быть как определенного типа, так и произвольного.
2. Итоги – для числовых колонок имеется возможность подсчета ито-
гов по колонке.
3. Сортировка строк.
4. Поиск строк.
5. Группировка по значению (Свертывание).
Пример работы с таблицей значений
//Создаем таблицу значений
ТЗ = Новый ТаблицаЗначений;
//Определяем колонки Товар, Количество и Сумма
ТЗ.Колонки.Добавить("Товар");
ТЗ.Колонки.Добавить("Количество");
ТЗ.Колонки.Добавить("Сумма");
//Заполняем таблицу значений данными 3 строк
НоваяСтрока = ТЗ.Добавить();
//Записываем данные в каждую колонку
НоваяСтрока.Товар = "Огурец";
НоваяСтрока.Количество = 5;
НоваяСтрока.Сумма = 25;
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Товар = "Морковь";
НоваяСтрока.Количество = 10;
НоваяСтрока.Сумма = 15.5;
2.3. Типы данных встроенного языка
37
НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Товар = "Огурец"; НоваяСтрока.Количество = 9; НоваяСтрока.Сумма = 45; //Перебираем строки ТЗ и выводим содержимое в окно служебных
сообщений
Для Каждого СтрокаТЗ Из ТЗ Цикл
Сообщить("Строка таблицы значений: "); Сообщить(""); Сообщить("Товар: " + СтрокаТЗ.Товар); Сообщить("Количество: " + СтрокаТЗ.Количество); Сообщить("Сумма: " + СтрокаТЗ.Сумма);
Сообщить("-------------------"); КонецЦикла; //Посчитаем итоговую сумму по всем строкам
Сообщить ("Всего товаров на сумму: " + ТЗ.Итог("Сумма"));
Сообщить("Общее количество: " + ТЗ.Итог("Количество")); //Теперь посчитаем общие количество и суму за огурцы ТЗ.Свернуть("Товар", "Количество, Сумма"); //Теперь после сворачивания строка с огурцами будет одна, а не две Структура – это коллекция, состоящая из пар: ключ – значение.
1. Ключ может быть только строковым и должен удовлетворять тре-
бованиям, предъявляемым к именованию переменных встроенного языка.
2. Значение – значение любого типа.
Структура используется для хранения небольшого количества зна-
чений, каждое из которых имеет свое имя. Обычно структура используется для задания отбора (фильтра) по заданным значениям полей, где ключ вы­ступает как идентификатор поля, а значение – задает значение, по которому выполняется фильтрация.
Пример. Такая структура может быть использована для создания
фильтра по заданным товару и складу.
Струк = Новый Структура: Струк.Добавить(«Товар», СсылкаНаТовар); Струк.Добавить(«Склад», СсылкаНаСклад); Для сч = 0 Струк.Количество() - 1 Цикл
2. Встроенный язык
38
Сообщить(«Товар: » + Струк.Товар + « Склад: » + Струк.Склад) КонецЦикла
2.4. Операторы встроенного языка
Оператор присваивания
Назначение = Источник
Назначение – переменная или свойство объекта встроенного языка,
которое допускает запись.
Источник – выражение, значение которого необходимо присвоить. Первое присваивание значения некоторой переменной выполняет
роль ее объявления в программе и задает ее тип по типу присвоенного зна­чения. Это правило является источником множества ошибок программного кода, связанных с ошибочным наименованием одной и той же переменной. Система такие ошибки не распознает, а создает новые переменные. В связи с этим рекомендуется сложные и составные имена переменных копировать в текст программы через буфер обмена.
В правой части оператора присваивания можно использовать услов-
ное выражение
?(ЛогическоеВыражение, Выражение1,Выражение2)
ЛогическоеВыражение – любое выражение, результат которого
имеет булевский тип, например сравнение.
Выражение1 – вычисляется, если ЛогическоеВыражение истинно. Выражение2 – вычисляется, если ЛогическоеВыражение ложно.
Пример.
Статус = ?(ПолучитьСкидку() > 10, “Особый клиент”, “Обычный
клиент”);
Условный оператор
Если ЛогическоеВыражение1 Тогда
// Операторы
[ИначеЕсли ЛогическоеВыражение2 Тогда]
// Операторы
[Иначе]
// Операторы
КонецЕсли;
2.4. Операторы встроенного языка
39
ЛогическоеВыражение – любое выражение булевского типа. Операторы, следующие за Тогда, выполняются, если ЛогВыражение1
истинно. ЛогическоеВыражение2 - вычисляется, если ЛогическоеВыраже­ние1 оказалось ложным. При истинности ЛогическогоВыражения2 выполня- ются операторы, следующие за соответствующей ему Тогда-частью.
Конструкций ИначеЕсли может быть неограниченное количество
или они могут отсутствовать. Операторы, следующие за Иначе, выполня­ются, когда все предшествующие ЛогическиеВыражения имели значение Ложь. Иначе-часть может быть только одна или вообще отсутствовать.
Пример.
Вывести описание текущего дня недели – воскресенье, суббота или
рабочий день.
Если ДеньНедели(ТекущаяДата()) = 6 Тогда
Сообщить(“Сегодня суббота”); ИначеЕсли ДеньНедели(ТекущаяДата()) = 7 Тогда
Сообщить(“Сегодня воскресенье”); Иначе
Сообщить(“Сегодня рабочий день”); КонецЕсли
Оператор перехода Перейти Метка;
Выполняет передачу управления на оператор, помеченный меткой.
Метка – это идентификатор, который может состоять из букв, цифр, под­черков и начинаться с буквы или подчерка.
Пометка оператора имеет вид
Метка: оператор;
Передача управления может выполняться только внутри программ-
ного блока (процедуры или функции). Переход не может быть выполнен на операторы, расположенные внутри синтаксических конструкций: услов­ный оператор, циклы, Попытка.
Пример.
Перейти Метка1; . . . Метка1: Сообщить(“Выполнен переход по метке1”);
2. Встроенный язык
40
Цикл с параметром
Для Переменная=НачЗначение По КонЗначение Цикл
// Операторы Прервать; // Операторы Продолжить; // Операторы
КонецЦикла;
Циклическое выполнение действий для всех значений переменной-
счетчика цикла от начального до конечного значения с шагом 1. Тело цикла выполняется пока переменная меньше либо равна конечному значению. Это условие проверяется перед очередным выполнением тела цикла.
Прервать – прерывает выполнение цикла в любой точке тела цикла.
Управление передается оператору, следующему за КонецЦикла.
Продолжить – переход к следующей итерации цикла со следующим
значением счетчика цикла.
Пример. Перебор дней текущего месяца. ПоследнийДеньМесяца = День(КонецМесяца(ТекущаяДата())); Для ТекДень = 1 по ПоследнийДеньМесяца Цикл
Состояние(“Обрабатывается день:”+ТекДень); // Операторы обработки очередного дня
. . .
КонецЦикла;
Цикл по коллекции значений
Для каждого ИмяПеременной Из ИмяКоллекции Цикл
// Операторы
Прервать; // Операторы Продолжить; //Операторы
КонецЦикла;
Выполняет циклический обход коллекции значений (например, таб­личная часть документа). При каждой итерации цикла переменной присва­ивается значение очередного элемента коллекции. Обход выполняется,
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]