Основы программирования в системе "1С:Предприятие 8" Методические материалы курса обучения Май 2016 ПРАВО ТИРАЖИРОВАНИЯ И РАСПРОСТРАНЕНИЯ МЕТОДИЧЕСКИХ МАТЕРИАЛОВ ПРИНАДЛЕЖИТ ФИРМЕ "1С" Получив настоящие материалы для обучения, Вы тем самым даете согласие не допускать их копирования без письменного разрешения фирмы "1С" © ООО "1С", 2016 г. Фирма "1С", Москва, 123056, а/я 64 Отдел продаж: ул. Селезневская, д.21, телефон: (495)737-92-57, факс: (495) 681-44-07, e-mail: 1с@1c.ru, URL: http://www.1c.ru Автор материалов: "1С:Учебный центр №1", (495) 688-90-02, uc@1c.ru, www.1c.ru 05-16 Содержание ВВЕДЕНИЕ ....................................................................................................................................... 5 По курсу ............................................................................................................................................. 5 Общие сведения ................................................................................................................................ 6 Требования к слушателям ............................................................................................................. 6 Место и время обучения ................................................................................................................. 7 Соглашения о терминах и обозначениях .................................................................................... 7 1. ОСНОВНЫЕ КОНСТРУКЦИИ ВСТРОЕННОГО ЯЗЫКА........................................ 8 1.1 Базовые типы........................................................................................................................ 8 1.1.1 Работа со строковыми значениями ................................................................................ 10 1.1.2 Работа с числовыми значениями .................................................................................... 13 1.1.3 Работа с датой и временем .............................................................................................. 14 1.1.4 Работа со значениями типа БУЛЕВО............................................................................. 15 1.1.5 Работа со значениями НЕОПРЕДЕЛЕНО,NULL И ТИП............................................. 16 1.2 Выражения и операции ..................................................................................................... 17 1.2.1 Арифметические операции ............................................................................................. 18 1.2.2 Операция конкатенации .................................................................................................. 22 1.2.3 Логические операции....................................................................................................... 22 1.2.4 Встроенные функции работы со значениями ................................................................ 27 1.2.5 Методы преобразования значений ................................................................................. 29 1.2.6 Работа с переменными и оператор присваивания ........................................................ 32 1.3 Коллекции значений ......................................................................................................... 35 1.3.1 Использование массивов ................................................................................................. 36 1.3.2 Использование структуры ............................................................................................... 42 1.3.3 Использование соответствий .......................................................................................... 48 1.3.4 Использование списка значений .................................................................................... 52 1.3.5 Использование таблицы значений ................................................................................. 53 1.3.6 Использование дерева значений ..................................................................................... 55 1.4 Синтаксические конструкции ......................................................................................... 56 1.4.1 Работа с условиями .......................................................................................................... 59 1.4.2 Работа с циклами.............................................................................................................. 60 1.4.3 Работа с переходами ........................................................................................................ 64 1.4.4 Процедуры и функции ..................................................................................................... 70 2. ОБЪЕКТНАЯ МОДЕЛЬ РАБОТЫ С ДАННЫМИ .................................................... 80 2.1 Объекты встроенного языка ........................................................................................... 85 2.1.1 Анализ конфигурации базы данных ............................................................................... 86 2.1.2 Использование системных перечислений ..................................................................... 90 2.1.3 Сохранение простого значения в базе ........................................................................... 92 2.1.4 Сохранение наборов значений в базе............................................................................. 96 2.1.5 Сохранение в базе структурированной информации ................................................... 98 2.1.6 Классификация объектов встроенного языка ............................................................. 100 2.2 Модули ............................................................................................................................... 106 2.2.1 Использование модулей сеанса и приложения ........................................................... 109 2.2.2 Использование модулей объектов ................................................................................ 112 3. ТАБЛИЧНАЯ МОДЕЛЬ РАБОТЫ С ДАННЫМИ .................................................. 116 3.1 Язык запросов................................................................................................................... 124 3.1.1 Структура и синтаксис запроса .................................................................................... 125 3.1.2 Секция ВЫБРАТЬ. ......................................................................................................... 126 3.1.3 Секция ИЗ ....................................................................................................................... 133 3.1.4 Секция ГДЕ..................................................................................................................... 136 3.1.5 Секция СГРУППИРОВАТЬ ПО ................................................................................... 139 3.1.6 Секция ИМЕЮЩИЕ ...................................................................................................... 141 3 Основы программирования в системе "1С:Предприятие 8" 3.1.7 3.1.8 3.1.9 3.2 3.2.1 3.2.2 3.2.3 3.2.4 3.3 3.3.1 3.3.2 3.4 3.4.1 3.4.2 3.5 4 Секция ДЛЯ ИЗМЕНЕНИЯ .......................................................................................... 142 Секция УПОРЯДОЧИТЬ ПО ........................................................................................ 143 Секция ИТОГИ ............................................................................................................... 151 Определение и использование источников ................................................................ 156 Вложенные таблицы ...................................................................................................... 156 Вложенные запросы ....................................................................................................... 158 Временные таблицы и пакетные запросы.................................................................... 160 Виртуальные таблицы ................................................................................................... 164 Использование нескольких источников ..................................................................... 165 Соединение таблиц (Join) .............................................................................................. 166 Объединение таблиц (Union) ........................................................................................ 171 Получение и вывод результатов запроса .................................................................... 173 Программная обработка данных запроса. ................................................................... 173 Обработка данных из пакетных запросов.................................................................... 178 Инструменты интерактивной настройки вывода информации............................. 178 ВВЕДЕНИЕ Как показывает практика, у консультантов, опытных пользователей и начинающих программистов уже сформировалась потребность в получении практических навыков по программированию в системе "1С:Предприятие 8" для разработки собственных прикладных решений и расширения существующих решений своими силами. Многие из Вас неоднократно слышали, что для создания прикладных решений в большей степени и в первую очередь приходится конфигурировать, а потом программировать. Поэтому для грамотного программирования необходимо понимать, в какой момент необходимо переходить от конфигурирования к программированию. Но, если конфигурирование интуитивно понятно, т.к. связано с терминами предметной области создаваемого решения, то программирование связано с использованием языка программирования, понимание которого требует уже соответствующей подготовки. Для действующих программистов непривычен стиль программирования, а также возможность использования русскоязычных конструкций. Но, не стоит пугаться русского языка в программировании, т.к. при создании прикладных решений в системе 1С:Предприятие 8 мы имеем дело с различными предметными областями, и естественно, не зная терминов предметной области на английском языке, называем их по-русски. Специально, для улучшения восприятия алгоритмов, разработчики системы "1С:Предприятие 8" и адаптировали язык программирования. Представьте, как нелепо смотрелись бы алгоритмы, частично написанные на русском языке и частично по-английски, или, например русские термины в транслитерации. Данный курс построен исключительно на русскоязычных синтаксических конструкциях, что делает его тематику наиболее понятной и удобной для восприятия, и позволяет повысить скорость обучения азам программирования. По курсу Данный курс является базовым по практическому освоению программирования в системе 1С:Предприятие 8. Курс предназначен для ознакомления слушателей с базовыми задачами и возможностями программирования в системе "1С:Предприятие 8". После прохождения курса учащиеся смогут: понимать синтаксис алгоритмов на встроенном языке 1С читать и писать алгоритмы на языке запросов создавать собственные алгоритмы разбираться в несложных существующих алгоритмах Материалы данного курса не являются заменой описания встроенного языка, а лишь определяют методику обучения. Для получения полноценной информации по синтаксису встроенного языка следует пользоваться документацией из стандартной поставки, а также помощником или синтакспомощником из конфигуратора. Практические задания выполняются в толстом клиенте, т.к. специфика построения алгоритмов клиент-серверной архитектуры рассматриваются на следующем курсе "Основы клиент-серверного программирования". 5 Основы программирования в системе "1С:Предприятие 8" Материал рассматривается на базе платформы 1С:Предприятие 8.3 с использованием каркасной базы, т.к. конфигурирование не является главной задачей данного курса: Общие сведения В процессе изучения данного курса слушатели получат целостное представление о назначении языка программирования 1С и языка запросов в системе 1С:Предприятие 8 на базе платформы "1С:Предприятие 8.3", а также получат базовые знания по основам программирования. В ходе курса будут рассмотрены все темы, необходимые для наработки практических навыков в программировании. 1. Данный курс разбит на 4 основных блока: 2. Основные конструкции встроенного языка 1С:Предприятие 8 3. Объектная модель работы с данными 4. Табличная модель работы с данными 5. Совместное использование табличной и объектной моделей Для более эффективного усвоения материала, полученные теоретические знания закрепляются практическими занятиями. Решение задач строится на уровне общего описания функциональности системы и решения сквозной задачи и разбиения и постановки подзадач по следующему порядку: 1. Изучение теоретических аспектов, необходимых для решения задач. 2. Постановка задачи. 3. Решение поставленной задачи вместе с преподавателем. 4. Задания для самостоятельной работы. Требования к слушателям Опыт и знания в области программировании не требуется, т.к. в рамках первого дня рассматриваются базовые конструкции и понятия программирования. Для наилучшего восприятия информации рекомендуется проходить курсы обучения последовательно или уже иметь знания и навыки в объеме базовых курсов. Базовым курсом является курс: Знакомство с платформой "1C:Предприятие 8.3" 6 Введение Место и время обучения Слушатели данного курса проходят обучение в течение 4 дней на территории учебного центра №1 Соглашения о терминах и обозначениях 1. Названия диалоговых кнопок, закладок диалоговых панелей, названия пунктов меню, имена других объектов, будут даваться в двойных кавычках, например, "ОК", "Услуги", "Предприятие", "Контрагент" и т.д. 2. Значения и типы данных будут 'СправочникСсылка.Организации' даваться в одинарных кавычках: 'Дата', 3. Обращение к пункту меню будет даваться в последовательном перечислении родительских пунктов через значок стрелки вправо "→", например, "Конфигурация" → "Поддержка" → "Обновить конфигурацию" 4. Вызовы процедур и функций будут даваться с подчеркиванием 5. Практические задания определяются следующим образом: 6. Определения выделяются следующей конструкцией: 7. Важные дополнения к материалу: 8. Примеры кода: 7 1. ОСНОВНЫЕ КОНСТРУКЦИИ ВСТРОЕННОГО ЯЗЫКА Встроенный язык системы "1С:Предприятие 8" предназначен для описания алгоритмов функционирования прикладной задачи, например, реализации расчета суммы в документах: Рисунок 1.1 Встроенный язык представляет собой предметно-ориентированный язык программирования, специально разработанный с учетом возможностей его применения не только профессиональными программистами. Во-первых, встроенный язык системы "1С:Предприятие 8" является двуязычным. Почти все зарезервированные слова, имена типов значений, свойств, методов и событий имеют два имени: русское и английское. Исключение составляют слова, не имеющие аналогов в русском языке. Можно одновременно использовать в тексте алгоритма русские и английские слова. Во-вторых, при написании алгоритмов регистр букв (строчные или заглавные) не имеет значения. Рисунок 1.2 Практическое освоение азов программирования мы начнем с базовых типов значений. 1.1 Базовые типы Если мы хотим, чтобы компьютер обработал нам какие-то данные, необходимо их загрузить в компьютер. В этом случае мы можем выступать в роли разработчиков, которые определяют способы загрузки (ввода) данных в компьютер, или в роли пользователя, который вводит данные в память компьютера. Физически информация в памяти компьютера хранится в виде нулей и единиц (двоичном виде). 8 Основные конструкции встроенного языка Рисунок 1.3 Но двоичное представление данных и методы их обработки были бы не очень удобны для восприятия, как для разработчиков, так и для пользователей (это все равно, что видеть вместо какого-то предмета наборы атомов). Поэтому в компьютерных системах существуют различные способы работы с данными и их представления. Различие способов работы с данными определяется множеством программ (текстовые редакторы, табличные редакторы, графические редакторы и т.д.), которые позволяют использовать наиболее удобный способ ввода данных в компьютер, а также их представление при получении. В системе 1С:Предприятие 8 для обеспечения такого механизма программа хранит в памяти компьютера не только данные, но и информацию о том, как с этими данными работать. Информация о способе ввода и представлении вводимой порции данных (значении) называется типом значения: Рисунок 1.4 В различных прикладных задачах нам приходится иметь дело с числами, датами, текстом и прочими видами данных. Система "1С:Предприятие 8" поддерживает следующие виды примитивных типов (неделимых на другие типы): СТРОКА, ЧИСЛО, ДАТА, БУЛЕВО, НЕОПРЕДЕЛЕНО, NULL ТИП Существует возможность работы с данными в системе как программно, так и интерактивно. При программном обращении к данным для большинства примитивных типов предусмотрена возможность использования литералов, т.е. указание значения соответствующего типа непосредственно в исходном тексте. 9 Основы программирования в системе "1С:Предприятие 8" Рассмотрим на практике использование значений различных типов с помощью обработки "Базовые типы": Рисунок 1.5 1.1.1 Работа со строковыми значениями Значения данного типа содержат строку произвольной длины с возможностью одновременного использования слов на разных языках, что реализуется форматом текста Unicode. Правила определения значений: 1. Значение строкового типа в алгоритме определяется набором символов, заключенным в двойные кавычки: Рисунок 1.6 10 Основные конструкции встроенного языка 2. Для определения кавычки (") в строковом значении необходимо задавать двойную кавычку (""): Рисунок 1.7 3. Многострочные значения в алгоритме могут задаваться двумя способами: Способ 1. Между фрагментами текста, представляющими отдельные строки многострочной строки, не должно встречаться никаких символов, за исключением: пробелов, символов перевода строки и строк комментариев Рисунок 1.8 допускается использование комментариев в строке с текстом: Рисунок 1.9 11 Основы программирования в системе "1С:Предприятие 8" Способ 2. Многострочное значение задается с использованием символа (вертикальная черта): | Рисунок 1.10 в данном варианте допускается использование строк комментариев, но только в отдельных строках: Рисунок 1.11 12 Основные конструкции встроенного языка 1.1.2 Работа с числовыми значениями Числовым типом может быть представлено любое десятичное1 число. Правила определения значений: 1. В качестве разделителя целой и дробной части используется точка, при определении значения в алгоритмах. Рисунок 1.12 2. Для определения отрицательного значения перед значением пишется знак минуса: Рисунок 1.13 3. Для числовых значений, хранящихся в памяти компьютера, разрядность (размер) не ограничена: Рисунок 1.14 1 число, определяемое с помощью десятичной системы исчисления. Для определения числа могут использоваться цифры от 0 до 9 13 Основы программирования в системе "1С:Предприятие 8" 1.1.3 Работа с датой и временем Значение данного типа всегда содержит дату и время Правила определения значений: 1. Значение даты и времени определяется в диапазоне от: 01 января 0001 года 0 часов 0 минут 0 секунд до: 31 декабря 9999 года 23 часа 59 минут 59 секунд Рисунок 1.15 2. Значение представляет собой набор цифр, заключенных в одинарные кавычки вида 'ГГГГММДДччммсс', где: ГГГГ – четыре цифры года (включая тысячелетие и год; MM – две цифры даты; ДД – две цифры дня; чч – две цифры часа (в 24-часовом формате); мм – две цифры минут; сс – две цифры секунд. Значение даты, заданное в одинарных кавычках называется литералом типа Дата. В системе 1С:Предприятие 8 возможно определение литерала без времени. В таком случае значение времени в памяти будет: 0 часов 0 минут 0 секунд. Для определения значения только для времени необходимо указывать значение даты в литерале 00010101 и необходимое время. Рисунок 1.16 14 Основные конструкции встроенного языка 3. Для удобства восприятия в литерале допускается использование различных разделителей, например, "/", "\", "-", ":", " ": Рисунок 1.17 1.1.4 Работа со значениями типа БУЛЕВО Значения данного типа могут иметь только значения – Истина или Ложь, задаваемые соответствующими литералами. Значения данного типа часто являются результатом вычисления логических операций Правила определения значений: Значения могут определяться как русскоязычными литералами (Истина, Ложь): Рисунок 1.18 так и англоязычными (True , False) Рисунок 1.19 15 Основы программирования в системе "1С:Предприятие 8" 1.1.5 Работа со значениями НЕОПРЕДЕЛЕНО,NULL И ТИП для значения НЕОПРЕДЕЛЕНО Значение данного типа означает пустое значение с незаданным типом в памяти компьютера. Интерактивно данное значение представлено пустой строкой Правила определения значений: Значение может определяться как русскоязычным литералом (Не определено), так и англоязычным (Undefined): Рисунок 1.20 для значения NULL Значение данного типа означает пустое значение с незаданным типом в базе данных. Используется исключительно для определения отсутствующего значения при работе с базой данных, например, при соединении таблиц. Интерактивно данное значение представлено пустой строкой Правила определения значений: Значение может определяться только в англоязычном варианте. Рисунок 1.21 для значения ТИП Значение данного типа используются для идентификации типов значений. Это необходимо для определения и сравнения типов. Правила определения значений: Данный тип не имеет литералов и возвращается функциями встроенного языка "ТипЗнч" и "Тип". На практике будет рассматриваться в следующем разделе "Выражения и операции" 16 Основные конструкции встроенного языка 1.2 Выражения и операции И так, мы рассмотрели задачи сохранения информации в памяти компьютера и представления. Но, ведь, пользователям компьютеров необходимо не только хранить данные, но и производить с ними какие-то действия: Рисунок 1.22 Например, складывать числа, склеивать строковые значения, и т.д. Для этого необходимо чтобы компьютер знал, как выполнить задание пользователя. Если надо сложить два числа, в компьютере должна присутствовать формула по сложению двух чисел: Рисунок 1.23 ОПЕРАЦИЯ – базовое действие, которое может выполнять программа для обработки значений в оперативной памяти компьютера. ВЫРАЖЕНИЕ – последовательность операций и значений, используемая для обработки данных с целью получения требуемого результата. Количество операций и значений в одном выражении не имеет ограничений. Однако следует учитывать что, слишком длинные выражения трудно воспринимаются при анализе текста разработчиком. 17 Основы программирования в системе "1С:Предприятие 8" В зависимости от операций и значений выражения можно разделить на три группы: Рисунок 1.24 Воспользуемся обработкой "Выражения и операции" для выполнения практических задач: Рисунок 1.25 1.2.1 Арифметические операции В системе 1С:Предприятие 8 определены следующие виды арифметических операций: Рисунок 1.26 18 Основные конструкции встроенного языка Значения, подставляемые в выражение, называются операндами. В операциях операнды могут определяться согласно заложенных в систему правил использования. Если указать неверное значение операнда (недопустимого типа), система может попытаться выполнить автоматическое преобразование значения к нужному типу, и если данное действие будет невозможным, выдаст ошибку, например такого содержания: Рисунок 1.27 операция "Сложение": операция доступна для сложения числовых значений. Результатом будет числовое значение: Рисунок 1.28 для сложения даты с числом. Число определяет количество добавляемых секунд. Результатом будет значение типа ДАТА Рисунок 1.29 19 Основы программирования в системе "1С:Предприятие 8" операция "Вычитание" - может использоваться для задач: вычитание числовых значений. Результатом будет числовое значение: Рисунок 1.30 вычитание из даты количества секунд. Результатом будет значение типа ДАТА: Рисунок 1.31 вычисления разности дат в секундах. Результатом будет числовое значение, определяющее количество секунд: Рисунок 1.32 операция "Умножение" - доступна только для числовых значений и результат вычисления всегда число: Рисунок 1.33 20 Основные конструкции встроенного языка операция "Деление" - доступна только для числовых значений и результат вычисления всегда число: Рисунок 1.34 операция "Остаток от деления" - доступна только для числовых значений и результат вычисления всегда число: Рисунок 1.35 операция "Унарный минус" - доступна для числового значения: Рисунок 1.36 21 Основы программирования в системе "1С:Предприятие 8" 1.2.2 Операция конкатенации Операция конкатенации ("+") используется для того, чтобы присоединить одну строку к другой. Длина результирующей строки равна сумме длин соединяемых строк: Рисунок 1.37 В случае несовпадения типа данных второго или последующих операндов со строковым типом, их значение преобразуется к строковому типу в соответствии с правилами преобразования типов: Рисунок 1.38 1.2.3 Логические операции Логическое выражение можно представить как вопрос пользователя системе, на который надо дать однозначный ответ: "Да" или "Нет". Логические операции являются основой логических выражений. Существует два вида логических операций: операции сравнения – предназначены для сравнения двух значений и зависят от глобальных правил сортировки значений в системе. В системе 1С:Предприятие 8 поддерживаются следующие виды операций сравнения: Рисунок 1.39 22 Основные конструкции встроенного языка булевы операции – используются по отношению к значениям типа БУЛЕВО. В системе 1С:Предприятие 8 поддерживаются следующие виды булевых операций: Рисунок 1.40 Логические выражения вычисляются слева направо. Для того чтобы избежать неоднозначности и управлять последовательностью операндов, следует применять круглые скобки. Уровни старшинства логических операций: Уровень 1 операнды, заключенные в скобки Уровень 2 НЕ Уровень 3 И Уровень 4 ИЛИ Логические операциями. операции могут использоваться совместно с арифметическими операция "Больше" определяется знаком > и доступна для сравнения следующих типов значений: Число Рисунок 1.41 Логика данной операции объясняется тем, что при сортировке сравниваемых значений по возрастанию имеем следующую таблицу: Порядок следования 1 2 Значение 3 5 Т.е. значение "5" следует после "3" в порядке возрастания, значит 5 больше 3. Рассмотрим пример использования арифметическими операциями: логической операции совместно с 23 Основы программирования в системе "1С:Предприятие 8" Рисунок 1.42 В данном примере система сначала посчитала результат арифметической операции, а затем произвела сравнение. Таким образом, мы видим, что у арифметических операций приоритет перед логическими операциями. Строка Рисунок 1.43 В данном примере результат объясняется сортировкой по алфавиту в порядке возрастания. Буква "Б" следует после буквы "А", поэтому "Б" больше "А". И система отвечает нам однозначно значением типа булево - Истина (Да). Можно представить логическое выражение как вопрос пользователя системе, для данного примера, в таком виде: "Значение Б больше А? Да". Сравнение строковых значений может использоваться совместно с операцией конкатенации: Рисунок 1.44 В данных примерах мы видим, что система опять сначала выполняет операции конкатенации, а затем производит сравнение результатов. 24 Основные конструкции встроенного языка Дата – по логике сортировки по возрастанию более поздняя дата является большей. При сравнении значений типа ДАТА допустимо использование арифметических выражений. Рисунок 1.45 операция "Равно" - определяется знаком = и предназначена для сравнения значений любых типов. Данная логическая операция может использоваться совместно с арифметическими операциями: Мы: "Пять + три равно восьми?" Компьютер: "Да" Рисунок 1.46 Мы: "5 + 3 и 10 -2 дадут один результат?" Компьютер: "Да" Рисунок 1.47 25 Основы программирования в системе "1С:Предприятие 8" операция "Меньше" - определяется знаком < и является операцией, обратной операции "Больше": Рисунок 1.48 Как мы видим, при одинаковых значениях и разных операторах, получается противоположный результат. Типы значений поддерживаются в данной операции те же, что и в операции "Больше". В выражениях возможно использование и составных логических операций: операция "Больше или Равно" - определяется знаками ">=" – доступные типы значений определяются из правила сравнения больше операция "Меньше или Равно" - определяется знаками "<="– доступные типы значений определяются из правила сравнения меньше операция "Не Равно" - определяется знаками "<>" – доступные типы значений определяются из правила сравнения равно операция "И" (AND) - в логическом выражении является механизмом проверки соблюдения всех условий одновременно. Если количество и цена больше нуля вычислить сумму: Рисунок 1.49 операция "ИЛИ" (OR) - используется для проверки соблюдения хотя бы одного условия. Если количество или цена больше нуля вычислить сумму: Рисунок 1.50 26 Основные конструкции встроенного языка операция "НЕ" (NOT) – преобразует значения булево из Истины в Ложь и наоборот: Рисунок 1.51 Реализация логического выражения: "Пять не меньше Трех" будет выглядеть в нашей обработке следующим образом: Рисунок 1.52 1.2.4 Встроенные функции работы со значениями И так, мы рассмотрели, как можно решать задачи обработки данных с помощью операций. Решение всех прикладных задач с помощью операций может усложнить понимание алгоритма, увеличить время на его разработку или в некоторых случаях не иметь решения через операции, например: для строковых значений найти слово в предложении определить длину строки определить количество строк в тексте и т.д. для числовых значений произвести округление числа возвести в степень получить целую часть числа и т.д. для значений типа дата получить составную часть даты (год, месяц, и т.д.) от известной даты получить дату начала месяца или года получить значение системной (текущей) даты и т.д. 27 Основы программирования в системе "1С:Предприятие 8" Для упрощения решения подобных задач разработчики платформы создали алгоритмы, представленные функциями работы со значениями, описание которых можно найти в Синтакс-помощнике Конфигуратора: Рисунок 1.53 Для решения сложных задач будем использовать функции. Рассмотрим пример использования функции для задачи, которую нельзя решить через операции. Необходимо узнать тип значения "1С:Предприятие 8". Функция является аналогом вопроса к системе 1С:Предприятие 8. В Синтакспомощнике понятие системы представлено как Глобальный контекст. Для упрощения поиска необходимой функции созданы тематические группы. Для решения данной задачи открываем Синтакс-помощник в Конфигураторе и находим "Функции работы со значениями типа Тип": Рисунок 1.54 Т.к. нам нужно определить тип значения, переходим к группе "Функции работы со значениями типа Тип" и открываем описание функции "ТипЗнч": Рисунок 1.55 28 Основные конструкции встроенного языка В имени функции определено то, что мы хотим получить, т.е. суть ответа. А в круглых скобках после имени могут задаваться значения для условия. Функция возвращает нам основное значение, которое можно представить как ответ на вопрос. Для решения задачи вводим выражение и вычисляем выражение: Рисунок 1.56 1.2.5 Методы преобразования значений Преобразование значений из одного типа в другой возможно двумя способами: явное преобразование: через функции преобразования значений Рисунок 1.57 для преобразования значений типа Булево, Число и Дата в строку по определенным правилам есть функция Формат 29 Основы программирования в системе "1С:Предприятие 8" Рисунок 1.58 неявное преобразование при использовании в выражениях значений операндов недопустимого типа, где значение первого операнда в выражении определяет правило преобразования значения второго операнда (на уровне поведения самой платформы). Неявное преобразование возможно для следующих типов значений: Строковые к числу Условия преобразования в выражении: Первый операнд – число Второй операнд – представление числового значения в виде строки Примеры: Рисунок 1.59 к булево Условия преобразования в выражении: строковое значение содержит представление литерала типа БУЛЕВО 30 Основные конструкции встроенного языка Примеры: Рисунок 1.60 Числовые к строке Условия преобразования в выражении: Преобразование происходит в операции конкатенации, при условии, что Первый операнд – Строка Второй операнд – Число Примеры: Рисунок 1.61 к булево Условия преобразования в выражении: Преобразование числового значения выполняется в логических выражениях для значения 0 – в значение ЛОЖЬ, в остальных случаях в значение ИСТИНА Примеры: Рисунок 1.62 31 Основы программирования в системе "1С:Предприятие 8" Дата к строке Рисунок 1.63 Булево к строке Рисунок 1.64 к числу Рисунок 1.65 1.2.6 Работа с переменными и оператор присваивания Значения, (константами): с которыми мы работали, являлись постоянными величинами Рисунок 1.66 При решении задачи обработки данных значения могут определяться как явно в тексте алгоритма, так и запрашиваться у пользователя через соответствующие интерфейсные механизмы или вычисляться различными способами. Для случаев, когда значение не может 32 Основные конструкции встроенного языка определяться явно в выражении, вместо значения используется термин, определяющий смысл подставляемого значения, например: "1С:Предприятие " + РедакцияПлатформы В данном примере есть постоянная величина строковое значение "1С:Предприятие " и термин РедакцияПлатформы. Термин, используемый для определения подставляемого значения, называют в программировании переменная. Система 1С:Предприятие 8 поддерживает неявное определение переменной, т.е. в момент заполнения ее значением. Для передачи значения в переменную используется оператор присваивания (знак равенства): Имя переменной Оператор присваивания Значение РедакцияПлатформы = 8 Информацию об операторе присваивания можно получить в синтакс-помощнике: Рисунок 1.67 Во встроенном языке 1С:Предприятия, как и в других языках программирования, существуют определенные требования к именам переменных: Рисунок 1.68 Для лучшего понимания переменных, представим следующую ситуацию: Мы в магазине расплачиваемся за покупку. Подходим к кассиру "Оля" (это переменная) и даем (оператор присваивания) ей деньги (значение переменной). Кассир помещает деньги в кассу (запись данных в оперативную память). Мы к кассе доступа не имеем, с кассой работает кассир. Рисунок 1.69 33 Основы программирования в системе "1С:Предприятие 8" Любую переменную необходимо воспринимать как механизм, который обеспечивает хранение в памяти значения и как минимум, позволяет нам получить требуемое значение в нужном для нас месте программы, а максимум, выполнить сложные действия по отношения к данным, за которые он отвечает. Имя переменной – это имя механизма, к которому мы хотим обратиться для работы с данными. Вид механизма определяется типом того значения, которое мы помещаем в оперативную память используя оператор присваивания. Для получения значения переменной существует два способа: Обратиться к механизму по имени, в случаях, когда механизм переменной работает со значением примитивного типа Рисунок 1.70 Использовать свойства и методы механизма (данный способ будет рассматриваться при изучении коллекций значений) Для выполнения практических задач воспользуемся обработкой "Алгоритмы": Рисунок 1.71 Наш алгоритм состоит из двух действий: 1 Создаем переменную РедакцияПлатформы и передаем ей значение "8" 2 Запрашиваем значение у переменной РедакцияПлатформы для подстановки в операцию конкатенации и выводим результат сложения строк на экран 34 Основные конструкции встроенного языка Рисунок 1.72 Выполняемые действия разделяются символом "точка с запятой". Определенная последовательность действий называется алгоритмом. 1.3 Коллекции значений При решении различных задач могут возникать алгоритмы, в которых необходимо использовать множество различных данных, например: "Найти максимальное значение из следующего набора чисел: 3,7,12,1,8". При использовании известных нам механизмов переменных и встроенных функций, алгоритм будет следующим: Рисунок 1.73 Данный способ не универсален, т.к. при добавлении нового значения потребуется определение новой переменной: Рисунок 1.74 35 Основы программирования в системе "1С:Предприятие 8" Чтобы при добавлении новых значений не требовалось добавления новых переменных, необходимо все множество значений определить как одну переменную с возможностью хранения набора (коллекции) значений и обеспечить работу с каждым значением в наборе. Различные способы работы с наборами определяют и разнообразие видов коллекций значений: Рисунок 1.75 1.3.1 Использование массивов Начнем практическое освоение универсальных коллекций с массивов, т.к. данный вид коллекции определяет самый простой способ хранения значений, как набора элементов и методы доступа к ним в наборе. Для начала рассмотрим возможности использования массивов в 1С:Предприятие 8: 1 В системе 1С:Предприятие 8 есть возможность работы как с динамическими массивами (размерность может изменяться в процессе эксплуатации) так и с фиксированными (без возможности изменения размерности в момент использования). 2 Нет жестких ограничений на использование различных типов значений в рамках одного массива, т.е. массивы 1С:Предприятия являются гетерогенными: 0 "1С:Предприятие" 1 8 3 Поддерживаются разные по сложности структуры массивы: Простые (одномерные, линейные) массивы можно представить в виде таблицы с двумя колонками "индекс элемента значения" и "значение": Индекс элемента значения 36 Значение Основные конструкции встроенного языка Пример просмотра физической структуры простого массива в режиме отладки в системе 1С:Предприятие 8: Рисунок 1.76 Сложные массивы (многомерные) могут быть представлены как массивы, значения которых представлены другими массивами, т.е. как массивы массивов Индекс элемента значения Значение Индекс Значение элемента значения Индекс Значение элемента значения 37 Основы программирования в системе "1С:Предприятие 8" Физическую структуру сложного массива можно увидеть в режиме отладки в системе 1С:Предприятие 8: Рисунок 1.77 Определение значения переменной как массива в системе 1С:Предприятие 8 осуществляется с помощью конструктора встроенного языка "Новый" с указанием типа "Массив": Рисунок 1.78 В данном случае будет создан пустой массив, т.е. без элементов. Элементы разными способами могут добавляться позже. Если необходимо определить массив с начальным количеством элементов, можно указать их количество при использовании конструктора. Например, для массива с 5-ю элементами: Рисунок 1.79 Все массивы данного вида в системе 1С:Предприятие 8 являются динамическими, т.е. с изменяемой размерностью. Для определения фиксированных массивов есть специальный тип "Фиксированный массив" (рассмотрим в конце данной темы). 38 Основные конструкции встроенного языка Хранение значения в массиве осуществляется по индексу, представляющему собой целое число (первый элемент набора имеет индекс равный нулю): 0 Иванов 1 Петров Работа с элементом массива осуществляется по индексу: Рисунок 1.80 Для работы с данными массива необходимо использовать методы, которые представлены в Синтакс-помощнике: Рисунок 1.81 Для использования методов работы с массивом в тексте алгоритма указываем сначала имя переменной, содержащей массив, затем через точку имя метода: . <ИмяПеременной> <ИмяМетода> Точка между именем переменной и именем метода определяет, что указанный метод применяется к значению, хранящемуся в данной переменной. 39 Основы программирования в системе "1С:Предприятие 8" Например, при работе с массивом, можно использовать методы получения количества элементов в массиве: Рисунок 1.82 Для поиска элемента массива по значению можно воспользоваться методом найти, возвращающем (в нашем примере) индекс элемента массива: Рисунок 1.83 Наполнение массива и доступ к значениям массива может происходить разными способами: 1. записью и чтением значений, как через оператор [], так и методами Установить и Получить: Рисунок 1.84 40 Основные конструкции встроенного языка 2. добавление элемента значения в конец набора с расширением размерности массива: Рисунок 1.85 3. вставкой элемента значения по определенному индексу с расширением размерности массива: Рисунок 1.86 Очистка массива может осуществляться: 1. выборочно по элементам, через указание индекса элемента с уменьшением размерности: Рисунок 1.87 2. полностью - все элементы удаляются с уменьшением размерности массива до нуля (получаем пустой массив): Рисунок 1.88 41 Основы программирования в системе "1С:Предприятие 8" Если требуется ограничить возможности по изменению размерности массива, можно создать фиксированый массив (на основании динамического массива, как копию): Рисунок 1.89 1.3.2 Использование структуры При использовании массивов, обращение к элементу значения осуществляется по числовому индексу элемента (как мы уже знаем), но при решении некоторых задач предметной области, может возникнуть необходимость обращения к элементам не по индексам, а по именам, для улучшения восприятия логики алгоритма. или Для решения данной задачи индекс элемента должен быть строковым, т.е. модель доступа к элементам требуется новый вид коллекции. Для реализации такого способа работы с элементами в коллекции значений разработчики системы 1С:Предприятие 8 создали тип коллекции СТРУКТУРА В отличие от массива, в структуре индекс элемента является строковым и поэтому называется ключом. Ключ определяется по правилам именования переменных, поэтому, можно сказать, что ключ является идентификатором элемента в наборе (идентифицирует, т.е. определяет элемент в наборе). Использование в качестве ключа строки с пробелами реализуется с помощью другого вида коллекции СООТВЕТСТВИЕ (рассматривается в следующем разделе). 42 Основные конструкции встроенного языка Использование имени для каждого элемента набора очень удобно для тех случаев, когда требуется определить хранение элементов значения с учетом логики дальнейшего их использования. Таким образом, мы определяем структуру хранения (когда каждый элемент имеет свое назначение), например, при хранении адреса: Физически систему хранения структуры в памяти можно увидеть в режиме отладки: Рисунок 1.90 Для использования структуры без возможности изменения состава значений можно использовать разновидность данной коллекции: "Фиксированная структура": Рисунок 1.91 43 Основы программирования в системе "1С:Предприятие 8" Рассмотрим на практике приемы использования коллекции СТРУКТУРА. Для практики нам потребуется описание возможных методов и свойств из синтакс-помощника: Рисунок 1.92 Начнем, как обычно, с создания переменной с типом СТРУКТУРА Создание структуры возможно с помоФИОщью конструктора встроенного языка "Новый" и указания типа значения "Структура": Рисунок 1.93 В данном случае в переменной ФИО будет создано значение типа СТРУКТУРА без элементов, т.е. пустая структура. Такой вариант может использоваться для универсальных задач хранения значений, когда заранее не известно, что будем хранить и как идентифицировать. Для создания значения с определенной структурой хранения данных, можно передать список ключей в момент создания значения типа СТРУКТУРА: Рисунок 1.94 В данном случае мы получаем переменную с определенной структурой хранения значений, без самих значений: Рисунок 1.95 44 Основные конструкции встроенного языка Для уменьшения количества строк алгоритма разработчики добавили возможность при создании указывать не только набор ключей, но и значения, например, для определения начальных значений: Рисунок 1.96 И так, мы разобрались с приемами создания значений типа СТРУКТУРА. Теперь разберемся на практике с вариантами доступа к элементам структуры: первый способ – как в случае с массивом, воспользуемся указанием ключа через квадратные скобки Рисунок 1.97 45 Основы программирования в системе "1С:Предприятие 8" Данный способ может использоваться для построения универсальных алгоритмов: Рисунок 1.98 второй способ – с учетом новой возможности обращения к элементу значения через ключ, как свойство значения. В данном случае указание ключа осуществляется через точку после имени переменной. Такой способ стал возможен, т.к. ключ структуры является идентификатором элемента в коллекции: Рисунок 1.99 Изменение состава коллекции значений структура связано с двумя задачами: 1. Добавление элементов может осуществляться разными способами первый способ – при создании через параметры, передаваемые в конструктор НОВЫЙ Рисунок 1.100 46 Основные конструкции встроенного языка второй способ – в момент использования с помощью метода "вставить" для значения типа СТРУКТУРА с указанием имени ключа и значения Рисунок 1.101 2. Удаление элементов из коллекции может происходить: выборочное – с указанием определенного элемента с помощью метода удалить и передачи имени ключа, удаляемого элемента: Рисунок 1.102 Как мы видим, при попытке обращения к элементу по несуществующему ключу (ключ удален), система выдает предупреждение об ошибке. полное – удаление всех элементов коллекции с помощью метода "Очистить": Рисунок 1.103 Для решения некоторых задач, связанных с чтением и анализом всего набора значений, могут потребоваться вспомогательные методы для работы с коллекцией. 47 Основы программирования в системе "1С:Предприятие 8" Задача №1. Мы не знаем, есть ли у рассматриваемой нами коллекции нужное нам свойство. Необходимо проверить его наличие, и если оно есть получить его значение. Данную задачу можно решить с помощью метода "Свойство": Рисунок 1.104 Задача №2. Необходимо узнать, является ли рассматриваемая нами структура пустой или в ней есть элементы. Для решения данной задачи нам необходимо определить количество элементов коллекции: Рисунок 1.105 1.3.3 Использование соответствий Соответствие используется в тех случаях, когда невозможно использование простого ключа для идентификации элемента в коллекции, например: Ключ элемента значения Главный офис Дополнительный офис 48 Значение Лесная 1 Лесная 1 Основные конструкции встроенного языка Физически систему хранения структуры в памяти можно увидеть в режиме отладки: Рисунок 1.106 Чтение и редактирование элементов коллекции может производиться с указанием ключа в квадратных скобках после имени переменной, в которой хранится соответствие: Рисунок 1.107 При просмотре списка доступных методов для работы с соответствием в синтакспомощнике, мы можем увидеть, что теперь нет возможности обращения к элементу коллекции через ключ, как свойство коллекции: Рисунок 1.108 49 Основы программирования в системе "1С:Предприятие 8" Ключ элемента в соответствии может быть не только строковым: Рисунок 1.109 Главным требованием при использовании уникальность в рамках одного соответствия ключей элементов, является их Для ограничения возможностей изменения состава коллекции, в системе 1С:Предприятие 8 существует специализированный тип "ФиксированноеСоответствие": Рисунок 1.110 А теперь на практике рассмотрим задачи, связанные с использованием универсальной коллекции значений СООТВЕТСТВИЕ, и традиционно начнем с создания значения. Как в предыдущих занятиях, коллекция СООТВЕТСТВИЕ создается с помощью конструктора встроенного языка "Новый" и указанием типа коллекции "СООТВЕТСТВИЕ": Рисунок 1.111 Определение начальных элементов в момент создания коллекции невозможно. Для данной задачи необходимо воспользоваться специальным методом "Вставить". 50 Основные конструкции встроенного языка Можно определить элементы с ключами без значений, и потом задать значения, в зависимости от каких-либо условий, например, от языка: Рисунок 1.112 Можно определить элементы коллекции с ключом и значением: Рисунок 1.113 Редактирование значения существующего элемента можно выполнить разными способами: Способ 1. Воспользоваться обращением к элементу по аналогии использования в массивах и структурах через квадратные скобки: Рисунок 1.114 Может использоваться, когда мы точно знаем, что такой ключ в соответствии присутствует Способ 2. Воспользоваться методом "Вставить" для существующего ключа: Рисунок 1.115 Чтение значения элемента можно также осуществлять с использованием квадратных скобок: Рисунок 1.116 51 Основы программирования в системе "1С:Предприятие 8" Но, можно использовать для чтения значения коллекции и метод "Получить": Рисунок 1.117 Удаление элементов коллекции соответствие осуществляется аналогично методам в структуре, разница лишь в том, что ключ при выборочном удалении может быть произвольного типа: Выборочное удаление по ключу: Рисунок 1.118 Полная очистка соответствия: Рисунок 1.119 Данный тип коллекции достаточно часто применяется при реализации разного рода технических задач, не связанных с бизнес логикой создаваемых решений. Например, при реализации механизма сохранения данных форм в настройках (сохранение настроек отборов, группировок в динамических списках). 1.3.4 Использование списка значений Список значений предназначен для пользовательских представлений в интерфейсе. хранения коллекции значений и их Представление значений может задаваться тремя вариантами: "Представление", "Пометка" и "Картинка": 52 Значение Представление Пометка 7 1С:Предприятие 7 Ложь 8 1С:Предприятие 8 Истина Картинка Основные конструкции встроенного языка 1. Представление – используется для хранения строкового представление значения и имеет тип "Строка" 2. Пометка – может использоваться, например, для хранения признака использования значения и имеет тип "БУЛЕВО" 3. Картинка – используется для графического представления значения и имеет тип "Картинка" На следующей картинке мы видим пример интерфейсной работы со списком значений: Рисунок 1.120 1.3.5 Использование таблицы значений Список значений, который мы рассмотрели, позволяет хранить в элементе только одно значение и варианты его представления. Для решения некоторых задач требуется хранить в элементе списка много значений и в этом случае список значений уже не подходит. Для реализации таких задач мы переходим к новому типу табличного способа работы с данными – таблице значений. По названию уже понятно, что данная модель позволяет в строке таблицы хранить множество значений. Список значений: Значение Поля представления Таблица значений: Значение 1 Значение 2 Значение 3 5 Пять Ручка Шариковая Зеленая 2 Два Ручка Шариковая Белая Набор колонок таблицы значений абсолютно произвольный и может определяться и изменяться в любое время. Таблица значений может использоваться как для представления данных в интерфейсе, так и для программной обработки данных. 53 Основы программирования в системе "1С:Предприятие 8" При определении значения переменной типа "ТаблицаЗначений" требуется определить структуру колонок таблицы с помощью свойства коллекции "Колонки", что можно увидеть в описании данной коллекции: Рисунок 1.121 На встроенном языке 1С:Предприятия 8 алгоритм создания таблицы значений с определенной структурой хранения данных будет следующий: Рисунок 1.122 Для работы с таблицей значений доступны следующие методы: Рисунок 1.123 54 Основные конструкции встроенного языка Добавление новой записи в таблицу значений осуществляется созданием строки таблицы значений (например, с помощью метода "Добавить") и определением значений в свойствах строки, согласно определенной структуре колонок: Рисунок 1.124 1.3.6 Использование дерева значений Дерево значений является развитием таблицы значений, для возможности хранения в таблице группы записей. Пример исходных данные для дерева значений можно представить в виде таблицы: НомерРедакции НазваниеПродукта 7 1С:Предприятие 7 7.0 1С:Предприятие 7.0 7.5 1С:Предприятие 7.5 7.7 1С:Предприятие 7.7 8 1С:Предприятие 8 8.0 1С:Предприятие 8.0 8.1 1С:Предприятие 8.1 8.2 1С:Предприятие 8.2 55 Основы программирования в системе "1С:Предприятие 8" Пример программного создания и заполнения дерева значений: Рисунок 1.125 1.4 Синтаксические конструкции При построении алгоритмов мы до сих пор, рассматривали простые алгоритмы, которые представляют собой последовательный набор действий: 1. а = 3 (Действие 1) 2. б = 7 (Действие 2) 3. с = а + б (Действие 3) Но, в реальности могут возникать более сложные конструкции алгоритмов: с условиями – выполнения действий зависит от каких-либо условий, например: 1. Ввести ЦветСветофора 2. Действие = "Идем" если ЦветСветофора = "Зеленый" 3. Действие = "Стоим" если ЦветСветофора <> "Зеленый" с циклами – применяется в случаях, когда последовательность действий может повторяться некоторое количество раз: 1. Ввести ЦветСветофора 2. Действие = "Идем" если ЦветСветофора = "Зеленый" 3. Действие = "Стоим" если ЦветСветофора <> "Зеленый" 4. Повторить алгоритм с 1 строки, если Действие = "Стоим" 56 Основные конструкции встроенного языка 5. Ввести ЕстьМашины (если машины движутся "Да", иначе "Нет") 6. Действие = "Переходим" если нет машин с переходами – применяется в алгоритмах для возможности обхода последовательности действий: 1. Ввести ЦветСветофора 2. Действие = "Стоим" если ЦветСветофора = "Красный" 3. Действие = "Идем" если ЦветСветофора = "Зеленый" 4. Перейти к П6 если ЦветСветофора = "Черный" 5. Повторить алгоритм с 1 строки, если Действие = "Стоим" 6. Ввести ЕстьМашины (если машины движутся "Да", иначе "Нет") 7. Действие = "Переходим" если нет машин Для решения подобных задач во встроенном языке 1С:Предприятия 8 существуют различные синтаксические конструкции, описание которых можно увидеть в Синтакспомощнике Конфигуратора: Рисунок 1.126 57 Основы программирования в системе "1С:Предприятие 8" Для выполнения практикумов данного раздела мы, по прежнему, будем использовать обработку "Алгоритмы": Рисунок 1.127 Для интерактивного ввода значений (ввод значений пользователем через клавиатуру в момент исполнения алгоритма) будем пользоваться методом "ВвестиЗначение": Рисунок 1.128 58 Основные конструкции встроенного языка 1.4.1 Работа с условиями Разберем методику определения условий в алгоритмах на практике. Постановка задачи: Необходимо вывести представление первого дня недели (понедельника): для русского языка "Понедельник" в остальных случаях "Monday" Требуемый язык запрашивать интерактивно у пользователя. Решение. Для ясного понимания конечного результата советую использовать методику написания алгоритмов снизу вверх, т.е. как при строительстве дома – от фундамента до крыши. Прежде всего, определим последовательность наших действий при написании алгоритма: 1. Создаем конечную формулу; 2. Определяем возможные значения представления; 3. Разделяем необходимые действия по условию 4. Формируем значение условия; 5. Проверяем алгоритм 1. Создаем конечную формулу Используем функцию Сообщить для вывода на экран текста, состоящего из явного текста "Первый день недели:" и представления понедельника, определенного переменной "Представление". Рисунок 1.129 2. Определяем возможные значения представления Перед конечной формулой определяем возможные значения переменной "Представление". Порядок значений может повлиять на следующий шаг создания алгоритма. Рисунок 1.130 3. Разделяем необходимые действия по условию Прописываем синтаксические конструкции условия, определяя границы его действия. Рисунок 1.131 59 Основы программирования в системе "1С:Предприятие 8" 4. Формируем значение условия Запрашиваем значение переменной "ВыбранРусскийЯзык" у пользователя методом "ВвестиЗначение". Затем определяем тип используемой переменной (читаем и пишем снизу вверх). В данном примере тип значения влияет на работу ниже следующего метода. Такое возможно благодаря динамической типизации переменных, что характерно для системы 1С:Предприятие 8. Рисунок 1.132 5. Проверяем алгоритм: Рисунок 1.133 1.4.2 Работа с циклами Циклы в программировании используются для реализации одного из главных правил построения алгоритмов: "Одна и та же логика не должна определяться более одного раза, но может использоваться сколько угодно раз". 60 Основные конструкции встроенного языка Для работы с циклическими алгоритмами в системе 1С:Предприятие 8 существуют следующие конструкции встроенного языка: Рисунок 1.134 Такое разнообразие конструкций для реализации циклов объясняется множеством прикладных задач и механизмов, с которыми приходится работать в системе 1С:Предприятие 8. Для практического освоения материала, решим задачи, требующие создания циклических алгоритмов. Задача 1. Постановка: Реализовать интерактивное заполнение массива, размерностью числовыми значениями. 5 элементов, Решение. Прежде всего, определим последовательность наших действий при написании алгоритма: 1. Создаем конечную формулу; 2. Определяем правило повторного исполнения конечной формулы; 3. Создаем массив и определяем его размерность; 4. Проверяем алгоритм 1. Создаем конечную формулу Для ввода значения воспользуемся методом "ВвестиЗначение", где в качестве переменной используем элемент массива с вычисляемым индексом. Чтобы определить способ ввода без начального заполнения значения, передадим третьим параметром метода "ВвестиЗначение" значение типа "ТИП". Получить значение типа "ТИП" можно с помощью функции "Тип", где параметром функции будет в виде строки определено название типа, в нашем случае "Число". 61 Основы программирования в системе "1С:Предприятие 8" Рисунок 1.135 В нашей формуле две неизвестных: "Индекс" и "Данные" 2. Определяем правило повторного исполнения конечной формулы Помещаем конечную формулу в конструкцию цикла с вычислением неизвестной "Индекс", начиная с 0 до 4 включительно, что соответствует индексации элементов массива размерностью 5. Рисунок 1.136 3. Создаем массив и определяем его размерность В созданной формуле мы определили термин "Данные" для работы с массивом, таким образом, требуется добавление строки в начале алгоритма по созданию массива размерностью 5 и именем "Данные". Рисунок 1.137 4. Проверяем алгоритм Рисунок 1.138 Задача 2. Постановка: Реализовать последовательный вывод всех данных массива (с первого элемента до последнего) задачи 1 в область сообщений Решение. Прежде всего, определим последовательность наших действий при написании алгоритма: 5. Создаем конечную формулу; 6. Определяем правило повторного исполнения конечной формулы; 7. Проверяем алгоритм. 62 Основные конструкции встроенного языка 1. Создаем конечную формулу Для вывода значения элемента массива воспользуемся методом "Сообщить", в который передадим содержимое переменной значение. Рисунок 1.139 2. Определяем правило повторного исполнения конечной формулы Необходимо реализовать последовательный обход всех элементов массива с передачей значений элементов в переменную "Значение", для этого воспользуемся конструкцией цикла "Для каждого Цикл", где "Значение" - имя переменной, которой передается значение элемента из коллекции "Данные". Рисунок 1.140 3. Проверяем алгоритм Вводим данные в массив и проверяем вывод в область сообщений: Рисунок 1.141 Задача 3. Постановка: Реализовать вывод случайных чисел от 1 до 10, пока не выпадет число 8. Значение 8 при выводе всегда будет последним. Решение. Прежде всего, определим последовательность наших действий при написании алгоритма: 1. Создаем конечную формулу; 2. Определяем недостающие переменные и механизмы; 3. Определяем правило повторного исполнения необходимых действий; 4. Определяем недостающие переменные для цикла; 5. Проверяем алгоритм. 63 Основы программирования в системе "1С:Предприятие 8" 1. Создаем конечную формулу; Рисунок 1.142 2. Определяем недостающие переменные и механизмы Рисунок 1.143 3. Определяем правило повторного исполнения необходимых действий Рисунок 1.144 4. Определяем недостающие переменные для цикла; Рисунок 1.145 5. Проверяем алгоритм. Рисунок 1.146 1.4.3 Работа с переходами Мы уже знаем, что алгоритмы представляют собой последовательный набор действий. Но при решении некоторых задач возникает необходимость пропустить несколько действий или вернуться на несколько шагов назад. Данные задачи могут решаться в некоторых случаях конструкциями циклов, но только в полном объеме с помощью переходов. В системе 1С:Предприятие 8 существует несколько разновидностей переходов. Рассмотрим их виды на практических примерах: оператор "Перейти" – безусловный переход 64 Основные конструкции встроенного языка Пример 1. Реализации бесконечного цикла с возможностью выхода из него по определенному условию: Рисунок 1.147 Пример 2. Реализация двух вариантов старта алгоритма с дальнейшим общим алгоритмом: Рисунок 1.148 65 Основы программирования в системе "1С:Предприятие 8" оператор "Прервать" – переход в конструкциях цикла к оператору, следующему за концом цикла, приводящее к выходу из текущего цикла Пример 1. Реализация выхода (прерывания) из цикла по определенному условию: Рисунок 1.149 оператор "Продолжить" – переход в конструкциях цикла к началу цикла, позволяет прервать только итерацию цикла Пример 1. Реализация отключения обработки значений в цикле по определенному условию: Рисунок 1.150 Далее более подробно рассмотрим особенности использования конструкции безусловного перехода. Попробуем выявить ситуации, при которых можно получить преимущества при использовании безусловных переходов: Во-первых – использование переходов удобно для восприятия при большой вложенности циклов, большом теле цикла, восприятие может быть улучшено, за счет произвольного расположения условия цикла: 66 Основные конструкции встроенного языка в начале цикла. Рисунок 1.151 в конце цикла. Рисунок 1.152 67 Основы программирования в системе "1С:Предприятие 8" Во-вторых - безусловные переходы позволяют создавать именованные циклы, что тоже удобно при разработке (имя цикла – имя метки перехода, можно сказать разработчику о доработке конкретного цикла): Рисунок 1.153 68 Основные конструкции встроенного языка В-третьих - безусловные переходы позволяют оперативно прекратить выполнение серии вложенных циклов. При использовании операторы "Прервать" в данном примере мы видим, что прерывается только внутренний цикл: Рисунок 1.154 Используя вместо операции "Прервать" - "Перейти", мы реализуем возможность выхода за пределы всей группы циклов. Рисунок 1.155 69 Основы программирования в системе "1С:Предприятие 8" 1.4.4 Процедуры и функции Программисты используют при написании алгоритмов процедуры и функции. В момент определения процедур и функций возникает вопрос: "Мне нужна процедура или функция?". Для ответа на данный вопрос необходимо понимание назначения процедур и функций. Что же такое процедуры и функции? Почему существуют только процедуры и функции? Как правильно определить имя процедуры и функции? Какие параметры и как передавать в процедуры и функции? На все эти вопросы Вы получите ответы прямо сейчас. Начнем с того, что "Процедура" и "Функция" - это типы алгоритмов (как в типизации данных). Для типизации алгоритма необходимо выделить часть алгоритма с помощью специальных операторов (конструкций): Рисунок 1.156 Почему существует только 2 типа алгоритмов? Потому что существует всего два вида взаимодействий между объектами: Рисунок 1.157 Как мы видим, Процедура – модель команды, Функция – модель вопроса, где значение ответа определяется при возврате из функции. Использование функций вместо процедуры технически возможно, но при этом наглядность алгоритма будет нарушена. 70 Основные конструкции встроенного языка 1.4.4.1 Определение своих функций В системе 1С:Предприятие существует много различных методов для работы со значениями, но как бы много их не было, всегда найдется задача, для которой потребуется создавать свой алгоритм обработки или получения данных. Например, мы хотим выводить название курса, определенное в алгоритме без использования переменной, т.к. задача разовая и хранить данное значение в памяти для последующего использования нам не нужно: Рисунок 1.158 Такое вычисляемое значение можно получить с помощью какого-то алгоритма, которому необходимо дать имя, по которому мы его будем вызывать. Имя метода может совпадать с именем переменной. Возникает вопрос вызова метода: "А как же тогда система будет понимать, когда мы хотим взять данные из переменной, а когда с помощью алгоритма?" Для получения вычисляемого значения мы указываем имя метода, с помощью которого происходит вычисление значения с открывающимися и закрывающимися скобками () после имени метода: Рисунок 1.159 Таким образом, система поймет, что нужно брать значение не из переменной, а рассчитывать по одноименному алгоритму. И так, мы разобрались, как правильно обращаться к вычисляемым значениям. И остается еще вопрос: "Где и как определить алгоритм вычисления значения?" 71 Основы программирования в системе "1С:Предприятие 8" Для описания вычисляемых значений в языке программирования используется специальный оператор "Функция". Правила его использования подробно расписаны в синтакс-помощнике. А для решения текущей задачи нам потребуются следующие части конструкции: Рисунок 1.160 Для определения функции переходим в Конфигуратор.Находим обработку "ФункцииИПроцедуры" и открываем ее форму, т.к. мы работаем на пользовательском уровне в форме, то и нашу функцию будем прописывать в форме: Рисунок 1.161 В редакторе формы переходим на закладку "Модуль": Рисунок 1.162 72 Основные конструкции встроенного языка Добавляем описание функции с алгоритмом. Название функции должно содержать название того, что мы запрашиваем у системы: Рисунок 1.163 Для сохранения нашей функции нажимаем клавишу "F7" Запускаем режим 1С:Предприятие клавишей "F5" Открываем обработку "Функции и процедуры" В поле алгоритма прописываем алгоритм Рисунок 1.164 При нажатии на кнопку "Выполнить" видим результат: Рисунок 1.165 73 Основы программирования в системе "1С:Предприятие 8" 1.4.4.2 Определение своих процедур Рассмотрим еще одну задачу, в которой нам может потребоваться определение собственного метода: Рисунок 1.166 В данном примере у нас дважды повторяется один и тот же блок операций: Рисунок 1.167 Хорошо бы данный набор действий реализовать как макрокоманду для компьютера, для упрощения восприятия алгоритма: Рисунок 1.168 Появляется новая задача, для создания своего метода, создание макрокоманды. Использовать для решения данной задачи известный уже нам механизм функций можно, но не эффективно, так как мы же ничего не возвращаем, а просто обращаемся к общему алгоритму. Т.е. необходим механизм, который будет позволять определять 74 Основные конструкции встроенного языка собственные именование алгоритмы без возвращаемых значений. И такой механизм в языке программирования называется ПРОЦЕДУРА. Процедуры позволяют создавать свою систему команд, на основании базовых процедур, функций и выражений. И опять, традиционный вопрос: "Где и как будем определять такой общий алгоритм?" Определять процедуру будем, как и в случае с функциями в модуле формы нашей обработки. А для правила использования оператора "ПРОЦЕДУРА" смотрим в синтакспомощнике. Из описания нам нужно не все, а только следующие части конструкции: Рисунок 1.169 1. Имя нашей процедуры: "СделатьПаузу", т.к. определили вызов: Рисунок 1.170 2. Алгоритм процедуры: Рисунок 1.171 3. Объявление процедуры в модуле будет иметь следующий вид: Рисунок 1.172 1.4.4.3 Использование параметров в процедурах и функциях Мы реализовали в прошлых занятиях алгоритмы, связанные с задачами: получение вычисляемого значения "НаименованиеКомпании"; и общий алгоритм "СделатьПаузу"; В созданной нами процедуре и функции мы использовали статические алгоритмы, т.е. независимые от каких либо внешних условий. 75 Основы программирования в системе "1С:Предприятие 8" Но, решаемые нами задачи могут быть сложнее, например: Вычисляемое значение, получаемое с помощью функции, может зависеть от какого либо значения, или набора значений 1. Для полного название курса необходимо программирования в системе 1С:Предприятие 8"; выдать значение: "Основы 2. для краткого названия курса: "Основы программирования". А общий алгоритм обратного отсчета, реализованный нами в процедуре, может потребовать, например, настройки по общей продолжительности и скорости обратного отсчета Обе задачи связаны с понятием "ПАРАМЕТРИЧЕСКИЕ АЛГОРИТМЫ". Значения параметров могут передаваться в процедуры и функции через, уже известные нам, скобки (): Рисунок 1.173 Алгоритм получается общий, но зависит от передаваемого значения. Для написания условного алгоритма в тексте условия нам потребуется переменная, хранящее значение, переданное при вызове функции. Рисунок 1.174 Имя переменной, в которую будет помещено значение, определенное в момент вызова функции, задаем в круглых скобках функции: в первом случае: Вызов функции: Рисунок 1.175 76 Основные конструкции встроенного языка Объявление функции: Рисунок 1.176 При исполнении: Рисунок 1.177 и в другом случае: Вызов функции: Рисунок 1.178 Объявление функции: Рисунок 1.179 При исполнении: Рисунок 1.180 При добавлении параметров в уже существующие процедуры и функции, необходимо обеспечить работу старых вызовов: Рисунок 1.181 77 Основы программирования в системе "1С:Предприятие 8" Для обеспечения работы вызовов в старом варианте Рисунок 1.182 мы можем: в простых случаях – объявить параметр с начальным значением Рисунок 1.183 которое будет использоваться, если значение не задается в вызове в сложных случаях – объявить параметр со значением типа "НЕОПРЕДЕЛЕНО"), а дальше: определить начальное значение параметра уже в алгоритме: Рисунок 1.184 или поправить логику с учетом отсутствия значения параметра Рисунок 1.185 Рассмотрим задачи, когда использование параметров в процедурах и функциях может быть не связано с параметрическими алгоритмами. Задача. Нам необходимо заполнить существующий список значений днями недели: Рисунок 1.186 78 Основные конструкции встроенного языка Для реализации данного способа вызова воспользуемся процедурой с передачей в нее списка значений, который необходимо заполнить. Объявление в модуле формы нашей обработки процедуры, параметра и текст алгоритма будут следующими: Рисунок 1.187 Если посмотреть содержимое списка после заполнения, то мы увидим, что он действительно заполнен: Рисунок 1.188 Такой способ использования параметра, называется: "ИСПОЛЬЗОВАНИЕ ПАРАМЕТРА ПО ССЫЛКЕ". Смысл данного способа заключается в том, что при передаче в качестве параметра переменной со значением, изменения значения параметра внутри вызываемого алгоритма, меняется и значение исходной переменной. 79 2. ОБЪЕКТНАЯ МОДЕЛЬ РАБОТЫ С ДАННЫМИ Прежде чем перейти к следующим программирования, мы должны понять: практическим шагам освоения основ 1. Что такое база данных, файлы баз данных и СУБД? 2. Для чего нужны СУБД и, какая лучше? 3. Какая связь между СУБД и системой 1С:Предприятие 8? Для ускорения процесса анализа информации человек вводит данные в компьютер, и обрабатывает с помощью различных программ. В некоторых случаях пользователю может потребоваться вывод результата сразу, например, на экран или бумагу. Но, иногда, полученный результат необходимо сохранить для возможности вывода полученного результата через некоторое время или на другом компьютере. Для сохранности данных из памяти компьютера, пользователь сохраняет их в виде файлов на разных носителях (например, на жестком диске "винчестер", или лазерном диске "CD" или на внешнем накопителе "флэшка"). Но, при решении разного рода прикладных задач (из определенных предметных областей, например, бухгалтерский или налоговый учет) нам может потребоваться: хранение неограниченного объема различной информации за любой период времени возможность анализа любых хранящихся данных за произвольный период с учетом определенной логики Программы, которые позволят нам решать такие задачи, должны: 1. работать с любым количеством файлов; 2. позволять нам, как разработчикам, управлять структурой хранения данных; 3. Обеспечивать пользователям простой доступ к данным, независимо от сложности взаимосвязей файлов и системы их хранения. И так, для решения предметных задач, нам нужна система хранения информации в неограниченном количестве файлов, хранящих данные по определенной структуре и связанных между собой с учетом определенной логики. Группе файлов, связанных между собой, для организации единой системы хранения данных дали название - БАЗА ДАННЫХ (БД) или ИНФОРМАЦИОННАЯ БАЗА (ИБ) Файлы, входящие в базу данных, так и назвали - ФАЙЛЫ БАЗЫ ДАННЫХ А программы, которые обеспечивают работу с базами данных, назвали – СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ (СУБД) СУБД представляют собой не одну программу для работы с базами данных и их файлами, а программный комплекс, решающий множество задач, начиная от физического доступа к файлам базы данных до описания логической модели хранения и чтения данных, хранящихся в них. Существует огромное множество различных видов СУБД, как, впрочем, и автомобилей. Каждый вид СУБД имеет свои преимущества и недостатки. Невозможно ответить однозначно на вопрос: "Какая СУБД лучше?". 80 Объектная модель работы с данными Это, все равно, что попытаться дать однозначный ответ на вопрос: "Какой автомобиль лучше? 1. Для фермера, например, в поле лучше трактор или комбайн 2. Для семейного отдыха – комфортный и вместительный 3. Для любителей драйва – быстрый 4. и т.д. Поэтому, при работе в системе 1С:Предприятие 8.3, для реализации физического хранения данных есть возможность выбора той СУБД, которая наиболее подходит для решаемых задач с учетом финансовых вопросов, количества пользователей, объема хранящихся данных и множества других факторов. Это могут быть СУБД производства таких известных фирм, как MICROSOFT, IBM, ORACLE и СУБД сообщества PostgreSQL. Но при всем разнообразии возможностей работы через внешние СУБД система 1С:Предприятие 8 является самостоятельным программным продуктом, т.к. может работать с данными через собственный вариант встроенной в платформу файловой СУБД, предназначенной для простых случаев использования, например, как вариант, разработка и использование одним пользователем. И теперь, перейдем к одному из важных вопросов, который мог возникнуть у вас к этому времени: "Если СУБД достаточно активно используются самостоятельно, зачем нужна система 1С:Предприятие 8 в связке с СУБД?" Дело в том, что при работе с СУБД напрямую, разработчики тратят много времени на проектирование и реализацию структуры хранения данных в базе данных, т.к. структура хранения данных в СУБД представляет собой множество таблиц определенной структуры, с взаимными связями через ключевые поля. Что затрудняет восприятие логики хранения с учетом прикладных задач (задач предметной области). Для упрощения восприятия и, как следствие, для ускорения разработки нужно перейти от физического принципа хранения данных в таблицах (на этапе проектирования и разработки) к определению предметных сущностей. Таким образом, при разработке прикладных решений с помощью системы 1С:Предприятие 8 мы смещаем акцент в сторону понимания предметной логики, а технические моменты реализации решает технологическая платформа 1С:Предприятие 8.3 совместно с СУБД. И так, с помощью системы 1С:Предпрятие 8, разработчики реализуют систему хранения данных не на табличном уровне, а на объектном. По курсу "Знакомство с платформой" Вы уже знаете, что представляет собой "Конфигуратор", "Конфигурация" и объекты метаданных. Но, некоторые моменты, для улучшения освоения материала лучше, все-таки, кратко повторить. И так, вспомним основные понятия: Конфигуратор – это режим работы клиентского приложения системы 1С:Предприятие 8, предназначенный для разработки прикладных решений и администрирования информационной базы. Конфигурация – это предварительное описание модели прикладного решения, включающее в себя и структуру хранения данных, и описание интерфейса программы, и описание логики работы в части алгоритмов. Доступ на ее чтение и изменение возможен только интерактивно в конфигураторе и является основой для построения конфигурации базы данных. 81 Основы программирования в системе "1С:Предприятие 8" Конфигурация базы данных – это уже описание действующей модели прикладного решения. Именно данная конфигурация является описанием действующей модели прикладного решения и на встроенном языке позволяет анализировать структуру данных. Объекты конфигурации – составные части конфигурации, которые позволяют на логическом, а не табличном уровне, определять наши конфигурации. Можно сказать, что объекты конфигурации, это ее составные части. Теперь нам предстоит расширить объем наших теоретических познаний. Рассмотрим новые для нас понятия: объект информационной базы; объект встроенного языка. Как мы уже знаем, программа работает с данными в памяти компьютера. Поэтому, для работы с данными в системе 1С:Предприятие, в рамках объектного подхода, используются выделенные участки памяти для обработки данных. Эти участки памяти называются объектами информационной базы. Выделение участка памяти в компьютере для работы с определенными данными осуществляется на основании структуры данных, определенной объектами конфигурации: Рисунок 2.1 И так, если редактирование данных информационной базы осуществляется через объекты информационной базы, возникает разумный вопрос: "Как создать объект информационной базы?" 82 Объектная модель работы с данными Для ответа на данный вопрос мы разделим задачу создания объекта на две подзадачи: 1. Определяем источник данных (что хотим редактировать) 2. Запрашиваем данные из базы в память (для редактирования) Получается уже инструкция для программы (системы 1С:Предприятие 8). Когда люди общаются, они используют языковую систему общения, так и в данном случае, для описания инструкции система описания. В программирование такие системы называют языками программирования. В системе 1С:Предприятие 8 используется собственный язык программирования. Для определения источника редактируемых данных, во встроенном языке 1С, существует специальных механизм объектов встроенного языка. Например, для обращения к данным справочников, используется объект встроенного языка "СПРАВОЧНИКИ", т.е. зарезервированное слово в языке программирования: Рисунок 2.2 Таким, образом, инструкции на языке 1С состоят из: объектов встроенного языка - определяющих источники данных; методов встроенного языка – определяющих, что делать с данными. Объекты встроенного языка могут иметь сложную структуру (свойства), как в нашем примере со справочником "Товары" - "Справочники.Товары". Полное описание всех возможных объектов встроенного языка 1С можно увидеть в синтакс-помощнике режима Конфигуратор: Рисунок 2.3 83 Основы программирования в системе "1С:Предприятие 8" Хранение инструкций на встроенном языке системы 1С:Предприятие 8 реализовано с помощью объектов конфигурации. Для решения данной задачи у объектов конфигурации есть специализированные свойства – модули: Рисунок 2.4 Исполнение инструкции (алгоритма из модуля) осуществляется событийно, т.е. в момент активации какого-либо действия по отношению к программе со стороны пользователя: Рисунок 2.5 Начнем более подробное последовательное рассмотрение данного материала на практике. 84 Объектная модель работы с данными 2.1 Объекты встроенного языка Как мы уже знаем из базового курса "Знакомство с платформой", для организации хранения данных в информационной базе необходимо определить структуру хранения. Структура хранения определяется через создаваемые нами в конфигураторе объекты конфигурации. Для различных предметных задач используется соответствующие виды объектов (подробно о назначении каждого вида мы узнаем в следующем курсе "Основные механизмы платформы", а пока на данном этапе нам необходимо освоить программные методы работы с данными в информационной базе). При обновлении конфигурации базы данных, на основании созданных нами объектов конфигурации, система строит в информационной базе таблицу, а может даже и несколько таблиц на физическом уровне для хранения данных. Чтобы обеспечить программный доступ к этим таблицам и их содержимому не на физическом уровне, а на предметном, необходим какой-то гибкий программный механизм, настраивающийся при изменении конфигурации. Для его реализации в системе существуют объекты встроенного языка. Для каждого, создаваемого нами объекта конфигурации, система создает группу объектов встроенного языка с определенными свойствами и методами, а также соответствующие типы данных. Для программного обращения к данным в ИБ необходимо понять: "Какие данные хранятся в базе?". Данные хранящиеся в информационной базе можно разделить на две основных группы: 1. Данные определенные в конфигураторе как объекты конфигурации – программный доступ к ним осуществляется через ключевое слово "МЕТАДАННЫЕ" 2. Предопределенные данные заведенные в конфигураторе и данные, введенные в режиме 1С:Предприятие – для программного обращения к ним существуют зарезервированные слова, например: "Справочники", "Документы" и т.д. В обоих случаях доступ к данным связан с одним понятием: "Свойства глобального контекста": Рисунок 2.6 85 Основы программирования в системе "1С:Предприятие 8" 2.1.1 Анализ конфигурации базы данных Задачи анализа конфигурации базы данных являются наиболее подходящими для практического освоения объектов встроенного языка. Как уже было сказано выше, для программного доступа к описанию используется свойство глобального контекста: "Метаданные" или "Metadata": Рисунок 2.7 Для изучения данного механизма чтения данных воспользуемся обработкой "Чтение конфигурации БД": Рисунок 2.8 Т.к. конфигурация является многоуровневым описанием хранения данных, то и для ее программного анализа требуется специальная система объектов встроенного языка и правил их использования в выражениях на встроенном языке системы 1С:Предприятие 8. 86 Объектная модель работы с данными Обратите внимание на то, что не для всех строк в описании есть объекты встроенного языка. Например, для ветви "Общие" нет объекта встроенного языка: Рисунок 2.9 Связано это с тем, что ветка "Общие" не является объектом конфигурации, а используется лишь для наглядной группировки объектов конфигурации в интерфейсе Конфигуратора. И возможна обратная ситуация, когда мы используем объект встроенного языка, явно не представленный в Конфигурации. Например, в случае с подчиненными подсистемами: Рисунок 2.10 Для программного обращения к определенному объекту конфигурации, для его дальнейшего анализа, с учетом его иерархического положения, каждый уровень разделяем знаком "." (Точка): Рисунок 2.11 87 Основы программирования в системе "1С:Предприятие 8" В режиме отладки можно наглядно увидеть полученную структуру: Рисунок 2.12 Программное обращение к конфигурации требуется в тех случаях, когда требуется проанализировать поведение самой системы 1С:Предприятие 8 в отношении методики работы пользователя с определенными данными, хранящимися в информационной базе. Например, будет ли на уровне самой системы осуществляться автоматическая нумерация элементов справочника "Клиенты": Рисунок 2.13 Необходимость обращения и анализа объектов конфигурации важна при создании универсальных алгоритмов для использования в разных прикладных решениях. И так, вернемся к вопросам синтаксиса выражений при использовании объектов встроенного языка. С точки зрения объектной модели, первое слово до точки является именем объекта встроенного языка с определенным значением: Рисунок 2.14 88 Объектная модель работы с данными Далее через точку следуют свойства, используемого нами объекта: Рисунок 2.15 Для объекта встроенного языка "Метаданные" свойства не могут добавляться разработчиками прикладных решений. Если у объекта встроенного языка есть свойство, естественно оно хранит какое-то значение. И это значение может быть не только примитивного типа, а, например, коллекция объектов метаданных: Рисунок 2.16 В таком случае элемент такой коллекции является свойством коллекции и обращение к нему может осуществляться через знак "." Точка: Рисунок 2.17 89 Основы программирования в системе "1С:Предприятие 8" Добавление элемента коллекции происходит на уровне самой системы при обновлении конфигурации базы данных и связано с возможностью определения новых объектов конфигурации при разработке в окне конфигурации. Как видим, на следующей картинке, если объект конфигурации есть в основной конфигурации (справочник "Товары"), но отсутствует в конфигурации базы данных (обновление конфигурации БД не производилось), объект встроенного языка "Метаданные.Справочники.Товары" будет недоступен в режиме "1С:Предприятие": Рисунок 2.18 Помимо свойств, у объектов встроенного языка могут быть методы: Рисунок 2.19 Методы позволяют ускорить процесс разработки алгоритмов. Например, в данном случае вместо написания собственного алгоритма поиска нужного нам объекта конфигурации, можно воспользоваться системным методом: Рисунок 2.20 2.1.2 Использование системных перечислений И так, мы уже знаем, что для определения значений свойств объектов конфигурации возможно использование примитивных типов данных и коллекция объектов конфигурации. Но, есть свойства, с помощью которых разработчик прикладного решения может управлять системными механизмами платформы 1С:Предприятие 8.2. 90 Объектная модель работы с данными Например, через палитру свойств, можно увидеть свойство "Вариант встроенного языка". Значение этого свойства можно определить только одним из двух вариантов: "Русский" и "Английский": Рисунок 2.21 При программном анализе значения данного свойства можно увидеть, что его тип представляет собой "ВариантВстроенногоЯзыка": Рисунок 2.22 Если поискать в синтакс-помощнике, то мы найдем такой тип в системных перечислениях: Рисунок 2.23 91 Основы программирования в системе "1С:Предприятие 8" И так, не трудно понять, что разработчики ввели такие виды данных для стандартизации ввода значений, которые влияют на поведение системы. А нам, как разработчикам прикладных решений они позволяют программно анализировать хранящиеся в таких свойствах значения: Рисунок 2.24 Следующая наша задача уже будет связана не с анализом структуры хранения данных, а с переносом данных из памяти компьютера в информационную базу и чтением записанных данных из базы. 2.1.3 Сохранение простого значения в базе Как мы уже рассматривали ранее, для программного доступа к данным в информационной базе существуют свойства глобального контекста, т.е. базовые объекты встроенного языка, существующие всегда. И название этих свойств тоже, что и название ветвей в дереве конфигурации: Рисунок 2.25 92 Объектная модель работы с данными Использование объекта встроенного языка для доступа к данным, на начальном этапе, напоминает работу с метаданными (например, для объекта встроенного языка "Документы", виды документов являются свойствами используемого объекта): Рисунок 2.26 В нашем случае, необходимо уже считывать данные, а не структуру их хранения. Чтобы разобраться в механизме сохранения данных в информационной базе решим сначала задачу со значением примитивного типа. Для решения задачи воспользуемся обработкой "Работа с данными": Рисунок 2.27 Задача: "Сохранение данных в информационной базе" Исходные данные: Рисунок 2.28 93 Основы программирования в системе "1С:Предприятие 8" Задание: Необходимо сохранить значение переменной "Значение" в информационной базе. Решение: Шаг 1. Нам потребуется определить контейнер для хранения значения переменной в информационной базе с помощью объекта конфигурации. Для нашей цели подойдет самый простой вид объекта - константа с типом строка неограниченной длины (уже присутствует в каркасной базе): Рисунок 2.29 Шаг 2. Затем обновляем конфигурацию базы данных (F7) и переходим в режим "1С:Предприятие", где запускаем обработку "Работа с данными" и определяем исходные данные: Рисунок 2.30 Шаг 3. Теперь для обращения к нашей константе средствами встроенного языка используем свойство глобального контекста "Константы": Рисунок 2.31 94 Объектная модель работы с данными Через знак "." (Точка) укажем имя нашей константы: Рисунок 2.32 И для записи в нашу константу значения из переменной воспользуемся методом "Установить", куда в качестве параметра передадим нашу переменную: Рисунок 2.33 Шаг 4. Выполним алгоритм по кнопке "Выполнить": Рисунок 2.34 Шаг 5. Для проверки откроем константу "Название курса" и проверим наличие в ней переданного значения: Рисунок 2.35 95 Основы программирования в системе "1С:Предприятие 8" Мы реализовали запись значения из памяти компьютера в информационную базу. Такое значение сохранится теперь после выключения компьютера. И в дальнейшем мы сможем этим значением воспользоваться. Для этого нужно только прочитать его из базы данных. Нам известно место хранения нашего значения, поэтому с помощью нашей обработки напишем алгоритм чтения названия курса из константы и выведем полученное значение в окно сообщений. Прочитаем значение с помощью метода "Получить": Рисунок 2.36 2.1.4 Сохранение наборов значений в базе Теперь рассмотрим более сложную задачу. Допустим, нам требуется сохранить в информационной базе содержимое массива. Для ее реализации нам потребуется объект конфигурации, позволяющий хранить в базе коллекции значений. В качестве коллекции возьмем МАССИВ. Задача: "Сохранение данных массива в информационной базе" Исходные данные: Рисунок 2.37 Задание: Необходимо сохранить значения массива в информационную базу. Решение: Шаг 1. Нам потребуется определить контейнер для хранения значений массива в информационной базе с помощью объекта конфигурации. Для нашей цели подойдет вид объекта – регистр сведений. В каркасной базе уже присутствует для данной задачи регистр сведений "ВидКлиентскогоПриложения": Рисунок 2.38 96 Объектная модель работы с данными Шаг 2. Определим место сохранения данных массива как набор записей регистра сведений и создадим в нем три записи, согласно количеству элементов массива: Рисунок 2.39 Шаг 3. Перенесем значения из массива в наш набор: Рисунок 2.40 Шаг 4. Осуществим запись набора в информационную базу: Рисунок 2.41 В результате должен получиться следующий алгоритм, который мы и выполняем: Рисунок 2.42 Шаг 5. Для проверки откроем содержимое регистра сведений "Виды клиентских приложений" с помощью главного меню: Рисунок 2.43 97 Основы программирования в системе "1С:Предприятие 8" 2.1.5 Сохранение в базе структурированной информации Структурированная информация может быть представлена в виде значений с типом СТРУКТУРА. Например, информация о сотруднике с учетом раздельного хранения фамилии, имени и отчества: Рисунок 2.44 Задача: "Сохранение данных структуры в информационной базе" Исходные данные: Рисунок 2.45 Задание: Необходимо сохранить информационной базе. значения структуры "ДанныеПоСотруднику" в Решение: Шаг 1. Систему хранения этих данных можно реализовать с помощью объекта конфигурации "Справочники". В нашей базе есть подготовленный для данной задачи справочник "Сотрудник": Рисунок 2.46 Шаг 2. Определим место сохранения данных структуры как элемент справочника: Рисунок 2.47 98 Объектная модель работы с данными Шаг 3. Перенесем значения из структуры в наш элемент с помощью метода глобального контекста "ЗаполнитьЗначенияСвойств", описание метода можно посмотреть в Синтакс-помощнике конфигуратора: Рисунок 2.48 Шаг 4. Формируем "Наименование": представление в реквизите элемента справочника Рисунок 2.49 Шаг 5 Осуществим запись элемента в информационную базу: Рисунок 2.50 Шаг 6. Проверяем текст алгоритма и выполняем: Рисунок 2.51 99 Основы программирования в системе "1С:Предприятие 8" Шаг 7. Для проверки откроем содержимое справочника "Сотрудники": Рисунок 2.52 Как мы видим, наши данные по сотруднику успешно записаны в информационную базу и доступны для дальнейшего использования. 2.1.6 Классификация объектов встроенного языка И так, мы на практике убедились, что объекты встроенного языка необходимы для организации программной работы с нашими данными в информационной базе. Наши задания были направлены на рассмотрение возможностей системы 1С:Предприятие 8 по сохранению значений из оперативной памяти компьютера в информационную базу для долговременного хранения и общего использования. Поэтому, мы не вдавались в подробности классификации объектов встроенного языка (это как, если бы мы научились ездить на автомобиле, без знания принципов работы двигателя и остальных механизмов автомобиля). В наших заданиях пришлось использовать различные виды объектов: от свойств глобального контекста Константы Справочники РегистрыСведений до сложных конструкций, использующих знак точки Константы.НаименованиеКурса Справочники.Сотрудник РегистрыСведений0.ВидКлиентскогоПриложения В некоторых случаях мы обращались: к свойствам наших объектов встроенного языка Константы.НаименованиеКурса Справочники.Сотрудники 100 Объектная модель работы с данными и к методам: Константы.НаименованиеКурса.Установить() Справочники.Сотрудники.СоздатьЭлемент() Для понимания того, что мы делаем в алгоритме, такого уровня знаний достаточно. Но, для понимания того, почему именно такой алгоритм перед нами, необходимо понимание объектной идеологии работы с данными. Для более полного усвоения материала, связанного с объектной моделью доступа к данным взглянем на нашу базу, как на большой контейнер (коробку) с данными, а не наборы таблиц: Рисунок 2.53 В нашей коробке могут быть отсеки (маленькие коробочки разных размеров) для хранения различных предметов: Рисунок 2.54 Для обращения к определенной коробочке из большой коробки мы должны их как-то назвать. Для обращения к каждой такой коробочке во встроенном языке 1С:Предприятие 8 существует соответствующий объект, представленный свойством глобального контекста: Рисунок 2.55 101 Основы программирования в системе "1С:Предприятие 8" В свою очередь каждая коробка может состоять из еще более мелких коробочек, например, коробка "Справочники": Рисунок 2.56 Для доступа к определенному виду справочника у рассмотренного нами объекта "Справочники" каждый вид справочника представлен как свойство: Рисунок 2.57 У объекта "Справочники" существует метод "ТипВсеСсылки", позволяющий получить все возможные типы ссылок справочников, отвечающий на вопрос: "Какие типы данных могут храниться в контейнере "Справочники"?": Рисунок 2.58 102 Объектная модель работы с данными Но, разумеется, такое вложение коробочек (контейнеров) для хранения данных не может быть бесконечным. И действительно, на данном уровне в коробочках с названием "Товары", "Клиенты", … хранятся уже конкретные данные (как, например, вещи в коробке). Такие данные называются, в случае со справочниками, элементы: Рисунок 2.59 Для получения списка элементов определенного справочника , например, "Справочники.Товары", существует метод "Выбрать" и "ВыбратьИерархически": Рисунок 2.60 При использовании метода "Выбрать" система возвращает объект встроенного языка с типом "СправочникВыборка.Товары". С помощью цикла и данного объекта встроенного языка можно осуществить последовательное получение элементов из справочника: Рисунок 2.61 Возникает разумный вопрос, а как же нам обратиться к конкретному элементу? 103 Основы программирования в системе "1С:Предприятие 8" Для возможности универсального определения каждого элемента, разработчики ввели понятие уникального идентификатора, представляющего собой сложную комбинацию цифр, например: 9443b198-8fea-11e0-be7d-74f06dc8f52e Уникальный идентификатор элемента в базе не меняется в случае изменения кода, наименования, и прочих свойств элементов, и назначается автоматически при первичной записи элемента в базу: Рисунок 2.62 Его можно узнать с помощью метода "УникальныйИдентификатор" от ссылка на элемент справочника: Рисунок 2.63 Уникальный идентификатор связан с таким понятием в объектной модели доступа к данным, как ССЫЛКА. 104 Объектная модель работы с данными Рассмотрим пример использования уникального идентификатора элемента для его быстрого поиска в базе и открытия формы для редактирования: Рисунок 2.64 А для удобного представления данных в интерфейсе вместо уникального идентификатора пользователь может видеть "Код" или "Наименование" элемента, что определяется в настройках объекта конфигурации: Рисунок 2.65 105 Основы программирования в системе "1С:Предприятие 8" Получение данных при программировании по такому идентификатору, не всегда удобно, поэтому разработчики определили методы для поиска нужных элементов по коду, наименованию и прочим свойствам элемента, при этом, мы получаем ссылочный тип значения: Рисунок 2.66 Рисунок 2.67 И так, мы рассмотрели систему хранения данных в информационной базе. Но, как мы уже изучали ранее, информационная база предназначена для долговременного хранения данных, а программа работает с данными в памяти компьютера. Для редактирования данных в памяти мы позже познакомимся с понятием объекта информационной базы. 2.2 Модули До сих пор мы писали алгоритмы в подготовленных обработках в режиме 1С:Предприятие. Но, при создании прикладных решений подобные алгоритмы необходимо прописывать в момент разработки и желательно без возможности просмотра этих алгоритмов в режиме использования решения, и уж тем более без возможности их изменения пользователями. 106 Объектная модель работы с данными Для ограничения доступа к алгоритмам со стороны пользователей и обеспечения доступа только со стороны самой системы их нужно размещать в конфигураторе, а если быть точнее, в описании нашего решения, т.е. в конфигурации. Как мы уже знаем, конфигурация состоит из объектов конфигурации. Любой алгоритм представляет собой какой-либо текст. Разработчики для размещения алгоритмов придумали текстовое свойство объекта конфигурации, которое назвали МОДУЛЬ, в связи с этим, создание своих модулей в системе невозможно. Рисунок 2.68 Модули доступны для редактирования только в конфигураторе у основной конфигурации. Программный анализ и изменение модулей, располагающихся в конфигурации базы данных не возможен. Рисунок 2.69 107 Основы программирования в системе "1С:Предприятие 8" Алгоритмы необходимо размещать в модулях в строго определенном порядке. Модуль состоит из трех последовательных блоков (областей): Рисунок 2.70 При проверке модуля на корректность система выдаст служебное сообщение, если алгоритмы определены не в том порядке: Рисунок 2.71 В некоторых видах модулей могут использоваться не все области размещения алгоритмов. Для возможности исполнения системой 1С:Предприятие 8 алгоритмов, написанных на встроенном языке 1С в модулях, необходима загрузка модулей в технологическую платформу из информационной базы. 108 Объектная модель работы с данными Загрузка модулей из информационной базы связана с процессом преобразования модуля в некий образ с алгоритмами, понятным для системы. Этот процесс называется компиляцией. Рисунок 2.72 Для целей оптимизации запуска и работы клиентского приложения компиляция модулей осуществляется постепенно, т.е. какие-то модули загружаются при старте системы, а какие-то при определенных условиях. По назначению все существующие модули можно поделить на три группы: МОДУЛИ ОБЪЕКТОВ – данными; МОДУЛИ ФОРМ – предназначены для определения правил работы в интерфейсе системы 1С:Предприятие 8; МОДУЛИ ОБЩИЕ – предназначены для определения алгоритмов общего назначения, т.е. используемых одновременно в разных алгоритмах и модулях. предназначены для определения правил работы с У разных видов объектов конфигурации модули могут называться по-разному, и их количество для одного объекта конфигурации может быть больше одного. И дальше мы рассмотрим различные модули, их назначение и особенности их использования. 2.2.1 Использование модулей сеанса и приложения Для того чтобы понять зачем нужны модули приложения, необходимо разобраться с вариантами запуска клиентского приложения. Запуск клиентского приложения связан с двумя вариантами использования: "Интерактивное использование", т.е. с использованием собственного графического интерфейса системы 1С:Предприятие 8. Такой вариант необходим для обеспечения работы пользователя в клиентском приложении. Осуществить такой запуск можно разными способами: через стандартную программу запуска: Рисунок 2.73 109 Основы программирования в системе "1С:Предприятие 8" либо программно, например из Excel: Рисунок 2.74 "Программное использование" без использования интерфейса 1С:Предприятие 8, необходимо в тех случаях, когда требуется программно (без вмешательства пользователя) получить из информационной базы (или записать) какие-то данные, пример подключения из Excel: Рисунок 2.75 Интерактивная работа может происходить в двух интерфейсных режимах: 110 ОБЫЧНОЕ ПРИЛОЖЕНИЕ УПРАВЛЯЕМОЕ ПРИЛОЖЕНИЕ Объектная модель работы с данными В итоге, выходит, что клиентское приложение может быть запущено 3 способами, и каждый нужно уметь отдельно программно анализировать и выполнить определенные действия (алгоритмы): Рисунок 2.76 Из данных модулей компилируется при запуске клиентского приложения только один, в зависимости от способа подключения. Данные модули можно отнести к группе модулей объекта, и их основное назначение определение действий приложения при начале работы приложения и завершении. В некоторых случаях их можно использовать для определения глобальных переменных. Для ограничения доступа к данным на уровне элементов в системе 1С:Предприятие 8 существуют специальные объекты "Параметры сеанса", использующиеся в механизме ролей. Для корректной работы механизма ограничения доступа к данным значения параметров сеанса необходимо задавать до активации модулей приложения. 111 Основы программирования в системе "1С:Предприятие 8" Для реализации такого поведения системы разработчики добавили (с платформы 8.1) еще один вид модуля "Модуль сеанса" и его использование (компиляция) не зависит от способов подключения: Рисунок 2.77 Данный модуль предназначен для выполнения действий при создании сеанса и заполнения параметров сеанса, поэтому у него есть только область определения процедур и функций (блок 2). Подробный разбор данного модуля осуществляется в следующем курсе "Основы клиент-серверного программирования", т.к. связан с архитектурой клиент-сервер. 2.2.2 Использование модулей объектов Как мы уже знаем, система 1С:Предприятие 8 позволяет нам осуществлять работу с данными двумя способами: интерактивно – через графический интерфейс; программно – средствами встроенного языка. Для корректной работы создаваемого нами решения, необходимо обеспечить единую логику заполнения информационной базы данными, независимо от способа работы с данными. 112 Объектная модель работы с данными При работе с данными мы постоянно сталкиваемся с задачами: 1. Проверки корректности введенных значений и производимых действий, например, выдать сообщение о невозможности пометки на удаление определенных документов: Рисунок 2.78 В данном примере такой контроль должен происходить как при интерактивной попытке пометки удаления документа, так и при программной. 113 Основы программирования в системе "1С:Предприятие 8" 2. Следующая задача связана с автоматическим заполнением Фамилии, Имени и Отчеству при записи данных в базу: Наименования по Рисунок 2.79 3. Заполнение в документе "Заказ клиента" при редактировании строки или создании новой значения в колонке "Сумма" по данным колонок "Цена" и "Количество": Рисунок 2.80 Мы уже знаем, что местом хранения алгоритмов является модуль. И для решения данных задач мы будем использовать модули объектов. 114 Объектная модель работы с данными Например, пример проверки возможности удаления заказа Рисунок 2.81 формирование Наименования по Фамилии, Имени и Отчеству: Рисунок 2.82 алгоритм заполнения Суммы строки состава накладной: Рисунок 2.83 115 3. ТАБЛИЧНАЯ МОДЕЛЬ РАБОТЫ С ДАННЫМИ Для анализа хранящейся в системе информации или, например представления информации в отчет, часто приходится получать данные сразу из нескольких источников (Например, информация по товару может храниться в справочнике, в документе и в регистрах одновременно): Такой способ работы с данными позволяет получать сложные выборки данных, сгруппированные и отсортированные определенным образом. Для этих выборок могут быть рассчитаны общие и промежуточные итоги, наложены ограничения на количество или состав записей и пр. Типы таблиц источников данных По происхождению таблицы источников можно поделить на три группы: Реальные – данные физически хранятся в базе данных Виртуальные (расчетные) – данные вычисляются системой 1С:Предприятие 8 в момент обращения к источнику Временные (внешние) – данные находятся в памяти компьютера Типы полей Набор данных результата определяется полями. Поля результата могут определяться двумя способами: через определение полей источников (колонок) расчетным способом на основании значений нескольких полей, либо вообще без обращения к полям источника (Вычисляемые поля). Типы значений в полях Помимо известных нам по объектной модели типов данных, в качестве типов значения полей таблиц может выступать значение типа Null. Реальные таблицы Реальные таблицы хранятся в базе данных, то есть интерпретируются из реально существующей таблицы базы данных. В качестве примера реальных таблиц можно привести следующие таблицы: 116 таблицы справочников и документов; Табличная модель работы с данными таблицы регистров; Из реальных таблиц можно выделить несколько подклассов: Объектные – предназначены для хранения объектов, таких как справочники, документы, счета и т. п. Каждой объектной таблице соответствует тип объектов системы 1C:Предприятие 8. Например, объектам типа Справочник.Услуги соответствует одна таблица, объектам типа Справочник.Клиенты - другая. Каждая отдельная запись объектной таблицы хранит состояние отдельного объекта соответствующего типа. В соответствии с этим у каждой объектной таблицы определено поле типа Ссылка на текущую запись. Кроме того, для объектных таблиц определено поле Представление, предназначенное для автоматически формируемого пользовательского представления объекта из содержимого полей записи. Объектные таблицы могут быть иерархическими. Для иерархических таблиц определяется специально выделенное поле Родитель, содержащее ссылку на запись, которой в соответствии с иерархией подчиняется текущая запись. В качестве примера объектных таблиц можно привести следующие таблицы: таблица констант; таблицы справочников; таблицы документов; таблицы плана счетов; таблицы плана видов характеристик; таблицы плана видов расчета; Вложенные таблицы – предназначены для хранения данных, представленных в виде табличных частей справочников и документов. Виртуальные таблицы При обращении к данным виртуальных таблиц система автоматически собирает информацию из одной или нескольких реальных таблиц базы данных для выполнения запроса, производя при этом предварительную обработку и упорядочивание. Виртуальная таблица может быть параметризована, то есть реальное наполнение виртуальной таблицы может определяться значениями параметров, фактические значения которых задаются в тексте запроса. Параметры виртуальной таблицы накладывают условия на исходные записи, а не уже отобранные. В качестве примера виртуальных таблиц можно привести следующие таблицы: таблицы наиболее поздних (среза последних) записей периодического регистра сведений; таблицы наиболее ранних (среза первых) записей регистра сведений; таблицы остатков и/или оборотов регистра накоплений, бухгалтерии; Для каждой виртуальной таблицы определяется имя, которое используется в запросах для идентификации таблицы. Имя таблицы может быть задано на английском или русском языках. Например, так: РегистрНакопления.ОстаткиМатериалов.Остатки (<Параметры>). Данное описание исходной виртуальной таблицы отличается от описания реальной таблицы РегистрНакопления.ОстаткиМатериалов наличием суффикса "Остатки", определяющим, что необходимо использовать не таблицу движений регистра "ОстаткиМатериалов", а остатки по регистру на некоторый момент времени, определяемый параметрами виртуальной таблицы. 117 Основы программирования в системе "1С:Предприятие 8" Временные таблицы Временные таблицы – это таблицы произвольной структуры, создаваемые разработчиком в любой момент времени в памяти компьютера. Они позволяют определить в качестве источников в табличном виде абсолютно любую информацию: из памяти компьютера, например из незаписанного документа. из внешних источников, например, внешних СУБД данные, рассчитанные произвольным образом. В отличие от виртуальных таблиц неограниченное разнообразие алгоритмов (ограничения только в фантазии и здравом смысле). Использование таких таблиц ни чем не отличается от предыдущих таблиц. Механизмы чтения данных из таблиц Для чтения данных из таблиц в системе 1С:Предприятие 8 применяются различные механизмы: Механизм компоновки данных – это механизм определения схемы источников данных и способов их обработки и представления. Позволяет упростить процесс разработки и использования запросов конечными пользователями. Главным инструментом данного механизма является конструктор схемы компоновки данных: Рисунок 3.1 Результатом работы конструктора является схема компоновки данных, полностью описывающая весь отчет. Таким образом, разработчик может составить работоспособный отчет без программирования - не написав ни одной строки кода и не создав ни одной формы. 118 Табличная модель работы с данными Кроме этого конструктор схемы компоновки данных позволяет редактировать уже имеющуюся схему компоновки - она будет проанализирована и представлена в конструкторе в виде соответствующих наборов данных, доступных, выбранных полей базы данных, набора заданных связей, группировок, условий и т.д. Механизм запросов - это механизм доступа к данным, который поддерживает платформа. Используя этот механизм, разработчик может читать и обрабатывать данные2. Такое ограничение объясняется тем, что запросы специально предназначены для быстрого получения и обработки некоторой выборки из больших массивов данных, которые могут храниться в базе данных. Данный механизм может использоваться: системой компоновки данных для получения данных при программном обращении к данным. На программном уровне доступ может осуществляться с помощью разных объектов встроенного языка: Запрос – позволяет использовать статические запросы для получения данных: Рисунок 3.2 Построитель запроса – позволяет использовать динамические3 запросы для получения данных Рисунок 3.3 Построитель отчета – позволяет использовать динамические запросы для получения и вывода данных Рисунок 3.4 Для получения данных предусмотрен метод Выполнить. В результате исполнения запроса система 1С:Предприятие 8 возвращает объект встроенного языка РезультатЗапроса 2 Изменение данных с помощью запросов невозможно. Это объясняется тем, что запросы специально предназначены для быстрого получения и обработки некоторой выборки из больших массивов данных, которые могут храниться в базе данных. 3 Динамический запрос – запрос, текст которого генерируется системой в зависимости от настроек пользователя или разработчика, позволяет избежать избыточности при получении данных. 119 Основы программирования в системе "1С:Предприятие 8" Для передачи в запрос внешних параметров, которые нельзя получить из базы (например, ЗаказКлиента) реализован метод УстановитьПараметр: Рисунок 3.5 Порядок следования конструкций определения параметров и текста запроса не имеет строгого порядка, т.е. можно сначала определить параметры, а потом текст. Тут как кому нравится. Передача параметров должна осуществляться до выполнения запроса. Полный перечень свойств, методов объекта Запрос и их описание можно получить в документации или электронной справке: Рисунок 3.6 120 Табличная модель работы с данными Язык запросов - является языком описания инструкций для компьютера в части получения данных и основан на SQL4, но имеет некоторые расширения, позволяющие упростить и расширить возможности механизма запросов. Язык запросов существенно отличается от встроенного языка технологической платформы (его синтаксис мы рассмотрим чуть позже): Рисунок 3.7 Главным инструментом разработчика по созданию текстов на языке запросов является конструктор запросов: Рисунок 3.8 Конструктор позволяет не только повысить скорость создания текстов запроса, но и избежать огромного количества трудноуловимых ошибок при ручном описании текста запроса5. Обращение к конструктору запроса может осуществляться средствами встроенного языка (например, для проверки текста запроса или для стандартизации текста запроса): 4 SQL — язык структурированных запросов (англ. Structured Query Language [,es kju:' el] — эс-кью-эл, порусски также часто говорят "эс-ку-эль"). Хотя SQL и задумывался в свое время, как средство работы конечного пользователя, но в процессе своей эволюции он стал настолько сложным, что превратился в инструмент программиста. 5 Текст запроса является обычным текстом, поэтому его можно писать вручную или собирать по кусочкам программно в процессе выполнения. 121 Основы программирования в системе "1С:Предприятие 8" Данный инструмент позволяет, как создавать новые тексты запросов, так и редактировать уже существующие: Рисунок 3.9 Как мы видим из картинки, существует два способа вызова конструктора запросов в конфигураторе при разработке прикладного решения. Конструктор с обработкой результата рассмотрим при формировании печатных форм документов. При программном использовании текста запроса необходимо передать в соответствующий объект встроенного языка механизма запросов (Запрос, ПостроительЗапроса, ПостроительОтчета, КонструкторЗапроса). Например, через свойство Текст: Рисунок 3.10 В процессе разработки можно загрузить текст запроса в конструктор через специальное окно по кнопке Запрос в режиме редактирования, при этом текущая структура запроса в конструкторе будет удалена: Рисунок 3.11 122 Табличная модель работы с данными Если текст запроса передается в конструктор, то он автоматически проверяется системой: на корректность Рисунок 3.12 и если запрос верный, он форматируется с учетом правил генерации запроса. При чтении свойства Текст мы получим уже отформатированный и структурированный текст запроса: Рисунок 3.13 Рисунок 3.14 123 Основы программирования в системе "1С:Предприятие 8" 3.1 Язык запросов В данном разделе мы рассмотрим6 структуру запроса, назначение основных конструкций и их представление в тексте запроса и конструкторе. Русско-английские возможности языка запросов Для специалистов, работавших с запросами в различных СУБД, будет приятно узнать что система 1С:Предприятие 8 поддерживает возможность написания текста запросов на английском языке: Рисунок 3.15 Но обязательно нужно учитывать, что те прикладные объекты конфигурации и реквизиты (не стандартные), которые мы создаем при описании модели прикладного решения на русском языке, в тексте запроса будут также на русском языке (а в таком случае, согласитесь, не очень красивым получается запрос в русско-английском исполнении). Основная настройка конфигурации "Вариант встроенного языка" позволяет определить язык синтаксических конструкций, используемый в конструкторе запроса (русский либо английский): Рисунок 3.16 6 Практическое освоение языка и механизмов запросов осуществляется в соответствующих курсах. 124 Табличная модель работы с данными Язык самого конструктора определяется используемым дополнительным интерфейсом платформы, например, если выбран Английский, то внешний вид конструктора будет следующим: Рисунок 3.17 Такие возможности позволяют, во-первых, вести разработку не только на русском языке и во-вторых, разработчики, привыкшие писать запросы на английском языке, смогут быстрее адаптироваться к данному инструментарию. В нашем курсе вы будем пользоваться русским вариантом синтаксических конструкций и русскоязычным интерфейсом, т.к. все же на данном курсе учатся не только разработчики с опытом написания запросов. 3.1.1 Структура и синтаксис запроса Текст запроса составляется на языке запросов и его возможную структуру можно описать следующим синтаксическим правилом: 125 Основы программирования в системе "1С:Предприятие 8" Как видно из этого правила, текст запроса состоит из нескольких частей, или секций. Каждая секция предваряется соответствующим ключевым словом. Секции, заключенные в квадратные скобки являются необязательными и могут быть пропущены. Вертикальной чертой разделены взаимоисключающие выражения. Как мы видим из структуры, наличие полей выборки является обязательным условием любого запроса: Рисунок 3.18 В тексте запроса можно писать комментарии, которые оформляются таким же образом, как и во встроенном языке "1С:Предприятие 8", с помощью //: Рисунок 3.19 Пройдемся по всем основным конструкциям запросов. 3.1.2 Секция ВЫБРАТЬ Текст запроса всегда начинается с обязательного ключевого слова ВЫБРАТЬ. Данное ключевое слово позволяет указать: Список полей для выборки7 либо, используя символ звездочка (*) выбрать все именованные поля из источника либо через имена полей выбрать определенные именованные поля из таблицисточников данных через запятую 7 Допускается одновременное использование имен полей и символа звездочка 126 Табличная модель работы с данными В качестве полей могут использоваться вычисляемые выражения, например, параметры запроса, арифметические, логические, строковые выражения и выражения с оператором выбора. Рисунок 3.20 В качестве полей выборки можно использовать вложенные таблицы: Рисунок 3.21 При обращении к такому полю, мы получим результат запроса для каждой строки данных: Рисунок 3.22 127 Основы программирования в системе "1С:Предприятие 8" При выгрузке результата можно увидеть содержимое данного поля: Рисунок 3.23 Виртуальные поля. Виртуальные поля – это поля, которые не хранятся в базе данных, а генерируются системой "на лету", например, поле "Представление" для таблицы справочника и документа, или поле "МоментВремени" для документа: Без виртуальных полей: Рисунок 3.24 С виртуальными полями: Рисунок 3.25 128 Табличная модель работы с данными Важно: Условия появления ВИРТУАЛЬНЫХ ПОЛЕЙ При использовании в тексте запроса в качестве списка полей выборки символа ЗВЕЗДОЧКА (*) виртуальные поля не подставляются автоматически программно и конструктором в список выбранных полей. Их использование надо задать в явном виде, т.е. указанием их имен из списка возможных полей. При описании полей выборки можно присваивать им различные имена для использования в запросе. Такие имена называются псевдонимами. Псевдонимы полей задаются в соответствии с правилами назначения идентификаторов переменных. Псевдонимы в запросе не могут совпадать. Назначение псевдонимов полям само по себе никак не влияет на выборку данных в запросе. Псевдонимы полей выборки присваиваются с помощью (необязательного) ключевого слова КАК, либо в конструкторе на закладке "Объединения и Псевдонимы": Рисунок 3.26 Если полю выборки назначить псевдоним, то в дальнейшем к этому полю можно будет обращаться, используя его псевдоним в результатах запроса (например, для автозаполнения печатных форм данными из запроса) и в некоторых конструкциях языка запросов: Рисунок 3.27 129 Основы программирования в системе "1С:Предприятие 8" В предложениях УПОРЯДОЧИТЬ ПО и ИТОГИ можно использовать псевдонимы. Рисунок 3.28 Хотя язык запросов в системе 1С:Предприятие 8 и основан на SQL, но при этом содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений, например одно из таких расширений: обращение к полям через точку8 (".") - если поля какой-либо таблицы имеют ссылочный тип (хранят ссылки на объекты другой таблицы), разработчик может в тексте запроса ссылаться на них через ".", как во встроенном языке (для упрощения запроса), при этом количество уровней вложенности таких ссылок система не ограничивает: Рисунок 3.29 8 Разыменование ссылочных полей 130 Табличная модель работы с данными В результате исполнения запроса система может возвращать повторяющиеся записи (зависит от запроса получаемых данных). Например, в запросе всех товаров, указанных в документах "Приход товара": Рисунок 3.30 Для сворачивания таких записей (показа их только один раз) существует ключевое слово РАЗЛИЧНЫЕ: Уберем лишние (повторяющиеся) записи: Рисунок 3.31 131 Основы программирования в системе "1С:Предприятие 8" Ключевое слово РАЗРЕШЕННЫЕ означает, что запрос выберет только те записи, на которые у текущего пользователя есть права. Если данное слово не указать, то в случае, когда запрос выберет записи, на которые у пользователя нет прав, запрос отработает с ошибкой и пользователь получит сообщение: Рисунок 3.32 При отсутствии такой конструкции пользователю потребуется задать условия на выбираемые значения, чтобы получить результат, а это не очень удобно. Например, в отчете "Остатки взаиморасчетов" данные только по своим клиентам, а такой список может быть большим. При указании конструкции РАЗРЕШЕННЫЕ система сама выдаст информацию только по требуемым клиентам. Данное ключевое слово идет сразу за конструкцией ВЫБРАТЬ и может задаваться как вручную в тексте запроса, либо в конструкторе запроса на закладке "Дополнительно": Рисунок 3.33 Важно: Условия применения конструкции РАЗРЕШЕННЫЕ Может присутствовать предложение ВЫБРАТЬ только верхнего уровня, и распространяется на весь запрос, включая вложенные запросы 132 Табличная модель работы с данными Конструкция ПЕРВЫЕ <Количество> позволяет задать предельное количество строк в результате запроса. Будут отобраны самые первые (в соответствии с правилами упорядочивания результатов запроса) строки. <Количество> задается целым числом: Рисунок 3.34 Если упорядочить список по возрастанию, то получим "Первые" Если упорядочить по убыванию, то – "Последние" Какой результат получим, если используются одновременно "РАЗЛИЧНЫЕ" и "ПЕРВЫЕ 3" из таблицы следующего содержания: конструкции Наименование Ручки шариковые Линейки Ручки шариковые Карандаши Ластики Варианты: записи (Ручки шариковые, Линейки) записи (Ручки шариковые, Линейки, Карандаши) записи (Ручки шариковые, Линейки, Ластики) записи (Карандаши, Линейки, Ластики) 3.1.3 Секция ИЗ В языке запросов источники данных можно определять двумя способами: Упрощенный вариант - в имени поля выборки (применяется при запросах с одним источником и небольшим количеством выбираемых полей 1-2) Рисунок 3.35 133 Основы программирования в системе "1С:Предприятие 8" Стандартный вариант 9– используется конструкция ИЗ <Список источников>. Описание источников может быть опущено только в том случае, если они полностью определены в списке полей выборки: Рисунок 3.36 Для таблиц, как и для полей, могут применяться псевдонимы через ключевое слово КАК (тоже не обязательное, но желательное): Рисунок 3.37 При использовании псевдонимов таблиц, обращение к полям осуществляется через заданные псевдонимы. Конструктор запроса всегда указываем псевдоним таблицы, если он не задан явно. Имя псевдонима определяется системой по имени таблицы: Рисунок 3.38 9 Стандартный, потому что конструктор запроса преобразует простой вариант запроса к данному. 134 Табличная модель работы с данными Задать псевдоним можно для любой таблицы. В конструкторе запроса данное действие можно выполнить использую контекстное меню в поле Таблицы применительно к выбранной курсором таблице: Рисунок 3.39 И так, теперь мы знаем, что псевдонимы можно задавать полям и таблицам. Зачем же такое разнообразие спросите Вы? Почему бы не остановиться только на полях или только на таблицах? Если мы будем использовать только псевдонимы таблиц, то мы не сможем определить имена колонок результирующей выборки, а значит про автозаполнение таблиц и форм придется забыть. Мы же не хотим терять такую возможность? Отсутствие псевдонимов таблиц может привести нас к неразрешимым ошибкам в тексте запроса. Например, имя поля совпадает с именем таблицы. Рисунок 3.40 В реальности такие ситуации могут быть. Допустим, менять имя поля нам нельзя из соображений первого пункта. Остается поменять имя таблицы (теперь мы знаем, как его поменять). Без определения псевдонима будет выдано такое сообщение: Рисунок 3.41 Такое предупреждение связано с правилом уникальности имен таблиц и полей. Особенно часто такие ситуации могут возникать при использовании временных таблиц, вложенных запросов и создании текста запросов по частям (например, при программной генерации). 135 Основы программирования в системе "1С:Предприятие 8" Получается, псевдонимы позволяют решить нам множество проблем. Но и не только проблемы можно решать с их помощью. Используя псевдонимы можно создавать шаблоны запросов, например: Рисунок 3.42 За счет псевдонима таблицы нам не пришлось менять весь запрос, а только часть, отвечающую за имя источника. В конструкции ИЗ можно определять несколько таблиц (что является основной задачей исходя из назначения табличной модели): Рисунок 3.43 О правилах использования нескольких источников мы поговорим позже. 3.1.4 Секция ГДЕ Условие на выбор конкретных записей задается с помощью конструкции ГДЕ <Условие отбора>. В конструкторе запроса условие определяется на закладке "Условия": Рисунок 3.44 136 Табличная модель работы с данными В результат попадают только те записи, для которых указанное условие оказывается истинным. Условие, определяемое после ключевого слова ГДЕ, действует после того, как из исходной таблицы – источника выбраны все записи. Как мы видим из картинки, поля условия можно не указывать в полях выборки, а задействовать только в условиях. В условиях можно использовать логические операторы И, ИЛИ, НЕ, а так же операторные скобки, при помощи которых можно задавать более сложные условия отбора. Приоритеты выполнения операторов: НЕ, потом И, потом ИЛИ. Произвольные "П.."(Произвольное): условия в конструкторе отмечаются флажком в колонке Рисунок 3.45 Для создания произвольных условий в конструкторе существует конструктор произвольных выражений: Рисунок 3.46 137 Основы программирования в системе "1С:Предприятие 8" Данный конструктор позволяет быстро и без синтаксических ошибок создать условие. Если в условии будет обнаружена ошибка, то будет выдано предупреждение. Например: Рисунок 3.47 Полное описание всех функций языка запроса и примеры использования определены в документации и электронной справке10 (F1): Рисунок 3.48 Мы же в данном курсе рассмотрим только конструкции, определяющие структуру запроса и формирующие представление о возможностях механизма запросов. 10 Не в синтакс-помощнике 138 Табличная модель работы с данными 3.1.5 Секция СГРУППИРОВАТЬ ПО Ранее мы с Вами рассмотрели механизм сворачивания одинаковых записей. Но он хорош только в том случае, если записи идентичны по всем полям. А как же быть в следующем случае: Товар Ручки шариковые Ластики Ручки шариковые Карандаши Сумма продаж 1000 500 2000 4000 Нам надо сгруппировать записи по ручкам в одну и в колонке Сумма продаж показать сумму по сгруппированным записям: Товар Ручки шариковые Ластики Карандаши Сумма продаж 3000 500 4000 В нашем случае конструкция РАЗЛИЧНЫЕ уже не подходит из-за колонки Сумма продаж, т.к. данные в ней надо суммировать. Для решения таких задач создана конструкция СГРУППИРОВАТЬ ПО <Поля группировки>, которая в конструкторе запроса отображается на закладке "Группировка": Рисунок 3.49 Нераспределенные поля конструктор автоматически помещает в групповое поле при создании запроса (если это возможно). 139 Основы программирования в системе "1С:Предприятие 8" Важно помнить, что в большинстве случаев все поля выборки запроса должны делиться на две группы: агрегатные функции (конструктор предлагает быстрый выбор допустимых агрегатных функций): Рисунок 3.50 поля, по которым ведется группировка. Рисунок 3.51 Исключение составляют ситуации, когда агрегатные (агрегировать - собирать) функции применены к полям вложенной таблицы. В этом случае в списке полей выборки возможны обращения к полям таблицы верхнего уровня, без группировки результатов по этим полям. Рисунок 3.52 При использовании агрегатных функций предложение СГРУППИРОВАТЬ ПО может не указываться совсем; при этом все результаты запроса будут сгруппированы в одну единственную строку. 140 Табличная модель работы с данными 3.1.6 Секция ИМЕЮЩИЕ Предложение "ИМЕЮЩИЕ" позволяет накладывать условия на значения агрегатных функций и результаты группировок. В других конструкциях языка запросов, например, в предложении ГДЕ, использовать агрегатные функции в условиях нельзя. В условии отбора ИМЕЮЩИЕ можно использовать только агрегатные функции и поля, по которым осуществляется группировка: Рисунок 3.53 Настройка данного условия в конструкторе запроса осуществляется на закладке Условия (как и в случае с конструкцией ГДЕ). Обратите внимание на то, что в данном варианте, оно всегда произвольное, т.к. использует агрегатную функцию. Значение условия может не присутствовать в списке полей выборки: Рисунок 3.54 141 Основы программирования в системе "1С:Предприятие 8" 3.1.7 Секция ДЛЯ ИЗМЕНЕНИЯ Предложение ДЛЯ ИЗМЕНЕНИЯ предназначено для указания необходимости блокировки считываемых в транзакции данных. В конструкторе запроса данная настройка осуществляется на закладке "Дополнительно": 1 с установкой флажка "Блокировать получаемые данные для последующего изменения" появится конструкция "ДЛЯ ИЗМЕНЕНИЯ" 2 в область "Таблицы для изменения" переносим необходимые для блокировки таблицы из области "Таблицы" Рисунок 3.55 Считанные данные становятся недоступными для чтения в других сессиях: Для файлового варианта блокируются указанные таблицы Для клиент – серверного варианта – только выбранные записи. Блокировка снимается после завершения транзакции. 142 Табличная модель работы с данными 3.1.8 Секция УПОРЯДОЧИТЬ ПО Как правило, данные, полученные с помощью запроса, нуждаются в какой-либо сортировке, либо по алфавиту, либо по числовому полю. Данная возможность реализуется с помощью ключевого слова УПОРЯДОЧИТЬ ПО. Список полей упорядочивания может состоять из одного или нескольких имен полей, разделенных запятыми. Настройка упорядочивания в конструкторе запроса производится на закладке "Порядок": Рисунок 3.56 Условие упорядочивания в общем случае может представлять собой некоторое выражение. Строки результата запроса будут упорядочены по значениям этого выражения, рассчитанным для каждой строки. 143 Основы программирования в системе "1С:Предприятие 8" Существует несколько вариантов упорядочивания: Рисунок 3.57 Возрастание - упорядочивание по указанному полю в порядке возрастания значений. Является вариантом по умолчанию. Если в запросе не указан способ, но можно указать явно – "ВОЗР". (Например, для случаев программной модификации текста запроса Возрастание/Убывание) Убывание - упорядочивание по указанному полю в порядке убывания значений (указание в тексте запроса требует явного указания – "УБЫВ") Рисунок 3.58 В качестве полей упорядочивания могут использоваться как существующие в таблицах поля, так и вычисляемые. В списке полей упорядочивания допускается использование псевдонимов полей выборки. Упорядочивание может производиться по полям, отсутствующим в списке полей выборки.11 11 Замечание. Запрос, в котором указано ключевое слово РАЗЛИЧНЫЕ и в предложении УПОРЯДОЧИТЬ ПО указано выражение, отсутствующее в списке выборки, считается некорректным, и при исполнении такого запроса будет выдана ошибка. В режиме совместимости с версией 8.1 ошибка выдаваться не будет. 144 Табличная модель работы с данными Следующие настройки происхождению) таблиц: работают только для иерархических (по своему Иерархия (по возрастанию) – добавляет в результат группы элементов. Сортировка элементов по возрастанию. Рисунок 3.59 Важно понимать, что упорядочивание по иерархии имеет смысл задавать в том случае, если в качестве источника определена именно таблица иерархического справочника (либо она является основной в случае использования нескольких источников), а не какаялибо другая таблица, содержащая только ссылку на справочник. Для использования иерархии в неиерархических таблицах необходимо их соединить12 с иерархической таблицей. 12 Соединение источников рассмотрим в разделе, посвященному использованию нескольких источников 145 Основы программирования в системе "1С:Предприятие 8" Иерархия по убыванию – добавляет в результат группы элементов. Сортировка элементов по убыванию. Рассмотрим на примере отличия иерархии от иерархии по убыванию: Рисунок 3.60 И так, мы видим, что сортировка по возрастанию и убыванию работает как для групп, так и для элементов внутри этих групп. Рассмотренные выше примеры использования ключевого слова УПОРЯДОЧИТЬ ПО могут использовать автоматический способ упорядочивания с использованием ключевого слова АВТОУПОРЯДОЧИВАНИЕ. При использовании ключевого слова АВТОУПОРЯДОЧИВАНИЕ, поля для упорядочивания результата запроса будут формироваться автоматически. Использование автоматического упорядочивания облегчает процесс написания отчетов и запросов. Для автоматического упорядочивания автоматического упорядочивания: 146 существуют следующие правила Табличная модель работы с данными АВТОУПОРЯДОЧИВАНИЕ используется автономно (в тексте запроса отсутствуют предложения: УПОРЯДОЧИТЬ ПО, ИТОГИ, СГРУППИРОВАТЬ ПО) Результат запроса будет упорядочен по полям сортировки по умолчанию13 для таблиц, выбранных в качестве источников данных: Рисунок 3.61 13 Поля сортировки по умолчанию для справочников это код или наименование, для документов – дата документа 147 Основы программирования в системе "1С:Предприятие 8" АВТОУПОРЯДОЧИВАНИЕ + УПОРЯДОЧИТЬ ПО. Каждая ссылка на таблицу, перечисленная после предложения УПОРЯДОЧИТЬ ПО, будет заменена полями, по которым по умолчанию14 сортируется таблица. Если поле для упорядочивания ссылается на иерархический справочник, то будет применена иерархическая сортировка по этому справочнику. Рисунок 3.62 14 Поля сортировки по умолчанию для справочников это код или наименование, для документов – дата документа 148 Табличная модель работы с данными АВТОУПОРЯДОЧИВАНИЕ + СГРУППИРОВАТЬ ПО (в тексте запроса отсутствуют предложения УПОРЯДОЧИТЬ ПО и ИТОГИ) Результат запроса будет упорядочен по полям, перечисленным после предложения СГРУППИРОВАТЬ ПО. А если группировка осуществлялся по ссылочным полям, то и по полям сортировки по умолчанию15 для этих таблиц. Рисунок 3.63 15 Поля сортировки по умолчанию для справочников это код или наименование, для документов – дата документа 149 Основы программирования в системе "1С:Предприятие 8" АВТОУПОРЯДОЧИВАНИЕ + ИТОГИ (в тексте запроса отсутствует предложение УПОРЯДОЧИТЬ ПО) Результат запроса будет упорядочен по полям, перечисленным после предложения ИТОГИ ПО. А если вывод итогов осуществлялся по ссылочным полям, то и по полям сортировки по умолчанию16 для этих таблиц. В случае если запрос содержит предложение ИТОГИ, каждый уровень итогов упорядочивается отдельно. Рисунок 3.64 16 Поля сортировки по умолчанию для справочников это код или наименование, для документов – дата документа 150 Табличная модель работы с данными 3.1.9 Секция ИТОГИ С помощью ключевого слова ИТОГИ17 можно включить в результат запроса дополнительные записи, в которых содержатся данные об общих и промежуточных итогах по полям и группировкам, с использованием агрегатных функций. Существует несколько вариантов вывода итогов: Общие итоги; Итоги по группировкам; Итоги по иерархии; Комбинация вышеперечисленных вариантов; Настройка секции ИТОГИ в конструкторе запросе осуществляется на закладке "Итоги": Рисунок 3.65 В некоторых случаях закладки Итоги может не быть, это означает, что использовать итоги нельзя, например, при создании вложенного запроса: Рисунок 3.66 Таким образом, конструктор оберегает разработчика от неправильных действий при создании запросов, чего редактор текстов не делает при ручном создании текстов запроса. Итоги чем-то похожи на уже рассмотренные нами группировки в части отражения сгруппированных записей. Основное отличие ИТОГОВ от ГРУППИРОВОК на уровне конечного результата в том, что: 17 В настоящей версии программы не поддерживается расчет итогов по вложенным таблицам. 151 Основы программирования в системе "1С:Предприятие 8" ГРУППИРОВКИ – превращают детальные записи в группировочные: Рисунок 3.67 ИТОГИ – добавляют группировочные записи к детальным: Рисунок 3.68 В части текстов запроса также присутствуют различия: Рисунок 3.69 1. в ИТОГАХ можем использовать Псевдонимы полей 2. в ИТОГАХ агрегатная функция указывается в секции ИТОГИ 3. в запросе могут присутствовать поля выборки, не используемые в ИТОГАХ ( в нашем примере - "Остатки.Товар.Поставщик") 152 Табличная модель работы с данными И третье, ключевое различие ИТОГОВ и ГРУППИРОВОК, рассмотрим в конструкторе запросов: Рисунок 3.70 Как мы видим, в группировках всего две области используемых полей, а в ИТОГАХ три: 1. Область группировочных полей – по которым будет производиться группировка (сворачивание) 2. Область итоговых полей – значения, которых, будут обрабатываться агрегатными функциями 3. Область полей выборки – для итогов может содержать поля выборки, при группировках конструктор перенесет поля в группировочные. Для области итоговых полей, как мы видим, есть дополнительная настройка "Общие итоги". Она позволяет получить одну итоговую запись по всем записям выборки без учета группировочных полей: 153 Основы программирования в системе "1С:Предприятие 8" В части настройки группировочных полей, как мы видим, тоже появились изменения (сравниваем с закладкой Группировка): Определение псевдонимов для группировочных полей Рисунок 3.71 Настройка уровня использования итоговых записей (список возможных вариантов зависит от типа значения) Рисунок 3.72 Рисунок 3.73 154 Табличная модель работы с данными Настройка для группировочных полей типа Дата – дополнение результатов датами в заданном периоде: Рисунок 3.74 В тексте запроса определяется при помощи ключевого слова ПЕРИОДАМИ, после которого в скобках указывается вид периода (одно из СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ), начальная и конечные даты интересуемого периода. В случае если начальные и конечные даты не указаны, будут использованы первая и последние даты, участвующие в результате 155 Основы программирования в системе "1С:Предприятие 8" 3.2 Определение и использование источников Определение источников В первой части данного раздела мы рассмотрим, как определить источники данных с учетом их классификации и какие дополнительные настройки для них могут существовать. Затем, мы рассмотрим возможные способы их одновременного использования для получения сводной информации. 3.2.1 Вложенные таблицы Система 1С:Предприятие 8 хранит данные табличных частей справочников, планов счетов и прочих объектов во вложенных таблицах: документов, Рисунок 3.75 В табличной модели обращения к данным система поддерживает два способа обращения к вложенной таблице: 156 обращение в "упрощенном" варианте через точку, как к реквизиту, похоже на объектный способ (например, ПриходТовара.Товары); "стандартный" вариант, прямое обращение к вложенной таблице Табличная модель работы с данными Обращение к вложенной таблице через владельца записей Рисунок 3.76 Прямое обращение к таблице Рисунок 3.77 157 Основы программирования в системе "1С:Предприятие 8" 3.2.2 Вложенные запросы Бывают ситуации, когда для запроса необходимо определить в качестве источника данных результат другого запроса: Рисунок 3.78 Запрос, с помощью которого мы определяем рассчитываемый нами источник (результат вложенного запроса), называется вложенным. В этом случае описание источника содержит описание вложенного запроса. Описание вложенного запроса составляется точно так же, как и обычного. Если вложенный запрос используется для указания источника данных, то обязательно должен быть указан псевдоним. Для создания вложенного запроса в конструкторе запроса можно воспользоваться специальной кнопочкой: Рисунок 3.79 В качестве полей такого источника доступны все поля, описанные в списке полей выборки вложенного запроса. 158 Табличная модель работы с данными Вложенный запрос может использоваться не только для определения источника данных, но также и для определения сложных условий в тексте запроса в операторах "В" и "НЕ В": при задании параметров виртуальной таблицы Рисунок 3.80 при задании условий в конструкции ГДЕ Рисунок 3.81 Найдите вложенный запрос сами. 159 Основы программирования в системе "1С:Предприятие 8" 3.2.3 Временные таблицы и пакетные запросы Создание временной таблицы с помощью конструктора запроса (в конструкторе запроса с обработкой результата не поддерживается) для получения данных из памяти компьютера и использования в обычном запросе: 1. Создаем описание временной таблицы Рисунок 3.82 2. Заполняем имя параметра для передачи данных в запрос из памяти компьютера и определяем структуру источника (желательно совпадающую со структурой той табличной части, из которой будем загружать данные) Рисунок 3.83 3. Определяем те поля, которые нам понадобятся для работы (скорее всего это будут все поля). Тут можно посоветовать задать псевдонимы полей выборки, если в результирующем запросе нужны другие имена полей. Рисунок 3.84 4. Определяем имя временной таблицы, которое будет использоваться нами в дальнейшем запросе: Рисунок 3.85 160 Табличная модель работы с данными 5. Через пакет запросов определяем новый запрос, в котором будем использовать наши данные из памяти компьютера Рисунок 3.86 6. На закладке Таблицы и поля получаем необходимую нам Временную таблицу, содержащую данные из памяти компьютера. Рисунок 3.87 Вот мы и создали временную таблицу. Теперь посмотрим, как выглядит текст такого запроса, как в запрос передать данные и как его выполнить и получить данные. 161 Основы программирования в системе "1С:Предприятие 8" Для начала добавим запрос для просмотра данных временной таблицы: Рисунок 3.88 Рисунок 3.89 162 Табличная модель работы с данными Рисунок 3.90 Данные из табличной части документа: Рисунок 3.91 А вот и данные из временной таблицы: Рисунок 3.92 Алгоритм мы разберем позже (в разделе Получение и обработка результатов запроса). 163 Основы программирования в системе "1С:Предприятие 8" 3.2.4 Виртуальные таблицы Виртуальные таблицы, предоставляемые системой, позволяют получить практически готовые данные для большинства прикладных решений без необходимости составления сложных запросов. Например, такая виртуальная таблица может предоставить данные по остаткам товаров в разрезе периодов на какой-то момент времени. При этом виртуальные таблицы максимально используют хранимую информацию, например, ранее рассчитанные итоги и т.д. Свои виртуальные таблицы нельзя создавать. Можно обращаться только к тем, которые уже есть в системе. Увидеть весь перечень виртуальных таблиц можно в конструкторе запроса: Рисунок 3.93 Узнать, то, что выбранная таблица является виртуальной можно по наличию у нее параметрической настройки: Рисунок 3.94 В тексте запроса виртуальные таблицы похожи по способу обращения к ним на функции (в случае использования параметров): Рисунок 3.95 164 Табличная модель работы с данными 3.3 Использование нескольких источников Прежде чем приступить к рассмотрению методов использования нескольких источников в запросах, разберем те задачи, которые могут возникать в данной ситуации, иначе нам будет непонятно, зачем вообще существуют эти методы и когда их использовать (постараюсь без математических премудростей и терминов). Можно сказать, что когда мы используем несколько источников для отображения данных в одной таблице, мы их суммируем: Рисунок 3.96 Но таблицы это не числа, которые можно просто сложить (2 + 3 = 5), и не строки, которые можно склеить ("2"+"3" = "23"). Каждая таблица состоит из: набор колонок набор записей И в связи с такой структурой наших источников, возникают сразу два вопроса: Какие колонки попадут в результирующую таблицу? Какие строки попадут в результирующую таблицу? 165 Основы программирования в системе "1С:Предприятие 8" И так, рассмотрим возможные варианты сложения таблиц с учетом наших вопросов: соединение таблиц (объединяем колонки) – горизонтальная склейка Рисунок 3.97 объединение таблиц (объединяем записи) – вертикальная склейка Рисунок 3.98 В результате появляются два метода в языке запросов, позволяющие выполнять данные операции. Но у каждого способа существуют свои особенности. Рассмотрим теперь детали. 3.3.1 Соединение таблиц (Join) Для соединения двух таблиц необходимо чтобы эти таблицы имели определенную структуру. И для понимания данной задачи рассмотрим ее на примере двух записей: Запись таблицы "А" (одна запись) Сотрудник Таб. Номер Василькова 001 Запись таблицы "Б" (одна запись) ФИО Василькова Мария Степановна Сотрудник Паспорт Дата рождения Василькова М.С. 1234 456789 29.02.1980 Нам нужна сводная информация в виде: Сотрудник Таб. Номер ФИО Паспорт Стаж работы 5 лет Дата рождения Василькова Василькова 001 Мария 1234 456789 29.02.1980 Степановна Наглядно все понятно, но компьютер не человек, и наглядность ему не поможет. В нашем случае в обеих записях нет единого уникального значения, по которому можно понять, что эти две записи относятся к одному сотруднику (действительно, Василькова и Василькова М.С. могут быть разными людьми). И так получается, главное правило: ДЛЯ СОЕДИНЕНИЯ ЗАПИСЕЙ НЕОБХОДИМО НАЛИЧИЕ ХОТЯ БЫ ОДНОГО КЛЮЧЕВОГО ПОЛЯ В КАЖДОЙ ЗАПИСИ Рисунок 3.99 166 Табличная модель работы с данными Для реализации такой связи в языке запросов существует специальная конструкция, определяемая в конструкторе запросов на закладке Связи: Рисунок 3.100 Правило соединения в тексте запроса будет следующего содержания: Рисунок 3.101 Весь текст запроса для нашего примера будет следующим: Рисунок 3.102 Если в одной таблице по нашему ключевому значению 2 и более записей, то в результате может18 получиться несколько записей, например: Рисунок 3.103 Запись таблицы "А" (одна запись) Сотрудник Таб. Номер Василькова 001 Записи таблицы "Б" (две записи) Сотрудник Василькова Василькова 18 Ребенок Петя Маша ФИО Василькова Мария Степановна Дата рождения 29.02.1980 01.03.1981 Может, потому что результат зависит от содержания второй таблицы и способа соединения 167 Основы программирования в системе "1С:Предприятие 8" Сводная информация будет следующего содержания: Таб. ФИО Ребенок Номер Василькова 001 Василькова Мария Степановна Петя Василькова 001 Василькова Мария Степановна Маша Если мы соединяем таблицы, в которых более двух записей: Сотрудник Дата рождения 29.02.1980 01.03.1981 Записи таблицы "А" (две запись) Сотрудник Таб. Номер Василькова 001 Петрова 002 Иванов 003 Записи таблицы "Б" (две записи) ФИО Василькова Мария Степановна Петрова Татьяна Николаевна Иванов Олег Петрович Сотрудник Ребенок Дата рождения Василькова Петя 29.02.1980 Василькова Маша 01.03.1981 Петрова Саша 01.04.1985 Сидоров Оля 01.03.1990 Сводная информация может содержать следующие данные: Сотрудник Таб. Номер ФИО Ребенок Дата рождения Василькова Мария Петя 29.02.1980 Степановна Василькова Мария Василькова 001 Маша 01.03.1981 Степановна Петрова Татьяна Петрова 002 Саша 01.04.1985 Николаевна Иванов Олег Иванов 003 Петрович Василькова Мария Оля 01.03.1990 Степановна Отображение записей с пустыми19 значениями в колонках, зависит от способа соединения. Существуют 4 варианта: Василькова 001 Выбор варианта влияет и на количество записей в результирующей таблице при одинаковых источниках. [ВНУТРЕННЕЕ] СОЕДИНЕНИЕ означает, что из обеих исходных таблиц ― источников данных в результат запроса необходимо включить только те комбинации записей, которые соответствуют указанному условию. Остальные записи в результат не попадают. 19 В запросах пустое значение может определяться значением типа NULL. 168 Табличная модель работы с данными Например: Листинг № __ ВЫБРАТЬ РАЗЛИЧНЫЕ Поступление.Материал ИЗ Документ.Поступлениематериалов.Материалы КАК Поступление ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АктОбОказанииУслуг.Материалы КАК Акт ПО Поступление.Материал = Акт.Материал ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить также еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из второго источника. Таким образом, в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второго источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать NULL в полях, формируемых на основании записей из этого источника. Например: Листинг № __ ВЫБРАТЬ РАЗЛИЧНЫЕ Менеджеры.Ссылка КАК Менеджер, Заказы.Ссылка КАК Заказ ИЗ Справочник.Менеджеры КАК Менеджеры ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Заказы КАК Заказы ПО Менеджеры.Ссылка = Заказы.Менеджер ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из первого источника. Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать NULL в полях, формируемых на основании записей из этого источника. 169 Основы программирования в системе "1С:Предприятие 8" Листинг № __ ВЫБРАТЬ Заказы.Ссылка КАК Заказ, Менеджеры.Ссылка КАК Менеджер ИЗ Справочник.Заказы КАК Заказы ПРАВОЕ СОЕДИНЕНИЕ Справочник.Менеджеры КАК Менеджеры ПО Заказы.Менеджер = Менеджеры.Ссылка ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и те записи из обоих источников, для которых не найдено соответствий. Таким образом, в результат запроса будут включены все записи из обоих источников; они будут соединены друг с другом при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из какого - либо источника, будут содержать NULL в полях, формируемых на основании записей из этого источника. Например: Листинг № __ ВЫБРАТЬ Менеджеры.Ссылка КАК Менеджер, Заказы.Ссылка КАК Заказ ИЗ Справочник.Менеджеры КАК Менеджеры ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Заказы КАК Заказы ПО Менеджеры.Ссылка = Заказы.Менеджер 170 Табличная модель работы с данными 3.3.2 Объединение таблиц (Union) При объединении таблиц, как и при соединении, есть свое главное правило. Чтобы выявить его посмотрим на процесс объединения (вертикальной склейки - как сложение в столбик): Рисунок 3.104 И так, главное правило: ДЛЯ ПОЛУЧЕНИЯ РЕЗУЛЬТАТ НАМ НЕОБХОДИМО НАЛИЧИЕ В ТАБЛИЦАХ ОДИНАКОВОГО КОЛИЧЕСТВА ПОЛЕЙ При настройке данного объединения, также необходимо определить соответствие колонок, т.е. указать, что данные из колонки 1 первой и второй таблицы будет отражать в колонке 1 результата: Рисунок 3.105 171 Основы программирования в системе "1С:Предприятие 8" При настройке соответствий, мы видим, что для буквы 4 нет колонки в таблицеБ (отсутствует). Данное обстоятельство приведет к тому, что конструктор запроса сам создаст вычисляемое поле для второго источника с пустым значением NULL. И мы можем увидеть данный результат в полученном тексте запроса: Рисунок 3.106 Подстановка значения NULL имеет смысл, только если у нас в правилах соответствия в связке с вычисляемым полем находится поле, не ссылающееся на вложенную таблицу (как в нашем случае). Но, если в одной из таблиц используется ссылка на вложенную таблицу, а в другой ее не нет: Рисунок 3.107 Конструктор подставит в текст запроса уже вместо NULL значение другого типа: Рисунок 3.108 В общем случае, при объединении в запросе результатов нескольких запросов следует использовать конструкцию "ОБЪЕДИНИТЬ ВСЕ", а не "ОБЪЕДИНИТЬ". Поскольку во втором варианте, при объединении запросов полностью одинаковые строки заменяются одной, на что затрачивается дополнительное время, даже в случаях, когда одинаковых строк в запросах заведомо быть не может. 172 Табличная модель работы с данными 3.4 Получение и вывод результатов запроса В данном разделе мы рассмотрим вопросы связные с обработкой данных, полученных на основании запросов. На практике встречается две основных задачи по работе с результатами запросов: Использование данных запроса в алгоритмах – применяется в основном при необходимости программного анализа полученных данных и выполнении на их основании каких-либо действий, например, проведение документов. Вывод информации на экран в определенном виде – используется в основном при формировании отчетов и печатных форм первичных документов. Существуют как механизмы интерактивной настройки с возможностью модификации в пользовательском режиме, так и средства представления информации без возможности модификации внешнего вида в пользовательском режиме. Рассмотрим подробнее обе эти задачи. И начнем с использования данных в алгоритмах, т.к. в случаях представления данных может потребоваться дополнительная их обработка перед выводом на экран, в случае вывода данных, с помощью заранее подготовленного макета (например, в печатную форму первичного документа) 3.4.1 Программная обработка данных запроса. Для формирования отчетов с разработанной печатной рекомендуется использовать выборку из результата запроса. формой (макетом) Начиная с платформы 8.2, у разработчиков появилась возможность вызвать конструктор запроса с расширенными возможностями в части настройки вывода полученной информации "Конструктор запроса с обработкой результата" (альтернатива конструктору выходной формы, который был в предыдущих версиях платформы): Рисунок 3.109 Данный конструктор, в виду своей определенной направленности, имеет некоторые ограничения по сравнения с обычным конструктором запроса (не доступно декларирование временных таблиц): Рисунок 3.110 Рассмотрим преимущества данного конструктора. И начнем с закладки "Обработка результата" Рисунок 3.111 173 Основы программирования в системе "1С:Предприятие 8" ОБХОД РЕЗУЛЬТАТА – основное назначение, генерация конструкций на встроенном языке для работы с выборками из результата: Рисунок 3.112 Как мы видим, основное отличие от шаблонов в том, что конструктор теперь умеет анализировать текст запроса и генерировать синтаксические конструкции с учетом структуры запроса и наличия параметров. Такой механизм, несомненно, сократит время разработки алгоритмов, связанных с анализом результатов запросов. Выборка из результата запроса предназначена для обхода его записей. Данный конструктор автоматически определяет необходимый вариант выборки. Обход выборки может быть линейный, иерархический или по группировкам: Линейный обход – выборка будет выдавать записи в той последовательности, в которой они располагаются в результате запроса. Для получения линейной выборки необходимо вызвать метод Выбрать объекта РезультатЗапроса без параметров, либо с параметром ОбходРезультатаЗапроса.Прямой 174 Табличная модель работы с данными Иерархический обход – обходятся только записи, находящиеся на одном уровне. Для получения иерархической выборки из результата необходимо вызвать метод Выбрать объекта РезультатЗапроса с параметром ОбходРезультатаЗапроса.ПоГруппировкамСИерархией Чтобы получить остальные записи результата запроса у объекта ВыборкаИзРезультатаЗапроса можно получить еще одну выборку, которая будет обходить подчиненные записи текущей записи выборки. Обход по группировкам – обходятся только записи одного уровня, при этом записи с иерархическими итогами рассматриваются как детальные записи, а не как узловые. Стоит отметить, что группировочные записи и запись общих итогов относятся к более высокому уровню, чем детальные записи. Для получения выборки по группировкам из результата запроса необходимо вызвать метод Выбрать объекта РезультатЗапроса с параметром ОбходРезультатаЗапроса.ПоГруппировкам Существует возможность выгрузки данных запроса в таблицу значений либо в дерево значений. Такая необходимость может потребоваться в случае заполнения табличной части данными запроса, либо для представления данных в форме для редактирования. Можно использовать данную возможность в отладочных целях для просмотра результата в режиме отладки (отладчик рассматривается в следующей главе): Рисунок 3.113 ВЫВОД В ТАБЛИЧНЫЙ ДОКУМЕНТ – основное предназначение, формирование фиксированных макетов для представления информации в печатных формах ПЕРВИЧНЫХ ДОКУМЕНТОВ20 (при получении данных из нескольких источников) либо в регламентированных отчетах, т.е. там, где формат вывода задается жестко и пользователем на уровне исполнения меняться не может. 20 В обычных случаях для создания макетов печатных форм документов применяется конструктор печати, который мы рассматривали при изучении объектной модели доступа к данным. 175 Основы программирования в системе "1С:Предприятие 8" Для данного пункта существует группа дополнительных настроек: Рисунок 3.114 В результате работы конструктора будет сформирован алгоритм по заполнению табличного документа и фиксированный макет: Рисунок 3.115 176 Табличная модель работы с данными ВЫВОД В ДИАГРАММУ – позволяет сгенерировать алгоритм вывода данных в Диаграмму с учетом текста запроса: Рисунок 3.116 Определять местоположение диаграммы, т.е. в какой форме ее показывать, уже задача разработчика. 177 Основы программирования в системе "1С:Предприятие 8" 3.4.2 Обработка данных из пакетных запросов При использовании временных таблиц, может появиться необходимость в инициировании временной таблицы, ее использовании и уничтожении после использования. Все эти действия можно выполнить методом ВыполнитьПакет для объекта Запрос. В отличие от обычного выполнения запроса система для каждого запроса в пакете возвращает результат, таким образом, появляется необходимость вернуть набор результатов запроса. Для данной цели хорошо подходит Массив (в нашем случае это тип переменной Результаты): Рисунок 3.117 Для получения нужного результата запроса остается выбрать его, например, по индексу, из массива и далее работать как с обычным результатом запроса. И так, мы рассмотрели возможности платформы в части использования результатов запроса в алгоритмах для программной обработки и вывода на экран в фиксированном виде (без возможности изменения внешнего вида и настроек). Далее переходим ко второй части: "Вывод информации на экран в определенном виде" 3.5 Инструменты интерактивной настройки вывода информации В 1С:Предприятие 8 на уровне платформы встроен механизм система компоновки данных, основанный на декларативном описании отчетов. Система компоновки данных позволяет реализовать следующие возможности: 178 создание отчета без программирования; использование автоматически генерируемых форм просмотра и настройки отчета; разбиение исполнения отчета на этапы; Табличная модель работы с данными исполнение отдельных этапов построения отчета на различных компьютерах; независимое использование отдельных частей системы компоновки данных; программное управление процессом выполнения отчета. Система компоновки данных интегрирована в объект конфигурации Отчет. Это позволяет создавать отчеты без программирования. У объекта конфигурации Отчет реализовано свойство "Основная схема компоновки данных": Рисунок 3.118 При нажатии кнопки открытия для этого свойства, вызывается конструктор макета, который позволяет создать макет отчета, содержащий схему компоновки данных: Рисунок 3.119 После нажатия кнопки "Готово" из конструктора макета будет открыт конструктор схемы компоновки данных. 179 Основы программирования в системе "1С:Предприятие 8" Конструктор схемы компоновки данных позволяет описать исходные данные, которые будет использовать отчет: наборы данных, связи между наборами данных, вычисляемые поля, ресурсы и т.д. Рисунок 3.120 Результатом работы конструктора является схема компоновки данных, полностью описывающая весь отчет. Таким образом, разработчик может составить работоспособный отчет без программирования - не написав ни одной строки кода и не создав ни одной формы. Как мы видим, текст запроса преобразуется в поля компоновки данных, с которыми и работает в дальнейшем разработчик и пользователь. Кроме этого конструктор схемы компоновки данных позволяет редактировать уже имеющуюся схему компоновки - она будет проанализирована и представлена в конструкторе в виде соответствующих наборов данных, доступных, выбранных полей базы данных, набора заданных связей, группировок, условий и т.д. 180 Табличная модель работы с данными Рисунок 3.121 Для быстрой настройки существует конструктор настроек компоновки данных, который позволяет настроить отчет, созданный с использованием системы компоновки данных. Назначение конструктора заключается в том, чтобы предоставить разработчику или пользователю возможность быстрой настройки типичных отчетов нескольких видов: список, таблица и диаграмма: Рисунок 3.122 Для каждого вида отчета конструктор шаг за шагом предлагает последовательно описать получаемый отчет. 181