Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на платформе 1С Предприятие 8.3. Учебное пособие
.pdf
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 по ПоследнийДеньМесяца Цикл
Состояние(“Обрабатывается день:”+ТекДень);
// Операторы обработки очередного дня
. . .
КонецЦикла;
Цикл по коллекции значений
Для каждого ИмяПеременной Из ИмяКоллекции Цикл
// Операторы
Прервать;
// Операторы
Продолжить;
//Операторы
КонецЦикла;
Выполняет циклический обход коллекции значений (например, табличная часть документа). При каждой итерации цикла переменной присваивается значение очередного элемента коллекции. Обход выполняется,
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
