Платформа 1С:Предприятия 8.0 позволяет разработчику использовать различные типы данных.
Существует большое количество типов данных, которые определены на уровне самой платформы. Например, это примитивные типы данных, такие как строка, число, дата и пр.
Описание примитивных типов данных:
- NULL - отсутствующее значение. Используется, например, в запросах.
- Неопределено - пустое, неопределенное значение. Используется, например, при оценке передачи параметров, в том случае, если при вызове процедуры или функции данный параметр опущен. Реквизиты, имеющие составной тип данных, по умолчанию имеют тип "Неопределено".
- Булево - содержит два значения: Истина или Ложь. Используется, например, в логических выражениях - логическое выражение имеет тип "Булево".
- Дата - содержит дату и время. По умолчанию имеет значение - 01.01.01 00:00:00 дата начала нашей эры. Время измеряется от начала дня. Запись выражения, имеющего литерал типа "дата", осуществляется следующим образом - '00010101000000'. Сначала записывается год, потом месяц, потом число и потом время. Возможна следующая запись: '20041031'. Время по умолчанию - начало дня.
- Строка - бывает переменной, фиксированной и неограниченной длины. В общем случае рекомендуется использовать строки переменной длины.
- Число - увеличена разрядность числа до 38 разрядов.
- Тип - служит для определения типов значений. Используется, например, для сравнения типов данных. Не имеет литералов и возвращается функциями Тип(<Имя типа>) или ТипЗнч(<Значение>).
Также, существуют более сложные типы данных. Например, платформа поддерживает целый ряд типов, которые представляют собой универсальные коллекции значений: массив, структура, список значений, дерево значений и т.д.
Типы данных "Универсальные коллекции" - список (набор) объектов данных любых типов, к значениям которого можно обратиться перебором или по указанному индексу (ключу). Нумерация элементов коллекций начинается с 0. Все указанные типы данных создаются только программно.
Массив. Представляет собой пронумерованную коллекцию значений произвольного типа. К элементу массива можно обращаться по его индексу. В качестве элементов массива могут выступать, в частности, другие массивы. Это позволяет создавать многомерные массивы.
Структура. Представляет собой поименованную коллекцию, состоящую из пар Ключ - Значение. Ключ может быть только строковым, значение - произвольного типа. К элементу структуры можно обращаться по значению его ключа, т.е. по имени. Обычно используется для хранения небольшого количества значений, каждое из которых имеет некоторое уникальное имя.
Соответствие. Также как и Структура, представляет собой коллекцию пар Ключ - Значение. Однако, в отличие от Структуры, ключ может быть практически любого типа.
Список значений. Используется, как правило, для решения интерфейсных задач. Позволяет строить динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может содержать значения любого типа, кроме того, в одном списке типы хранимых значений могут быть разными.
Таблица значений. Таблица значений позволяет строить динамические наборы значений и манипулировать ими. Она может быть наполнена значениями любого типа, и в одной таблице типы хранимых значений могут быть разными.
Дерево значений. Дерево значений представляет собой динамически формируемый набор значений любого типа, похожий на таблицу значений. В отличие от таблицы значений, строки дерева значений могут образовывать иерархические структуры: каждая строка дерева может иметь набор подчиненных строк, каждая из подчиненных строк, в свою очередь, также может иметь набор подчиненных строк и так далее. При этом поиск значений, сортировка, получение итогов могут осуществляться либо по текущему уровню иерархии, либо включая все подчиненные.
COMSafeArray. Представляет собой объектную оболочку над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.
ФиксированныйМассив. Неизменяемый массив. Массив заполняется системой при инициализации объектов данного типа или разработчиком, с помощью конструктора.
Кроме этого в платформе реализованы специфические типы данных, реализующие ту или иную функциональность прикладных решений: текстовый документ, табличный документ, ХранилищеЗначения, ПостроительОтчета, ПостроительЗапроса и пр.
Остановимся подробнее на типе данных "ХранилищеЗначений". Хранилища предназначены для хранения значений, тип которых не может быть выбран в качестве типа поля, например: картинки, двоичные данные. При помещении значения в хранилище значений можно сжимать данные, указав требуемую степень сжатия. Данный метод позволяет уменьшить размер хранимого значения в информационной базе.
К значению, хранящемуся в хранилище, нельзя обращаться напрямую. Перед использованием значения его необходимо извлечь. Не рекомендуется хранить ссылки на объекты, т.к. в системе не поддерживается контроль ссылочной целостности по объектам, сохраненным в полях типа "Хранилище значения".
Операции помещения в хранилище и извлечения из него могут занимать продолжительное время, что необходимо учитывать при проектировании структур объектов.
Пример использования хранилища значения на примере справочника "Картинки":
Процедура ОтобразитьКартинку()
ЗначениеКартинки = Картинка.Получить();
Если ЗначениеКартинки <> Неопределено Тогда
ЭлементыФормы.ПолеКартинки.Картинка = ЗначениеКартинки;
Иначе
ЭлементыФормы.ПолеКартинки.Картинка = Новый Картинка(Неопределено);
КонецЕсли;
КонецПроцедуры
Процедура ВыбратьИзФайлаНажатие(Элемент)
// Выбор файла с просмотром
ДиалогВыбораФайла = Новый
ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Каталог = "";
ДиалогВыбораФайла.ПредварительныйПросмотр = Истина;
ДиалогВыбораФайла.ИндексФильтра = 0;
Если ДиалогВыбораФайла.Выбрать() Тогда
Файл = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла);
Картинка = Новый ХранилищеЗначения(Новый Картинка(ДиалогВыбораФайла.ПолноеИмяФайла));
ОтобразитьКартинку();
КонецЕсли;
КонецПроцедуры
Программные модули
Схема программных модулей:
Модулем называется программа на встроенном языке 1С:Предприятие. Модули располагаются в заданных точках конфигурации и вызываются для выполнения в заранее известные моменты работы системы 1С:Предприятие. Например, модули формы привязаны к формам объектов и позволяют детально описывать реакцию формы на действия пользователя.
В конфигурации существует несколько видов модулей. Это модуль приложения, модуль внешнего соединения, общие модули, модули форм и модули объектов конфигурации (менеджеров значения констант, справочников, документов, планов видов характеристик, планов счетов,планов видов расчета, планов обмена, бизнес-процессов, задач, отчетов, обработок, наборов записей регистров).
Если конфигурация запускается не в режиме клиентской сессии, а в режиме COM-соединения, то вместо модуля приложения используется модуль внешнего соединения.
Для написания и редактирования текстов программных модулей предназначен редактор текстов и модулей. Тексты программных модулей могут содержать конструкции как на русском, так и на английском языках в любой комбинации.
Разделы программного модуля в порядке их размещения:
- Раздел объявления переменных;
- Раздел описания процедур и функций;
- Раздел основной программы.
Ограничения программных модулей:
- Общие модули содержат только раздел описания процедур и функций.
В общих модулях описываются такие процедуры и функции, алгоритмы которых неоднократно используются в других модулях.
В модуле приложения описываются такие процедуры и функции, как "ПриНачалеРаботыСистемы", "ПриЗавершенииРаботыСистемы" и др.
В модуле внешнего соединения описываются специфические процедуры и функции, которые актуальны для использования в режимевнешнего соединения. В режиме Com-соединения по сути модуль приложения заменяется на модуль внешнего соединения.
В модуле объекта описываются такие процедуры и функции, как "ПриЗаписи", "ПриУстановкеНовогоКода", "ПриКопировании", "ОбработкаЗаполнения" и др.
В модуле формы описываются такие процедуры и функции, как "ПриОткрытии", "ПриЗакрытии", "ОбработкаВыбора", "ВнешнееСобытие" и др.
Для того, чтобы переменная, процедура или функция были доступны в других модулях (в соответствии с контекстом использования модулей) необходимо в конце строки объявления написать ключевое слово "Экспорт". Использование ключевого слова "Экспорт" имеет смысл только для тех переменных, которые описаны в разделе описания переменных программного модуля. Например:
Перем глТекущийПользователь Экспорт
Процедура Пересчет() Экспорт
Процедура или функция, объявленные с ключевым словом "Экспорт" в модуле объекта, дополняют контекст этого объекта. Например:
Справочники.Клиенты.НайтиПоКоду(ВыбКод,,,).ПолучитьОбъект().Печать();
При этом процедура Печать() объявлена в модуле объекта справочника "Клиенты" с ключевым словом "Экспорт".
Отличие процедур и функций состоит в том, что функция имеет возвращаемое значение. Параметры процедур и функций по умолчанию передаются по ссылке. Для того, чтобы передать параметр по значению используется ключевое слово "Знач". Например:
Процедура Пересчет(Количество, Сумма, СтавкаНДС, Знач ФлагРасчетаСтавкиНДС)
Текст программного модуля может содержать однострочные комментарии, которые начинаются с комбинации символов //.
Например:
// данная процедура предназначена для расчета суммы по строке
Задание 1
1. Создайте общий модуль. Создайте в общем модуле процедуру Пересчет() с ключевым словом Экспорт.
2. Предусмотрите вызов процедуры Пересчет() из форм документов "Поступление материалов" и "Акт об оказании услуг".
Встроенный язык
Встроенный язык. Переменные
Для объявления переменных используется ключевое слово "Перем". Существует также неявное объявление переменных при первом присвоении значения переменной.
Например:
Перем Значение1;
Значение2 = 4;
Переменная Значение1 объявлена явно, а переменная Значение2 объявлена неявно. При неявном объявлении переменной система определяет ее тип по присваиваемому ей значению. При повторном присвоении переменной значения ее тип может измениться.
В именах переменных допускается использование символов и цифр, а также символа подчеркивания. При этом имя переменной должно начинаться только с символа. Использование пробелов в именах переменных не допускается.
Встроенный язык. Операторы
Операторы имеют вид стандартного обращения к процедуре, за исключением оператора присваивания (А = В;) и синтаксических конструкций встроенного языка (например, таких как Для, Пока, Если). Между собой операторы обязательно следует разделять символом ";" (точка с запятой). Конец строки не является признаком конца оператора, т.е. операторы могут свободно переходить через строки и продолжаться на другой строке. Можно располагать произвольное число операторов в одной строке, разделяя их символом ";".
Операторы языка в программном модуле можно подразделить на две категории: операторы объявления переменных и исполняемые операторы.
Операторы объявления переменных создают имена переменных, которыми манипулируют исполняемые операторы.
Любой исполняемый оператор может иметь метку, используемую в качестве точки перехода в операторе "Перейти".
В общем случае формат оператора языка следующий:
~метка: Оператор[(Параметры)][ДобКлючевоеСлово];
Одним из операторов являются циклы. Во встроенном языке различают следующие виды циклов:
- Пока <условие> цикл.
- Для каждого <имя переменной> из <имя коллекции> цикл.
- Для <имя переменной> = <начальное значение> по <конечное значение> цикл.
Для досрочного прекращения цикла используется оператор "Прервать".
Пример использования цикла "для каждого":
// Создание массива
Массив = Новый Массив(10);
// Заполнение массива
Для Сч=0 по 9 Цикл
Массив[Сч]=Сч;
КонецЦикла;
// Индикация массива
Для Каждого Элемент из Массив Цикл
Сообщить(Элемент);
КонецЦикла;
Рассмотрим следующий вид операторов - "условия". Условия оформляются следующим образом:
Если <ключевое слово > (<логическое выражение>) <ключевое слово> (<логическое выражение>) :
:
ИначеЕсли <ключевое слово> (<логическое выражение>) <ключевое слово> (<логическое выражение>) :
:
Иначе
КонецЕсли;
В записи условий могут использоваться следующие ключевые слова: "И", "ИЛИ", "НЕ". Ветвей "ИначеЕсли" может быть неограниченное количество или ни одной.
Логические выражения имеют тип Булево. При этом, если в условии используется несколько логических выражений, соединенных ключевыми словами "И" или "ИЛИ", и по значению первого логического выражения можно определить значение всего условия, то вычисление значений остальных логических выражений не производится. Например:
Значение1 = 5;
Значение2 = 4;
Если (Значение1 = 5) или (Значение2 = 4) тогда
В данном случае в условии используется ключевое слово "ИЛИ". Поэтому, если значение первого логического выражения Истина, то вычисление второго логического выражения произведено не будет.
Пример укороченной записи логического выражения:
Значение1 = Истина;
Значение2 = Ложь;
Если Значение1 И НЕ Значение2 тогда