close

Вход

Забыли?

вход по аккаунту

?

Lektsii REIS

код для вставки
Тема 1. Обзор системы 1С:Предприятие 8.0
1.1. Обзор системы 1С:Предприятие 8.0
Система программ 1С:Предприятие 8.0 включает в себя платформу и прикладные решения, разработанные на ее основе. Система "1С:Предприятие 8.0" предназначена для автоматизации деятельности организаций и частных лиц. Сама платформа 1C:Предприятие 8.0 не является программным продуктом для конечных пользователей, которые обычно работают с одним или несколькими прикладными решениями (конфигурациями), разработанными на данной платформе. Такой подход позволяет автоматизировать различные виды деятельности, используя единую технологическую платформу 1С:Предприятие 8.0.
Схематично это можно показать следующим образом:
Конечные пользователи
Система программ "1C:Предприятие 8.0"
Прикладные решения (конфигурации)
Платформа "1C:Предприятия 8.0"
Прикладное решение (конфигурация) использует механизмы 1С:Предприятия 8.0 и работает только под управлением платформы, поэтому оно не может быть использовано самостоятельно, как отдельное приложение. Конечный пользователь всегда работает с системой программ "1С:Предприятие 8.0", которая включает в себя платформу и прикладные решения.
Разработка и модификация прикладного решения производится в специальном режиме "Конфигуратор". В данном режиме разработчик определяет общую архитектуру прикладного решения и структуру данных, создает макеты отчетов и экранные формы, пишет программные модули на встроенном языке программирования. Конечный пользователь работает в обычном режиме "Предприятие", вводит данные в базу данных, формирует отчеты и т.д.
На этапе разработки или модификации конфигурации разработчик анализирует предметную область и требования пользователей, создает или изменяет объекты конфигурации, настраивает связи между ними путем установки их свойств, проектирует экранные формы и макеты отчетов, реализует алгоритмы работы системы на встроенном языке. В результате получается прикладное решение, призванное автоматизировать работу конечных пользователей, обеспечить им информационную поддержку при принятии управленческих решений.
Структура прикладного решения определяется составом объектов конфигурации и взаимосвязями между ними. Под объектами конфигурации понимаются средства 1С:Предприятия 8.0, предназначенные для отражения реальных объектов и явлений предметной области, например, справочник Товары, документ Платежное поручение и т.д. Однако разработчик может создавать объекты и не имеющие явного физического воплощения в предметной области, но необходимые для решения поставленной задачи, например, регистры сведений, обработки и т.д.
1.2. Объекты конфигурации
Для успешной разработки и модификации прикладных решений специалист должен иметь представление обо всех доступных ему объектах и механизмах. Система "1С:Предприятие 8.0" предоставляет в распоряжение разработчику следующие объекты конфигурации:
Константы
В константах хранятся редко изменяемые значения, например, название организации, ИНН, ФИО руководителя и т.д.
Справочники
В справочниках содержится условно-постоянная списковая информация, например, список товаров, список сотрудников. Такие сведения обычно характеризуются кодом и наименованием.
Документы
Документы хранят информацию о произошедших событиях в жизни организации, например, приходная накладная, платежное поручение. Документ характеризуется номером и датой. Обычно при проведении документа изменяется состояние регистров, например, при проведении приходной накладной увеличивается количество товара в регистре Остатки.
Журналы документов
Журналы - это средство группировки связанных по смыслу документов, например, журнал Склад объединяет приходные и расходные накладные. Аналогично могут быть созданы журналы Банк, Кадры и т.д.
Нумераторы
Нумераторы предназначены для единой (сквозной) нумерации документов нескольких видов. Например, нумератор Кадровый используется для присвоения номеров всем кадровым приказам.
Последовательности
Предназначены для обеспечения правильной последовательности проведения документов с учетом возможных исправлений "задним числом", например, последовательность ПартионныйУчет.
Планы видов характеристик
Предназначены для хранения дополнительных видов характеристик объектов, например, дополнительных свойств товаров (вес, цвет, размер). Новые виды характеристик можно вводить в режиме "Предприятие". Через этот объект также реализован механизм аналитического учета по субконто в бухгалтерском учете.
Регистры сведений
Предназначены для хранения любой информации об объектах в разрезе заданных измерений, например, регистр сведений ЦеныТоваров. Если требуется хранить историю изменения информации, то регистр сведений делается периодическим, например, регистр КурсыВалют.
Регистры накопления
Накапливают числовую информацию в разрезе заданных измерений, например, регистры ОстаткиТоваров, Продажи. Движения регистров накопления всегда связаны с документами (регистраторами) и обычно создаются в момент проведения документа.
Планы счетов
Содержат список счетов бухгалтерского или управленческого учета, например, планы счетов Стандартный, Управленческий и т.п.
Регистры бухгалтерии
Хранят записи (проводки) основанные на определенном плане счетов, например, регистр бухгалтерии Управленческий.
Планы видов расчета
Содержат виды расчета, объединенные по сходным признакам, к которым относятся одинаковые базовые виды расчета, одинаковые правила перерасчета, общие правила вытеснения по времени. В качестве примера можно привести планы видов расчета ОсновныеНачисления, Налоги.
Регистры расчета
Предназначены для хранения учетных записей сложных периодических расчетов, например, регистр расчета Удержания. Каждый регистр расчета основан на каком-либо плане видов расчета.
Перечисления
Перечисление - это набор значений, заданный еще на этапе разработки прикладного решения, он не редактируется в режиме "Предприятие". Главное, что стоит понять, сама конфигурация рассчитана на определенные перечисления, например, на перечисление ТипКлиента со значениями Обычный и ОченьВажнаяПерсона. Для VIP-клиентов в программе может быть предусмотрена скидка.
Отчеты
На основе информации из базы данных отчеты выдают печатные формы, содержащие детальную и сводную информацию. В качестве примера можно привести отчеты ОборотноСальдоваяВедомость, СписокСотрудников, АнализПродаж.
Обработки
Производят некоторую обработку информации, содержащейся в базе данных, например, обработка РасчетНачислений, ЗакрытиеПериода. Ниже дано краткое описание остальных объектов конфигурации, располагающихся в ветви "Общие" дерева конфигурации:
Подсистемы
Предназначены для группировки других объектов конфигурации, например, подсистемы Кадры, Торговля, Маркетинг. Каждый объект может входить сразу в несколько подсистем. Подсистемы могут быть подчиненными друг другу.
Общие модули
Содержат процедуры и функции, используемые в других программных модулях, например, общий модуль РегламентныеПроцедуры.
Интерфейсы
Представляют собой совокупность панелей интерфейса: меню и панели инструментов, например, интерфейсы Бухгалтер, Руководитель.
Роли
Предназначены для определения прав пользователей, работающих с информационной базой, например, роли Кадровик, Администратор. Каждый пользователь может иметь несколько ролей.
Критерии отбора
Нужны для отбора данных по определенному признаку. Например, по критерию отбора Контрагент можно выбрать все документы, относящиеся к заданному контрагенту.
Общие формы
Общие экранные формы не принадлежат конкретному объекту, а относятся к конфигурации в целом. Они могут использоваться в разных местах программы, например, форма ВводАдреса.
Общие макеты
Общие макеты (шаблоны печатных форм) также не принадлежат конкретному объекту конфигурации, например, макет РеестрДокументов. Они используются в других программных модулях.
Общие картинки
Картинки, используемые на кнопках, формах и других интерфейсных объектах. Картинки можно рисовать с помощью редактора картинок.
Стили
Стили оформления, включающие в себя различные элементы: цвет фона экранной формы, цвет фона редактирования полей, цвет отрицательных чисел и т.д. В качестве примера можно назвать стили Основной, Яркий, РегламентныеПроцедуры.
Языки
Языки интерфейса конфигурации, например, Русский, Английский, Украинский. В 1С:Предприятии 8.0 можно разрабатывать многоязычные конфигурации, рассчитанные на работу пользователей, говорящих на разных языках. Поведение объектов конфигурации определяется с помощью установленных свойств и программы на встроенном языке. Например, на встроенном языке задаются действия документа при его проведении, алгоритм формирования печатной формы отчета, процедура определения цены продажи со скидкой и т.д.
Разработчик пишет текст программы в строго определенных точках конфигурации - программных модулях, например, в модуле формы документа ПриходнаяНакладная или в модуле отчета ОстаткиТоваров. Различные типы программных модулей будут рассмотрены в главе "Встроенный язык", а сейчас мы познакомимся с основными инструментами разработки системы 1С:Предприятия 8.0.
1.3. Инструменты разработки
Разработка прикладного решения производится в специальном режиме "Конфигуратор". Именно в нем определяется структура прикладного решения, настраиваются взаимосвязи между объектами путем установки их свойств, проектируются макеты отчетов и экранные формы, пишутся программные модули на встроенном языке. В режиме "Предприятие" пользователь не может поменять структуру конфигурации, он занимается вводом данных и их обработкой, например, рассчитывает зарплату, учитывает товары, формирует отчеты и т.д.
Ниже будут последовательно описаны основные инструменты разработки, доступные в Конфигураторе.
Дерево конфигурации
Дерево конфигурации представляет собой иерархический список всех объектов конфигурации. Раскрыв любую ветвь дерева, можно получить список объектов данного вида, например, список справочников. Если затем раскрыть любой справочник, то увидим его структуру и подчиненные объекты - формы, макеты и т.д.
Ниже на рисунке 1.1. показано дерево конфигурации и рядом раскрытая ветвь справочника Номенклатура:
Дерево конфигурации позволяет создавать и удалять объекты конфигурации, менять их порядок, копировать и переносить объекты, фильтровать объекты по подсистемам.
Также стоит отметить две полезные команды, доступные через контекстное меню (или по кнопке "Действия"): "Поиск ссылок на объект" и "Поиск ссылок в объекте". Они показывают список других объектов конфигурации, связанных с текущим.
Палитра свойств
Важный инструмент разработчика - это палитра свойств текущего объекта. Состав свойств динамически меняется в зависимости от того, на каком объекте установлен курсор. Свойства есть у всей конфигурации в целом, у каждого объекта конфигурации или его части, а также экранной формы, элементов управления и т.д. В свойствах настраиваются основные характеристики объекта, его внешний вид и некоторые аспекты поведения. Например, ниже показаны основные свойства справочника Номенклатура Конструкторы
Для ускорения разработки система 1С:Предприятие 8.0 включает несколько конструкторов, которые в диалоговом режиме уточняют у разработчика условия задачи и автоматически создают объекты конфигурации, формы, макеты, генерируют текст программы на встроенном языке.
В "1C:Предприятии 8.0" существуют следующие конструкторы:
Конструктор запросов
Создает текст запроса на специализированном языке запросов, который отличается от встроенного языка по назначению и синтаксису. Запросы предназначены для выборки данных из информационной базы и ее обработки.
Конструктор печати
Формирует процедуру и макет для печати информации об объектах, например, списка элементов справочника и сведений об одном элементе.
Конструктор выходной формы
Позволяет сформировать более сложную выборку данных и макет для ее печати. Фактически является конструктором запросов с дополнительной закладкой "Выходная форма"
Конструктор форм
Вызывается для новых экранных форм, автоматически размещает элементы управления и настраивает их связи с данными объекта.
Конструктор ввода на основании
Предназначен для автоматического формирования алгоритма ввода одного объекта на основании другого, например, ввода расходной накладной на основании заказа покупателя. При вводе на основании часть реквизитов и табличных частей нового объекта можно заполнить, взяв их из объекта-основания, например, это могут быть реквизит Контрагент и табличная часть Товары.
Конструктор движений документа
Формирует текст программы для документов, изменяющих состояние регистров.
Конструктор меню
Автоматически создает главное пользовательское меню конфигурации на основе списка всех объектов конфигурации.
Конструктор для элементов управления
Размещает элементы управления в форме и настраивает их основные свойства.
Конструкторы объектов конфигурации
Строго говоря, окна редактирования объектов конфигурации (справочников, документов) тоже выполнены в виде конструкторов. Свойства объекта распределены по закладкам так, чтобы подсказать разработчику правильный порядок создания объекта.
Использование конструкторов облегчает выполнение типичных действий и упрощает освоение системы начинающими разработчиками. Но нельзя полагаться только на конструкторы! Нужно понимать, какие именно действия делает каждый конструктор, чтобы при необходимости произвести их вручную.
Редактор экранных форм
Для разработки экранных форм в 1С:Предприятии 8.0 существует мощный редактор форм, имеющий богатый набор элементов управления и сервисных функций, включая выравнивание элементов, редактирование привязок, палитру свойств элементов управления и др. Ниже показана форма документа в режиме Конфигуратора В форме могут размещаться различные элементы управления, например, кнопка, надпись, поле ввода, табличное поле, командная панель, флажок и др. Полный список элементов управления приведен в главе "Интерфейс пользователя".
Редактор интерфейсов
Система "1C:Предприятие 8.0" имеет средства для создания главного меню и панелей инструментов конфигурации. Для каждого пункта меню (или кнопки панели инструментов) определяются свойства и выполняемое действие. Действие может быть как стандартное, например, "открыть форму списка справочника Контрагенты", так и вызов процедуры. В процедуре же на встроенном языке можно запрограммировать практически любое возможное действие. Табличный редактор
Для редактирования макетов печатных форм предназначен табличный редактор, имеющий мощные средства форматирования ячеек, областей и всего табличного документа в целом. Макет может иметь именованные вертикальные и горизонтальные области. Кроме того, имя можно присвоить любой прямоугольной области.
В ячейках табличного документа содержится текст и параметры. Вместо параметров при формировании итоговой печатной формы будут подставлены конкретные значения, что определяется алгоритмом формирования отчета (программой на встроенном языке).
В табличном документе могут располагаться сводные таблицы, диаграммы, а также элементы управления. Сводная таблица позволяет отобразить многомерные данные в виде кросс-отчетов, изменить порядок измерений без повторного выполнения запроса, включить и выключить отображение измерений и ресурсов. Таким образом, сводная таблица - очень полезный инструмент для анализа информации.
Источником данных для сводной таблицы является результат запроса или специальный объект - построитель отчета. Это новый объект "1С:Предприятия 8.0", предназначенный для ускоренной разработки сложных многомерных отчетов. Он имеет средства визуальной настройки выводимых полей, условий отбора и сортировки.
Все это позволяет в кратчайшие сроки конструировать довольно сложные отчеты. От разработчика требуются только минимальные усилия - составить текст запроса, который, кстати, может быть сформирован с помощью конструктора запроса.
Встроенный язык
Программные модули на встроенном языке системы "1C:Предприятия 8.0" определяют многие действия объектов конфигурации. Сами объекты конфигурации создаются визуальными средствами, а встроенный язык используется для реализации различных алгоритмов расчета, формирования печатных форм и выполнения других действий.
Например, при разработке документа его структура, экранная форма и макет печатной формы создаются в конструкторах или визуальных редакторах, а на встроенном языке пишется алгоритм расчета скидки клиента, рассчитывается итоговая сумма документа, заполняется печатная форма документа, делаются движения по регистрам.
Следующий фрагмент программы перебирает элементы справочника Сотрудники. Внутри цикла проверяется оклад сотрудника и, если он больше определенного предела, в окно служебных сообщений выдается ФИО сотрудника с указанием оклада:
Выборка = Справочники.Сотрудники.Выбрать (); Пока Выборка.Следующий() Цикл Если Выборка.Оклад > 10000 Тогда Сообщить(Выборка.Наименование + " имеет оклад " + Выборка.Оклад); КонецЕсли; КонецЦикла; Редактор программных модулей
Для написания программных модулей разработчик обычно использует встроенный текстовый редактор. Этот редактор может быть использован и для написания любых других текстов, например, запросов.
В режиме редактирования программного модуля текстовый редактор поддерживает цветовое выделение синтаксических конструкций и комментариев, а также технологию контекстной подсказки:
С помощью контекстной подсказки можно быстро узнать список свойств и методов объекта. Необходимо учитывать, что область применения контекстной подсказки ограничена: она работает не для всех объектов и не во всех случаях. В перспективе эта технология будет развиваться.
Редактор программных модулей поддерживает группировку(свертку) синтаксических конструкций языка, таких как процедуры и функции, условия, циклы, описания процедур и функций в виде комментариев.
Другой механизм - шаблоны - позволяет ускорить ввод часто используемых конструкций, например, Если...КонецЕсли, Цикл...КонецЦикла и т.д.
Синтакс-помощник
При программировании часто возникает потребность вспомнить имя свойства или метода, а также параметры методов и возвращаемые значения функций. Эта информация содержится в Синтакс-помощнике, который можно вызвать по Ctrl-Fl или через контекстное меню.
Закладка "Индекс" позволяет искать по ключевому слову среди всех разделов Синтакс-помощника При переходе на конкретный раздел по гиперссылке или при поиске, чтобы найти ее в дереве, воспользуйтесь кнопкой " ". Конструкции из Синтакс-помощника можно перетаскивать мышью прямо в текст модуля.
Отладчик
Часто обнаруживается, что программа работает не так, как было задумано разработчиком, или не так, как ожидали пользователи. Такая ситуация характеризуется как ошибка. Чтобы ее исправить, необходимо сначала ее локализовать, т е определить то место в программе, которое является причиной ошибки. Для решения этой задачи удобно использовать Отладчик.
Отладчик позволяет расставить точки останова (breakpoint) по тексту программы, узнать значение любой переменной или свойства объекта, просто наведя на него курсор мыши, вычислить выражение, а также включить выражение в табло для постоянного отслеживания его значения. Отладчик умеет показывать список всех свойств объекта с указанием их значения и типа, что очень удобно для анализа.
Замер производительности
С помощью специального режима замера производительности можно измерить время выполнения фрагмента программы, чтобы обнаружить "узкие места" в программе, т.е. выявить те действия, на которые тратится наибольшее количество времени. Такие места следует написать более тщательно, оптимизировав их или даже изменив структуру конфигурации.
Механизм запросов
Система "1С:Предприятие 8.0" поддерживает мощный механизм запросов, предназначенный для выборки информации из базы данных и ее обработки.
Язык запросов претерпел значительные изменения по сравнению с версией 7.7 и стал больше походить на стандартный SQL. В частности, в нем поддерживаются соединение таблиц, объединение результатов нескольких запросов, вложенные запросы.
Например, следующий простой запрос выбирает товары из справочника Номенклатура с ценой больше определенного предела:
ВЫБРАТЬ Наименование, ЗакупочнаяЦена ИЗ Справочник.Номенклатура ГДЕ ЗакупочнаяЦена > 1300 Более того, язык запросов 1С:Предприятия 8.0 содержит средства, не имеющие аналогов в стандартном SQL, например, разыменование ссылочных полей (обращение к свойствам объектов через точку), подсчет итогов и др.
Обратите внимание, что механизм запросов в 1C:Предприятии 8.0 применяется только для выборки данных, с его помощью нельзя изменить данные. Для изменения данных средствами встроенного языка необходимо получить специальный объект, позволяющий модифицировать данные в базе данных (например, Документ-Объект).
Сравнение и объединение конфигураций
В 1С:Предприятии 8.0, как и в версии 7.7, существует возможность детально сравнить две конфигурации и объединить их. При этом можно отметить объекты, подлежащие объединению, и настроить правила объединения.
Объединение полезно также в том случае, когда одну конфигурацию изменяли несколько человек и им требуется объединить результаты своей работы Заметим, что для периодического сравнения и объединения результатов работы нескольких разработчиков можно создать хранилище конфигурации, которое описано ниже.
Средства групповой разработки
Система 1C:Предприятие 8.0 поддерживает одновременную работу нескольких разработчиков над одной конфигурацией, для чего создается хранилище конфигурации. В хранилище содержится текущая разрабатываемая конфигурация и история ее изменения(версии).
Чтобы внести изменения в какой-нибудь объект конфигурации, каждый разработчик должен сначала захватить данный объект или группу связанных объектов. При этом они становятся недоступны для изменения другим разработчикам. После внесения изменений разработчик возвращает объекты в хранилище и снимает свои блокировки (отменяет захват).
1.4. Администрирование
Второй "профессией" Конфигуратора является администрирование, которое включает в себя ведение списка пользователей, настройку прав доступа, резервное копирование информационной базы, мониторинг системных событий и выполнение других действий для поддержания работоспособности системы.
Конфигуратор предоставляет удобные инструменты для администратора информационной базы, к которым относятся следующие:
Список пользователей
Чтобы пользователь имел возможность войти в систему, его необходимо зарегистрировать в списке пользователей, назначить ему интерфейс и доступные роли (см. ниже). Администратор всегда может узнать, кто подключен к информационной базе в данный момент.
Журнал регистрации
Предназначен для регистрации системных событий и действий пользователей. По умолчанию он отключен, так как его ведение требует некоторых дополнительных затрат при работе системы. Чтобы включить его, необходимо выбрать пункт меню "Администрирование / Настройка журнала регистрации" и указать уровень важности событий, которые будут регистрироваться в журнале.
Тестирование и исправление информационной базы
Проверку необходимо проводить при возникновении подозрений на наличие ошибок в данных, после критических ситуаций, например, отключения электричества, а также периодически для профилактики возникновения неполадок.
Выгрузка и загрузка информационной базы
Эти команды позволяют выгрузить информационную базу в файл и загрузить ее из файла. Архивную копию базы рекомендуется делать каждый день, но в каждом конкретном случае, периодичность архивирования определяется интенсивностью ввода и изменения данных. При использовании файлового варианта работы 1С:Предприятия 8.0 резервную копию можно сделать, просто скопировав файл информационной базы. В клиент-серверном варианте можно воспользоваться встроенными средствами MS SQL Server. Механизм выгрузки и загрузки позволяет переносить информационную базу между файловым и клиент-серверным вариантом.
Настройка прав доступа (роли)
Система 1С:Предприятие 8.0 поддерживает механизм ролей пользователей, являющийся важным элементом в системе контроля доступа. Роль - это совокупность прав доступа к объектам информационной базы. У одного пользователя может быть несколько ролей.
Заметим, что роль является объектом конфигурации и редактируется только в Конфигураторе. При разработке прикладного решения обычно создается несколько ролей, каждая со своим набором прав доступа. Но при внедрении конфигурации в конкретной организации администратор информационной базы может создать новые роли или изменить существующие, отредактировать пользовательские интерфейсы, экранные формы и вообще изменять конфигурацию в соответствии с возникающими потребностями.
Необходимо учитывать, что изменение конфигурации может привести к более трудоемкой процедуре ее обновления, поскольку придется объединять свою конфигурацию с конфигурацией поставщика, чтобы не потерялись внесенные изменения.
Редактирование прав доступа к объекту производится в окне редактирования объекта на закладке "Права" или из окна самой роли В 1С:Предприятии 8.0 различают интерактивные действия и действия над объектом базы данных. Например, документ может быть помечен на удаление стандартной кнопкой на командной панели (интерактивное действие), а может использоваться метод УстановитьПометкуУдаления (действие над объектом базы данных средствами встроенного языка).
Администратор или разработчик может настроить права на оба этих действия. Если он запретит интерактивное действие, то запрет не будет распространяться на программное выполнение действий, то есть, например, эти же действия сможет выполнить специальная обработка, которую запускает пользователь. Если запретить второе действие, то никакими путями пользователь не сможет пометить документ на удаление.
1.5. Файловый и клиент-серверный варианты работы
Традиционно для линейки 1С:Предприятие, рассматриваемая система поддерживает два варианта работы: файловый и клиент-серверный. При этом можно полностью перенести конфигурацию и данные с одного варианта на другой при помощи выгрузки информационной базы в файл и загрузки из него. Для работы клиент-серверного варианта используется SQL сервер компании Microsoft.
Файл - серверный вариант
Файловый вариант работы предназначен для локальных однопользовательских информационных баз и сетевых баз с небольшим количеством пользователей и объемом информации.
В платформе 1С:Предприятие 8.0 при файловом варианте работы системы используется консолидированное хранение в одном файле и конфигурации, и списка пользователей, прочих настроек, а также собственно базы данных.
При таком варианте с базой может работать как один, так и несколько пользователей. Преимуществом такого варианта является то, что не требуется дополнительное программное обеспечение, кроме 1С:Предприятия 8.0 и операционной системы, и упрощается эксплуатация системы.
Клиент - серверный вариант
В клиент-серверном варианте все элементы информационной базы хранятся на SQL-сервере и пользователи не имеют непосредственного доступа к файлам конфигурации, обмен информацией производится посредством сервера 1С:Предприятия. Такой способ хранения увеличивает надежность, обеспечивает высокую целостность данных и повышает устойчивость системы к несанкционированному доступу. Клиент-серверный вариант работы предназначен для информационных баз с большим количеством одновременно работающих пользователей и большими объемами информации.
В клиент-серверном варианте работы системы 1С:Предприятие 8.0 используется 3-х уровневая архитектура. Как и в файловом варианте, конфигурация и данные хранятся в единой информационной базе, только расположенной на SQL сервере. При работе такой системы, кроме сервера SQL и клиента 1С:Предприятия, вводится дополнительное программное звено - сервер 1С:Предприятия (сервер приложения), представляющее собой сервис в среде Windows NT / 2000 /2003 и средства его настройки (рис.1.6.). Особенно стоит отметить полное отсутствие файловых составляющих информационной базы, что позволяет увеличить надежность хранения и защищенность информации.
Рис.1.6. Схема клиент-серверной архитектуры
Важным аспектом новой архитектуры клиент-серверной системы является возможность исполнения кода на стороне сервера 1С:Предприятия, а не только на клиенте. Такой подход позволяет разгрузить клиентскую часть при исполнении кода.
Трехуровневая архитектура "клиент-сервер" позволяет существенно расширить границы масштабируемости прикладных решений. Наличие сервера 1С:Предприятия 8.0 позволяет сосредоточить на нем выполнение наиболее объемных операций обработки данных. Например, при выполнении даже весьма сложных запросов, клиентская часть программы, работающая у пользователя, будет получать только необходимую ей выборку, а вся промежуточная обработка будет выполняться на сервере.
Физически сервер 1C:Предприятия 8.0 и MS SQL Server могут быть установлены как на одном компьютере, так и на разных, что позволяет администратору распределять нагрузку между серверами.
Другим важным аспектом использования трехуровневой архитектуры является удобство администрирования и упорядочивание доступа пользователей к информационной базе.
Тема 2. Встроенный язык. Программные модули.
Цели и задачи изучения темы
В этой теме описываются назначение и конструкции встроенного языка, используемого для определения поведения объектов конфигурации и реализации различных алгоритмов. Рассматриваются циклы, безусловные переходы, обработка исключений, процедуры и функции, типы данных и др.
2.1. Встроенный язык
В современных условиях любая система автоматизации должна быть достаточно гибкой, чтобы постоянно следовать в ногу со временем, подстраиваться под изменяющиеся условия реального мира и возрастающие требования пользователей. Для достижения этой цели в систему 1С:Предприятие 8.0 включен встроенный язык, который позволяет алгоритмически определить поведение объектов конфигурации.
Конечный пользователь самостоятельно или с помощью профессиональных разработчиков может настроить прикладное решение под свои нужды или разработать свою собственную конфигурацию "с нуля". Средства встроенного языка 1С:Предприятия 8.0 позволяют управлять практически всеми аспектами поведения системы, работать с прикладными объектами, например, справочниками и документами, формировать печатные формы отчетов и выполнять другие самые разнообразные действия.
Важно понимать, что встроенный язык системы 1С:Предприятие 8.0 не предназначен для написания отдельных выполняемых приложений, а является неотъемлемой частью платформы. Прикладное решение использует механизмы 1С:Предприятия 8.0 и работает только под управлением платформы, оно не может быть использовано самостоятельно, как отдельное приложение.
2.1.1. Программные модули
Программный модуль представляет собой текст на встроенном языке 1С:Предприятия 8.0, расположенный в определенном месте конфигурации.
Схема программных модулей представлена на рисунке 2.1:
Рис.2.1.
В соответствии с этим различают следующие виды программных модулей:
1. Общие модули
Общие модули принадлежат всей конфигурации в целом, но в отличие от модуля приложения (см. ниже) их может быть несколько, например, модули РасчетНалогов, ОбработкаДокументов. Общие модули не могут содержать объявлений переменных, и в них нет раздела основной программы, таким образом, они состоят только из процедур и функций.
Общие модули располагаются в отдельной ветке дерева метаданных. Основным назначением общих модулей является содержание общих алгоритмов конфигурации, доступных из разных модулей. В общих модулях отсутствует раздел определения переменных и раздел основной программы, то есть они содержат только раздел процедур и функций (см. раздел "Структура программного модуля").
В любом общем модуле возможно объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации, кроме других общих модулей, дополняя глобальный контекст прикладной задачи.
Для общих модулей конфигурации предусмотрен признак выполнения "Предпочтительно на сервере". Это означает, что данный модуль будет предпочтительно исполняться на сервере 1C: Предприятия. Если исполнение модуля происходит на сервере, то выполнение операторов, приводящих к интерактивному диалогу с пользователем или выводу сообщений на экран, в теле процедур и функций такого модуля будет приводить к ошибке выполнения. Например, вызов диалогов ввода данных, выдача предупреждений и тому подобные действия. Это относится и ко всем процедурам и функциям, вызываемым в процессе выполнения. Исключение составляет метод глобального контекста Сообщить.
Важно! При проектировании процедур и функций общих модулей следует иметь в виду, что в одном общем модуле не доступны процедуры и функции, объявленные в другом общем модуле с ключевым словом Экспорт.
2. Модуль приложения
Это модуль, который относится ко всей конфигурации в целом и может быть только один. Модуль приложения является аналогом глобального модуля в версии 7.7. Он отвечает за пользовательскую сессию (сеанс) работы с 1С:Предприятием 8.0.
Глобальный модуль располагается в корневом разделе конфигурации. В нем располагаются процедуры-обработчики событий, которые инициализируются при старте и окончании работы системы. В глобальном модуле возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации, кроме общих, дополняя глобальный контекст прикладной задачи.
Существует набор правил взаимодействия глобального модуля и общих модулей:
· в общих модулях недоступны переменные, процедуры и функции, объявленные в глобальном модуле с ключевым словом
Экспорт;
· в глобальном модуле доступны процедуры и функции, объявленные в общих модулях с ключевым словом Экспорт;
3. Модуль внешнего соединения
Если конфигурация запускается не в режиме клиентской сессии, а через СОМ-соединение, то вместо модуля приложения используется модуль внешнего соединения, который в конфигурации может быть только один.
4. Модули прикладных объектов
У некоторых прикладных объектов конфигурации могут быть собственные модули, например, модуль документа РасходнаяНакладная, модуль справочника Номенклатура. Не следует их путать с модулями форм этих объектов.
Набор прикладных объектов имеет собственные модули. К таким объектам относятся:
· справочники;
· документы;
· отчеты;
· обработки.
Модули располагаются в ветках конфигурации, в которых содержатся сами объекты и являются свойствами объектов. Каждый объект имеет свой индивидуальный модуль. В этих модулях возможно объявление переменных, процедур и функций, которые будут доступны при работе с объектом извне во встроенном языке, дополняя контекст объекта.
5. Модули форм
У каждой формы есть модуль, в котором определяется поведение формы и действия, выполняемые из нее, например, открытие других форм.
Эти модули содержатся в формах конфигурации. Каждая форма имеет свой индивидуальный модуль. В этих модулях возможно объявление переменных, процедур и функций, которые будут доступны при работе с формой извне во встроенном языке, дополняя контекст формы.
2.1.2. Разделы программного модуля
Любой программный модуль, за исключением общих модулей, состоит из следующих разделов:
· раздел объявления переменных, · раздел процедур и функций, · раздел основной программы. Внимание! У общих модулей есть только раздел процедур и функций.
В разделе объявления переменных определяются локальные переменные модуля и экспортируемые переменные, которые объявляются с ключевым словом Экспорт, например:
/экспортируемые переменные
Перем НачДата Экспорт;
Перем КонДата Экспорт;
Перем мПериодСтрокой; /локальная переменная модуля
/далее идут процедуры и функции
/а затем раздел основной программы
Раздел процедур и функций содержит тела процедур и функций, написанных разработчиком вручную или сформированных конструктором. Некоторые процедуры и функции могут быть объявлены с ключевым словом Экспорт, тогда они дополняют контекст объекта и становятся видимыми вне объекта. Например, ниже приведен модуль документа:
Перем НачДата Экспорт;
Перем КонДата Экспорт;
Перем мПериодСтрокой;
Процедура Печать(ТабДок=Неопределено) Экспорт
/эта процедура будет доступна как метод объекта ДокументОбъект
КонецПроцедуры
Функция ПолучитьГруппировку(РезультатЗапроса, ИмяГруппировки)
/это локальная процедура модуля
КонецФункции
Процедуры и функции рекомендуется отделять комментарием с разделителем. В виде комментариев рекомендуется указывать назначение процедуры или функции, параметры и возвращаемое значение для функций.
В самом конце модуля, после всех процедур или функций, следует раздел основной программы, состоящий из выполняемых операторов. Эти операторы будут исполнены при инициализации модуля, например, для модуля справочника - при создании объекта типа СправочникОбъект, для модуля формы - при создании объекта Форма. Обычно в этом блоке операторов производится инициализация переменных модуля и заполнение полей начальными значениями.
2.2. Контекст
Контекст - очень важное понятие при программировании на любом языке. В 1С:Предприятии 8.0 контекст обозначает окружение модуля, т.е. какие ему будут доступны переменные, объекты, свойства, методы и события.
Можно выделить следующие виды контекстов, существующих в 1С:Предприятии 8.0:
Глобальный контекст, доступный во всех остальных контекстах, состоит из следующих частей:
· свойства, методы и события глобального контекста (например, свойство РабочаяДата), · системные перечисления и системные наборы значений (например, КодВозвратаДиалога и Символы). В контексте модуля приложения (или модуля внешнего соединения) доступны экспортируемые переменные, процедуры и функции общих модулей.
В контексте общего модуля доступны экспортируемые процедуры и функции других общих модулей. В этом контексте недоступны экспортируемые переменные, процедуры и функции модуля приложения.
В контексте модуля прикладного объекта есть доступ к реквизитам и табличным частям объекта, а также его методам и событиям. Например, в модуле документа РасходнаяНакладная доступны реквизиты документа и его табличные части, можно вызывать методы документа и обрабатывать события.
В контексте модуля формы доступны реквизиты формы, а также ее свойства, методы и события. Если у формы назначен основной реквизит, то в модуле формы становятся доступны свойства и методы прикладного объекта, используемого в качестве основного реквизита.
Необходимо помнить правила видимости экспортируемых переменных, процедур и функций различных модулей:
1. В общем модуле недоступны экспортируемые переменные, процедуры и функции модуля приложения (модуля внешнего соединения). 2. В модуле приложения (модуле внешнего соединения) доступны экспортируемые процедуры и функции общих модулей. 3. В общих модулях доступны экспортируемые процедуры и функции других общих модулей. 4. В модулях прикладных объектов и модулях форм доступны экспортируемые переменные, процедуры и функции модуля приложения (модуля внешнего соединения), а также экспортируемые процедуры и функции общих модулей. 5. Если у формы назначен основной реквизит, то контекст модуля формы содержит дополнительные свойства и методы, связанные с основным реквизитом. Например, в модуле формы элемента справочника Номенклатура доступны свойства и методы объекта "СправочникОбъект.Номенклатура". Синяя стрелка от модулей объектов к модулям форм отражает ситуацию, когда у формы назначен основной реквизит, например, у формы элемента справочника основным реквизитом является объект типа СправочникОбъект. Тогда в модуле формы будут доступны экспортируемые переменные, процедуры и функции модуля объекта.
Контекст может быть дополнен новыми свойствами и методами. Это происходит, если вы объявляете переменную, процедуру или функцию. Если она объявлена с ключевым словом Экспорт, тогда она становится видна вне объекта, иначе она будет доступна только внутри этого модуля.
2.3. Стандарты именования переменных, процедур и объектов конфигурации
Фирма 1С использует ряд стандартов, регламентирующих порядок разработки типовых конфигураций на платформе "1С:Предприятие 8.0". Приведем некоторые выдержки из этих стандартов:
Правила образования имен переменных
Имена переменных (параметров) следует образовывать от терминов предметной области. При именовании переменных следует использовать только термины, используемые в документации к 1С:предприятию 8.0 или в методических материалах фирмы "1С".
Из имени переменной должно быть понятно ее назначение.
Имена следует образовывать путем "склеивания" слов - удаления пробелов между словами. Каждое отдельное слово в "склеенном" имени пишется с прописной буквы. Предлоги и местоимения из одной буквы также пишутся прописными буквами.
Например:
Работа с каталогом - РаботаСКаталогом
Количество пачек в коробке - КоличествоПачекВКоробке
Имена переменных не следует начинать с подчеркивания. Имена переменных ни в коем случае не должны состоять из одного символа. Использование коротких имен переменных допускается только для счетчиков циклов.
Именование переменных-флагов
В процедурах периодически используются переменные, которые содержат в себе некий флаг. Такие переменные следует называть так, как называется истинное значение этого флага.
Например, если нужна переменная, в которой хранится признак наличия ошибок в процедуре, то такая переменная должна называться "ЕстьОшибки". Или если есть признак того, что товар относится к возвратной таре, то такой признак должен называться "ЭтоТара".
Правила образования имен процедур (функций)
Имена процедур в общем случае, следует образовывать от глаголов неопределенного вида, например:
Правильно: ПроверитьДублиСтрок(),
Неправильно: ПроверкаДублейСтрок();
Правильно: ЗагрузитьКонтрагента(),
Неправильно: ЗагрузкаКонтрагента().
Имена процедур и функций должны давать представление о характере выполняемых процедурой(функцией) действий.
Примеры хороших имен: ПодобратьВидРасчета(), ПолучитьИнформациюОПроводке() и т.д.
Примеры плохих имен: ОК(), Есть(), ЕщеФлажки(), НамПодходит() и т.д.
Именование функций-флагов
Функции, которые предназначены для проверки чего-либо и возвращают в качестве результата проверки булево значение, следует именовать так, как называется результат проверки, имеющий тип Истина.
Например, если функция должна проверить наличие дублей строк в табличной части документа, то она должна называться "ЕстьДублиСтрок". Или если функция должна проверить принадлежность документа к накладным, то она должна называться "ЭтоНакладная".
Однако, если функция (или процедура) "ЕстьДублиСтрок" и проверяет наличие дублей строк, и выполняет объединение дублирующих строк, при этом не возвращает значения, ее следует именовать "СвернутьДублиСтрок".
Имена обработчиков событий
Используются имена процедур - обработчиков событий, формируемые системой автоматически:
<имя элемента управления> + <название события>
Имена по умолчанию формируются при нажатии "лупы" около события в окне свойств реквизита диалога.
По таким же правилам следует образовывать имена обработчиков самостоятельно.
Правила образования имен элементов управления
Имена надписей образуются по следующим правилам:
· Если надпись относится к элементу управления, имя составляется как "Надпись" + ИмяЭлементаУправления;
· В остальных случаях имя составляется как "Надпись" + ИмяНадписи.
Для имен рамок используется префикс "Рамка". Для командной панели формы используется префикс "КоманднаяПанель".
Для имен командных панелей табличных частей формы используется префикс "КоманднаяПанель" + ИмяТабличнойЧасти, например, "КоманднаяПанельСпецификация".
Элементы управления, связанные с данными, называются так же, как данные.
Общие требования к имени объекта конфигурации
Имя объекта надо стремиться строить на основе синонима объекта так, как это делает система автоматически: пробелы и прочие недопустимые символы удаляются, первые буквы слов делаются заглавными. Сокращения слов (относительно синонима) допускаются только в крайних случаях, при этом необходимо, чтобы по сокращению можно было восстановить слово обратно. В случае длинных синонимов последние слова могут быть опущены, если это не искажает смысла.
Для реквизитов объектов допускается переставлять слова из синонима местами, например: синоним "Полное наименование" - имя "НаименованиеПолное".
Для ведущих объектов подобное не допускается.
Общие требования к синониму объекта конфигурации
Синоним объекта должен быть определен так, чтобы осмысленно описывать объект. Сокращения допускаются только общепринятые, например, "ОКЕИ", "ИНН". Следует избегать излишне длинных синонимов, но и укорачивать их с потерей смысла тоже плохо. Синоним начинается с большой буквы, точки ставятся только после сокращений.
Для ведущих объектов метаданных необходимо стремиться к тому, чтобы название объекта в меню, подпись в диалоговых формах совпадали с синонимом или, как минимум, начинались с него.
Для реквизитов объектов подписи в диалогах могут отличаться "в силу обстоятельств" - синоним надо подбирать так, чтобы он осмысленно описывал реквизит в возможных универсальных формах.
Для форм синоним должен начинаться со слов, генерируемых конструктором при создании формы ("Форма списка...", "Форма элемента..." и т.д.), далее, в случае наличия нескольких форм одного назначения, обязательно должно следовать уточнение, например, "Форма элемента полная", "Форма элемента упрощенная".
Для макетов унифицированных форм синоним должен состоять из названия формы, например: "ТОРГ-12".
Общие требования к комментарию объекта конфигурации
Комментарий задается только в тех случаях, когда необходимы какие-либо пояснения. Комментарий начинается с большой буквы, точки ставятся только после сокращений. Если в синониме использовано сокращение, в комментарии необходимо его расшифровать, например: "Общероссийский классификатор единиц измерения".
Для реквизитов объектов в комментариях в необходимых случаях должно содержаться уточнение, например: "Сумма со всеми налогами".
2.4. Правила написания программных модулей
Текст программного модуля записывается на встроенном языке с использованием конечного набора конструкций и ключевых слов.
Встроенный язык 1С:Предприятия является двуязычным. Почти все зарезервированные слова, имена типов значений, свойств, методов, событий имеют два имени: русское и английское. Конструкции встроенного языка могут записываться на русском или английском языке, кроме нескольких слов, для которых нет подходящих русских эквивалентов, например, Null. В тесте программных модулей эти имена можно свободно смешивать, используя то русские, то английские имена без каких-либо ограничений.
Регистр букв (строчные или заглавные) при написании имен переменных, свойств, методов, процедур, функций, а также функций встроенного языка не имеет значения.
Операторы встроенного языка должны разделяться точкой с запятой (";"), но после ключевых слов КонецПроцедуры или КонецФункции точка с запятой не ставится, поскольку это не операторы, а операторные скобки.
Зарезервированные слова
Приведенные в таблице 2.1 ключевые слова являются зарезервированными и не могут использоваться в качестве создаваемых имен переменных, реквизитов объектов конфигурации и объявляемых процедур и функций. В данном варианте языка каждое из ключевых слов имеет два представления - русское и английское.
Таблица 2.1
Комментарии
Комментарий используется для размещения в исходном тексте программного модуля всякого рода пояснений к работе модуля. Хорошим тоном программирования считается, когда исходный текст содержит исчерпывающий комментарий с описанием алгоритма. В режиме исполнения программы комментарии пропускаются. В тексте программного модуля комментарий начинается парой символов "/" и заканчивается концом строки. Это значит, что комментарий можно начинать с начала строки или записывать его после оператора на той же строке. После начала комментария писать оператор на той же строке нельзя, необходимо закончить комментарий концом строки.
Формат операторов
Операторы имеют вид стандартного обращения к процедуре, за исключением оператора присваивания (А = В;) и синтаксических конструкций встроенного языка (например, таких как Для, Пока, Если). Между собой операторы обязательно следует разделять символом ";" (точкой с запятой). Конец строки не является признаком конца оператора, т.е. операторы могут свободно переходить через строки и продолжаться на другой строке. Можно располагать произвольное число операторов в одной строке, разделяя их символом ";".
Операторы языка в программном модуле можно подразделить на две категории: операторы объявления переменных и исполняемые операторы. Операторы объявления переменных создают имена переменных, которыми манипулируют исполняемые операторы. Любой исполняемый оператор может иметь метку, используемую в качестве точки перехода в операторе Перейти.
В общем случае формат оператора языка следующий:
~метка: Оператор[(параметры)] [ДобКлючевоеСлово];
В качестве меток используются специальные идентификаторы, начинающиеся с символа '~' (тильда) и состоящие из последовательности букв, цифр и символов '_' (подчеркивание). Чтобы пометить оператор, надо поместить перед ним метку и следующий за ней символ ":".
Пример:
~метка:А=В;
2.5. Конструкции встроенного языка
Текст программного модуля записывается на встроенном языке с использованием конечного набора конструкций и ключевых слов.
Конструкции встроенного языка могут записываться на русском или английском языке, кроме нескольких слов, для которых нет подходящих русских эквивалентов, например, Null.
Операторы встроенного языка должны разделяться точкой с запятой (";"), но после ключевых слов КонецПроцедуры или КонецФункции точка с запятой не ставится, поскольку это не операторы, а операторные скобки.
Ниже описаны основные конструкции встроенного языка 1C:Предприятия 8.0.
2.5.1. Условия
Конструкция "Если ... Тогда"
Оператор Если предназначен для проверки логических выражений и полностью аналогичен подобным операторам в других языках программирования. Когда результат логического выражения равен Истина, то выполняется блок операторов после ключевого слова Тогда. Оператор Если может иметь ветви ИначеЕсли, а также ветвь Иначе.
Примеры:
/1-й пример
Если Состав.Количество()=0 Тогда
Предупреждение("Не указано ни одной строки!");
КонецЕсли; /2-й пример
Eсли Сотр.Категория = Перечисления Категории.Совместитель Тогда
/обработаем как совместителя
Иначе
/обычный сотрудник
КонецЕсли;
/3-й пример
Если выбор = 1 Тогда
Сообщить("Выбран 1-й пункт");
ИначеЕсли выбор = 2 или выбор = 3 Тогда
Сообщить("Выбран 2-й или 3-й пункт");
Иначе
Сообщить("Обработка этого пункта не предусмотрена");
КонецЕсли;
Ключевые слова ИначеЕсли, Иначе и КонецЕсли желательно записывать с новой строки. Следующий пример показывает нежелательное форматирование оператора Если:
/так делать не рекомендуется!
Если Состав. Количество () = 0 Тогда ... Иначе ... КонецЕсли;
При таком форматировании нарушается блочная структура программы, не работают группировки конструкций встроенного языка в редакторе модулей, усложняется понимание программы.
Если результат выражения имеет тип "булево" и требуется сравнить его со значением Истина, то следующие конструкции полностью эквивалентны:
Если Выборка.Следующий() = Истина Тогда /так не рекомендуется
Если Выборка.Следующий() Тогда /это рекомендуемый вариант
Логический оператор НЕ позволяет инвертировать результат логического выражения и подобным же образом заменить сравнение со значением Ложь. Следующие конструкции делают одно и то же:
Если ВыбФирма.Пустая() = Ложь Тогда
Если НЕ ВыбФирма.Пустая() Тогда
Конструкция "?(..., ..., ...)"
Данная конструкция позволяет записать условный оператор в одну строку и вычислить его как выражение.
Пример:
Коментарий = ? (Количество=0, "Пусто", Строка (Количество)+" ш т . ");
Обычно эта конструкция применяется в выражениях и работает как следующая функция:
Функция СокращенноеЕсли(РезультатУсловия,выражение1,выражение2)
Если РезультатУсловия Тогда /Истина
Возврат выражение!;
Иначе /Ложь
Возврат выражение2;
КонецЕсли;
КонецФункции
Логические выражения
В операторе Если, конструкциях "?(...)", а также в цикле Пока применяются логические выражения, т.е. такие, результат которых имеет тип "булево" с двумя значениями: Истина и Ложь.
В логических выражениях могут применяться логические сомножители НЕ, И, ИЛИ (в порядке приоритета). Для задания правильного порядка вычисления рекомендуется расставлять скобки, например:
/следующую конструкцию:
Если НЕ Страна = ВыбСтрана ИЛИ Цена > 100 И Цена < 1000 Тогда
/лучше записать так:
Если (НЕ Страна = ВыбСтрана) ИЛИ (Цена > 100 И Цена < 1000) Тогда
В 1C: Предприятии 8.0 введено сокращенное вычисление логических выражений. Это означает, что если по части выражения можно определить конечный результат, тогда остаток логического выражения не вычисляется. Например:
Если Цена > 10 И Цена < 20 Тогда При вычислении результата составного логического выражения проверяется первое условие "Цена > 10". Допустим, цена равна 5, тогда первое условие не выполняется (дает значение Ложь) и следующую часть вычислять уже не нужно, поскольку в любом случае результат всего выражения будет Ложь.
Другой пример:
Если Цена = 10 ИЛИ Цена = ПолучитьЦенуСоСкидкой Тогда Сначала проверяется первое условие "Цена = 10". Допустим, оно выполняется (дает значение Истина), тогда следующую часть условия можно не вычислять, поскольку результат всего выражения будет Истина, независимо от второго условия. Обратите внимание, что в этом случае функция ПолучитьЦенуСоСкидкой не будет вызвана! Если по проектной логике она должна вызываться в любом случае, тогда это следует сделать до условия, а результат запомнить в переменную, например:
ЦенаСоСкидкой = ПолучитьЦенуСоСкидкой();
Если Цена =10 ИЛИ Цена = ЦенаСоСкидкой Тогда
Итак, при сокращенном вычислении логических выражений применяются следующие правила:
· Если один из сомножителей оператора И равен Ложь, то конечный результат выражения будет Ложь, независимо от значения других сомножителей. · Если один из сомножителей оператора ИЛИ равен Истина, то конечный результат выражения будет Истина, независимо от значения других сомножителей.
2.5.2. Циклы
Конструкция "Для ... По ... Цикл"
Цикл "Для...По" применяется для записи циклов с известным числом повторений. Например, следующий цикл 12 раз выведет номер месяца в окно служебных сообщений:
Для Месяц = 1 По 12 Цикл
Сообщить(Месяц);
КонецЦикла;
Переменная Месяц называется переменной цикла или счетчиком цикла. Не следует изменять значение переменной цикла внутри него. Это нарушает принципы структурного программирования и может привести к трудно обнаруживаемым ошибкам.
Конструкция "Для Каждого ... Из ... Цикл"
В 1С:Предприятии 8.0 была введена новая конструкция "Для Каждого", предназначенная для обхода элементов коллекции. В таких циклах в качестве переменной цикла выступает не число, а объект - элемент коллекции, например, объект СтрокаТаблицыЗначений в следующем примере:
ПустаяСсылка = Справочники.Номенклатура.ПустаяСсылка();
Для Каждого СтрокаТЗ Из тзСостав Цикл
/тело цикла
Если СтрокаТЗ.Товар = ПустаяСсылка Тогда
Продолжить; /возьмем следующую строку
Иначе
Если СтрокаТЗ.Товар = ВыбТовар Тогда
Прервать; /досрочный выход из цикла
КонецЕсли;
КонецЕсли;
КонецЦикла;
Обратите внимание, что внутри цикла нет никакой переменной, содержащей порядковый номер или индекс элемента коллекции. Если это необходимо, то можно добавить переменную, которая будет увеличиваться внутри цикла, например:
Н = 0;
Для Каждого СтрокаТЗ Из тзСостав Цикл
Н = Н + 1 ;
/действия
КонецЦикла;
Для некоторых коллекций по элементу можно определить его индекс:
Для Каждого СтрокаТЗ Из тзСостав Цикл
ИндексСтроки = тзСостав.Индекс(СтрокаТЗ);
КонецЦикла;
Если элемент не принадлежит данной коллекции, то метод Индекс возвращает -1 (минус единицу).
Конструкция "Пока ... Цикл"
Ключевое слово Пока предназначено для реализации циклов с неизвестным числом повторений. Цикл выполняется до тех пор, пока логическое выражение истинно. Если на очередном витке Цикла оно перестает выполняться (дает значение Ложь), то цикл прекращается. Ниже показан пример реализации цикла Пока:
Н = 0;
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ПометкаУдаления Тогда
Продолжить; /возьмем следующий элемент
КонецЕсли;
Н = Н + 1;
Если Н > 10 Тогда
Прервать; /досрочный выход из цикла
КонецЕсли;
Сообщить("Товар: " + Выборка.Наименование);
КонецЦикла;
2.5.3. Безусловные переходы
Иногда необходимо принудительно передать управление в определенную точку программы. Это реализуется с помощью метки и оператора Перейти. Метка может быть у любого исполняемого оператора. Она начинается со знака тильды ("~"), далее идет имя метки, а затем двоеточие (":"), например:
Н = 0;
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Н = Н + 1;
Если Н <= 10 Тогда
/пропускаем первые 10 элементов справочника
Перейти ~след;
КонецЕсли;
Сообщить(Выборка.Наименование);
~след:
/возьмем следующий элемент
КонецЦикла;
С помощью оператора Перейти можно передавать управление в пределах процедуры/функции или в пределах раздела основной программы модуля. Заметьте, что этим способом нельзя выйти из процедуры или функции. Чем меньше в вашей программе будет меток, тем лучше. Рекомендуется применять метки только для перехода в конец цикла или процедуры. Для досрочного выхода из цикла рекомендуется применять оператор Прервать, а для перехода на следующий виток цикла нужно применять оператор Продолжить. Оператор же Перейти будет полезен, если требуется выйти сразу из нескольких циклов.
2.5.4. Обработка исключений
Конструкция "Попытка...Исключение"
Обработка исключений предназначена для перехвата ошибок (исключительных ситуаций), возникающих в процессе работы программы. Если возникла ошибка, и она не была перехвачена, то выдается системное сообщение об ошибке, и выполнение модуля прерывается.
Однако разработчик может перехватывать возникающие ошибки и обрабатывать их по своему усмотрению, например:
Попытка СредняяЦена = СуммаВсего / Количество; Исключение /Возникла ошибка деления на ноль.
/Будем считать, что количество равно 1.
Количество = 1;
СредняяЦена = СуммаВсего; КонецПопытки;
Чем меньше в вашей программе будет таких конструкций, тем лучше. Все потенциальные ошибки необходимо "отлавливать" по возможности еще до их возникновения. Конструкцию Попытка следует применять для внешних ошибок и при работе с базой данных, т.е. для тех ошибок, которые не являются ошибкой написания программы.
В следующем примере производится попытка записать файл, и если возникнет ошибка, то она будет перехвачена обработчиком исключений:
Попытка
ТекстФайл.Записать(ПутьКФайлу);
Исключение
Сообщить("Не удалось записать файл!");
КонецПопытки;
Внутри блока Исключение...КонецПопытки можно вызвать функцию ОписаниеОшибки, которая возвращает сообщение о возникшей ошибке в виде строки. Эту строку можно выдать в окно сообщений, записать в журнал регистрации или выполнить другие действия.
Кроме того, есть команда ВызватьИсключение, которая может применяться только внутри блока обработки исключения. Хотя программист и обработал ошибку, но он может ее пропустить (передать обработчику вышестоящего уровня), например, если она неисправима:
Попытка
СредняяЦена = СуммаВсего / Количество;
Исключение
Сообщить("Эх! Надо было проверить количество на ноль!");
Сообщить(ОписаниеОшибки()); ЗаписьЖурналаРегистрации(ОписаниеОшибки());
/хотя мы и обработали ошибку, но программу все равно прервем ВызватьИсключение; КонецПопытки;
Обработчики исключений могут быть вложенными друг в друга. Если ошибка не обработана во внутреннем блоке Исключение...КонецПопытки, тогда она обрабатывается внешним обработчиком, а если его нет, выдается системное сообщение об ошибке.
2.5.5. Процедуры и функции
Процедуры и функции являются блоками программы, которые можно вызвать по имени из другого места, например, из другой процедуры. Процедуры и функции могут иметь параметры, которые говорят о том, какие именно действия и с какими объектами она должна сделать. Функции отличаются от процедур только тем, что имеют возвращаемое значение.
Ниже показана процедура Печать, функция ЕстьПравоИсполъзования и процедура КнопкаПечатъНажатие, которая вызывается при нажатии на кнопку "Печать":
Процедура Печать(ТабДок)
Макет = ПолучитьМакет("Основной");
ТабДок.Вывести(Макет.ПолучитьОбласть("Бланк"));
КонецПроцедуры Функция ЕстьПравоИспольэования(ИмяОтчета)
/возвращаемое значение функции
Возврат ПравоДоступа("Использование", Отчеты[ИмяОтчета]);
КонецФункции
Процедура КнопкаПечатьНажатие(Элемент)
Если НЕ ЕстьПравоИспользования(ИмяОтчета) Тогда
Возврат; /досрочный выход из процедуры
КонецЕсли
ТабДок = Новый ТабличныйДокумент;
Печать(ТабДок); /вызов процедуры Печать
ТабДок.Показать();
КонецПроцедуры Параметры у процедуры и функции могут быть необязательными. Тогда их можно будет опускать при вызове. Для необязательных параметров должно быть указано значение по умолчанию, например:
/следующая процедура принимает табличный документ,
/а если ничего не передано,
/то она его создает и показывает на экране
Процедура Печать(ТабДок = Неопределено) Экспорт
Если ТабДок = Неопределено Тогда
ТабДок = Новый ТабличныйДокумент;
флПоказывать = Истина;
Иначе
флПоказывать = Ложь;
КонецЕсли;
Макет = ПолучитьМакет("Основной");
ТабДок.Вывести(Макет.ПолучитьОбласть("Бланк"));
Если флПоказывать Тогда
ТабДок.Показать();
КонецЕсли;
КонецПроцедуры
Замечание. В 1С:Предприятии 8.0 порядок следования процедур и функций в модуле не важен. Это означает, что процедура может располагаться ниже места ее вызова, т.е. предварительное объявление процедур и функции не требуется (в версии 7.7 для этого использовалось ключевое слово Далее).
Процедуры и функции рекомендуется предварять комментариями с описанием их назначения, параметров, основных принципов работы и возвращаемого значения для функций. В редакторе модулей есть возможность свернуть процедуры и функции модуля, а также перейти на одну из них, выбрав ее из списка. Описания в виде комментариев также можно сворачивать.
Параметры процедуры или функции по умолчанию передаются по ссылке. Это означает, что изменение формального параметра внутри процедуры или функции приведет к изменению фактического параметра в том месте, где она вызывается. Чтобы гарантированно передать параметр по значению, нужно перед именем параметра вставить ключевое слово Знач.
2.6. Инструкции препроцессора
В 1С:Предприятии 8.0 были введены несколько предопределенных инструкций для препроцессора, которые говорят о том, где должен исполняться тот или иной фрагмент программы (таблица 2.2).
Таблица 2.2
Инструкции препроцессора относятся
Место выполнения общего программного модуля также может регулироваться установкой его свойств. Подробнее об инструкциях препроцессора и свойствах общих модулей написано в документации.
2.7. Типы данных
Во встроенном языке 1С:Предприятия 8.0 поддерживаются следующие основные типы данных:
· число · строка · дата (включает в себя время) · булево (имеет два значения: Истина и Ложь) · значение Неопределено · значение Null (для неуказанных значений в таблицах базы данных) · Тип (значения специального типа "Тип" нужны для представления и сравнения типов данных, например, "Если ТипЗнч(ВыбДок) = Тип("ДокументСсылка.Чек") Тогда..."). · другие типы, перечисленные в документации Объявление переменных
В переменных хранится промежуточная информация, необходимая для работы программы. Переменные обычно создаются автоматически при первом присвоении им значения, но можно объявлять их явно с помощью ключевого слова Перем.
Тип переменной определяется по значению, которое она содержит. При помещении в переменную значения другого типа меняется и тип переменной, т.е. в языке поддерживается мягкая типизация.
Если переменную модуля объявить с ключевым словом Экспорт, то она будет видна вне модуля. Экспортируемые переменные модуля приложения называются глобальными переменными, потому что они доступны в любом месте программы (кроме общих модулей). Чем меньше в вашей программе будет глобальных переменных, тем лучше.
Примеры:
/явное объявление переменной модуля или процедуры или функции
Перем Итог;
/экспортируемая переменная модуля
Перем Количество Экспорт;
/неявное объявление переменных (при первом присвоении значения)
ном = 0;
Оператор Новый
Оператор Новый предназначен для создания объектов определенных типов, например, СписокЗначений, Структура и т.д. Заметьте, что данный оператор применяется только для тех типов, для которых допустимо создание новых значений. При объявлении переменных, ссылающихся на прикладные объекты, оператор. Новый не используется.
Ниже показываются различные варианты объявления переменных:
/создание нового объекта типа "Структура"
Отбор - Новый Структура;
/вызов конструктора с параметрами
Отбор = Новый Структура("Контрагент",ВыбКонтрагент);
/получение объекта типа СправочникМенеджер
Спр = Справочники.Контрагенты;
Приведение типов
При программировании часто требуется преобразовать значение одного типа в значение другого типа, например, число 10 преобразовать в строку "10".
Приведение типов может быть явное и неявное. Для явного приведения типов существуют следующие функции:
· Число(), · Строка(), · Дата(), · Булево(). Неявное приведение типов производится системой автоматически при вычислении выражений. Например, в следующей конструкции значение числовой переменной НомерМесяца неявно преобразуется в строку и присоединяется к другой строке:
а = "Месяц " + НомерМесяца;
Системные перечисления и наборы значений
В 1С:Предприятии 8.0 для улучшения понятности программ были введены системные перечисления и системные наборы значений.
Системные перечисления предназначены для определения некоторого ограниченного набора предопределенных значений. Доступ к системным перечислениям осуществляется как к свойствам глобального контекста его имени. Конкретные значения указываются через точку от имени системного перечисления. Системные перечисления используются, как правило, для задания значений параметров системных методов или свойств объектов, а также в качестве возвращаемых значений методов.
Значения системных перечислений не перебираются по индексу.
К системным перечислениям, например, относятся следующие:
· КодВозвратаДиалога · РежимБегущейСтроки · ОбходРезультатаЗапроса · РежимПроведенияДокумента · ВариантПериода и др.
Не следует путать системные перечисления и системные наборы значений (например системный набор значений "Символы").
Например, ниже используется системное перечисление ОриентацияСтраницы и его значение Портрет:
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
Функция "Вопрос"
В версии 7.7 эта функция принимала и возвращала строковые значения, например, "Да" или "Нет", а теперь она принимает параметр типа РежимДиалогаВопрос и возвращает значение системного перечисления КодВозвратаДиалога:
Если Вопрос("Вы уверены?", РежимДиалогаВопрос ,ДаНет) = КодВозвратаДиалога.Да Тогда
...
КонецЕсли Системные наборы значений аналогичным образом позволяют упрощать написание программы, но в отличие от системных перечислений, они не образуют типа. Например, некоторые часто используемые спецсимволы были собраны в системный набор значений Символы, в котором содержатся следующие значения:
· ПС - перевод строки (помещение курсора на следующую строку), · ВК - возврат каретки (помещение курсора в начало строки), · Таб - символ табуляции, · ПФ - перевод формы (страницы), · ВТаб - вертикальная табуляция, · НПП - неразрывный пробел. Например, соединение нескольких строк в одну многострочную строку производится следующим образом:
стр = стр1 + Символы.ПС + Символы.ВК + стр2;
2.8. Редактор программных модулей
Редактирование программных модулей производится в специализированном текстовом редакторе системы 1С:Предприятие 8.0.
Редактор поддерживает цветовое выделение синтаксических конструкций, группировку блоков операторов, шаблоны текста и контекстную подсказку (аналог технологии IntelHSense).
Текстовый редактор может быть использован не только для редактирования текстов программных модулей, но также для написания любых других текстов, например, запросов.
Цвет фона и текста, окна текстового редактора, настраивается в параметрах. Там же можно указать шрифт, автоматический отступ, ширину табуляции и другие параметры. Синтаксический контроль
По кнопке Ctrl+F7 можно произвести проверку модуля на наличие синтаксических ошибок. Если даже таких ошибок не будет найдено, то это не гарантирует, что программа будет работать правильно, поскольку могут возникать ошибки времени выполнения, которые невозможно обнаружить на этапе синтаксического контроля.
Рекомендуется в параметрах включить автоматическую проверку модуля на синтаксические ошибки, которая будет всегда выполняться при его сохранении. Это позволит раньше обнаружить ошибку, и, следовательно, ее исправление обойдется дешевле.
В 1С:Предприятии 8.0, как и в версии 7.7, есть возможность проверить все программные модули конфигурации на наличие синтаксических ошибок. Для этого нужно выбрать команду в меню "Конфигурация -> Синтаксический контроль модулей".
Поиск и замена текста
Текстовый редактор поддерживает поиск строки по тексту, для чего существуют специальные кнопки на панели инструментов:
Первая кнопка позволяет выполнить глобальный поиск строки по всей конфигурации или только по определенным объектам. Она же позволяет искать текст в файлах, не включенных в конфигурацию, например, во внешних обработках.
С помощью меню "Правка -> Заменить", или по кнопке 2, которую можно сразу поместить на панель инструментов, производится замена одной строки текста на другую. Аналогично глобальному поиску, поддерживается глобальная замена строки по всей конфигурации или только по заданным объектам.
Группировки конструкций языка
Слева от слова Процедура есть кнопки "развернуть" и "свернуть". Эти кнопки позволяют свернуть блок операторов (в данном случае процедуру) и работать с ним, как с единым целом, например, скопировать, перенести или удалить.
В параметрах можно указать, для каких синтаксических конструкций нужно включить группировку, а также, какие из них отображать свернутыми при открытии модуля:
Синтакс-помощник
При программировании часто возникает потребность вспомнить имя свойства или метода, а также параметры методов и возвращаемые значения функций. Эта информация содержится в Синтакс-помощнике, который можно вызвать по Ctrl-Fl или через контекстное меню.
Контекстная подсказка
В 1С:Предприятии 8.0 поддерживается технология контекстной подсказки, предназначенная для облегчения программирования и уменьшения количества ошибок. Суть ее заключается в том, что после нажатия точки (или Ctrl-Пробел) во всплывающем окне высвечивается список свойств и методов, которые доступны в данном контексте.
Например, после написания строки "Документы." появляется контекстное меню. Набираем первые буквы имени документа - "расх" - и курсор устанавливается на документ Расходная-Накладная:
Остается нажать Enter и имя документа будет подставлено в текст модуля. Затем можно опять ввести точку и появится уже список свойств и методов документа РасходнаяНакладная.
Необходимо учитывать, что область действия контекстной подсказки ограничена: она работает не во всех случаях и не для всех объектов.
Шаблоны
Для ускорения ввода часто используемых конструкций можно использовать шаблоны например, для блока "Если...КонецЕсли;" или "Процедура.. .КонецПроцедуры".
Шаблоны можно разделить на группы. Двойной щелчок на шаблоне открывает окно для его редактирования. После набора нескольких символов, заданных в качестве строки замены, можнонажать Ctrl-Q и активизируется соответствующий шаблон, т.е. введенная строка будет заменена на текст шаблона.
Закладки по тексту
Текстовый редактор поддерживает механизм закладок по тексту, что позволяет "запомнить" определенную строку в тексте, а потом быстро к ней вернуться.
Механизм закладок по тексту реализуется с помощью следующих кнопок на панели инструментов или в меню "Текст":
1. Установить / снять закладку (Alt-F2), 2. Перейти к следующей закладке (F2), 3. Перейти к предыдущей закладке (Shift-F2), 4. Убрать все закладки в тексте. Разделение и слияние окон
Текстовый редактор позволяет одновременно работать с разными частями модуля. Для этого предназначено горизонтальное и вертикальное разделение окна, которое включается и выключается из меню "Окна". Другой возможностью управления окнами является их соединение друг с другом. Если перетащить окно с нажатой клавишей Shift, то его можно соединить с другим окном, например, для редактирования модуля отчета и его формы в одном окне. Соединять окна можно горизонтально или вертикально, а также в виде закладок внизу.
Тема 3. Основные объекты конфигурации
3.1. Константы
Константы нужны для хранения одного значения в базе данных. Обычно в константах хранится редко изменяемая информация, например, название организации, фамилия руководителя, основная валюта организации, параметры конфигурации в целом и т.д.
Для каждой константы нужно обязательно указать ее имя и тип данных. Кроме того, желательно указывать синоним, комментарий и перечень подсистем, в которые она входит. Все это делается в окне свойств.
Обратите внимание на свойство "Допустимая длина" для констант строкового типа. Можно задать фиксированную или переменную длину константы. При фиксированной длине константа будет хранить заданное количество символов, а если реальное значение содержит меньше символов, то в конец строки будут добавлены пробелы до заданной длины. При переменной длине строки в базе данных хранится только реальное количество символов.
В конфигурациях на платформе 1С:Предприятия 8.0 для редактирования значений констант рекомендуется создавать отдельную экранную форму, в которой все константы распределены по закладкам и для каждой существует свой элемент управления с понятной надписью и подробным описанием.
Обращение к константам из программы на встроенном языке производится очень просто, хотя этот способ и отличается от версии 7.7.
/ чтение значения из константы Название = Константы.НазваниеОрганизации.Получить(); / запись нового значения в константу Константы.НазваниеОрганизации.Установить(НовоеНазвание); Обратите внимание на слово Константы (а не Константа, как было в версии 7.7). Через такую конструкцию мы обращаемся к объекту КонстантыМенеджер (заметьте, что применяется множественное число), который позволяет затем обратиться к менеджеру конкретной константы по ее имени.
Если расшифровать приведенный выше пример, то станет более понятна взаимосвязь объектов:
/получаем объект для управления списком констант КонстантыМенеджер = Константы; /получаем объект для управления одной константой КонстантаМенеджер = КонстантыМенеджер.НазваниеОрганизации; /считываем значение константы из базы данных Значение = КонстантаМенеджер.Получить(); /записываем новое значение константы в базу данных КонстантаМенеджер.Установить(НовоеЗначение); Как мы увидим дальше, такая схема распространяется на все объекты конфигурации и необходимо ее понимать. Объекты типа КонстантыМенеджер, СправочникиМенеджер, ДокументыМенеджер и аналогичные им предназначены для обращения к списку менеджеров объектов конфигурации. Свойствами этих объектов являются другие объекты типа КонстантаМенеджер, СправочникМенеджер и ДокументМенеджер. В свою очередь эти объекты предназначены для обращения к менеджеру одного объекта конфигурации, например, менеджеру справочника Номенклатура.
Существуют свойства глобального контекста, ссылающиеся на объекты типа КонстантыМенеджер, СправочникиМенеджер, ДокументМенеджер и т.д., они называются односложно: Константы, Справочники, Документы. Это позволяет упростить написание программы и следующие примеры это демонстрируют.
Назв = Константы.НазваниеОрганизации.Получить(); СпрСотр = Справочники.Сотрудники; ВсеДолжности = Справочники.Должности.Выбрать(); ДокНакл = Документы.РасходнаяНакладная; Работа с константами производится с помощью нескольких объектов, и необходимо понимать их взаимосвязь, потому что подобная ситуация повторяется почти с каждым объектом конфигурации.
Ниже дано описание объектов для работы с константами:
КонстантыМенеджер Объект предоставляет доступ к списку констант. Через этот объект можно перебрать все константы с помощью конструкции "Для Каждого" или получить объект КонстантаМенеджер для управления конкретной константой. Кроме того, данный объект позволяет создать объект КонстантыНабор для одновременного чтения и записи сразу нескольких констант. КонстантаМенеджер Менеджер константы обеспечивает доступ к конкретной константе. Через него можно прочитать и установить ее значение с помощью методов Получить и Установить. КонстантыНабор Через этот объект можно получить доступ сразу к нескольким константам, но необязательно всем существующим в конфигурации. Работу с набором констант продемонстрируем на следующем примере.
/создаем набор из двух констант /обратите внимание, что значений констант в наборе еще нет Набор = Константы.СоздатьНабор("Руководитель,ИНН");
Набор.Прочитать(); /прочитать из базы сразу две константы /изменить значение констант в наборе (не в базе) Набор.Руководитель = "Иванов И.И."; Набор.ИНН = "1234567890"; Набор.Записать(); /записать в базу сразу две константы Главное, что следует запомнить, - при использовании набора все входящие в него константы считываются и записываются вместе в одной транзакции, т.е. операция над несколькими константами производится одновременно. Константы - слишком простой объект для полного понимания объектной модели 1С:Предприятия 8.0. Далее на примере справочников мы рассмотрим новую объектную модель во всей ее полноте.
3.2. Справочники, их структура, предопределенные элементы, подчиненные справочники, иерархические справочники
Справочники являются основным механизмом хранения условно-постоянной информации. Справочники часто используются в тех случаях, когда необходимо исключить неоднозначный ввод информации. Каждый справочник представляет собой список однородных объектов: сотрудников, организаций, товаров и т.д. Такие объекты называются элементами справочника.
3.2.1. Структура справочника
Структура справочника определяет состав хранимой информации и настраивается в Конфигураторе. Под структурой понимаются в первую очередь состав реквизитов и табличных частей справочника. В более широком смысле в понятие структуры справочника включают тип и длину кода, длину наименования, количество уровней иерархии и т.д.
Во всех справочниках есть системные реквизиты Код и Наименование (если только у них не установлена нулевая длина). Действительно, практически любой объект из реальной жизни характеризуется этими свойствами. Например, для сотрудников кодом может выступать табельный номер, а наименованием - фамилия, имя и отчество (ФИО).
Код элемента справочника может быть как числовым, так и строковым. Система 1С:Предприятие 8.0 предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов новым элементам, контроль уникальности кода и т.д.
Помимо кода и наименования, в справочниках 1C: Предприятия 8.0 может храниться любая дополнительная информация об объектах предметной области, для чего в Конфигураторе настраивается список реквизитов и табличных частей. Используя механизм справочников легко организовать, например, картотеку сотрудников. Почти наверняка справочник Сотрудники, кроме встроенных реквизитов Код и Наименование, будет иметь какие-то дополнительные реквизиты, например, Должность, Оклад, Адрес, ДатаРождения и т.д.
Для каждого реквизита справочника нужно указать его тип данных, например, "число", "строка", "дата", "булево". Это примитивные типы данных, но можно указать и ссылочные типы данных. Например, реквизит Должность имеет тип данных "СправочникСсылка.Должности". В этом случае, значение реквизита будет выбираться из справочника Должности. Так реализуется простейшая связь между справочниками и другими объектами, когда значения реквизита объекта выбираются из справочника. Новой возможностью для 1С:Предприятия 8.0 является то, что у реквизита справочника (и реквизитов других объектов) может быть составной тип данных. Это означает, что он может содержать значения разных типов данных, перечень которых задается в Конфигураторе.
Например, реквизит МестоРаботы в справочнике Физлица может выбираться, во-первых, из справочника Организации, если данный человек работает в одной из наших фирм (входящих в наш холдинг), во-вторых, из справочника Контрагенты, если он работает во внешней организации, и в-третьих, он может быть строкового типа, если требуется просто указать место работы сотрудни-ка без ссылок на другие справочники.
Например, свойства реквизита МестоРаботы (рис.3.1), могут иметь составной тип данных, который включает три типа:
· СправочникСсылка.Контрагенты,
· СправочникСсылка. Организации,
· строка.
3.2.2. Предопределенные элементы
Еще на этапе разработки конфигурации в справочник могут быть введены предопределенные элементы и группы справочника. Эти элементы имеют имена, по которым к ним производится обращение из программы. Предопределенные элементы справочника имеет смысл создавать, если сама конфигурация ориентирована на их использование.
Например, иерархический справочник Сотрудники может иметь две предопределенные группы: Работающие и Уволенные. Эти группы будут использованы в приказе о приеме на работу и приказе об увольнении. При приеме сотрудник добавляется в группу Работающие, а при увольнении переносится в группу Уволенные.
Другие примеры предопределенных элементов и групп:
· В справочник Номенклатура может быть добавлена предопределенная группа "Снятые с продажи", которая будет содержать позиции номенклатуры, исключенные из прайслиста.
· В справочник Контрагенты может быть добавлен предопределенный элемент "Розничный покупатель", который будет использоваться в документе РеализацияТовара, если покупатель не является организацией.
Обращение к предопределенным элементам из программного модуля реализуется по их именам следующим образом:
ГруппаРаботающие = Справочники.Сотрудники.Работающие;
3.2.3. Подчиненные справочники
Между справочниками может быть установлено отношение подчиненности. В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца. Часто можно сказать, что элементы одного справочника принадлежат элементам другого.
Например, в системе может быть справочник РасчетныеСчета, тогда его можно сделать подчиненным справочнику Контрагенты.
Это означает, что "Контрагент владеет расчетными счетами, а расчетные счета принадлежат контрагенту".
В 1 С: Предприятии 8.0 у справочника может быть несколько владельцев, то есть справочник может быть подчинен сразу нескольким справочникам или другим объектам. Но каждый элемент подчиненного справочника имеет одного и только одного владельца, который хранится в одном из объектов-владельцев. Например, справочник РасчетныеСчета может быть одновременно подчинен справочнику Контрагенты и справочнику Фирмы. Структура расчетного счета одинакова при любом владельце, поэтому целесообразно завести не два разных справочника, каждый из которых подчинен или справочнику Фирмы, или справочнику Контрагенты, а один справочник РасчетныеСчета, подчиненный сразу двум справочникам. При этом каждый расчетный счет будет принадлежать только одному владельцу (или фирме, или контрагенту). Такая схема позволит избавиться от дублирования кода и упростить конфигурацию.
Справочник может быть подчинен не только другим справочникам, но также планам видов характеристик и планам счетов. Назначение такого подчиненного справочника - хранение подчиненных объектов о конкретной характеристике или о конкретном счете.
Например, можно завести справочник ЗначенияДопСвойств, подчиненный плану видов характеристик ДопСвойства. Это означает, что в справочнике будет храниться перечень возможных значений для каждой характеристики, например, список цветов (красный, зеленый, синий) для такой характеристики, как "Цвет", или для характеристики "Тип разъема" значения "PS/2", "USB" и т.д.
В 1С:Предприятии 8.0 для подчиненных справочников реализовано свойство ИспользованиеПодчинения. Оно позволяет управлять ограничением, накладываемым на владельцев. В качестве владельца могут использоваться только группы, только элементы или комбинированный вариант - группы и элементы. Если у справочника несколько владельцев, то ограничение применяется к каждому из них.
Среди различных вариантов настройки серий кодов есть вариант "В пределах подчинения владельцу". В иерархических подчиненных справочниках он обеспечивает автоматическую нумерацию и контроль уникальности кодов среди элементов с одинаковым владельцем, но разными родителями.
3.2.4. Табличные части
В 1С: Предприятии 8.0 появилась возможность для справочника создать одну или несколько табличных частей. Эту возможность рекомендуется использовать для отражения информации, связанной с данным элементом, но не имеющей собственной объектной сущности (для таких объектов рекомендуется завести подчиненный справочник). Например, для справочника Товары может быть создана табличная часть ЕдиницыИзмерения.
Обратите внимание, что при использовании табличной части уже нельзя будет ссылаться на строки табличной части, т.е. нельзя будет создать реквизит, соответствующий понятию "строка табличной части".
Например, если для справочника Сотрудники завести табличную часть Образование (вместо подчиненного справочника), то для реквизитов документов мы не сможем выбрать тип, аналогичный понятию "место учебы сотрудника". Это надо учитывать при выборе между подчиненным справочником и табличной частью.
Если даже в перспективе может возникнуть потребность ссылаться на подчиненные объекты, например, создавать ссылающиеся на них реквизиты документов или других справочников, то лучше сразу завести подчиненный справочник. Если же ссылка на такие сведения не имеет смысла и никогда не может быть типом какого-либо реквизита, тогда можно завести табличную часть.
Ниже представлен перечень ситуаций и наиболее корректный выбор между подчиненным справочником и табличной частью. Просьба изучить эти ситуации очень тщательно, чтобы не допускать ошибок при выборе.
Ситуация 1 В базе данных необходимо хранить список расчетных счетов каждого контрагента. Почти наверняка в платежных документах будет необходимо, кроме контрагента, указывать его расчетный счет. Такая информация имеет четкую объектную природу и может быть идентифицирована как "Расчетный счет". Решение: Справочник Контрагенты и подчиненный ему справочник РасчетныеСчета с полями Банк, Номер, КоррСчет. Ситуация 2 Допустим, для справочника Номенклатура есть потребность хранить список единиц измерения для каждого товара с указанием коэффициента пересчета в основную единицу измерения. Эти сведения подбираются из справочника ЕдиницыИзмерения, который хранит все существующие в природе единицы измерений. Каждая строка такого подчиненного списка не имеет собственной объектной сущности, а нужна только для пересчета из одной единицы измерения в другую. Решение: Справочник Номенклатура и табличная часть ЕдиницыИзмерения с полями ЕдиницаИзмерения и КоэффициентПересчета. Ситуация 3 Допустим, встроенной системы задания прав пользователей не хватает для некоторых специальных приложений. Например, часто требуется разработать механизм утверждения документов разными пользователями. Тогда для сотрудника нужно хранить список документов, которые он может утверждать, и с этим отлично справится табличная часть УтверждаемыеДокументы справочника Сотрудники. Такая информация не имеет объектной природы, а просто связывает документ и сотрудника, поэтому вряд ли понадобится когдалибо в будущем создавать ссылки на нее. Решение: Справочник Сотрудники и табличная часть УтверждаемыеДокументы с полем Документ и флажком Утверждается. Заметим, что эту задачу также можно решить с использование регистров сведений, описанных в отдельной главе. Ситуация 4 Для справочника Сотрудники требуется хранить сведения о составе семьи сотрудника, т.е. вносить информацию о членах семьи и их родственных отношениях к сотруднику (муж, жена, сын, дочь и т.д.). Обычно эта списковая информация полностью подчинена элементу справочника Сотрудники, и возникает мысль о том, чтобы завести табличную часть. Но если подумать, то такая информация имеет четкую объектную природу и может быть идентифицирована как "Член семьи". Для некоторых приложений может потребоваться создавать ссылки на членов семьи сотрудника. Аналогичная ситуация наблюдается со сведениям об образовании и о предыдущих местах работы сотрудника. Решение: Выбор между подчиненным справочником и табличной частью зависит от назначения конфигурации. Если в будущем может возникнуть потребность создавать ссылки на такие сведения, то лучше завести подчиненные справочники СоставСемьи, Образование и ТрудоваяДеятельность.
3.2.5. Иерархические справочники
Список элементов справочника в системе 1С: Предприятие 8.0 может быть иерархическим (или многоуровневым). Использование иерархических справочников позволяет сгруппировать элементы справочника по какому-либо признаку с нужной степенью детализации. Иерархический справочник может быть двух видов:
Элементы и группы В первом случае все элементы иерархического справочника разделяются на "просто" элементы справочника и группы справочника. Группы могут отличаться по структуре от обычных элементов, т.е. могут содержать другой состав реквизитов. Для каждого реквизита указывается, относится ли он только к элементу, только к группе или к обоим. Примером иерархического справочника с группами может служить справочник Сотрудники, в котором есть группы Штатные, Совместители и Уволенные. Только элементы Во втором случае иерархический справочник состоит только из элементов. Любой элемент может выполнять функцию группы, т.е. он может быть родительским элементом для других элементов этого же справочника. Например, по такому принципу можно организовать справочник Подразделения. В любой момент времени какойнибудь отдел может быть разделен внутри себя на несколько подотделов, и отразить это в справочнике не составит никакого труда. Другой пример - справочник Районы, который отражает территориальное деление города. Элементы верхнего уровня представляют административные округа, на втором уровне содержатся районы, на третьем уровне - микрорайоны. Главное отличие этих двух видов иерархического справочника заключается в следующем:
· в первом случае группы и элементы справочника являются разными сущностями (у них обычно разный состав реквизитов), например, группа товаров и товар, группа сотрудников и сотрудник. · во втором случае справочник содержит информацию о сходных сущностях одной природы, но разного уровня детализации, на-пример, отдел и подотдел, район и микрорайон.
Максимально возможное количество уровней иерархии справочника задается в Конфигураторе. Кроме того, в 1С: Предприятии 8.0 появилась возможность неограниченной вложенности групп и элементов друг в друга. Этот вариант устанавливается по умолчанию, и рекомендуется применять именно его, если не требуется в обязательном порядке ограничить глубину вложенности уровней справочника.
Элементы и группы в иерархическом справочнике можно переносить из одного уровня иерархии в другой. Это можно делать программно или интерактивно. При интерактивном переносе элементов можно воспользоваться специальной кнопкой на панели инструментов справочника. Для программного переноса элемента достаточно сменить у него родителя и записать элемент. Если меняется родитель у группы (или родительского элемента), то группа (элемент) переносится в другую ветвь справочника со всеми своими подчиненными элементами.
Отметим, что для элементов самого верхнего уровня поле Родитель имеет значение пустой ссылки на справочник.
3.2.6. Экранные формы
У справочника может быть несколько экранных форм. Даже если разработчик не создал ни одной экранной формы для справочника, то они будут сгенерированы "на лету" при выполнении программы. Конечно, автоматически созданная экранная форма может быть не самой удобной для пользователя, поэтому, когда это требуется, рекомендуется создавать собственные экранные формы с эргономичным интерфейсом.
Как и в версии 7.7, в 1С:Предприятии 8.0 есть возможность редактировать элемент прямо в списке, в диалоге или обоими способами. У справочника может быть любое количество экранных форм, и некоторые из них назначаются в качестве основных для определенных действий.
Форма списка Отображает список элементов справочника, содержит средства сортировки, поиска и отбора элементов. Из списка элементов можно открыть форму элемента (группы) или редактировать данные прямо в табличном поле. Это регулируется свойством табличного поля СпособРедактирования. Форма элемента Отображает и позволяет редактировать сведения об одном элементе справочника. Если у справочника много реквизитов, то они могут быть распределены по закладкам. Форма группы Отображает и позволяет редактировать сведения о группе справочника. Группы могут иметь другой состав реквизитов по сравнению с элементами. Форма выбора элемента Предназначена для выбора элемента из списка. Такая форма вызывается при выборе значения, например, в поле ввода, связанного с реквизитом документа. Форма выбора группы Предназначена для выбора группы из списка. Выбор группы может понадобиться, например, для отчета по товарам, который позволяет вывести не все товары, а только товары заданной группы. Эта форма также используется при интерактивном переносе элемента в другую группу. Произвольная форма Данная форма не вызывается системой автоматически, как предыдущие типы форм. Назначение произвольной формы и точки ее вызова определяет разработчик. Основное отличие произвольной формы от других состоит в том, что для нее не назначен основной реквизит, следовательно, контекст формы не включает дополнительные свойства и методы, характерные для основного реквизита.
Обратите внимание, что в любой экранной форме можно вывести список элементов справочника, поскольку в новой версии 1С:Предприятия экранные формы отделены от объектов конфигурации. Для этого нужно всего лишь расположить в форме элемент управления ТабличноеПоле и в его свойстве ТипЗначения выбрать тип "СправочникСписок.<ИмяСправочника>".
3.3. Документы и журналы документов
Документы предназначены для хранения информации обо всех событиях, происходящих на предприятии и имеющих смысл с точки зрения экономики. При помощи документов отражаются платежи с расчетного счета и операции по кассе, кадровые перемещения сотрудников и движения товаров, а также другие события. Типичными примерами документов являются платежное поручение, счет, приходная накладная, расходная накладная, приходный кассовый ордер. Каждый документ предназначен для отражения своего типа событий, что определяет его структуру и свойства. Наиболее важными характеристиками документа, отличающими его от других объектов, является наличие у него номера и даты. В 1С: Предприятии 8.0 значения типа "дата" включают в себя также и время. Дата и время - наиболее важные характеристики документов. Все документы вне зависимости от вида образуют единую хронологическую последовательность. Фактически эта последовательность отражает последовательность событий - так, как они происходили реально. Внутри даты последовательность документов определяется их временем, при этом время документа является не столько средством отражения реального (астрономического) времени ввода документа, сколько средством, позволяющим четко упорядочить документы внутри одной даты. Если получится так, что два документа имеют одинаковую дату и время, то они все равно выстраиваются в последовательность. Данные, вводимые в реквизиты документа, обычно содержат информацию о событии, например, в расходной накладной - информацию о том, с какого склада, каких товаров и сколько отгружено; в приказе о приеме на работу - информацию о сотруднике, оклад и другие сведения; в договоре с клиентом - условия договора, график плановых платежей и т.д. Кроме собственно записи, для документа весьма важным аспектом является его проведение. Именно при проведении документ обычно отражает зафиксированное им событие в регистрах 1С: Предприятия 8.0, например, в виде движений по регистру бухгалтерии и/или движений по регистру остатков товаров.
3.3.1. Структура документа
Под структурой документа в первую очередь понимаются реквизиты шапки и табличные части, а также тип и длина номера документа. В Конфигураторе настраивается множество дополнительных параметров документов, например, возможность его проведения и перечень регистров, по которым он может делать движения, экранные формы и макеты (шаблоны печатных форм), последовательности, в которые входит данный документ и т.д В отличие от версии 7 7, в 1С:Предприятии 8.0 у документов может быть несколько табличных частей, различных по структуре. Для некоторых документов эта возможность будет полезной в целях более полного отражения содержания хозяйственной операции. Реквизиты содержат данные, относящиеся ко всему документу в целом, тогда как табличные части содержат некоторую списковую информацию, часто встречающуюся в экономических документах, например, перечень продаваемых товаров и список дополнительных расходов.
3.3.2. Экранные формы документа
Документ может иметь несколько экранных форм, некоторые из которых назначаются в качестве основных Ниже описаны возможные типы экранных форм документа:
Форма документа Основная экранная форма, представляющая документ на экране. Она необязательно должна совпадать по внешнему виду с печатной формой реального документа. Ее первейшая обязанность - обеспечить удобный способ ввода и просмотра данных. Форма списка Данная экранная форма отображает список документов определенного вида и является аналогом журнала, содержащего документы одного вида. Форма выбора Форма выбора обычно вызывается системой, когда пользователь заполняет реквизиты типа ДокументСсылка. Если какая-то из форм не была создана разработчиком, то система сгенерирует нужную форму "на лету", когда в ней возникнет необходимость. Конечно, это может быть недостаточно для удобного ввода и просмотра информации, поэтому рекомендуется, когда это необходимо, создавать собственные формы с эргономичным интерфейсом. Особенно это актуально для ежедневно используемых документов Пользователь работает с этими документами каждый день, и малейшая недоработка будет постоянно мешать, снижая его производительность и повышая утомляемость.
При разработке экранной формы обратите внимание на логичную группировку элементов управления, последовательность ввода данных, поведение формы при изменении размеров, насыщенность формы элементами управления и возможность использования горячих клавиш. Все эти факторы необходимо учитывать при разработке любой экранной формы, а не только форм документов, но с документами пользователь работает чаще всего, поэтому именно здесь требуется высокая скорость и безошибочность работы. 3.3.3. Макеты документа
Макеты документа предназначены для формирования его печатных форм, которые могут быть показаны на экране и напечатаны на принтере. У документа может быть несколько печатных форм, поэтому и макетов может быть несколько. Например, из документа "Поступление основных средств" могут быть напечатаны Реестр принятых основных средств, Акт приема-передачи ОС Счет-фактура ит.д. Первые два макета могут принадлежать этому документу, а макет счета-фактуры может быть общим для всей конфигурации или может принадлежать документу СчетФактура. Этот макет состоит из нескольких областей, например, Заголовок, Шапка, Состав. Область Состав предназначена для многократного вывода, что необходимо для отражения списковой информации из табличной части документа.
3.3.4. Проведение документов
Как правило, при регистрации события изменяется состояние регистров, например, требуется сформировать бухгалтерские проводки, изменить количество товара на складе и т.д. Все эти действия обычно совершаются при проведении документа. Какие именно это будут действия, настраивается в Конфигураторе разработчиком.
С точки зрения программиста при проведении документа вызывается процедура-обработчик события ОбработкаПроведения, в которой определяются все действия данного документа на встроенном языке.
Проведенные документы помечаются в списке специальным значком с галочкой - . Документы, для которых проведение запрещено, в списке отображаются с почти таким же значком - , как и проведенные документы. Считается, что после записи таких документов с точки зрения пользователя их обработка полностью завершена, аналогично проведенным документам. Непроведенные документы, которые могут проводиться, также отмечаются в списке особым значком - .
На закладке "Движения" задаются основные параметры проведения документа. Самый первый параметр разрешает или запрещает проведение документа. В списке регистров нужно выбрать только те регистры, по которым данный документ может делать движения. Не стоит отмечать все регистры подряд, так как это может отрицательно сказаться на производительности. В этом списке должны быть помечены только те регистры, по которым документ действительно может делать движения.
Стоит отметить, что в 1С:Предприятии 8.0 проведение документа и движения по регистрам не связаны жестко. Документ может быть не проведен и иметь движения.
Рассмотрим параметр "Оперативное проведение". При таком проведении можно контролировать текущие остатки регистров, например, при проведении расходной накладной нужно проверить, достаточно ли товара на складе.
Однако иногда бывает так, что документы проводятся не текущей датой, а "задним числом". Обычно такое случается, когда в документе была обнаружена ошибка или какой-то документ раньше не был введен в базу данных. В таких случаях применяется Неоперативное проведение, при котором в конфигурации не должно быть обращений к текущим итогам регистров.
Таким образом, документ проводится оперативно в момент совершения самой операции в жизни предприятия, и такое проведение должно помочь выполнить эту операцию непротиворечиво. А неоперативное проведение отражает уже свершившийся факт, при этом не следует использовать реальные итоги регистров. Например, в модуле документа расходной накладной в процедуре ОбработкаПроведения могут быть следующие строки:
Процедура ОбработкаПроведения(Отказ, Режим) /проверка остатка производится /только при оперативном проведении Если Режим = РежимПроведенияДокумента.Оперативный Тогда Если ОстатокНаСкладе < СтрокаСостава.Количество Тогда Сообщить("Товара "+СокрЛП(СтрокаСостава.Номенклатура)+"имеется только"+Остаток); Отказ = Истина; Возврат; КонецЕсли;
КонецЕсли; КонецПроцедуры
При удалении документа или при отмене его проведения движения документа обычно удаляются автоматически, но это можно регулировать установкой параметра "Удаление движений". Для некоторых видов документов разработчик может отменить данную возможность и управлять удалением движений самостоятельно через свойство Движения, предоставляющее доступ к коллекции движений документа.
Оперативная отметка времени При оперативном проведении дата документа, как правило, изменяется на текущий момент, что является обычным поведением системы. Но разработчик может взять этот процесс под свой контроль. Он сам может получать очередную оперативную отметку времени и присваивать ее документу при проведении или при записи. Для этого предназначен метод глобального контекста ПолучитьОперативнуюОтметкуВремени. Его возвращаемое значение соответствует текущей дате (с учетом времени), но будет не меньше, чем последняя оперативная отметка времени, полученная каким-либо пользователем в этом сеансе работы с информационной базой. Таким образом, 1С:Предприятие 8.0 предоставляет механизм для получения неповторяющихся отметок времени. Например: Процедура ПередЗаписью (Отказ, РежимЗаписи, РежимПроведения)
Дата = ПолучитьОперативнуюОтметкуВремени(); .... КонецПроцедуры
3.3.5. Модуль документа
Следует отличать модуль документа и модули его форм (как и в версии 7.7). В модуле документа располагаются процедуры и функции, связанные с документом как объектом конфигурации, независимо от его экранных форм. Например, там и только там располагаются обработчики следующих событий:
ОбработкаПроведения Событие возникает в момент проведения документа. Обычно в нем содержится алгоритм формирования движений документа по регистрам. Событие имеет два параметра: Отказ и Режим. Если в обработчике события первому параметру присвоить значение Истина, тогда документ не будет проведен. Второй параметр позволяет узнать режим проведения документа: оперативный или неоперативный. Перед началом выполнения данной процедуры, если документ раньше сформировал движения, то они обычно очищаются системой автоматически. ОбработкаУдаленияПроведения Событие возникает в момент отмены проведения документа. При этом движения документа, как правило, очищаются автоматически. ОбработкаЗаполнения Это событие возникает при вводе документа на основании другого документа (или, например, элемента справочника), который передается в параметр Основание. В данной процедуре программист должен предусмотреть заполнение реквизитов документа. ПередЗаписью Это событие возникает перед выполнением записи объекта после начала транзакции, но до начала записи документа в базу данных. ПередУдалением Событие возникает перед удалением документа из базы, независимо от того, программно или интерактивно он удаляется. ПриУстановкеНовогоНомера Данное событие возникает в момент, когда выполняется установка нового номера документа. ПриКопировании Это событие возникает при создании документа копированием. В процедуре обработчике можно произвести дополнительные действия, например, присвоить новую дату и новый номер, заполнить реквизит Автор и т.д. Кроме вышеперечисленных процедур, в модуле документа могут располагаться процедуры и функции, созданные разработчиком. Если их объявить с ключевым словом Экспорт, то они станут доступными вне документа, как обычные методы.
Часто, таким образом, производится печать документов, например, ниже приведена процедура печати расходной накладной:
Процедура Печать(ТабДок) Экспорт /получение макета Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");
/вывод шапки Область = Макет.ПолучитьОбласть("Шапка"); Область.Параметры.НомерДокумента = Номер; Область.Параметры.От = Дата; ТабДок.Вывести(Область); /вывод табличной части Состав Для Каждого СтрокаСостава Из Состав Цикл Область = Макет.ПолучитьОбласть("Строка"); Область.Параметры.Заполнить(СтрокаСостава); ТабДок.Вывести(Область); КонецЦикла; /вывод подвала Область = Макет.ПолучитьОбласть("Подвал"); Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");
Область.Параметры.ИтогоСумма = Состав.Итог("Сумма"); ТабДок.Вывести(Область); КонецПроцедуры Теперь в любом программном модуле можно вызвать эту процедуру и передать ей в качестве параметра табличный документ,который затем можно показать на экране или отправить сразу на принтер. Например, в форме документа по кнопке "Печать" вызывается следующая процедура: Процедура ПечатьСПросмотром(Кнопка) ТабДок = Новый ТабличныйДокумент; Печать(ТабДок); /вызывается приведенная выше процедура ТабДок.Показать(); КонецПроцедуры Аналогично, можно организовать печать текущей расходной накладной из журнала документов, и снова будет вызвана наша процедура Печать из модуля документа, например:
Процедура ПечатьТекущегоДокумента() Список = ЭлементыФормы.Список; Если Список.ТекущаяСтрока = Неопределено Тогда Возврат; КонецЕсли; ТекДокумент = Список.ТекущаяСтрока.ПолучитьОбъект(); ТабДок = Новый ТабличныйДокумент; ТекДокумент.Печать(ТабДок); ТабДок.Показать(); КонецПроцедуры
3.3.6. Нумерация документов
Важной характеристикой документа является его номер. Система 1С: Предприятие 8.0 имеет широкие возможности по настройке правил нумерации документов. Разработчик может доверить системе присвоение номеров, включив автоматическую нумерацию документа. В Конфигураторе настраивается тип и длина номера, периодичность, включается или о тключается контроль уникальности номеров в пределах периода. Внимание! Поле, содержащее номер документа, теперь называется Номер, а не НомерДок, как было в версии 7.7. Аналогично, поле, содержащее дату документа, называется Дата, а не ДатаДок. При редактировании правил нумерации документа доступны для установки следующие параметры:
Автонумерация Этот параметр заставляет систему автоматически присваивать номера для новых документов. Периодичность Здесь указываются две важные характеристики нумератора: пределы контроля уникальности номеров документов и период повторяемости номеров. Если включен признак контроля уникальности номеров (см. ниже), то периодичность нумератора показывает, в каких пределах осуществлять этот контроль. Например, если установлено "В пределах дня", то уникальность номеров документов будет контролироваться в пределах суток. При включенной автоматической нумерации система будет присваивать очередной порядковый номер каждому новому документу. После завершения очередного периода нумерация документов начнется с 1. Длина Устанавливает максимальную длину номера документа. Самая большая длина номера, которую можно установить, - 50 символов. Тип Здесь выбирается тип значения для номера документа - числовой или строковый. Выбор строкового типа номера бывает необходим, когда используется сложная система нумерации документов. При этом номер документа может включать, помимо цифр, также буквы и символы-разделители, например "К10-56". Контроль уникальности Если эта опция включена, то при записи документа в базу данных его номер проверяется на уникальность в пределах, установленных в реквизите Периодичность.
3.3.7. Журналы документов
В системе 1С:Предприятие 8.0 журналы документов являются объектами конфигурации, предназначенными для смысловой группировки документов. Для отображения журнала используется элемент управления ТабличноеПоле. Работая со списком документов, пользователь может создать новый документ, открыть или удалить его, найти нужный документ по номеру. Кроме того, есть возможность установить нужный интервал, тем самым ограничив выборку документов.
Стоит отметить, что у самого документа может быть форма списка, которая является аналогом журнала для документов одного вида. Если она не создана, то генерируется системой автоматически, когда в ней возникает потребность, но, если требуется, можно создать ее в Конфигураторе и настроить удобный внешний вид формы.
Документ при записи может регистрироваться в нескольких журналах, что настраивается в Конфигураторе. Не рекомендуется указывать много журналов, в которых должен регистрироваться документ, поскольку это может отрицательно сказаться на производительности системы при интенсивном вводе документов.
В журнале обычно отображаются документы разного вида. Графы журнала
В журнале документов могут быть созданы графы журнала, которые отображают информацию из документов.
Например, в журнале операций созданы графы Контрагент, Организация и др.:
При настройке графы журнала указывается список реквизитов документов, из которых она будет отображать информацию. Из каждого документа можно взять только один реквизит Не рекомендуется смешивать в одной графе разнородную информацию, например, контрагента и сумму документа.
3.3.8. Последовательности
Последовательности документов - это специальный механизм 1C:Предприятия 8.0, который позволяет поддерживать правильность движений документов. В версии 8.0 возможности последовательностей получили дальнейшее развитие.
Если документ при проведении использует текущие итоги регистра (например, расходная накладная списывает товары по методу FIFO или LIFO), то в случае изменения движений "задним числом" движения всех последующих документов становятся некорректными, и эти документы необходимо перепровести.
При настройке последовательности в Конфигураторе описывается, какие изменения регистров будут влиять на последовательность и какие документы входят в эту последовательность (это могут быть документы разного вида).
Обратите внимание, что документ ПриходнаяНакладная не входит в последовательность УчетНоменклатуры, потому что при своем проведении он не использует текущие итоги регистров. Однако при проведении приходной накладной "задним числом" сформируются новые движения по регистру накопления СтоимостнойУчетНоменклатуры, что нарушит последовательность. Чтобы ее восстановить, нужно будет перепровести все расходные накладные, начиная от границы последовательности.
Граница последовательности - это позиция последнего проведенного документа с "правильными" движениями. Если какие-то движения изменяются задним числом, граница последовательности отодвигается назад на последний документ, при проведении которого использовались последние "правильные" итоги, а все документы, проведенные на основе изменившихся итогов, окажутся после границы последовательности.
Восстановление последовательности производится перепроведением всех документов, входящих в последовательность, начиная от границы последовательности и заканчивая последним документом или, например, рабочей датой. Для восстановления последовательности в режиме "Предприятие" необходимо воспользоваться пунктом "Проведение документов" из меню "Операции".
В 1С:Предприятии 8.0 появилась новая возможность указать измерения для последовательности документов. В этом случае перепроводиться будут только те документы, которые изменили состояние регистра по данному значению измерения, например, только по конкретному товару. Это значительно ускоряет перепроведение документов, когда их очень много.
3.4. Перечисления
Перечисления используются в системе 1C:Предприятие 8.0 для описания постоянных наборов значений, не изменяемых в процессе работы конфигурации. В отличие от элементов справочников, значения перечислений вводятся на этапе разработки прикладного решения и не могут быть изменены в процессе работы с программой. Пользователь обычно выбирает одно из значений перечисления. Типичными примерами перечислений являются:
· ТипКлиента (значения: Обычный, Важный), · Пол (значения: Мужской, Женский),
· ВидКонтрагента (значения: ЧастноеЛицо, Организация). Список значений перечисления нельзя редактировать, так как алгоритм конфигурации ориентирован на наличие определенных значений. Например, в процедуре расчета скидки может быть следующий фрагмент: Если ТипКлиента = Перечисления.ТипКлиента.Обычный Тогда /расчет скидки для обычных клиентов ... ИначеЕсли ТипКлиента = Перечисления.ТипКлиента.Важный Тогда /расчет скидки для важных клиентов ... Иначе Сообщить("Не указан тип клиента!"); КонецЕсли; Отсюда видно, что при изменении значений перечисления возможно потребуется изменение программных модулей, иначе программа перестанет правильно работать. 3.5. Отчеты и обработки
Отчеты и обработки - это не сохраняемые в базе данных объекты, предназначенные для формирования печатных форм или обработки данных в базе данных.
Отчеты и обработки совершенно идентичны по структуре, у них просто разное назначение:
· Отчеты предназначены для вывода информации, формирования различных печатных форм с детальными и сводными данными, например, отчеты АнализПродаж, ПрайсЛист, РеестрДокументов.
· Обработки предназначены для изменения данных в базе данных и выполнения других действий, например, ПерерасчетЗарплаты, ЗакрытиеПериода, КлиентБанк.
Структура отчета и обработки одинакова:
Реквизиты Реквизиты отчета (обработки) содержат параметры формирования отчета (выполнения обработки). Эти реквизиты отличаются от реквизитов справочников тем, что они не сохраняются в базе данных. Например, реквизиты НачДата и КонДата у отчета АнализПродаж.
Табличные части
Табличные части содержат списки параметров для отчета или обработки, обычно состоящие из нескольких колонок.
Например, табличная часть условияПоСубконто у отчета "ОСВ по счету".
Экранные формы предназначены для отображения отчета/обработки на экране. Это могут быть и различные дополнительные формы, предназначенные для ввода параметров или отображения результатов. В качестве примера можно назвать формы ВыборПериода и ФормаВложеннойТаблицы обработки КонсольЗапросов.
Макеты
Макеты являются шаблонами печатных форм, на основе которых формируются выходные формы. Макеты могут быть как у отчетов, так и обработок. Например, макеты РеестрДокументов, ОсновнойМакет.
Правилом хорошего тона при разработке в системе 1С:Предприятие 8.0 является реализация основного алгоритма формирования отчета (выполнения обработки) в модуле объекта. Экранная форма и ее модуль предназначены лишь для взаимодействия с пользователем, задания параметров отчета (обработки) и отображения результатов, а основная обработка данных должна производиться в модуле объекта.
Например, в модуле отчета объявляется процедура Печать с ключевым словом Экспорт, которая в качестве параметра принимает табличный документ:
/ Процедура осуществляет печать справочника. Можно направить печать на / экран или принтер, а также распечатать необходимое количество копий.
/
/ Название макета печати передается в качестве параметра,
/ по переданному названию находим имя макета в соответствии.
/ Параметры:
/ НазваниеМакета - строка, название макета.
/ Возвращаемое значение:
/ Нет.
/
Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь, ФормаЭлемента = Неопределено) Экспорт
Если ФормаЭлемента = Неопределено Тогда
ДатаСведений = РабочаяДата;
ВыборкаЗаписей = РегистрыСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.ПолучитьПоследнее(ДатаСведений,Новый Структура("ОсновноеСредство",Ссылка));
Организация = ?(ВыборкаЗаписей.Количество() > 0,ВыборкаЗаписей.Организация,Справочники.Организации.ПустаяСсылка());
Иначе
ДатаСведений = ФормаЭлемента.ДатаСведений;
Организация = ФормаЭлемента.Организация;
КонецЕсли;
/ Получить экземпляр документа на печать
Если ИмяМакета = "ОС6_2003" тогда
ТабДокумент = ПечатьОС6_2003(ДатаСведений,Организация);
/ИначеЕсли ТипЗнч(ИмяМакета) = Тип("СправочникСсылка.ДополнительныеПечатныеФормы") Тогда
/ ИмяФайла = КаталогВременныхФайлов()+"PrnForm.tmp";
/ ОбъектВнешнейФормы = ИмяМакета.ПолучитьОбъект();
/ Если ОбъектВнешнейФормы = Неопределено Тогда
/ Сообщить("Ошибка получения дополнительной печатной формы объекта. Возможно форма была удалена", СтатусСообщения.Важное);
/ Возврат;
/ КонецЕсли;
/ ДвоичныеДанные = ОбъектВнешнейФормы.ХранилищеВнешнейОбработки.Получить();
/ ДвоичныеДанные.Записать(ИмяФайла);
/ Обработка = ВнешниеОбработки.Создать(ИмяФайла);
/ Обработка.СсылкаНаОбъект = Ссылка;
/ ТабДокумент = Обработка.Печать();
Иначе
Сообщить("Ошибка получения дополнительной печатной формы объекта. Возможно форма была удалена", СтатусСообщения.Важное);
КонецЕсли;
НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, "Инвентарная карточка ОС (Форма ОС-6)", НепосредственнаяПечать);
КонецПроцедуры / Печать()
В модуле формы в обработчике события Нажатие кнопки "ОК" вызывается процедура Печать и ей передается элемент формы типа ПолеТабличногоДокумента. Процедура Печать выбирает информацию из базы данных и заполняет табличный документ.
Такая техника реализации отчетов (обработок) позволяет сформировать отчет (выполнить обработку) из любого места программы. Предварительно программа должна передать в реквизиты и табличные части параметры, тогда отчет (обработка) будет полностью отделен от экранной формы.
Чтобы научиться формировать печатные формы, необходимо прочитать главу "Отчеты". Отчеты часто извлекают информацию из базы данных с помощью запросов. Механизм запросов является очень гибким и описан в отдельной главе "Запросы". Во многих случаях отчеты и обработки обращаются к регистрам, работа с которыми описана в главах "Регистры сведений", "Регистры накопления" и др.
3.6. Внешние обработки
Так же, как и в версии 7.7, в версии 8.0 любой отчет или обработка может быть сохранен во внешний файл, т.е. он будет храниться вне информационной базы. В версии 8.0 изменился формат у внешних обработок, теперь они хранятся в файлах с расширением "EPF".
Для запуска внешней обработки можно использовать команду меню "Файл -> Открыть". Если же это требуется сделать программным образом, то необходимо воспользоваться менеджером внешних обработок, для чего предназначено свойство ВнешниеОбработки глобального контекста. Обратите внимание, что теперь нет команды ОткрытьФорму, которая была в версии 7.7.
Следующий пример обращается к внешней обработке "АнализПродаж.ерf", задает ей параметр Контрагент и вызывает процедуру Печать, а результат помещается в поле табличного документа:
Обработка = ВнешниеОбработки.Создать("с:\АнализПродаж.epf");
Обработка.Контрагент = ВыбКонтрагент;
Обработка.Печать(ЭлементыФормы.ПолеТабДок);
Заметьте, что форма внешней обработки даже не показывается на экране. Из нее используется только процедура Печать для формирования печатной формы.
Тема 4. Интерфейс пользователя
4.1. Интерфейсы
В данном разделе под термином "интерфейс" понимается объект конфигурации, который находится в ветви "Общие" дерева конфигурации. Этот объект предназначен для реализации командного интерфейса конфигурации (главное меню и панели инструментов).
В простой конфигурации можно создать один интерфейс, но чаще создается несколько интерфейсов для каждого типа пользователей. Рекомендуется один из интерфейсов назначить основным, а также разработать специальный интерфейс для администратора системы, в котором будут присутствовать все основные объекты конфигурации. Имена интерфейсам лучше присваивать исходя из названия должности пользователей или по названиям подсистем.
Интерфейс как объект конфигурации состоит из панелей интерфейса. Причем главное меню также является одной из таких панелей
Логически связанные пункты рекомендуется объединять в подменю и группировать с помощью линий-разделителей.
Для задания действия и определения внешнего вида элемента панели (пункта меню или кнопки панели инструментов) воспользуйтесь палитрой свойств. Обязательно укажите подсказку и пояснение, а для ключевых пунктов меню можно указать еще и картинку, поясняющую смысл действия.
Чтобы ускорить доступ к часто выполняемым командам, предусмотрите кнопку на панели инструментов конфигурации или даже сочетание клавиш (акселератор, горячая клавиша).
Средства встроенного языка допускают программное манипулирование интерфейсами. В частности, можно включить и выключить определенный интерфейс или сразу несколько интерфейсов.
В 1С:Предприятии 8.0 можно переключать интерфейс "на лету" без перезапуска программы.
4.2. Экранные формы
Чаще всего пользователь оценивает интерфейс конфигурации по экранным формам, с которыми он встречается в повседневной работе, например, формами списков справочников, документов, диалогами отчетов и обработок.
Многие объекты в 1C:Предприятии 8.0 могут иметь одну или несколько форм. Кроме того, в конфигурации могут быть так называемые общие формы, которые не принадлежат конкретному объекту, а относятся к конфигурации в целом. Обычно одна из общих форм служит в качестве формы констант, обеспечивая удобный доступ к ним · В верхней части формы располагается вспомогательная командная панель. · Чуть ниже идут идентификационные реквизиты номер, дата и время документа, там же можно поместить название документа жирным шрифтом. · Затем идут реквизиты шапки документа в одну или две колонки, · Далее табличная часть, еще ниже итоговая информационная строка · И, наконец, в самом низу - кнопки управления формой. Такой стандарт представления экранных форм традиционно применяется для экономических документов, и рекомендуется его придерживаться.
4.3. Редактор форм
Для разработки форм в 1C:Предприятии 8.0 существует мощный редактор форм, имеющий богатый набор элементов управления и сервисных функций, включая выравнивание, задание привязок границ и др.
Отметим следующие моменты:
· в форме расположены различные элементы управления надписи, поля ввода, табличное поле, командные панели, · при размещении элементов управления в форме их можно выравнивать по сетке, которую можно включить и выключить, а также задать ее шаг, · у экранных форм, помимо диалога, имеется модуль формы и реквизиты формы, которые не следует путать с модулем и реквизитами объекта. Существуют следующие панели в 1С:Предприятии:
· Выравнивание
· Главное меню
· Конфигурация
· Редактор форм
· Стандартная
· Форматирование
· Хранилище конфигурации
· Элементы управления
· Панель состояния
· Панель окон
Редактор форм позволяет изменять внешний вид экранной формы с помощью следующих инструментов:
· Панель "Элементы управления" позволяет разместить в форме различные элементы управления, к которым относятся: кнопка, надпись, поле ввода, табличное поле, флажок, переключатели и т.д. Панель "Элементы управления" выглядит следующим образом: · Палитра свойств дает возможность редактировать внешний вид и поведение выделенных элементов управления. Кроме того, у формы в целом также существуют собственные свойства. Обратите внимание, что свой набор свойств может быть даже у частей элемента управления. Например, табличное поле, колонка табличного поля и ячейка - все имеют различный набор свойств.
· Панель "Форматирование" позволяет редактировать внешний вид элементов управления. Это значительный прогресс по сравнению с версией 7.7, где все свойства настраивались в специальном окне с несколькими закладками. Те же самые свойства можно редактировать напрямую через палитру свойств. Панель "Форматирование" выглядит следующим образом:
· Панель "Редактор форм" позволяет установить порядок обхода элементов управления (по клавише TAB), запустить форму для проверки (Ctrl-R), вызвать конструктор для вставки элемента управления или разместить в форме элементы управления, связанные с реквизитами объекта конфигурации. Ручная настройка порядка обхода доступна, если отключен автоматический порядок обхода. Рекомендуется задавать естественный порядок обхода элементов управления: слева направо сверху вниз. Кнопки панели редактора форм показаны ниже: · Панель "Выравнивание" становится доступна, когда в форме выделено несколько элементов управления. С помощью данных кнопок можно оперировать группой элементов, выравнивать их по краю или по центру, задавать одну ширину или высоту и даже выравнивать автоматически. Команды панели выравнивания приведены на следующем рисунке: Режим редактирования привязок границ элементов управления позволяет настроить поведение формы при изменении размеров для максимального использования пространства формы. Прямо в форме стрелками обозначаются текущие привязки, а в специальном окне можно настроить привязки вручную.
Контекстное меню в редакторе форм позволяет выполнить некоторые действия над текущим элементом управления, например, добавить страницу на панель.
Наконец, с помощью мыши можно размещать элементы управления в форме, передвигать их и изменять их размер.
4.4. Элементы управления
Элементы управления являются основными строительными блоками, из которых складывается интерфейс пользователя. Все элементы управления имеют некоторые сходные свойства. К таким свойствам относятся имя, заголовок, положение в форме и размеры, привязка границ, порядок обхода, видимость, доступность и др.
4.4.1. Поле ввода
Поле ввода применяется для ввода значений различных типов, например, чисел, строк, дат. Оно также применяется для выбора элементов справочников, документов, значений перечислений и др. Поле ввода может содержать дополнительные кнопки для выбора значения, очистки поля, просмотра значения, выбора из списка и кнопки регулирования. Наличие этих кнопок определяется в свойствах поля ввода установкой соответствующих флажков.
В 1С:Предприятии 8.0 есть возможность сигнализировать пользователю красной пунктирной линией о том, что поле не заполнено.
Чтобы использовать эту возможность, достаточно в свойствах поля установить флажок "Автоотметка незаполненного". Для всех обязательных реквизитов рекомендуется установить данное свойство, что значительно облегчит работу пользователя и ускорит освоение системы.
В свойствах поля ввода можно также настроить его внешний вид: цвет фона, стиль и цвет рамки, картинку. Не рекомендуется кардинально изменять внешний вид элементов управления. Только минимальная и правильная настройка облагородит конфигурацию, придаст ей стильный и профессиональный вид.
Рекомендуется соблюдать единый стиль оформления для всей конфигурации, а в пределах одной формы это является обязательным. Значительное изменение интерфейса ведет к тому, что пользователь должен приложить дополнительные усилия для изучения данной конфигурации.
Чтобы ускорить освоение конфигурации начинающими пользователями, для всех полей ввода указывайте свойство Подсказка.
Это также относится и к другим элементам управления. В 1C:Предприятии 8.0 можно даже создать раздел справочной системы по данной форме, куда следует включить подробное описание всех элементов управления для ввода данных и кнопок.
У поля ввода для чисел, дат и логических выражений может быть назначен формат, который позволяет настроить внешний вид вводимых данных.
С помощью специального редактора можно сформировать форматную строку, в которой будет указана длина и точность для чисел, разделитель дробной части и другие параметры:
Чтобы уменьшить количество ошибок из-за неправильно введенных пользователем данных, используйте свойства "Мин.значение" и "Макс. значение", а там где это необходимо, ставьте флажок "Неотрицательный". Обратите внимание, что если поле ввода связано с реквизитом объекта типа "число", то флажок "Неотрицательный" устанавливается в свойствах реквизита объекта, а не в свойствах поля ввода. Если отрицательные числа всетаки допускаются, то их лучше все равно автоматически выделять с помощью стиля "Отрицательное число" (обычно красным цветом). Для этого достаточно в свойствах поля ввода установить флажок "Выделять отрицательные".
Необходимо понимать разницу между полем ввода и реквизитом объекта. Поле ввода является элементом управления, видимым пользователю и предназначенным для редактирования реквизита объекта. Чтобы реквизит объекта был доступен пользователю для просмотра и редактирования, между элементом управления (например, полем ввода или колонкой табличного поля) и реквизитом объекта устанавливается связь. Это делается путем указания свойства Данные для элемента управления.
Заметьте, что имя поле ввода может не совпадать с именем реквизита документа. Например, поле ввода с именем ПолеОклад может быть связано с реквизитом Оклад.
Имя элемента управления используется при обращении к нему для установки свойств, определяющих его внешний вид и поведение. В этом случае обращение производится через коллекцию ЭлементыФормы, например:
ПолеОклад = ЭлементыФормы.ПолеОклад;
ПолеОклад.Видимость = Истина;
ПолеОклад.МаксимальноеЗначение = 10000;
ПолеОклад.МинимальноеЗначение = 500;
ПолеОклад.ОтметкаНезаполненного = Истина;
ПолеОклад.КнопкаОчистки = Истина;
У поля ввода существует несколько событий, которые разработчик может перехватывать для выполнения каких-либо действий.
Некоторые из этих событий приведены ниже:
ПриИзменении
Событие возникает при интерактивном изменении данных пользователем, например, после выбора элемента из справочника или после ввода числа и при переходе к другому элементу управления.
НачалоВыбора
Событие возникает при нажатии на кнопку выбора у поля ввода или нажатии клавиши F4.
НачалоВыбораИзСписка
Событие возникает при нажатии на кнопку выбора из списка.
Очистка
Это событие возникает при нажатии кнопки очистки или по комбинации клавиш Shift+F4
Регулирование
Данное событие возникает при нажатии на одну из кнопок регулирования (увеличения или уменьшения значения).
Открытие
Событие возникает при нажатии на кнопку открытия объекта или комбинации клавиш Ctrl-Shift-F4.
ОбработкаВыбора
Это событие возникает после осуществления выбора, но до помещения выбранного значения в элемент управления.
ОкончаниеВводаТекста
Событие возникает после окончания ввода текста при переходе к другому элементу управления. Например, в расходной накладной при изменении контрагента нужно пересчитать цены в соответствии с типом цен для текущего контрагента:
Процедура КонтрагентПриИзменении(Элемент)
Если Не Контрагент.Пустая() Тогда
Если ТипЦен о Контрагент.ТипЦен Тогда
ТипЦен = Контрагент.ТипЦен;
ПересчетЦен();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
4.4.2. Надпись
Надпись обычно содержит поясняющий текст к полям ввода и другим элементам управления для ввода данных. Рекомендуется располагать надписи слева или сверху от элементов управления, которые они поясняют. Надписи можно выравнивать по краям или по центру, задавать им различное начертание, размер и цвет текста, цвет фона, стиль и цвет рамки. Надпись также может иметь картинку.
Разработчик имеет возможность программно управлять свойствами надписи, например:
ЭлементыФормы. НадписьТипЦен. Заголовок = "Тип розничной цены";
ЭлементыФормы.НадписьТипЦен.ЦветТекста = Новый Цвет(200,0,0);
ЭлементыФормы.НадписьТипЦен.ПрозрачныйФон = Истина;
ЭлементыФормы.НадписьТипЦен.Видимость = Истина;
В 1С:Предприятии 8.0 существует еще одно интересное нововведение: текст надписи может выводиться в виде бегущей строки, скорость которой настраивается в свойствах. Это позволяет выводить длинную строку в достаточно короткую надпись. Но не стоит злоупотреблять этой возможностью, так как это сильно отвлекает внимание. Пользователь должен иметь возможность отключить бегущую строку и просмотреть данную информацию целиком другим способом, например, в виде текстового документа в отдельном окне.
Последнее, что стоит здесь отметить, - элемент управления Надпись имеет событие Нажатие. Если же в свойствах установить один флажок, то надпись также может служить гиперссылкой.
4.4.3. Кнопка
Кнопка позволяет выполнить какое-либо стандартное действие или вызвать процедуру (обработчик события Нажатие).
Разработчик указывает заголовок кнопки, настраивает ее внешний вид, включая начертание и размер шрифта, цвет фона и текста, размер и положение картинки.
Кнопка может содержать подменю, тогда у нее появляется маленький треугольник. Подменю кнопки может быть создано прямо в Конфигураторе или заполнено программным способом:
Для каждого пункта подменю можно указать одно из стандартных действий или назначить процедуру модуля. Например, пункт "Печать" вызывает процедуру ПечатьСПросмотром:
Процедура ПечатьСПросмотром(Кнопка)
ТабДок = Новый ТабличныйДокумент;
ДокументОбъект.Печать(ТабДок);
ТабДок.Показать() ;
КонецПроцедуры
4.4.4. Командная панель
Командная панель представляет собой набор кнопок, обычно с пиктограммами, для выполнения действий в текущей форме или с некоторым элементом управления, например, табличным полем.
Внимание! Следует различать "командную панель" и "панель интерфейса". Командная панель располагается в форме и содержит кнопки и подменю. Панель интерфейса представляет собой главное меню или панель инструментов конфигурации.
Командная панель может формироваться автоматически или настраивается разработчиком. Если в свойствах командной панели установлен флажок Автозаполнение, то затем обычно указывается свойство ИсточникДействий. При этом командная панель автоматически будет заполнена командами, характерными для данного источника. Например, если источником действий является табличное поле, то на командной панели появятся кнопки Добавить, Изменить, Удалить и т.д.
В командной панели, могут присутствовать кнопки с картинкой, с надписью и картинкой, или только с надписью.
Для каждой кнопки командной панели, как и для обычной кнопки, есть свойство Действие, которое задает одно из стандартных действий или вызывает процедуру модуля.
Кнопки могут являться подменю, например, как кнопка "Действия" в стандартных командных панелях.
Если у командной панели установлено свойство "Вспомогательная", то это говорит о гом, что командная панель не участвует в обходе элементов формы (клавиши TAB и Shift-TAB).
Программно можно изменять свойства командной панели, добавлять и удалять кнопки, менять их порядок и т.д. Ниже демонстрируются некоторые возможности 1С:Предприятия 8.0 по работе с командными панелями средствами встроенного языка:
/обращение к командной панели в форме
КомПанель = ЭлементыФормы.КоманднаяПанельТаблицы;
/ добавим кнопку Открыть, вызывающую процедуру ОткрытьЭлемент
КомПанель.Кнопки.Добавить("кнОткрыть",
ТипКнопкиКоманднойПанели.Действие,
"Открыть",
Новый Действие("ОткрытьЭлемент"));
/сделаем командную панель доступной
КомПанель,Доступность = Истина;
Командная панель может быть также использована в качестве контекстного меню для некоторых элементов управления, если установить им свойство КонтекстноеМеню.
Контекстное меню вызывается по нажатию правой кнопки мыши, Shift-FlO или специальной кнопки на Windows-клавиатуре. При открытии оно подстраивается под текущее положение курсора:
Разработчик может доверить формирование контекстного меню системе (свойство АвтоКонтекстноеМеню) или использовать в качестве контекстного меню командную панель или ее кнопку - подменю.
4.4.5. Флажок
Флажок применяется для тех данных, которые характеризуются состояниями "включено" и "выключено". Флажок обычно имеет два состояния, хотя в 1С:Предприятии 8.0 можно создавать флажки и с тремя состояниями: "включено", "выключено" и "не определено" (затемненная галочка). Такие флажки должны иметь тип данных не "булево", как обычно, а "число".
При размещении в форме флажка автоматически создается реквизит типа "булево" или "число", через который можно программно считывать и устанавливать текущее значение флажка. Через коллекцию ЭлементыФормы можно управлять свойствами флажка, например:
Сообщить(флУправленческийУчет);
флБухгалтерскийУчет = Ложь;
ЭлементыФормы.флУверенность.ТриСостояния = Истина;
флУверенность = 2; /будет означать третье состояние "Не знаю"
В свойствах флажка можно настроить его внешний вид, включая положение текста (слева или справа), цвет фона, шрифт и цвет текста, стиль и цвет рамки.
У флажка есть событие ПриИзменении, которое вызывается всякий раз, когда пользователь устанавливает или снимает флажок.
Разработчик может написать собственную процедуру, которая выполняет какие-либо действия при изменении состояния флажка.
4.4.6. Переключатели
Переключатели позволяют выбрать один вариант из нескольких, поэтому их всегда два или больше. Рекомендуется визуально объединять переключатели в группу с помощью рамки.
Внимание! Первый переключатель в группе должен иметь установленное свойство "Первый в группе". Все переключатели данной группы должны иметь последовательный порядок обхода.
Если эти условия не выполняются, то переключатели будут работать неправильно.
Чтобы установить последовательный порядок обхода, нужно сначала в свойствах формы отключить флажок "Автопорядок обхода", затем нажать соответствующую кнопку на панели инструментов или выбрать пункт меню "Форма -> Порядок обхода", тогда у элементов формы отобразится их порядковые номера Затем, последовательно щелкая мышкой на каждом элементе управления, укажите правильный порядок обхода. Порядок обхода можно также задать в свойствах переключателя с помощью свойства "Порядковый номер", напрямую установив нужное число.
Свойство Данные первого переключателя в группе ссылается на реквизит формы или реквизит объекта, через который можно программно прочитать или установить состояние переключателя.
Внимание! Свойство "Выбираемое значение" необходимо задать для каждого переключателя. Оно говорит о том, какое именно значение будет записано в реквизит формы или реквизит объекта при установке данного переключателя. Тип значения группы переключателей может быть не только числовым, но и строковым, датой и т.д.
Следующий фрагмент демонстрирует установку и считывание состояния переключателей:
/прочитать текущий выбор пользователя
Сообщить(ПереключательНаправлениеПечати);
/установить первый переключатель ПереключательНаправлениеПечати = "Файл";
/установить второй переключатель ПереключательНаправлениеПечати = "Принтер;
4.4.7. Табличное поле
Табличное поле позволяет вывести данные в виде таблицы или дерева. Это может быть список элементов справочника, список документов, табличная часть справочника или документа, таблица значений и т.д.
Есть возможность выводить в табличное поле иерархические данные в виде вложенных папок или в виде дерева.
В Конфигураторе разработчик задает перечень колонок табличного поля, но пользователь при работе может самостоятельно настроить порядок и расположение колонок для себя.
Обратите внимание на режим изменения ширины колонок. Если вы просто меняете мышкой ширину колонки, то суммарная ширина всех колонок остается прежней, а если при этом удерживать клавишу Ctrl, то меняется.
Пользователь может отсортировать динамический список по реквизиту, установить произвольный отбор. Для этого применяется следующее окно, вызываемое из контекстного меню табличного поля:
Система 1C:Предприятие 8.0 имеет широкие возможности по оформлению табличного поля. Можно указывать цвет фона и текста шапки, колонок, ячеек и подвала, выводить картинки в ячейки, задавать чередование фона для строк, изменять стиль и цвет рамки Будьте внимательны, когда устанавливаете свойства колонки и ячейки, поскольку у табличного поля в целом, у колонки и каждой ячейки - у всех свой набор свойств.
Некоторые свойства табличного поля можно устанавливать программно, например, следующий фрагмент для табличного поля тпНоменклатура включает режим показа с чередованием фона строк:
Поле = ЭлементыФормы.тпНоменклатура;
Поле.ЧередованиеЦветовСтрок = Истина;
У табличного поля есть несколько событий, которые можно использовать для вызова собственных процедур-обработчиков.
Ниже приведены наиболее часто используемые события табличного поля:
Выбор
Возникает при двойном щелчке мыши или нажатии клавиши Enter на ячейке табличного поля.
ВыборЗначения
Вызывается при выборе значения из списка в режиме выбора. Выбор значения также может быть инициирован кнопкой на панели инструментов или через контекстное меню.
ПриАктивизацииСтроки
Возникает при смене текущей строки табличного поля, т.е. при установке на нее курсора, если раньше текущей была другая строка.
ПриВыводеСтроки
Возникает при выводе строки в табличное поле. В процедуре-обработчике события допускается изменение оформления как строки в целом, так и каждой ячейки в отдельности.
ПередУдалением
Возникает перед удалением строки или группы строк табличного поля. В процедуре-обработчике можно отказаться от удаления строки.
ПередНачаломИзменения
Возникает перед началом интерактивного изменения строки табличного поля.
Обратите внимание на событие ПриВыводеСтроки, которое возникает при формировании каждой строки табличного поля.В этом событии можно заполнить некоторые ячейки, а также изменить оформление отдельной ячейки и всей строки.
Например, требуется вывести список валют в табличное поле Список с указанием текущего курса, который хранится в регистре сведений КурсыВалют. Тогда это можно сделать следующим образом:
Процедура СписокПриВыводеСтроки(Элемент,ОформлениеСтроки, ДанныеСтроки)
/берем текущую валюту из параметра ДанныеСтроки
ТекВалюта = ДанныеСтроки.Ссылка;
/ссылка на регистр сведений
РегКурсы = РегистрыСведений.КурсыВалют;
/ссылка на оформление ячейки Курс
ЯчейкаКурс = ОформлениеСтроки.Ячейки.Курс;
/считываем курс из регистра сведений и выводим в ячейку
Отбор = Новый Структура("Валюта",ТекВалюта);
Курс = РегКурсы.ПолучитьПоследнее(,Отбор).Курс;
ЯчейкаКурс.УстановитьТекст(Курс);
КонецПроцедуры
В 1C:Предприятии 8.0 нет текстовых колонок, в которых можно вызвать функцию, как это было в версии 7.7. Вместо них предлагается использовать событие ПриВыводеСтроки, в котором можно выводить информацию в ячейки и управлять их внешним видом, используя объекты ОформлениеСтроки и ДанныеСтроки.
У объекта ОформлениеСтроки есть свойство Ячейки, которое содержит коллекцию объектов ОформлениеЯчейки.
Например, выведем справочник Номенклатура с указанием остатка товара на складе, а для тех товаров, у которых остаток меньше 10, установим предупреждающий цвет фона. Это позволит контролировать остатки товаров в реальном времени и вовремя заказывать дефицитные товары:
Процедура СписокПриВыводеСтроки(Элемент,ОформлениеСтроки,ДанныеСтроки)
СтруктураОтбора = Новый Структура("Номенклатура");
СтруктураОтбора.Номенклатура = ДанныеСтроки.Ссылка;
РегОстатки = РегистрыНакопления.УчетНоменклатуры;
/считываем остаток из регистра
тзОстатки = РегОстатки.Остатки(,СтруктураОтбора,
"Номенклатура","Количество"),
Если тзОстатки.Количество() > 0 Тогда
ОстатокТовара = тзОстатки[0].Количество;
ЯчейкаОстаток = ОформлениеСтроки.Ячейки.Остаток;
ЯчейкаОстаток.ОтображатъТекст = Истина;
ЯчейкаОстаток.Текст = ОстатокТовара;
Если ОстатокТовара < 10 Тогда
ЯчейкаОстаток.ЦветФона = Новый Цвет(255,230,230);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
На практике остаток товара лучше сравнивать не с конкретным значением, а с критическим уровнем запаса каждого товара, который определяется исходя из потребности в данном товаре.
Заметим, что такой сервис предъявляет довольно высокие требования к производительности компьютера, потому что при каждом обновлении списка заново считываются данные из регистра, поэтому так делать крайне не рекомендуется. Этот пример был специально приведен, чтобы показать, как не надо делать. Для больших динамических списков было бы более рационально спроектировать специальный отчет Остатки с периодическим обновлением.
Любое табличное поле пользователь может вывести в табличный документ для печати или текстовый документ. Это возможно из контекстного меню с помощью пункта "Вывести список". При выводе табличного поля учитываются текущие отбор и сортировка списка. Есть возможность вывести только выделенные строки, а также указать, выводить или нет подчиненные объекты, например, элементы иерархического справочника нижележащих уровней.
4.4.8. Поле списка
Поле списка предназначено для вывода различного рода списков и тесно связано с объектом СписокЗначений. Фактически поле списка - это элемент управления для визуального представления списка значений.
При размещении поля списка в форме создается новый реквизит формы типа СписокЗначений, через который можно добавлять и удалять значения в списке. В свойствах задается форматирование списка, режим вывода пометки, возможность отображения картинок и т.д.
Следующий пример добавляет в поле списка три значения и включает режим вывода пометок:
сзСотрудники.Добавить("Иванов");
сзСотрудвики.Добавить("Петров");
сзСотрудники.Добавить("Сидоров",Истина);
ЭлементыФормы.сзСотрудники.ОтображатьПометку = Истина;
Поле списка имеет события, которые можно перехватывать с помощью процедур-обработчиков и выполнять полезные действия:
Выбор
Возникает при выборе строки из поля списка.
ПриАктивизацииСтроки
Возникает при смене текущей строки поля списка.
ПриИзмененииФлажка
Возникает при изменении пометки строки поля списка.
4.4.9. Поле выбора
Поле выбора позволяет выбрать одно значение из нескольких возможных, которые обычно задаются еще на этапе разработки.
Перечень возможных значений указывается в свойстве "Строки списка выбора". Программно список возможных значений поля выбора доступен через свойство СписокВыбора, представляющее собой объект типа СписокЗначений.
Через свойство Значение можно считывать и устанавливать значение, выбранное в поле выбора. Конечно, у поля выбора существуют события, например, НачалоВыбора, ОбработкаВыбора, ПриИзменении, Очистка и др.
4.4.10. Панель
Панель может содержать несколько страниц, на каждой из которых могут быть свои элементы управления, что позволяет максимально использовать ограниченную площадь экранной формы для отображения информации. Доступ к страницам панели обычно производится с помощью закладок.
В 1С:Предприятии 8.0 панель может располагаться в любом месте формы, а на страницу одной панели можно поместить вложенную панель.
Закладки панели могут располагаться сверху, снизу или сбоку.
Для бокового расположения может быть выбрана горизонтальная или вертикальная ориентация текста. Если закладок много и все они не помещаются на экране, то автоматически включается прокрутка, или их можно разместить в несколько рядов. В заголовок закладки можно добавить картинку или использовать только картинку без текста.
Стоит отметить, что у самой формы в целом есть панель, которая имеет как минимум одну страницу. Разработчик может добавлять собственные страницы в панель формы. При программировании на встроенном языке главная панель формы доступна через свойство формы Панель.
Внимание! Не путайте три разных термина: "панель формы", "командная панель" и "панель интерфейса". Панель формы обеспечивает доступ к страницам, действующим на всю форму. Командная панель располагается в форме и содержит кнопки и подменю. Панель интерфейса является составной частью интерфейса как объекта конфигурации и представляет главное меню и панели инструментов конфигурации.
Страницы панели могут существовать и без закладок, если в свойстве панели "Отображение закладок" выбрано значение "Не отображать". Тогда выбор текущей страницы должен осуществляться средствами встроенного языка, например:
Панель.ТекущаяСтраница = Панель.Страницы["СтрКартинка"];
Разберем еще одно важное свойство РаспределятьПоСтраницам.
Это свойство типа "булево", которое определяет, изменяется ли состав отображаемых на панели элементов управления при переключении между страницами. Если установлено значение Ложь, то видимостью элементов управления должен управлять разработчик средствами встроенного языка, перехватывая событие ПриСменеСтраницы. Это событие может быть также использовано для реализации переключения отбора в виде закладок.
Внимание! При снятии флажка РаспределятьПоСтраницам все элементы формы, располагающиеся на других страницах, кроме текущей, будут удалены.
В 1С:Предприятии 8.0 можно программно управлять страницами панели, добавляя или удаляя их, изменять порядок их следования и т.д. В следующем примере на панель формы добавляются страницы, а затем меняется их порядок.
Процедура ПриОткрытии()
/очищаются все страницы панели со всеми элементами управления,
/после выполнения этого метода
/панель имеет одну страницу и одну закладку
Панель.Страницы.Очистить();
/индекс первой страницы равен 0, изменим для нее имя и заголовок
Панель.Страницы[0] Имя = "СтраницаОсновные";
Панель.Страницы[0].Заголовок = "Основные";
/добавим вторую страницу, ее индекс будет 1
Панель.Страницы Добавить("СтраницаКартинка","Картинка",,);
/добавим третью страницу, ее индекс будет 2
Панель.Страницы.Добавить("СтраницаПрочее","Прочее",,);
/сдвигаем третью страницу "Прочее" (с индексом 2)
/на 1 позицию к началу
Панель.Страницы.Сдвинуть(2,-1);
/удалим страницу Прочее
/ в метод Удалить может передаваться номер или сама страница
Панель Страницы Удалить(Панель.Страницы["СтраницаПрочее"]);
/для страницы Картинка изменим текст заголовка
/доступ к странице возможен по имени как к свойству коллекции
Панель.Страницы.СтраницаКартинка.Заголовок = "Изображение";
КонецПроцедуры
4.4.11. Поле табличного документа
Элемент управления ПолеТабличногоДокумента позволяет выводить отчеты и другие печатные формы прямо в экранную форму. При этом разработчик может использовать все возможности табличного документа, включая вывод областей, группировку строк и столбцов, расшифровку Подробнее про формирование печатных форм и работу с табличными документами написано в главе "Отчеты".
Следующие элементы управления используются не так часто и будут описаны очень кратко. Более подробные сведения о них приведены в документации.
4.4.12. Рамка
Рамка предназначена для визуальной группировки логически связанных элементов управления. Для рамки можно установить заголовок, цвет текста, тип и цвет рамки. Эти свойства можно также устанавливать программно. Рамка может также использоваться в качестве линии, что можно задать в ее свойстве "Рамка".
4.4.13. Картинка
Картинка позволяет вывести в форму графическое изображение или анимацию в формате GIF. Встроенный язык имеет средства для загрузки картинок из файлов. Кроме того, картинки могут храниться в базе данных в полях типа ХранилищеЗначений.
При расположении картинки в форме есть возможность задать поведение картинки при изменении размера (прокручивать, растягивать и т.д.). Дополнительно картинка может реагировать на щелчок мыши (событие Нажатие) и может служить гиперссылкой.
В конфигурации может существовать библиотека картинок, которая располагается в ветви "Общие картинки" в дереве конфигурации. Методику работы с общими картинками можно найти в документации. Здесь отметим, что можно выбирать картинку из файла (поддерживаются все основные графические форматы: bmр, jpg, gif, tif, wmf, ico). Картинки некоторых форматов можно редактировать в специальном Редакторе картинок.
4.4.14. Диаграмма
Элемент управления Диаграмма предназначен для показа статистических данных в наглядном графическом виде, что очень удобно для анализа. Диаграмма в 1C:Предприятии 8.0 может располагаться прямо в экранной форме, а не только в печатной форме (табличном документе).
Существует возможность задать тип диаграммы: график, плоская и объемная гистограмма, круговая, изометрическая, биржевая и др. У диаграммы также может быть легенда, содержащая имена серий.
Кроме всего прочего, на диаграмме работают расшифровки. Если два раза щелкнуть мышью на точке графика (или столбике), то можно получить более детальную информацию, конечно, если это предусмотрено в конфигурации.
4.4.15. Индикатор
Индикатор показывает ход выполнения длительного процесса.
Рекомендуется всегда его использовать во время выполнения процедур, требующих длительного времени. На пользователя это действует благотворно: он видит, что процесс идет, меньше нервничает и не прервет, чего доброго, работу программы.
Но все-таки для того, чтобы пользователь мог прервать чрезмерно затянувшийся процесс (или "зависшую" программу), в теле цикла необходимо вызывать процедуру ОбработкаПрерыванияПользователя, подробнее о которой написано в документации.
4.4.16. Полоса регулирования
Полоса регулирования позволяет в наглядном виде устанавливать числовое значение из ограниченного диапазона. Она содержит линейку и ползунок, который можно перемещать мышью. В свойствах можно задать минимальное и максимальное значение, интервал делений, а также малый и большой шаг.
4.4.17. Поле календаря
Элемент управления ПолеКалендаря позволяет в наглядном режиме выбирать дату. Красным квадратом выделяется текущая дата. Если поле календаря расширить, то оно автоматически отразит большее количество месяцев.
4.4.18. Поле текстового документа
Поле текстового документа позволяет отобразить и редактировать в форме произвольный текст. Для этого элемента управления можно задать свойство "Расширение" из следующих возможных вариантов: HTML, встроенный язык и язык запросов. Тогда при отображении текста будут применены характерная цветовая палитра и другие встроенные возможности для данного содержимого. Например, для языка запросов будут выделяться ключевые слова ВЫБРАТЬ, ИЗ, ГДЕ и т.д., а из контекстного меню можно будет вызвать Конструктор запросов.
4.4.19. Поле HTML-документа
Данный элемент управления предназначен для отображения HTML-страниц. Это могут быть как локальные страницы, так и страницы в Интернете. У этого элемента управления есть метод Перейти, который позволяет указать адрес страницы (URL) или HTML-макет, хранящийся в конфигурации.
ЭлементыФормы.ПолеНТМLДокумента.Перейти("http:/www.lc.ru");
После того, как HTML-документ будет полностью загружен и отображен, возникнет событие ДокументСформирован. Оно может быть обработано в программном модуле для выполнения каких-либо действий. Система 1С:Предприятие 8.0 предоставляет доступ к HTML-документу как к СОМ-объекту, для чего предназначено свойство Документ.
4.4.20. Разделитель
Разделитель позволяет изменять размеры привязанных к нему элементов управления, например, табличных полей, списков и т.д.
Разделитель может быть невидимым. Подробнее про разделители рассказывается в документации.
4.4.21. ActiveX
Кроме встроенных элементов управления, в 1С:Предприятии 8.0 есть возможность расположить в форме ActiveX-компоненты, написанные на других языках. Из таких компонентов можно назвать Windows Media Player, Microsoft Office Pivot Table и др.
4.5. Привязка границ
В процессе работы пользователи часто меняют размеры формы: уменьшают или увеличивают их. При этом общая структура формы должна сохраняться, чтобы максимально использовать доступное пространство формы для отображения информации.
Для нормальной работы с формой при изменении размеров поведение различных элементов управления должно быть разным.
Некоторые элементы управления должны оставаться на месте, другие должны перемещаться вместе с границами, а третьи должны изменить свой размер. Для реализации такого поведения в 1С:Предприятии 8.0 существует механизм привязок границ элементов управления.
По умолчанию все новые формы используют автоматическую привязку границ, но для более точного задания поведения элементов формы можно использовать ручную привязку, которая бывает простой или сложной.
Если открыть экранную форму документа РасходнаяНакладная в режиме "Предприятие" и изменить ей размеры, то мы увидим, что при увеличении ширины формы, размеры полей для ввода данных увеличиваются, некоторые надписи перемещаются, размер табличного поля увеличивается. Привязки границ элементов управления настраиваются в Конфигураторе в редакторе форм.
Для наглядного отображения текущих привязок выберите пункт меню "Форма -> Показать привязки", тогда в форме появятся красные и синие стрелки, некоторые из которых являются пунктирными Ниже поясняется назначение стрелок:
· Сплошная стрелка - это жесткая привязка к границе. При изменении размеров формы расстояние до границы всегда сохраняется. · Пунктирная стрелка - это привязка к границе с сохранением пропорций. В этом случае граница элемента стремится к привязке пропорционально расстоянию до нее. · Красные стрелки идут от границ панели или формы. · Синие стрелки идут от элементов управления. · Сама стрелка указывает направление влияние привязки, т.е. какую границу толкнет или потянет за собой данная привязка при изменении размеров формы. Устанавливать привязки можно сразу для нескольких элементов управления, выделив их мышью. Редактирование привязок для конкретного элемента или группы элементов управления производится в специальном окне "Привязка границ...", запускаемого из палитры свойств по ссылке "Установить правила".
Привязки бывают простыми и сложными. При простой привязке элемент управления может быть привязан к границам формы или панели, а также разделителям.
Существуют следующие способы привязки (на примере горизонтальных привязок):
· к левой границе - элемент целиком перемещается вместе с перемещением левой границы области; · к правой границе - элемент целиком перемещается вместе с перемещением правой границы области; · растягивать - при горизонтальном изменении размеров области ширина элемента изменяется так, что расстояние до границ области остается постоянным; · пропорционально - при изменении размеров области размеры элемента изменяются так, что соотношение расстояний от правой границы элемента до левой и правой границы области остается постоянным; · к центру - правая и левая границы элемента привязываются к центру формы или другого элемента управления; Аналогично производится привязка при вертикальном изменении размеров.
Существуют более сложные способы привязки границ, в том числе с использованием разделителей. После настройки привязок рекомендуется проверить форму с помощью тестового окна, которое вызывается по нажатии клавиш Ctrl-R или кнопки на панели редактора форм. За более подробной информацией по привязкам обращайтесь к документации.
4.6. Приемы программирования
В данном разделе будут рассмотрены свойства, методы и события объекта Форма, с помощью которого можно управлять внешним видом и поведением формы средствами встроенного языка.
4.6.1. Открытие и закрытие форм
Формы обычно открываются системой автоматически, и разработчику не нужно прикладывать дополнительных усилий для открытия форм из пунктов меню, панелей инструментов или при заполнении реквизитов путем выбора элемента справочника или документа. Однако разработчик может программно открывать и закрывать формы, используя методы объекта Форма. Предварительно он должен получить форму нужного ему объекта, например:
Процедура ОткрытьФормуПодчиненногоСправочника()
СпрРасчСчета = Справочники.РасчетныеСчета;
/сначала получим основную форму списка справочника
/текущая форма будет являться владельцем для нее
ФормаРС = СпрРасчСчета.ПолучитьФормуСписка(,ЭтаФорма);
/если текущая форма будет закрыта,
/то и дочерние формы тоже закроются
ФормаРС.ЗакрыватьПриЗакрытииВладелыда = Истина;
/открыть новую форму или активизировать уже открытую
Если ФормаРС.Открыта() Тогда
ФормаРС.Активизировать();
Иначе
ФормаРС.Открыть();
КонецЕсли;
КонецПроцедуры
При открытии формы возникают события ПередОткрытием, ПриОткрытии или ПриПовторномОткрытии, если форма была уже открыта. При активизации уже открытой формы эти события не возникают. В процедурах-обработчиках этих событий разработчик может предусмотреть заполнение обязательных полей и других инициирующих действий. Например, он может установить параметр ТолькоПросмотр в значение Истина, и это приведет к тому, что пользователь не сможет изменить данные в форме.
Необходимо понимать разницу между событиями, возникающими при открытии формы:
ПередОткрытием
Событие возникает перед открытием формы, до показа ее на экране. В обработчике события можно отказаться как от открытия формы, так и от стандартной обработки при открытии объекта.
ПриОткрытии
Событие возникает при открытии формы, до показа окна пользователю. В обработчике этого события отказаться от открытия формы уже нельзя. Между событиями ПередОткрытием и ПриОткрытии выполняются различные стандартные системные действия, которые могут зависеть от основного реквизита формы. Наличие этих двух обработчиков позволяет выполнить какие-то действия до системных и после.
ПриПовторномОткрытии
Событие возникает при открытии уже открытой формы. При активизации открытой формы данное событие не возникает.
Форма может быть открыта в модальном режиме с использованием метода ОткрытьМодально. В этом случае пользователь должен сначала закрыть модальную форму, прежде чем продолжать работу с другими окнами. При этом работа программы будет приостановлена до закрытия модального окна, которое может быть закрыто интерактивно или автоматически по истечении установленного времени.
В модуле формы с помощью свойства МодальныйРежим можно определить, что форма открыта в модальном режиме. Ниже открывается в модальном режиме общая форма ВыборОснования.
При ее закрытии она возвращает объект ДокументСсылка, содержащий выбор пользователя.
ВыбЯок = ПолучитьОбщуюФорму("ВыборОснования").ОткрытьМодально();
Чтобы закрыть форму, можно вызвать метод Закрыть с указанием параметра закрытия. При закрытии формы возникают события ПередЗакрытием и ПриЗакрытии. В обработчике события ПередЗакрытием можно отказаться как от закрытия формы, так и от стандартной обработки при закрытии. Для форм, связанных, например, с типами ДокументОбъект и СправочникОбъект, стандартной обработкой является проверка модифицированности и задание вопроса о сохранении объекта. В обработчике события ПриЗакрытии отказаться от закрытия формы уже нельзя.
В метод Закрыть можно передать параметр закрытия, который будет являться возвращаемым значением, если форма была открыта с помощью метода ОткрытьМодально.
4.6.2. Формы для выбора
При заполнении реквизитов часто требуется выбрать один элемент справочника или документ. Для этого применяются формы для выбора, которые обычно открываются системой автоматически, но могут быть также открыты программно с помощью конструкций типа "ПолучитьФормуВыбора().Открыть()".
Обычно формы для выбора содержат табличное поле со списком элементов справочника или документов. При двойном щелчке на строке (или нажатии клавиши Enter) выбранное пользователем значение передается в родительскую форму.
Рассмотрим свойства, методы и события, имеющие важное значение для форм выбора:
• Свойство РежимВыбора определяет поведение формы при выборе элемента из главного списка формы, т.е. списка, связанного с ее основным реквизитом. Если оно установлено в значение Истина, то форма работает в режиме выбора, иначе - в обычном режиме.
• Свойство МножественныйВыбор разрешает или запрещает выбор нескольких строк из табличного поля. Несколько строк можно выделить мышью, удерживая клавишу Ctrl.
• Свойство НачальноеЗначениеВыбора содержит текущее выбранное значение элемента формы, который инициировал открытие формы для выбора. Если открытие формы выбора осуществляется из модуля, то начальное значение выбора необходимо устанавливать средствами языка до открытия формы выбора. При этом система производит попытку позиционирования списка, связанного с основным реквизитом формы(если он существует), на этом значении.
Свойство ЗакрыватьПриВыборе содержит признак того, что форму необходимо закрыть после осуществления выбора значения. Если это свойство установить в значение Ложь, то можно использовать форму для выбора нескольких значений.
Метод ОповеститьОВыборе посылает оповещение владельцу формы о выполнении выбора и передает ему выбранное значение. Данное действие аналогично интерактивному выбору пользователя.
Событие ОбработкаВыбора у формы возникает при выборе объекта в одной из подчиненных форм или при вызове в одной из подчиненных форм метода ОповеститьОВыборе.
4.6.3. Внешний вид формы
При проектировании форм палитра свойств позволяет настраивать внешний вид формы. Эти же свойства могут быть считаны или установлены программно для изменения внешнего вида формы "на лету", при выполнении программы.
Рассмотрим основные свойства формы, определяющие ее внешний вид:
Заголовок
Содержит текст заголовка формы. Обратите внимание, что это свойство, а не метод, как было в версии 7.7.
АвтоЗаголовок
Если это свойство содержит значение Истина, то к заголовку формы будет автоматически добавляться информация, определяемая основным реквизитом формы.
Ширина, Высота,
Эти свойства определяют ширину и высоту формы в пунктах (логических единицах).
ИзменениеРазмера,
Разрешает или запрещает изменять размер.
ИзменениеРазмера, Разрешает или запрещает изменять размер. ИмяСохраненияПоложенияОкна, Содержит имя для сохранения размеров и положе­ния окна данной формы. Параметры окна, настроенные и сохра­ненные с данным именем, впоследствии восстанавливаются при следующем показе формы. ПоложениеОкна, Определяет положение окна в прикрепленном состоянии. Вариант прикрепления можно уста­новить окну только в том случае, если он не был ранее сохранен в профиле. СостояниеОкна, Определяет состояние окна формы. Данное состояние можно установить окну только в том случае, если состояние окна не было ранее сохранено в профиле. Соединяемое Окно, Окно способно соединяться с другими окнами.
4.6.4. Элементы формы
Форма позволяет обращаться к расположенным в ней элементам управления, для чего предназначено свойство ЭлементыФормы.
В 1C:Предприятии 8.0 можно даже программно добавлять и удалять элементы управления в форму при выполнении программы, чего не было в версии 7.7.
Обращение к элементу управления обычно производится по его имени через коллекцию ЭлементыФормы, например:
КнопкаОК = ЭлементыФормы.КнопкаОК;
тпСотр = ЭлементыФормы.ТабдичноеПолеСотрудникиСписок;
НадписьТипЦен = ЭлементыФормы["ТипЦен"];
С помощью методов Добавить, Удалить, Очистить можно редактировать список элементов управления "на лету". Переустанавливая свойства элементов управления, можно изменять их внешний вид и поведение.
Внимание! Индексация элементов в коллекции начинается с 0.
У элементов управления, расположенных в форме, появляются дополнительные свойства и методы. Ниже показаны наиболее важные дополнительные свойства таких элементов управления:
Имя
Имя элемента управления, например, "КнопкаОК".
Данные
Это свойство содержит имя связанного реквизита формы или реквизита объекта. Для элементов управления, связанных с реквизитами объектов, изменение значения в элементе управления автоматически влечет изменение значения связанного реквизита.
ТипЗначения
Это свойство описывает допустимые типы значений для элемента управления.
АвтоКонтекстноеМеню
Если в этом свойстве содержится значение Истина, то для элемента управления будет использовано автоматически сформированное контекстное меню, в противном случае необходимо указать свойство КонтекстноеМеню.
КонтекстноеМеню
Значением свойства является элемент управления типа КоманднаяПанель или одна из его кнопок-подменю.
Тема 5. Коллекции значений
5.1. Массив
Массивы представляют собой пронумерованную совокупность значений любого типа. К элементу массива можно обращаться по индексу через оператор [...], причем индекс первого элемента равен 0. В качестве значений элементов массива могут быть другие массивы, что, в частности, позволяет организовывать многомерные массивы.
Продемонстрируем на примерах возможности работы с массивами. Создание нового массива производится следующим образом:
Маc = Новый Массив; /одномерный массив без элементов Мас2 = Новый Массив(10); /одномерный массив из 10 элементов Мас3 = Новый Массив(4,5); /массив с двумя измерениями При указании нескольких параметров конструктора фактически создается массив, элементами которого являются другие массивы, что является аналогом многомерного массива. Для добавления и удаления элементов массива можно использовать методы объекта Массив: Маc = Новый Массив; /одномерный массив без элементов Маc.Добавить("Иванов"); /элемент будет иметь индекс 0 Маc.Добавить("Петров"); /индекс 1 Маc.Добавить("Сидоров"); /индекс 2 /после вставки нового элемента Иванов и Петров будут сдвинуты ниже Мас2.Вставить(0,"Сидоров"); /удаляем Сидорова (Иванов и Петров сдвигаются обратно) Мас2.Удалить(0); Мас2 = Новый Массив(4,5); /массив с двумя измерениями Мас2[0][0] = "Иванов"; Мас2[0][1] = "Петров"; /после вставки нового элемента Иванов и Петров будут сдвинуты ниже Мас2[0].Вставить(0,"Сидоров"); /следующий элемент будет относиться ко 2-му измерению /и будет являться 6-м (индекс = 5) /при создании массива во 2-м измерении /было создано 5 элементов, имеющих значение Неопределено Мас2[1].Добавить("Петров"); Перебор элементов массива возможен с использованием операто-ра [...] или цикла "Для Каждого": /1-й вариант Для Каждого эл Из Мас Цикл Сообщить(эл); КонецЦикла; /2-й вариант Для н = 0 По Мас.ВГраница() Цикл Сообщить(Мас[н]); КонецЦикла; У объекта Массив есть следующие методы: · ВГраница - Возвращает наибольший индекс в массиве, равный количе-ство элементов минус 1. Если количество элементов массива равно 0, возвращается -1 (минус единица). · Количество - Возвращает количество элементов массива. · Добавить - Добавляет элемент в конец массива. · Вставить - Вставляет значение в массив по указанному индексу. · Удалить - Удаляет значение из массива по указанному индексу. · Очистить - Удаляет все значения из массива. В 1С:Предприятии 8.0 в массив можно загружать данные или выгружать данные из него в другие коллекции значений. Это реализуется с помощью соответствующих методов других коллекций значений. Например, объект СписокЗначений имеет методы ВыгрузитьЗначения и ЗагрузитьЗначения, которые работают с массивом. Аналогично действуют методы ВыгрузитьКолонку и ЗагрузитьКолонку объекта ТаблицаЗначений.
5.2. Структура и соответствие
Структура и соответствие являются динамическими наборами данных - коллекциями значений. Каждый элемент такой коллекции представляет собой пару "ключ" и "значение". Ключи структуры и соответствия уникальны, поэтому они однозначно идентифицируют элемент коллекции. Структуры часто применяются в методах объектов для указания отборов,
Отбор = Новый Структура("Цена", 100); Выборка = Справочники.Номенклатура . Выбрать (,Отбор); Структуры можно использовать для передачи списка параметров (в версии 7.7 для этой цели часто применялся список значений и его методы Установить и Получить): Параметры = Новый Структура("ДатаНач,ДатаКон"); Параметры.ДатаНач = ВыбДата; Параметры.ДатаКон = ДобавитьМесяц(ВыбДата,1); Если ВыбТипОтчета <> 0 Тогда Параметры.Вставить("ТипОтчета",ВыбТипОтчета); КонецЕсли; глСформироватьОбороты(Параметры); Можно перебрать элементы структуры или соответствия с помощью конструкции "Для Каждого". Каждый элемент коллекции является объектом специального типа КлючИЗначение: Для Каждого парам Из Параметры Цикл ИмяПараметра = парам.Ключ;
Значение = парам.Значение; КонецЦикла; Для структуры можно обращаться к элементам коллекции через точку, поскольку ключи являются свойствами структуры: НачДата = парам.ДатаНач; КонДата = парам.ДатаКон; Для соответствия такое обращение через точку невозможно, так как ключи соответствия могут быть самого разнообразного типа. С помощью метода Свойство можно получить значение заданного ключа или убедиться, что его в структуре нет, например:
Найдено = парам.Свойство("ТипОтчета",ВыбТипОтчета); Если Найдено Тогда СформироватьПользовательскийОтчет(ВыбТипОтчета); Иначе СформироватьОтчетПоУмолчанию(); КонецЕсли;
У соответствия нет метода Свойство и обращение производится с помощью оператора [...] или метода Получить: ТоварАналог = соотвАналоги[Товар].Значение;
5.3. Список значений
Список значений - это аналог одномерного массива, который предназначен в основном для решения интерфейсных задач, например, при использовании элементов управления СписокВыбора и ПолеВыбора. В списке значения могут храниться значения разных типов, хотя можно наложить ограничение с помощью свойства ТипЗначения. Список значений создается в памяти и не сохраняется в базе данных, т.е. это временный набор данных. Список значений можно представить себе как таблицу, содержащую следующие колонки: · Значение - собственно хранимое значение. · Представление - пользовательское представление значения, которое будет показано при выводе значения на экран, например, в диалоге выбора значения из списка. Если представление не указано, то оно формируется системой автоматически. · Пометка - пометка (флажок), связанная со значением. Может быть использована для отметки некоторых значений из списка. · Картинка - графическое изображение, связанное с данным значением. В 1С:Предприятии 8.0 объект СписокЗначений состоит из объектов типа ЭлементСпискаЗначений, которые имеют свойства Значение, Представление, Пометка и Картинка. Создание новых списков значений производится с помощью ключевого слова Новый:
сзСотр = Новый СписокЗначений; Ниже демонстрируются приемы добавления и удаления элементов списка значений: сзСотр. Очистить(); /удалим все элементы /У следующего элемента индекс 0, представление "Иванов Иван" сзСотр.Добавить("Иванов","Иванов Иван"); /У следующего элемента будет индекс 1, представление "Петров Петр" /и установлена пометка сзСотр.Добавить("Петров","Петров Петр", Истина); сзСотр.Удалить(1); /удалить 2-й элемент, т.е. Петрова сзСотр.Вставить(0,"Сидоров"); /Иванов сдвигается ниже сзСотр.Сдвинуть(1,-1); /сдвинем Иванова обратно к началу Обращение к элементу списка значений производится по индексу через оператор [...] или с помощью метода Получить: сзСотр[0].Значение = "Кузнецов"; Перебор элементов списка значений производится следующим образом: /1-й вариант Для Каждого эл Из сзСотр Цикл Сообщить(Эл.Значение); КонецЦикла; /2-й вариант Для н = 0 По сзСотр.Количество()-1 Цикл Сообщить(сзСотр[н].Значение); КонецЦикла; В списке значений можно искать заданное значение: НайденныйЭлементСписка = сзСотр.НайтиПоЗначению("Иванов"); Если НайденныйЭлементСписка <> Неопределено Тогда Сообщить("Элемент найден!"); КонецЕсли; Как уже говорилось выше, в списке значений могут быть пометки, которые представляют собой флажки (значения типа "булево"). С помощью пометок несколько значений списка могут быть выделены, и тем самым они будут отличаться от остальных. Назначение пометок определяется проектной логикой. Разработчик может программно считывать и устанавливать пометки у элементов списка значений: сзСотр = Новый СписокЗначений; сзСотр.Добавить("Иванов",,Истина);/пометка установлена сзСотр.Добавить("Петров");/пометка не установлена сзСотр.Добавить("Сидоров");/пометка не установлена ВыборПроизведен = сзСотр.ОтметитьЭлементы("Укажите сотрудников"); Если ВыборПроизведен Тогда Для Каждого эл Из сзСотр Цикл Если эл.Пометка Тогда Сообщить("Отмечен сотрудник " + эл.Значение); КонецЕсли; КонецЦикла; КонецЕсли; Методы ВыбратьЭлемент и ОтметитьЭлементы открывают диалоговое окно для пользователя, в котором он может выбрать один элемент или расставить пометки, тем самым выбрав несколько элементов. Элементы списка значений могут быть легко отсортированы по значению или по представлению: сзСотр.СортироватьПоЗначению(НаправлениеСортировки.Возр); сзСотр.СортироватьПоПредставлению(НаправлениеСортировки.Убыв); В список значений можно загрузить значения из массива и выгрузить значения в массив, например: мас = Новый Массив; мас.Добавить("Иванов"); мас.Добавить("Якушин"); мас.Добавить("Сидоров"}; сзСотр.ЗагрузитьЗначения(мас); сзСотр.СортироватьПоЗначению(); мас2 = сзСотр.ВыгрузитьЗначения(); При размещении в форме поля списка автоматически создается новый реквизит формы типа СписокЗначений. Через этот реквизит можно управлять содержимым списка, добавлять или удалять элементы, расставлять пометки, задавать картинки. Следует понимать, что ПолеСписка - это не список значений, а элемент управления, имеющий собственный набор свойств и методов. Со списком значений также тесно связан элемент управления ПолеВыбора. Его свойство СписокВыбора представляет собой список значений, из которого пользователь может выбрать одно значение.
5.4. Таблица значений
Таблица значений - это не сохраняемый в базе данных объект, предназначенный для создания динамических наборов данных. Таблица значений состоит из строк и колонок. В отличие от списка значений, таблица значений имеет структуру, которую определяет разработчик. Объект ТаблицаЗначений имеет много полезных методов для обработки данных. Разработчик средствами встроенного языка может добавлять и удалять строки и колонки, перебирать строки, искать значение, сортировать по любым колонкам и выполнять другие операции.
При создании новой таблицы значений в нее обычно добавляются колонки:
тзТовары = Новый ТаблицаЗначений; тзТовары.Колонки.Добавить("Ссылка"); тзТовары.Колонки.Добавить("Наименование"); тзТовары.Колонки.Добавить("Цена"); тзТовары.Колонки.Добавить("Количество"); У таблицы значений есть свойство Колонки, которое представляет собой коллекцию колонок и позволяет добавлять, удалять и менять их порядок. По умолчанию в таблице значений могут храниться значения разных типов. Но в 1С:Предприятии 8.0 для колонки можно задать список возможных типов значений. Это делается следующим образом (для повышения наглядности нам понадобится вспомогательная функция СоздатьОписаниеТипов): Функция СоздатьОписаниеТипов(НазваниеТипа,Длина,Точность="") мас = Новый Массив; мас.Добавить(Тип(НазваниеТипа)); Если Точность = "" Тогда КвалифСтроки = Новый КвалификаторыСтроки(Длина, ДопустимаяДлина.Переменная); Иначе КвалифЧисла = Новый КвалификаторыЧисла(ДопустимыйЗнак.Любой, Длина,Точность); КонецЕсли; Возврат Новый ОписаниеТипов(мас,КвалифСтроки,КвалифЧисла); КонецФункции тзТовары = Новый ТаблицаЗначений; ТипКолСсылка=СоздатьОписаниеТипов("СправочникСписок.Номенклатура"); тзТовары.Колонки.Добавить("Ссылка", ТипКолСсылка,"Товар",5); ТипКолНаим=СоздатьОписаниеТипов("Строка",50); тзТовары.Колонки.Добавить("Наименование", ТипКолНаим); ТипКолЦена = СоздатьОписаниеТипов("Строка",15,2); тзТовары.Колонки.Добавить("Цена", ТипКолЦена, "Цена",15); ТипКолКолич = СоздатьОписаниеТипов("Строка",15,4); тзТовары.Колонки.Добавить("Количество",ТипКолКолич,"Кол-во",15); При работе со строками таблицы значений необходимо понимать, что строка - это объект типа СтрокаТаблицыЗначений. Поэтому добавление строк в таблицу значений производится следующим образом: /удаляем все строки из таблицы (колонки остаются) тзТовары.Очистить(); СпрВыборка = Справочники.Номенклатура.Выбрать(); Пока СпрВыборка.Следующий() Цикл НовСтрока = тзТовары.Добавить(); НовСтрока.Ссылка = СпрВыборка.Ссылка; НовСтрока.Наименование = СпрВыборка.Наименование; НовСтрока.Цена = СпрВыборка.Цена; КонецЦикла ; Чтобы удалить колонки из таблицы значений нужно применить метод Очистить для свойства-коллекции Колонки: тзТовары.Колонки.Очистить(); По индексу можно удалить строку: тзТовары.Удалить(0); /удалить 1-ю строку с индексом 0 тзТовары.Удалить(1); /удалить 2-ю строку с индексом 1 Перебор строк таблицы значений обычно реализуется с помощью конструкции "Для Каждого", при этом в переменной цикла будет содержаться не номер строки, а вся строка целиком как объект СтрокаТаблицыЗначений: Для Каждого стр Из тзТовары Цикл Сообщить(стр.Наименование); Сообщить(стр.Цена); КонецЦикла; Допускается также обращение к строке по индексу, при этом так-же возвращается объект типа СтрокаТаблицыЗначений. При работе с индексами необходимо всегда помнить, что индексация строк таблицы значений начинается с 0.
Для н=0 По тзТовары.Количество()-1 Цикл Сообщить(тзТовары[н].Наименование); Сообщить(тзТовары[н].Цена); КонецЦикла; Часто возникает необходимость найти значение в таблице значений. Для решения этой задачи предназначены методы Найти и НайтиСтроки. В метод Найти передается искомое значение и список колонок, которые нужно просматривать. Если значение найдено, то возвращается строка таблицы значений, иначе - значение Неопределено. НайденнаяСтрока = тзТовары.Найти(100,"Цена"); Если НайденнаяСтрока <> Неопределено Тогда Сообщить("Товар с такой ценой найден! " + НайденнаяСтрока.Наименование); КонецЕсли; Метод НайтиСтроки позволяет найти сразу несколько строк таблицы значений, удовлетворяющих заданному условию. В параметрах этого метода передается структура, задающая условия отбора. Ключ структуры определяет имя колонки, а ее значение -искомое значение. Метод НайтиСтроки возвращает массив, содержащий ссылки на найденные строки таблицы значений: Отбор = Новый Структура("Цена",100); МассивСтрок = тзТовары.НайтиСтроки(Отбор); Сообщить("Найдено " + МассивСтрок.Количество() + " товаров с такой ценой"); Таблица значений позволяет упорядочить содержащиеся в ней данные, для чего предназначен метод Сортировать:
тзТовары.Сортировать("Наименование Возр"); тзТовары.Сортировать("Цена Убыв"); тзТовары.Сортировать("Цена Убыв, Наименование Возр");); Таблица значений имеет очень полезную возможность группировки строк и подсчета итогов по группе, что реализуется методом Свернуть, имеющим следующие параметры: Свернуть(<Колонки группировок>, <Колонки суммирования>) Этот метод осуществляет свертку таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения по этим строкам, хранящиеся в колонках, указанных во втором параметре, суммируются. Например, у нас есть таблица значений со следующими данными:
В следующем примере эта таблица сворачивается по колонкам Сотрудник и Год с подсчетом суммы по колонке Доход: /подсчитаем годовой доход по каждому сотруднику тзДоходыСотр.Свернуть("Сотрудник,Год","Доход"); В результате мы получим следующую таблицу значений:
Если исходная таблица значений вам понадобится в дальнейшем, то лучше сделать копию таблицы значений и сворачивать уже ее: тзДоходыПоГодам = тзДоходыСотр.Скопировать(); тзДоходыПоГодам.Свернуть("Сотрудник,Год","Доход"); Таблица значений позволяет подсчитать итог по колонке числового типа, например: ВсегоДоход = тзДоходыСотр.Итог("Доход");
ВсегоНДС = тзСостав.Итог("НДС"); И последнее, о чем хотелось рассказать, из таблицы значений можно выгрузить целую колонку в массив и загрузить ее из массива:
МассивЦен = тзТовары. ВыгрузитьКолонку ("Цена") ; тзТовары.ЗагрузитьКолонку("Количество",МассивОстаткиТоваров);
5.5. Дерево значений
Дерево значений - это объект для хранения временных наборов данных, возникающих при работе программы. Работа с деревом значений напоминает работу с таблицей значений, за исключением того, что в дереве могут быть представлены иерархические данные (по аналогии с иерархическим справочником). Это достигается тем, что каждая строка дерева значений может иметь подчиненные строки, а те, в свою очередь, тоже могут иметь подчиненные строки и т.д. Дерево значений предоставляет возможность обхода строк и подсчета итогов по всем строкам дерева или по текущему уровню иерархии. Объект ДеревоЗначений имеет свойство Строки и Колонки, через которые осуществляется доступ к коллекции строк 1-го уровня и колонок дерева значений. У каждой строки дерева значения (т.е. объекта СтрокаДереваЗначений) есть свойство Строки, содержащее коллекцию подчиненных строк для данной строки дерева значений.
Следующий пример создает дерево значений и наполняет его данными
дзОтделы = Новый ДеревоЗначений; дзОтделы.Колонки.Добавить("Отдел"); дзОтделы.Колонки.Добавить("Руководитель"); Нов = дзОтделы.Строки.Добавить(); /индекс 0 Нов.Отдел = "Бухгалтерия"; Нов = дзОтделы.Строки.Добавить(); /индекс 1 Нов.Отдел = "Руководство"; /детализируем отдел "Бухгалтерия" Нов = дзОтделы.Строки[0] .Строки.Добавить(); Нов.Отдел = "Расчет зарплаты"; Нов = дзОтделы.Строки[0].Строки.Добавить(); Нов.Отдел = "Основные средства"; /детализируем руководство Нов = дзОтделы.Строки[1] .Строки.Добавить(); Нов.Отдел = "Высшее руководство"; Нов = дзОтделы.Строки[1].Строки.Добавить(); Нов.Отдел = "Отдел маркетинга"; Так же, как и с таблицей значений, можно создать полную копию дерева значений с помощью метода Скопировать: НоваяОргСтруктура = ДзОтделы.Скопировать(); Обход строк реализуется с помощью конструкции "Для Каждого" или оператором [...]: /1-й вариант: обход строк 1-го уровня Для Каждого стр Из дзОтделы Цикл Сообщить(стр.Отдел);
КснецЦикла; /2-й вариант (индексация строк начинается с 0) Для н = 0 По дзОтделы.Строки.Количество()-1 Цикл стр = дзОтделы.Строки[н]; Сообщить(стр);
КонецЦикла; Следующая программа с помощью рекурсивной процедуры обходит все строки дерева значений, включая подчиненные: Процедура ПоказатьПодчиненные (СтрокаДерева,Уровень=0) Для Каждого стр Из СтрокаДерева.Строки Цикл отступ = ""; Для н = 1 По Уровень Цикл отступ = отступ + " "; КонецЦикла; Сообщить(отступ + стр.Отдел); ПоказатьПодчиненные(стр,Уровень+1); КонецЦикла; КонецПроцедуры ПоказатьПодчиненные(дзОтделы); Результат работы программы: Бухгалтерия
Расчет зарплаты Основные средства Руководство Высшее руководство Отдел маркетинга Аналогично таблице значений, дерево значений позволяет искать значение с помощью метода Найти или искать сразу несколько строк методом НайтиСтроки. Принципы работы этих методов полностью идентичны рассмотренным выше для таблицы значений, за исключением последнего параметра ВключатьПодчиненные. Если передать в него значение Истина, то поиск будет производиться, в том числе, и по подчиненным строкам, иначе - только по строкам текущего уровня.
Тема 6. Взаимодействие с другими системами
6.1. Текстовые файлы
6.1.1. Объект "ТекстовыйДокумент"
Объект ТекстовыйДокумент предназначен для манипулирования строками текстового файла. Все строки в системе хранятся в кодировке UNICODE, но есть возможность записи и чтения текстов в других кодировках. С помощью методов Прочитать и Записать текстовый документ считывается из файла или записывается в файл.
При работе с текстовым документом можно манипулировать его строками, для чего предназначены следующие методы:
· ДобавитьСтроку - Добавляет строку в конец текстового документа.
· ЗаменитьСтроку - Заменяет строку с указанным номером на переданную.
· ВставитьСтроку - Вставляет в текстовый документ строку с указанным номером.
· УдалитьСтроку - Удаляет из текстового документа строку с указанным номером.
· КоличествоСтрок - Получает количество строк в тексте.
· ПолучитьСтроку - Получает строку текстового документа по номеру.
Следующий пример демонстрирует применение этих методов:
Текст = Новый ТекстовыйДокумент; Текст.Прочитать("catalog.txt", КодировкаТекста.ANSI); Текст.ЗаменитьСтроку(52, "Установка оборудования " + Стоимость); Текст.ВставитьСтроку(53, "Замена оборудования... "); Текст.УдалитьСтроку(10); Текст.ДобавитьСтроку("Конец файла"); Для н = 1 По Текст.КоличествоСтрок() Цикл стр = Текст.ПолучитьСтроку(н); сообщить(стр); КонецЦикла; Текст.Записать("catalog2.txt",КодировкаТекста.ANSI); Текст.ТолькоПросмотр = Истина; Текст.Показать();
Можно прочитать весь текстовый документ в строковую переменную или, наоборот, в текстовый документ записать значение строковой переменной. Для этого предназначены методы ПолучитьТекст и УстановитьТекст. Текст, содержащийся в текстовом документе до исполнения метода УстановитьТекст, удаляется:
стр = ТекстДок. ПолучитьТекст (); ТекстДок.УстановитьТекст(стр);
Метод Очистить позволяет полностью очистить текстовый документ (удалить все строки). С помощью метода Показать текстовый документ можно отобразить на экране. Если установить свойство ТолькоПросмотр в значение Истина, то пользователь не сможет изменить текстовый документ.
6.1.2. Последовательный доступ к тексту
При работе с большими текстовыми файлами бывает необходимо применить последовательный доступ, при котором весь файл не загружается в память и в один момент времени производится обработка только фрагмента файла. После чтения/записи очередного фрагмента к нему нельзя уже вернуться (в памяти его больше нет), поэтому такой доступ называется последовательным.
Текст обычно хранится в кодировке UNICODE, но объекты ЧтениеТекста и ЗаписьТекста умеют работать и с другими кодировками
6.1.3. Объект "ЗаписьТекста"
Объект ЗаписьТекста предназначен для последовательной записи текстовых файлов. Приведенный ниже фрагмент запишет небольшой текстовый файл:
Файл = Новый ЗаписьТекста("с:\test.txt",КодировкаТекста.ANSI.Символы.ПС);
Файл.Записать("Строка1"); Файл.ЗаписатьСтроку("Строка2"); Файл.Записать("Строка3"); Файл.3акрыть();
В результате работы программы получится следующий текстовый файл:
Строка1Строка2
Строка3
6.1.4. Объект "ЧтениеТекста"
Объект ЧтениеТекста предназначен для последовательного чтения текстовых файлов. Следующий фрагмент прочитает ранее записанный файл:
Файл = Новый ЧтениеТекста("с:\test.txt",КодировкаТекста.ANSI,Символы.ПС); Строка1 = Файл.Прочитать(7); Строка2 = Файл.ПрочитатьСтроку(); Строка3 = Файл.Прочитать(); Файл.Закрыть();
6.2. XBase (работа с DBF-файлами)
Система 1C:Предприятие 8.0 позволяет создавать, читать и записывать DBF-файлы. Возможности по работе с DBF-файлами мало изменились по сравнению с версией 7.7, но немного изменилась техника работы с полями и индексами: теперь они создаются через соответствующие свойства-коллекции.
6.2.1. Запись DBF-файла
Следующий фрагмент программы создает DBF-файл с тремя полями и выгружает в него справочник Сотрудники:
ФайлDBF = Новый XBase; ФайлDBF.Поля.Добавить("Name","S",100); ФайлDBF.Поля.Добавить("Dep","S",50); ФайлDBF.Поля.Добавить("Sum","N",10,2); ФайлDBF.Кодировка = КодировкаХВаsе.ОЕМ; /кодировка DOS ФайлDBF.СоздатьФайл("с:\staff.dbf"); Сотрудники = Справочники.Сотрудники.Выбрать(); Пока Сотрудники.Следующий() Цикл ФайлDBF.Добавить(); ФайлDBF.Name = Сотрудники.Наименование; ФайлDBF.Dер = Сотрудники.Подразделение; ФайлDBF.Sum = Сотрудники.Оклад;
ФайлDBF.Записать(); КонецЦикла; ФайлDBF.ЗакрытьФайл();
6.2.2. Чтение DBF-файла
Чтение DBF-файла производится еще проще:
ФайлDBF = Новый XBase; /только для чтения
ФайлDBF.ОткрытьФайл("с:\staff.dbf",,Истина);
ФайлDBF.Первая(); Пока НЕ ФайлDBF.ВКонце() Цикл НовСотр = Справочники.Сотрудники.СоздатьЭлемент(); НовСотр.Наименование = ФайлDBF.Name; НовСотр.Подразделение = ФайлDBF.Dер; НовСотр.Оклад = ФайлDBF.Sum; НовСотр.Записать() ; ФайлDBF.Следующая(); КонецЦикла; ФайлDBF.ЗакрытьФайл();
6.2.3. Удаленные записи
Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом, размер файла остается прежним.
Чтобы физически удалить все помеченные на удаление записи, нужно применить метод Сжать. Средства встроенного языка позволяют работать с записями, помеченными на удаление, перебирать их и даже отменять пометку на удаление.
6.2.4. Индексы
Для упорядочивания содержимого DBF-файла и поиска в нем по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам.
Индексы хранятся в индексном файле, причем один индексный файл может содержать сразу несколько индексов. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы этого файла.
6.3. ХМL-документы
Система 1С:Предприятие 8.0 имеет средства для работы с XML-документами. Для их использования на компьютере должен быть установлен "Microsoft XML Core Services 4.0" или выше.
Стоит отметить, что в 1C:Предприятии 8.0 возможна работа с XML-документами большого объема, так как реализуется принцип последовательного чтения и записи XML-документов.
6.3.1. Запись XML
Следующий фрагмент создает простой XML-документ и записывает его в файл. Иерархический отступ конструкций языка показывает вложенность XML-элементов друг в друга:
Файл = Новый ЗаписьХМL;
Файл.ОткрытьФайл(ПутьКФайлу);
Файл.ЗаписатьОбъявлениеХМL();
Файл.ЗаписатьНачалоЭлемента("goods");
Файл.ЗаписатьНачалоЭлемента("good");
Файл.ЗаписатьНачалоЭлемента("name");
Файл.ЗаписатьТекст("Ботинки");
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьНачалоЭлемента("price");
Файл.ЗаписатьТекст(ХМLСтрока(600));
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьНачалоЭлемента("good");
Файл.ЗаписатьНачалоЭлемента("name");
Файл.ЗаписатьТекст("Сапоги");
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьНачалоЭлемента("price");
Файл.ЗаписатьТекст(ХМLСтрока(1000)) ;
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента() ;
В результате работы программы получился следующий XML-документ:
<?xml version="1.0"?>
<goods>
<good>
<name>Ботинки</name>
<price>600</price>
</good>
<good>
<name>Сапоги</name>
<price>1000</price>
</good>
</goods>
6.3.2. Чтение XML
Чтение XML-документов производится через объект Чтение ХМL с помощью метода Прочитать:
Чт = Новый ЧтениеXML; Чт.ОткрытьФайл(ПутьКФайлу); Пока Чт.Прочитать() Цикл Рез = "ТипУзла=" + Чт.ТипУзла;
Рез = Рез + " Имя='" + Чт.Имя;
Рез = Рез + "' ЛокальноеИмя='" + Чт.ЛокальноеИмя;
Рез = Рез + "' Префикс='" + Чт.Префикс;
Рез = Рез + "' Значение'" + Чт.Значение;
Рез = Рез + "' " ;
Сообщить(Рез) ;
КонецЦикла
Дополнительно система 1С:Предприятие 8.0 поддерживает преобразование с помощью XSL. Язык XSL или eXtensible Stylesheet Language - это язык описания стилей отображения для XML-документов. Он позволяет описать способ отображения документов для различных носителей, будь то окно веб-обозревателя или устройство печати. Данные в формате XML форматируются с помощью таблицы стилей в формате XSL, в результате создается отображение данных в соответствии с заданными стилями.
Полный список объектов, их свойств и методов для работы с XML-документами приведен в документации.
6.4. Интернет-технологии
6.4.1. Интернет-соединение
С помощью объекта ИнтернетСоединение можно устанавливать и разрывать соединение с провайдером через коммутируемые линии (модем). После установления соединения можно отправлять и принимать почту, обращаться к сайтам (веб-серверам) по протоколам HTTP/HTTPS и к FTP-серверам.
Для операций через эти протоколы можно также использовать процедуры и функции глобального контекста для работы с файлами, например, КопироватьФайл.
6.4.2. Поле HTML-документа
Элемент управления ПолеНТМLДокумента позволяет отобразить HTML-страницу. Это могут быть как локальные страницы, так и страницы из Интернета:
У данного элемента управления есть метод Перейти, который позволяет указать адрес страницы (URL) или HTML-макет, хранящийся в конфигурации.
Следующий фрагмент демонстрирует, как можно указать адрес сайта (веб-сервера) для данного элемента управления:
ЭлементыФормы.ПолеНТМLДокумента.Перейти("http:/www.1c.ru");
6.4.3. Электронная почта (e-mail)
Для работы с электронной почтой в 1C:Предприятии 8.0 существуют следующие объекты:
· Почта,
· ПочтовоеСообщение,
· ПочтовыйАдрес,
· ПочтовоеВложение. Полный список свойств и методов каждого объекта приведен в документации, а на рисунке 6.1 показана общая схема взаимосвязей между этими объектами:
Рис. 6.1.
Объект Почта имеет методы Выбрать и Послать. Первый метод возвращает массив объектов ПочтовоеСообщение, а второй метод принимает объект ПочтовоеСообщение в качестве параметра.
В объекте ПочтовоеСообщение поле Отправитель имеет тип ПочтовыйАдрес, а поля Получатели, Копии и СлепыеКопии являются коллекциями объектов ПочтовыйАдрес. Поле Вложения также является коллекцией объектов типа ПочтовоеВложение.
Следующий пример создает электронное письмо, присоединяет к нему два файла и отправляет его сразу двум адресатам:
Письмо = Новый ПочтовоеСообщение;
Письмо.Тема = "Тест";
Письмо.Текст = "Это тестовое письмо!";
Письмо.Получатели.Добавить("myboss@company.ru");
Письмо.Получатели.Добавить("myfriend@company.ru");
Письмо.Вложения.Добавить("с:\test.txt");
Мелодия = Новый ДвоичныеДанные("с:\opera.mp3");
Письмо.Вложения.Добавить(Мелодия,"Опера.mр3");
Почта = Новый Почта;
Почта.Послать(Письмо)
6.4.4. Работа с FTP
Система 1С:Предприятие 8.0 имеет средства для работы с файлами по протоколу FTP. Можно подключаться к FTP-серверам, скачивать и закачивать файлы, переименовывать их, обращаться к их свойствам, создавать каталоги и т.д.
Ниже показан простой пример, в котором устанавливается соединение с FTP-сервером, скачивается один файл, а на его место помещается другой:
FTP = Новый FТРСоединение
("ftp:/ftp.mysite.ru",21,"login","password");
FTP.УстановитьТекущийКаталог("htdocs");
FTP.Получить("index.htm", "с:\old\index.htm");
FTP.Записать("с:\new\index.htm", "index.htm");
6.5. Работа с операционной системой
Система 1С:Предприятие 8.0, как и версия 7.7, позволяет выполнять команды операционной системы через командный интерпретатор и запускать внешние приложения. Для этого предназначены процедуры ЗапуститьПриложение и КомандаСистемы:
ЗапуститьПриложение
Выполняет запуск внешнего приложения либо открытие файла с использованием связанного с ним приложения.
КомандаСистемы
Вызывает на исполнение команду операционной системы, как если бы она была введена в командной строке. После загрузки приложения управление возвращается в 1С:Предприятие 8.0, и исполнение модуля продолжается.
6.6. СОМ-соединение
В новой версии 1С:Предприятия введен механизм СОМ-соединения для быстрого и надежного доступа к системе 1C:Предприятие 8.0 из других программ.
Следующий фрагмент на языке VB.Net устанавливает СОМ-соединение с 1С:Предприятием 8.0, создает массив из 6 элементов (индексация начинается с 0), а также получает значение системного перечисления:
/внимание! фрагмент на языке VB.Net
Module Modulel
Sub Main()
Dim cc As Object 'это будет Corn-connector
Dim con As Object
Dim o,o2 As Object
Dim e As Object
Dim str As String
Try
cc = CreateObject("V8.COMConnector")
con = cc .Connect ("File=c:/1cv8/mdcom; Usr=r\naBHbiii")
о = con NewObject("Массив", 5)
o.Set(0 "Item 0")
o.Set(1 "Item 1")
o.Set(2 "Item 2")
o.Set(3 "Item 3")
o.Set(4 "Item 4")
o.Set(5 "Item 5")
Dim с As Integer = o.Count()
For Each e In о
Console.WriteLine(e.ToString())
Next
o2 = con.ДопустимаяДлина.Переменная
str = con.ValueStr(o2)
Dim s As String = str
Catch ex As Exception
Console.WriteLine(ex)
End Try
con = Nothing
cc = Nothing
System.GC.Collect()
End Sub
End Module
Обратите внимание, что при таком варианте подключения к 1С:Предприятию 8.0 полностью отсутствует пользовательский интерфейс.
Важным моментом является то, что при установлении СОМ-соединения вместо модуля приложения используется модуль внешнего соединения. При этом в вызывающем приложении доступен для использования глобальный контекст 1С:Предприятия 8.0, включая переменные, процедуры и функции, объявленные в модуле внешнего соединения с ключевым словом Экспорт. Некоторые объекты не доступны в режиме внешнего соединения, о чем подробно написано в документации.
Аутентификация пользователя при СОМ-соединении может производиться через параметры строки соединения или средствами Windows. В любом случае у пользователя должно быть право "Внешнее соединение".
6.7. Механизм Automation
Механизм Automation реализует обращение к 1C:Предприятию 8.0 из внешних приложений, написанных на других языках, и обратный механизм, т.е. обращение к внешним приложениям из 1С:Предприятия 8.0.
Например, ниже показан фрагмент на языке Visual Basic, осуществляющий запуск клиентской сессии 1С:Предприятия 8.0 через Automation:
Dim v8 As Object
Set v8=CreateObject("V8.Application")
v8.Connect("File=""c:\InfoBases\Trade"";Usr=""Director"";")
v8.Visible = True
Таким же образом один экземпляр 1С:Предприятия 8.0 может обращаться к другому через механизм Automation. Это позволяет организовать обмен данными между информационными базами и реализовать другие решения:
Процедура Загрузить()
V8 = Новый СОМОбъект("V8.Application");
Попытка
Открыта = V8.Connect("File=""" + Путь + """;
Usr=""" + Пользователь + """; ") ;
Исключение
Предупреждение ("Ошибка открытия информационной базы");
Возврат;
КонецПопытки;
Импорт = V8.NewObject("Справочник.Контрагенты");
Импорт.Выбрать();
Пока Импорт.Следующий() Цикл
Если Не Импорт.ЭтоГруппа Тогда
Сообщить(Импорт.Наименование);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
6.8. Технология внешних компонент
Технология внешних компонент позволяет расширять функциональность платформы 1С:Предприятия 8.0 за счет DLL-библиотек, написанных на других языках специально для 1С:Предприятия. С помощью этой технологии можно реализовать, например, работу с торговым оборудованием (кассовым аппаратом, штрих-сканером и т.д.).
Замечание. Внешние компоненты для версии 8.0 почти полностью совместимы с внешними компонентами для версии 7.7, поэтому никаких изменений в них делать не нужно, кроме компонент, открывающих окна внутри главного окна 1С:Предприятия - такая возможность теперь не поддерживается.
Приведенный ниже пример подключает внешнюю компоненту Math.dll', содержащую различные математические функции, и использует из нее генератор псевдослучайных чисел:
ЗагрузитьВнешнююКомпоненту("Math.dll");
МФ = Новый("Addln.Math");
/Для инициализации датчика случайных чисел /используется процедура MO.SRAND(1000);
/параметр может быть от 0 до 32767
Для н = 1 По 10 Цикл
Сообщить(МФ.RAND()); /случайное число в промежутке от 0 до 32767
КонецЦикла;
1
Автор
dandelionnik
Документ
Категория
Без категории
Просмотров
1 567
Размер файла
828 Кб
Теги
lektsii_reis
1/--страниц
Пожаловаться на содержимое документа