d9e5a92d

Глава 3. Основные объекты конфигурации

В данной главе будут рассмотрены основные объекты конфигурации, без которых не обходится практически ни одно прикладное решение на платформе 1 С:Предприятие 8.0. К таким объектам можно отнести:

• константы,

• справочники,

• документы и журналы документов,

• перечисления,

• отчеты и обработки.

Регистры сведений и регистры накопления, механизмы бухгалтерского учета и сложных периодических расчетов будут рассмотрены в отдельных главах этой книги:



• регистры сведений описаны в главе 8;

• регистры накопления описаны в главе 9;

• планы счетов и регистры бухгалтерии кратко описаны в главе 10;

• планы видов расчета и регистры расчета освещаются в главе 11.

Многие объекты конфигурации были реализованы еще в прежней версии 7.7 и перешли в версию 8.0 со значительными изменениями и улучшениями.

Для успешной разработки прикладных решений в новой версии 1С:Предприятия важно уловить основной принцип взаимосвязи объектов. Функциональность всех объектов в новой версии была унифицирована, и теперь работа с документами напоминает работу с элементами справочника, и даже с константами, регистрами, отчетами и перечислениями. В новой версии все прикладные

Разработка в системе 1С:Предприятие 8.0

объекты имеют похожие свойства и методы, а приемы работы с каждым объектом подчинены единым правилам. Понимая эти правила, вы легко освоите все объекты.

Ниже последовательно разбираются приемы работы с основными объектами конфигурации, и начнем мы с самых простых — констант.

Константы

Константы нужны для хранения одного значения в базе данных. Обычно в константах хранится редко изменяемая информация, например, название организации, фамилия руководителя, основная валюта организации, параметры конфигурации в целом и т.д.

В Конфигураторе список констант выглядит следующим образом:

В Константы
ОсноеночС?лад “ ОсновнадВалстаК,омг^ні*і ш ДатвЗлпрстаРйаакп^іоеаний

Учиіьіыггь?ыПіигтъЙОсгаі-иэаци»
Для каждой константы нужно обязательно указать ее имя и тип данных. Кроме того, желательно указывать синоним, комментарий и перечень подсистем, в которые она входит. Все это делается в окне свойств:



Обратите внимание на свойство «Допустимая длина» для констант строкового типа. Можно задать фиксированную или переменную длину константы. При фиксированной длине константа будет хранить заданное количество символов, а если реальное значение содержит меньше символов, то в конец строки будут добавлены пробелы до заданной длины. При переменной длине строки в базе данных хранится только реальное количество символов.

В конфигурациях на платформе 1 С:Предприятия 8.0 для редактирования значений констант рекомендуется создавать отдельную

Разработка в системе 1С:Предприятие 8.0

экранную форму, в которой все константы распределены по закладкам и для каждой существует свой элемент управления с понятной надписью и подробным описанием, как указано на следующем рисунке:



и зи

Обратите внимание, что приведенная форма констант является общей формой, но с таким же успехом можно было разместить поле для доступа к константе в любой другой форме, так как в 1С:Предприятии 8.0 экранные формы и объекты конфигурации разделены. Для данной экранной формы свойство ТипЗначения установлено в значение КонстантыНабор и установлен флажок «Использовать все константы».

Замечание. По сравнению с предыдущей версией 7.7 в 1С:Предприятии 8.0 больше не существует системной формы для редактирования всех констант единым списком, так как такое решение было признано недостаточно гибким. Нельзя было распределить все константы по группам, или, например, полностью скрыть некоторые константы от пользователя, чтобы он даже не догадывался об их существовании. Если все же, несмотря на эти недостатки, прежняя форма констант вас вполне устраивала, то вполне возможно создать такую же на платформе 8.0.

Обращение к константам из программы на встроенном языке производится очень просто, хотя этот способ и отличается от версии 7.7:

// чтение значения из константы

Название = Константы.НазваниеОрганизации.Получить();

// запись нового значения в константу

Константы.НазваниеОрганизации.Установить(НовоеНазвание);

Обратите внимание на слово Константы (а не Константа, как было в версии 7.7). Через такую конструкцию мы обращаемся к объекту КонстантыМенеджер (заметьте, что применяется множественное число), который позволяет затем обратиться к менеджеру конкретной константы по ее имени.

Если расшифровать приведенный выше пример, то станет более понятна взаимосвязь объектов:

//получаем объект для управления списком констант

КонстантыМенеджер = Константы;

//получаем объект для управления одной константой

КонстантаМенеджер = КонстантыМенеджер.НазваниеОрганизации;

//считываем значение константы из базы данных

Значение - КонстантаМенеджер.Получить();

//записываем новое значение константы в базу данных

КонстантаМенеджер.Установить(НовоеЗначение);

Как мы увидим дальше, такая схема распространяется на все объекты конфигурации и необходимо ее понимать. Объекты типа КонстантыМенеджер, СправочникиМенеджер, ДокументыМе-неджер и аналогичные им предназначены для обращения к списку менеджеров объектов конфигурации. Свойствами этих объектов являются другие объекты типа КонстантаМенеджер, Справоч-никМенеджер и ДокументМенеджер. В свою очередь эти объекты предназначены для обращения к менеджеру одного объекта конфигурации, например, менеджеру справочника Номенклатура.

Существуют свойства глобального контекста, ссылающиеся на объекты типа КонстантыМенеджер, СправочникиМенеджер, ДокументМенеджер и т.д., они называются односложно: Константы, Справочники, Документы. Это позволяет упростить написание программы и следующие примеры это демонстрируют:

Назв = Константы.НазваниеОрганизации.Получить();

СпрСотр = Справочники.Сотрудники;

ВсеДолжности = Справочники.Должности.Выбрать();

ДокНакл = Документы.РасходнаяНакладная;



Работа с константами производится с помощью нескольких объектов, и необходимо понимать их взаимосвязь, потому что подобная ситуация повторяется почти с каждым объектом конфигурации.

Разработка в системе 1С:Предприятие 8.0

Ниже дано описание объектов для работы с константами:

КонстантыМенеджер

Объект предоставляет доступ к списку констант. Через этот объект можно перебрать все константы с помощью конструкции «Для Каждого» или получить объект Константа-Менеджер для управления конкретной константой. Кроме того, данный объект позволяет создать объект Констан-тыНабор для одновременного чтения и записи сразу нескольких констант.

КонстантаМенеджер

Менеджер константы обеспечивает доступ к конкретной константе. Через него можно прочитать и установить ее значение с помощью методов Получить и Установить.

КонстантыНабор

Через этот объект можно получить доступ сразу к нескольким константам, но необязательно всем существующим в конфигурации.

Схематично взаимосвязь объектов для работы с константами можно отобразить следующим образом:

Сі*юг*#?і Настрой^ параметре* системы ^

Комментарии

Форма йтщьлр
n^acifCTOMbt Дамонстр^иіэнтіввКонФ'ИГііраііив _

* Справочная информация Включать ? содержат? сгфовь V Справочная информация Отмыть

Работу с набором констант продемонстрируем на следующем примере:

//создаем набор из двух констант

//обратите внимание, что значений констант в наборе еще нет Набор = Константы.СоздатьНабор("Руководитель,ИНН");

Набор.Прочитать(); //прочитать из базы сразу две константы

//изменить значение констант в наборе (не в базе)

Набор.Руководитель = "Иванов И.И.";

Набор.ИНН = ”1234567890”;

Набор.Записать(); //записать в базу сразу две константы

Главное, что следует запомнить, — при использовании набора все входящие в него константы считываются и записываются вместе в одной транзакции, т.е. операция над несколькими константами производится одновременно.

Константы — слишком простой объект для полного понимания ? объектной модели 1 С:Предприятия 8.0. Далее на примере справочников мы рассмотрим новую объектную модель во всей ее полноте.

Справочники

Справочники являются основным механизмом хранения условнопостоянной информации. Справочники часто используются в тех случаях, когда необходимо исключить неоднозначный ввод информации. Каждый справочник представляет собой список однородных объектов: сотрудников, организаций, товаров и т.д. Такие объекты называются элементами справочника.

Замечание. Для упрощения понимания можно считать, что справочник — это обычная таблица с заданными колонками. Но в 1С:Предприятии 8.0 есть возможность создания иерархических справочников и табличных частей у справочников. Отсюда можно сделать вывод, что справочник — это не просто таблица, а достаточно сложный механизм хранения данных.

На этапе разработки можно описать, какими свойствами обладает справочник. К настраиваемым свойствам относятся длина и тип кода, количество уровней иерархии, поддержка уникальности кодов, перечень реквизитов справочника и его табличных частей, а также другие параметры.

Структура справочника

Структура справочника определяет состав хранимой информации и настраивается в Конфигураторе. Под структурой понимаются в первую очередь состав реквизитов и табличных частей справочника. В более широком смысле в понятие структуры справочника включают тип и длину кода, длину наименования, количество уровней иерархии и т.д.

Во всех справочниках есть системные реквизиты Код и Наименование (если только у них не установлена нулевая длина). Действительно, практически любой объект из реальной жизни характеризуется этими свойствами. Например, для сотрудников кодом может выступать табельный номер, а наименованием — фамилия, имя и отчество (ФИО).

Код элемента справочника может быть как числовым, так и строковым. Система 1 С:Предприятие 8.0 предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов новым элементам, контроль уникальности кода и т.д.

Помимо кода и наименования, в справочниках 1 ^Предприятия 8.0 может храниться любая дополнительная информация об объектах предметной области, для чего в Конфигураторе настраивается список реквизитов и табличных частей. Используя механизм справочников легко организовать, например, картотеку сотрудников. Почти наверняка справочник Сотрудники, кроме встроенных реквизитов Код и Наименование, будет иметь какие-то дополнительные реквизиты, например, Должность, Оклад, Адрес, ДатаРождения и т.д.

Для каждого реквизита справочника нужно указать его тип данных, например, «число», «строка», «дата», «булево». Это примитивные типы данных, но можно указать и ссылочные типы данных. Например, реквизит Должность имеет тип данных «Справочник-Ссылка.Должности». В этом случае, значение реквизита будет выбираться из справочника Должности. Так реализуется простейшая связь между справочниками и другими объектами, когда значения реквизита объекта выбираются из справочника.

Новой возможностью для 1 С:Предприятия 8.0 является то, что у реквизита справочника (и реквизитов других объектов) может быть составной тип данных. Это означает, что он может содержать значения разных типов данных, перечень которых задается в Конфигураторе.

Например, реквизит МестоРаботы в справочнике Физлица может выбираться, во-первых, из справочника Организации, если данный человек работает в одной из наших фирм (входящих в наш холдинг), во-вторых, из справочника Контрагенты, если он работает во внешней организации, и в-третьих, он может быть строкового типа, если требуется просто указать место работы сотрудника без ссылок на другие справочники.

Разработка в системе 1 С:Предприятие 8.0

Ниже показаны свойства реквизита МестоРаботы, имеющего составной тип данных:

Синоним Место ран игы

Кемментдрш Место ji-ьі сотр#>*«йэ (сргашэация кситрдгтг мои отрока)

Uotwjbsoew# Для^л.- »мгз *

Индексировать Не ищет кюветъ _ *

w Гил дойных _

Tt*i СП]Мвлчни<.Ссы(кв f онгрзгентъі Спраесн-ишСсыл^а ССтроке
Обратите внимание, что составной тип данных для реквизита МестоРаботы включает три типа:

• СправочникСсылка. Контрагенты,

• СправочникСсылка. Организации,

• Строка.

Предопределенные элементы

Еще на этапе разработки конфигурации в справочник могут быть введены предопределенные элементы и группы справочника. Эти элементы имеют имена, по которым к ним производится обращение из программы. Предопределенные элементы справочника имеет смысл создавать, если сама конфигурация ориентирована на их использование.

Например, иерархический справочник Сотрудники может иметь две предопределенные группы: Работающие и Уволенные. Эти группы будут использованы в приказе о приеме на работу и приказе об увольнении. При приеме сотрудник добавляется в группу Работающие, а при увольнении переносится в группу Уволенные.

Ниже показано окно для редактирования предопределенных элементов справочника:

Г ^

Дебете и*

Имя

П НЛРг*=НП>1

1 Работающие сотруа**іки

2 Увг.прн^іе сотрудники


Код Наименование

РсФотчіигчл^е
Приведем другие примеры предопределенных элементов и групп:

• В справочник Номенклатура может быть добавлена предопределенная группа «Снятые с продажи», которая будет содержать позиции номенклатуры, исключенные из прайс-листа.

• В справочник Контрагенты может быть добавлен предопределенный элемент «Розничный покупатель», который будет использоваться в документе РеализацияТовара, если покупатель не является организацией.

Обращение к предопределенным элементам из программного модуля реализуется по их именам следующим образом:

ГруппаРаботающие = Справочники.Сотрудники.Работающие;

Подчиненные справочники

Между справочниками может быть установлено отношение подчиненности. В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца. Часто можно сказать, что элементы одного справочника принадлежат элементам другого.

Например, в системе может быть справочник РасчетныеСчета, тогда его можно сделать подчиненным справочнику Контрагенты. Это означает, что «Контрагент владеет расчетными счетами, а расчетные счета принадлежат контрагенту»

В 1 (ЛПредприятии 8.0 у справочника может быть несколько владельцев, то есть справочник может быть подчинен сразу нескольким справочникам или другим объектам. Но каждый элемент

подчиненного справочника имеет одного и только одного владельца, который хранится в одном из объектов-владельцев.

Например, справочник РасчетныеСчета может быть одновременно подчинен справочнику Контрагенты и справочнику Фирмы. Структура расчетного счета одинакова при любом владельце, поэтому целесообразно завести не два разных справочника, каждый из которых подчинен или справочнику Фирмы, или справочнику Контрагенты, а один справочник РасчетныеСчета, подчиненный сразу двум справочникам. При этом каждый расчетный счет будет принадлежать только одному владельцу (или фирме, или контрагенту). Такая схема позволит избавиться от дублирования кода и упростить конфигурацию.

Справочник может быть подчинен не только другим справочникам, но также планам видов характеристик и планам счетов. Назначение такого подчиненного справочника — хранение подчиненных объектов о конкретной характеристике или о конкретном счете.

Например, можно завести справочник ЗначенияДопСвойств, подчиненный плану видов характеристик ДопСвойства. Это означает, что в справочнике будет храниться перечень возможных значений для каждой характеристики, например, список цветов (красный, зеленый, синий) для такой характеристики, как «Цвет», или для характеристики «Тип разъема» значения «PS/2», «USB» и т.д.

В 1С:Предприятии 8.0 для подчиненных справочников реализовано свойство ИспользованиеПодчинения. Оно позволяет управлять ограничением, накладываемым на владельцев. В качестве владельца могут использоваться только группы, только элементы или комбинированный вариант — группы и элементы. Если у справочника несколько владельцев, то ограничение применяется к каждому из них.

Среди различных вариантов настройки серий кодов есть вариант «В пределах подчинения владельцу». В иерархических подчиненных справочниках он обеспечивает автоматическую нумерацию и контроль уникальности кодов среди элементов с одинаковым владельцем, но разными родителями.

Табличные части

В 1 ^Предприятии 8.0 появилась возможность для справочника создать одну или несколько табличных частей. Эту возможность рекомендуется использовать для отражения информации, связанной с данным элементом, но не имеющей собственной объектной сущности (для таких объектов рекомендуется завести подчиненный справочник). Например, для справочника Товары может быть создана табличная часть ЕдиницыИзмерения.

Обратите внимание, что при использовании табличной части уже нельзя будет ссылаться на строки табличной части, т.е. нельзя будет создать реквизит, соответствующий понятию «строка табличной части».

Например, если для справочника Сотрудники завести табличную часть Образование (вместо подчиненного справочника), то для реквизитов документов мы не сможем выбрать тип, аналогичный понятию «место учебы сотрудника». Это надо учитывать при выборе между подчиненным справочником и табличной частью.

Если даже в перспективе может возникнуть потребность ссылаться на подчиненные объекты, например, создавать ссылающиеся на них реквизиты документов или других справочников, то лучше сразу завести подчиненный справочник. Если же ссылка на такие сведения не имеет смысла и никогда не может быть типом какого-либо реквизита, тогда можно завести табличную часть.

Ниже представлен перечень ситуаций и наиболее корректный выбор между подчиненным справочником и табличной частью. Просьба изучить эти ситуации очень тщательно, чтобы не допускать ошибок при выборе.

Ситуация 1

В базе данных необходимо хранить список расчетных счетов каждого контрагента. Почти наверняка в платежных документах будет необходимо, кроме контрагента, указывать его расчетный счет. Такая информация имеет четкую объектную природу и может быть идентифицирована как «Расчетный счет».

Решение: Справочник Контрагенты и подчиненный ему справочник РасчетныеСчета с полями Банк, Номер, КоррСчет.

Ситуация 2

Допустим, для справочника Номенклатура есть потребность хранить список единиц измерения для каждого товара с указанием коэффициента пересчета в основную единицу измерения. Эти сведения подбираются из справочника ЕдиницыИзмерения, который хранит все существующие в природе единицы измерений. Каждая строка такого подчиненного списка не имеет собственной объектной сущности, а нужна только для пересчета из одной единицы измерения в другую.

Решение: Справочник Номенклатура и табличная часть ЕдиницыИзмерения с полями ЕдиницаИзмерения и КоэффициентПересчета.

Ситуация 3

Допустим, встроенной системы задания прав пользователей не хватает для некоторых специальных приложений. Например, часто требуется разработать механизм утверждения документов разными пользователями. Тогда для сотрудника нужно хранить список документов, которые он может утверждать, и с этим отлично справится табличная часть УтверждаемыеДокументы справочника Сотрудники. Такая информация не имеет объектной природы, а просто связывает документ и сотрудника, поэтому вряд ли понадобится когда-либо в будущем создавать ссылки на нее.

Решение: Справочник Сотрудники и табличная часть УтверждаемыеДокументы с полем Документ и флажком Утверждается. Заметим, что эту задачу также можно решить с использование регистров сведений, описанных в отдельной главе.

Ситуация 4

Для справочника Сотрудники требуется хранить сведения о составе семьи сотрудника, т.е. вносить информацию о чле-

членах семьи и их родственных отношениях к сотруднику (муж, жена, сын, дочь и т.д.). Обычно эта списковая информация полностью подчинена элементу справочника Сотрудники, и возникает мысль о том, чтобы завести табличную часть. Но если подумать, то такая информация имеет четкую объектную природу и может быть идентифицирована как «Член семьи». Для некоторых приложений может потребоваться создавать ссылки на членов семьи сотрудника. Аналогичная ситуация наблюдается со сведениям об образовании и о предыдущих местах работы сотрудника.

Решение: Выбор между подчиненным справочником и табличной частью зависит от назначения конфигурации. Если в будущем может возникнуть потребность создавать ссылки на такие сведения, то лучше завести подчиненные справочники СоставСемьи, Образование и Трудовая Деятельность.

Иерархические справочники

Список элементов справочника в системе 1С:Предприятие 8.0 может быть иерархическим (или многоуровневым). Использование иерархических справочников позволяет сгруппировать элементы справочника по какому-либо признаку с нужной степенью детализации.

Иерархический справочник может быть двух видов:

• Элементы и группы

В первом случае все элементы иерархического справочника разделяются на «просто» элементы справочника и группы справочника. Группы могут отличаться по структуре от обычных элементов, т.е. могут содержать другой состав реквизитов. Для каждого реквизита указывается, относится ли он только к элементу, только к группе или к обоим. Примером иерархического справочника с группами может служить справочник Сотрудники, в котором есть группы Штатные, Совместители и Уволенные.

• Только элементы

Во втором случае иерархический справочник состоит только из элементов. Любой элемент может выполнять функцию

Разработка в системе 1 С:Предприятие 8.0

группы, т.е. он может быть родительским элементом для других элементов этого же справочника. Например, по такому принципу можно организовать справочник Подразделения. В любой момент времени какой-нибудь отдел может быть разделен внутри себя на несколько подотделов, и отразить это в справочнике не составит никакого труда. Другой пример — справочник Районы, который отражает территориальное деление города. Элементы верхнего уровня представляют административные округа, на втором уровне содержатся районы, на третьем уровне — микрорайоны.

Главное отличие этих двух видов иерархического справочника заключается в следующем:

• в первом случае группы и элементы справочника являются разными сущностями (у них обычно разный состав реквизитов), например, группа товаров и товар, группа сотрудников и сотрудник.

• во втором случае справочник содержит информацию о сходных сущностях одной природы, но разного уровня детализации, например, отдел и подотдел, район и микрорайон.

Максимально возможное количество уровней иерархии справочника задается в Конфигураторе. Кроме того, в 1 ^Предприятии 8.0 появилась возможность неограниченной вложенности групп и элементов друг в друга. Этот вариант устанавливается по умолчанию, и рекомендуется применять именно его, если не требуется в обязательном порядке ограничить глубину вложенности уровней справочника.

Элементы и группы в иерархическом справочнике можно переносить из одного уровня иерархии в другой. Это можно делать программно или интерактивно. При интерактивном переносе элементов можно воспользоваться специальной кнопкой на панели инструментов справочника. Для программного переноса элемента достаточно сменить у него родителя и записать элемент. Если меняется родитель у группы (или родительского элемента), то группа (элемент) переносится в другую ветвь справочника со всеми своими подчиненными элементами.

Отметим, что для элементов самого верхнего уровня поле Родитель имеет значение пустой ссылки на справочник.

Экранные формы

У справочника может быть несколько экранных форм. Даже если разработчик не создал ни одной экранной формы для справочника, то они будут сгенерированы «на лету» при выполнении программы. Конечно, автоматически созданная экранная форма может быть не самой удобной для пользователя, поэтому, когда это требуется, рекомендуется создавать собственные экранные формы с эргономичным интерфейсом.

Ниже показана закладка свойств справочника, посвященная его экранным формам:

Спр«очннг Номенклатур* _ П X
Основные Радлтіфюмние - -
Иерархия 0 списке
Владельцы * Б диалоге
Данные Обои«н способами
Нумерация Осноеліе Фермы
> Фор№і Сгые*-а Ф орг іэГпі**г s * я
і ММАТКі 1
1 Выбора ФсрмаЕг-пэрн X 'Ч 1
I Піхснсгег?ы 1
1 ?ьоора группы Фг рмвБь с эраГf к я 1
1 И вод не основами 1
1 Элемента Ф c-пзЭіс п-гтс X я 1
1 вам 1
Интерфейсы Груты Фзр йГслпы X я
Прочее ФорнаСписла

ФориаЭ іемента

Ф РМоГрЦГЖІЬ

Ф ормс?гыбораГ рідіпы ФсрмаБьбора
Действия * <Назао Дапее> ^аірыть С пре et a
1_-¦ —...... ..........і
Как и в версии 7.7, в 1С:Предприятии 8.0 есть возможность редактировать элемент прямо в списке, в диалоге или обоими способами. У справочника может быть любое количество экранных форм, и некоторые из них назначаются в качестве основных для определенных действий.

Ниже поясняется назначение различных экранных форм справочника:

Форма списка

Отображает список элементов справочника, содержит средства сортировки, поиска и отбора элементов. Из списка элементов можно открыть форму элемента (группы) или редактировать данные прямо в табличном поле. Это регулируется свойством табличного поля СпособРедактирова-ния.

Форма элемента

Отображает и позволяет редактировать сведения об одном элементе справочника. Если у справочника много реквизитов, то они могут быть распределены по закладкам.

Форма группы

Отображает и позволяет редактировать сведения о группе справочника. Группы могут иметь другой состав реквизитов по сравнению с элементами.

Форма выбора элемента

Предназначена для выбора элемента из списка. Такая форма вызывается при выборе значения, например, в поле ввода, связанного с реквизитом документа.

Форма выбора группы

Предназначена для выбора группы из списка. Выбор группы может понадобиться, например, для отчета по товарам, который позволяет вывести не все товары, а только товары заданной группы. Эта форма также используется при интерактивном переносе элемента в другую группу.

Произвольная форма

Данная форма не вызывается системой автоматически, как предыдущие типы форм. Назначение произвольной формы и точки ее вызова определяет разработчик. Основное отличие произвольной формы от других состоит в том, что для нее не назначен основной реквизит, следовательно, контекст формы не включает дополнительные свойства и методы, характерные для основного реквизита.

Обратите внимание, что в любой экранной форме можно вывести список элементов справочника, поскольку в новой версии 1С:Предприятия экранные формы отделены от объектов конфигурации. Для этого нужно всего лишь расположить в форме элемент управления ТабличноеПоле и в его свойстве ТипЗначения выбрать тип «СправочникСписок.<ИмяСправочника>».

Приемы программирования

С помощью встроенного языка 1C: Предприятия 8.0 можно выполнять различные операции над справочниками: создавать, изменять и удалять элементы, искать нужный элемент, перебирать элементы в цикле и т.д.

Работа со справочниками из программы производится с помощью нескольких объектов. Каждый объект имеет свое назначение, собственные свойства и методы.

Ниже описываются эти объекты и взаимосвязи между ними:

СправочникиМенеджер

Обеспечивает доступ ко всем справочникам конфигурации. Свойства этого объекта совпадают с именами справочников и содержат объекты типа СправочникМенеджер.

СправочникМенеджер

Обеспечивает доступ к операциям над справочником как множеством элементов. Через методы этого объекта можно осуществлять поиск, получать выборку, создавать новые элементы или группы, обращаться к формам и макетам справочника.

СправочникСсылка

Данный объект однозначно идентифицирует элемент (группу) справочника и позволяет обращаться к нему в режиме «только чтение». Через свойства и методы этого объекта можно прочитать реквизиты элемента (группы), обратиться к его табличным частям. Значение этого типа хранится в реквизитах, ссылающихся на элементы данного справочника, например, в реквизите Сотрудник документа ПриемНа-

Разработка в системе 1 С:Предприятие 8.0

Работу хранится ссылка на конкретный элемент справочника Сотрудники.

СправочникОбъект

Предоставляет доступ к элементу с возможностью записи. Данный объект содержит методы, влияющие на элемент в базе данных, например, методы Записать и Удалить.

СправочникВыборка

Предоставляет возможность обхода (перебора) элементов справочника. Выборка может быть прямой или иерархической (если справочник многоуровневый).

СправочникСписок

Объект для управления списком элементов в табличном поле. Позволяет управлять колонками, отбором и сортировкой в списке.

Из одних объектов с помощью определенных методов или свойств можно получить другие объекты, как показано на следующей схеме:
Замечание. На схеме показаны не все возможные взаимосвязи. Например, метод Скопировать существует не только у объекта СправочникСсылка, но и у самого объекта СправочникОбъект. Кроме того, у объекта СправочникМенеджер есть методы НайтиПоНаименованию и НайтиПоРеквизиту, которые действуют аналогично методу НайтиПоКоду и возвращают ссылку на найденный элемент или пустую ссылку, если элемент не найден.

Продемонстрируем на примерах выполнение типичных операций со справочниками.

Обращение к менеджеру справочника

Обращение к менеджеру справочника производится следующим образом:

СпрСотр = Справочники.Сотрудники;

СпрТовары = Справочники[”Номенклатура”];

Обращение к справочнику в версии 8.0 отличается от версии 7.7, в которой использовалась функция СоздатьОбъект. В новой версии используется свойство глобального контекста Справочники, которое предоставляет доступ к объекту типа СправочникиМе-неджер (обратите внимание на множественное число). Данный объект через свои свойства предоставляет доступ к объектам типа СправочникМенеджер (единственное число).

Объект СправочникиМенеджер является коллекцией значений и позволяет обратиться к конкретному элементу коллекции через приведенные выше конструкции. Хотя эти две конструкции функционально эквивалентны, но нужно знать различные варианты их использования:

СпрСотр = Новый Справочники.Сотрудники; // так нельзя!!

СпрСотр = Справочники.Сотрудники; //а вот так правильно

Выборка элементов справочника

Перебор элементов справочника производится через объект СправочникВыборка, который возвращается при вызове методов Выбрать и ВыбратьИерархически объекта СправочникМе-неджер:

СпрВыборка = Справочники.Номенклатура.Выбрать();

Пока СпрВыборка. Следующий () Цикл

Сообщить(СпрВыборка.Код + " " + СпрВыборка.Наименование);

//перебор строк табличной части

Для Каждого стр Из СпрВыборка.ЕдиницыИзмерения Цикл Сообщить(" " + стр.ЕдиницаИзмерения);

КонецЦикла;

КонецЦикла;

Отличие метода ВыбратьИерархически от метода Выбрать заключается в том, что выборка формируется с учетом иерархии элементов, то есть сначала в выборке располагается родительский элемент 1-го уровня, за ним следуют его дочерние элементы, затем следующий родительский элемент 1-го уровня и т.д. А при использовании метода Выбрать элементы в выборке следуют в обычном порядке.

Ниже видна разница в работе этих методов (жирным шрифтом выделены группы справочника):
,ii метод Выбрать метод ВыбратьИерархически
1С:Бухгалтерия 7.7 Программное обеспечение
li Windows XP 1С:Бухгалтерия 7.7
I 1 Доставка Windows XP
| Инсталляция ПО Клавиатуры
1 ' Клавиатура Apple Клавиатура
Клавиатура PS/2 Клавиатура PS/2
Клавиатуры Мониторы
Монитор 15' LG Монитор 15' LG
Монитор 17' Philips Монитор 17' Philips
Мониторы Системные блоки
Программное обеспечение Сист. блок ВА410
Сист. блок ВА410 Сист. блок NetVista
Сист. блок NetVista Услуги
метод Выбрать метод ВыбратьИерархически
Системные блоки

Услуги
Доставка

Инсталляция ПО
Методы Выбрать и ВыбратьИерархически позволяют отобрать только нужные элементы, например, входящие в определенную группу иерархического справочника или принадлежащие определенному владельцу.

Синтаксическая диаграмма метода Выбрать и ВыбратьИерар-хически такова (на примере метода Выбрать):

Выбрать(<Родитель>/ <Владелец>, <Отбор>, <Порядок>);

Ниже поясняется назначение каждого параметра:

Родитель

Ссылка на родительский элемент или группу. В выборку попадут только элементы, принадлежащие заданному элементу (группе). Параметр имеет смысл только для иерархических справочников.

Владелец

Ссылка на элемент справочника-владельца. В выборку попадут только элементы, принадлежащие заданному элемен-ту-владельцу. Параметр имеет смысл только для подчиненных справочников.

Отбор

Структура, которая позволяет отобрать элементы справочника с заданным значением в определенном реквизите. Ключ структуры содержит имя реквизита, а значение структуры задает значение отбора. В структуре могут использоваться только реквизиты Код, Наименование и реквизиты с установленным признаком индексирования. Обратите внимание, что структура может содержать только один элемент. Для отбора элементов по нескольким признакам можно использовать запросы.

Порядок

Строка, задающая условие упорядочивания по реквизиту, например, «Оклад Убыв». Упорядочивание может быть ис-

Разработка в системе 1 (лПредприятие 8.0

пользовано только для индексированных реквизитов (в том числе для кода и наименования).

Например, выберем из справочника Номенклатура только мониторы и упорядочим их по убыванию цены:

СпрНоменклатура = Справочники. Номенклатура;

ГруппаМониторы = СпрНоменклатура.НайтиПоНаименованию("Монитср>ы"); СпрВыборка = СпрНоменклатура.Выбрать(ГруппаМониторы,,,"Цена Убыв"); Пока СпрВыборка.Следующий() Цикл

КонецЦикла;

В следующем примере из справочника Семья, подчиненного справочнику Сотрудники, выбираются все сыновья определенного сотрудника. Здесь используется одновременный отбор по владельцу и по реквизиту ТипРодства:

Отбор = Новый Структура) "ТипРодства") ;

Отбор.ТипРодства = Перечисления.ТипРодства,Сын;

СпрВыборка = Справочники.Семья.Выбрать(,ВыбСотр,Отбор,);

Создание элементов и групп справочника

Создание нового элемента или группы производится через специальный объект СправочникОбъект. Обратите внимание, что другим способом создать элемент справочника нельзя.

Ниже приведен пример создания группы Прочие справочника Сотрудники и элемента в этой группе:

НоваяГруппа = Справочники.Сотрудники.СоздатьГруппу();

НоваяГруппа.Код = 1;

НоваяГруппа.Наименование = "Прочие";

НоваяГруппа.Записать();

НовыйСотрудник = Справочники.Сотрудники.СоздатьЭлемент(); НовыйСотрудник.Код = 100;

НовыйСотрудник.Наименование = "Иванов Иван Иванович"; НовыйСотрудник.Родитель = НоваяГруппа.Ссылка;

НовыйСотрудник.Записать();

Поиск в справочнике

Поиск элемента или группы производится методами НайтиПо-Коду, НайтиПоНаименованию и НайтиПоРеквизиту. Эти методы возвращают ссылку на найденный элемент или пустую ссылку, если элемент не найден. Проверка на пустую ссылку производит-

ся методом Пустая, который возвращает значение Истина, если ссылка действительно пустая.

Следующий пример демонстрирует применение этих методов:

СотрСсылка = Справочники.Сотрудники.НайтиПоКоду(100);

Если НЕ СотрСсылка.Пустая() Тогда

Сообщить("Найден сотрудник с кодом 100: " +

СотрСсылка.Наименование);

КонецЕсли;

//2-й вариант проверки на пустую ссылку

Если СотрСсылка = Справочники.Сотрудники.ПустаяСсылка() Тогда КонецЕсли;

Удаление элемента или группы справочника

Удаление элемента справочника производится с помощью объекта СправочникОбъект и только так. Другим способом удалить элемент справочника нельзя.

Следует различать пометку на удаление и непосредственное удаление объекта. При установке пометки на удаление элемент (группа) остается в справочнике, но отображается с особым значком. Он также участвует в переборе и в общем случае виден пользователю.

При непосредственном удалении элемент справочника удаляется из базы данных. В этом случае на него не должно быть ссылок в других объектах базы данных, например, документах, иначе эти ссылки станут недействительными, т.е. нарушится ссылочная целостность базы данных. Чтобы этого не произошло, есть возможность пометки элемента на удаление с последующим его окончательным удалением через команду меню «Операции -> Удаление помеченных объектов». В этом случае система проверит правильность удаления объекта с контролем ссылочной целостности базы данных.

Следующий пример находит элемент с определенный кодом и демонстрирует два способа пометки на удаление и непосредственное удаление объекта:

СотрСсылка = Справочники.Сотрудники.НайтиПоКоду(100); сли Не СотрСсылка.Пустая () Тогда

СотрОбъект = Сотр.ПолучитьОбъект();

//1-й вариант пометки на удаление СотрОбъект.ПометкаУдапения = Истина;

СотрОбъект.Записать();

//2-й вариант пометки на удаление СотрОбъект.УстановитьПометкуУдаления(Истина);

//3-й вариант: непосредственное удаление объекта СотрОбъект.Удалить();

КонецЕсли;

Пометка на удаление (снятие пометки) с помощью метода УстановитьПометкуУдаления отличается от первого способа, при котором системному полю ПометкаУдаления присваивается какое-либо значение. Второй параметр этого метода позволяет установить (снять) пометку на удаление для всех подчиненных элементов, если справочник является иерархическим.

Открытие форм справочника

Часто требуется программно открыть какую-либо форму справочника, например, при нажатии на клавишу Подбор в документах для заполнения табличной части.

Рассмотрим возможные варианты открытия различных форм справочника:

//обращение к форме по имени

Форма = Справочники.Сотрудники.Пояучитьформу("ФормаДляМенеджера"); Форма.Открыть();

//открыть основную форму списка

Справочники.Сотрудники.ПолучитьформуСписка().Открыть();

//открыть подбор товара из документа,

//текущая форма будет владельцем открываемой формы

Форма = Справочники.Номенклатура.ПолучитьФормуВыбора(, ЭтаФорма) ;

Если НЕ Форма.Открыта() Тогда //если она еще не открыта

Форма.ИмяСохраненияПоложенияОкна = "НоменклатураПодбор";

КонецЕсли;

//установить свойства формы до ее открытия Форма. РежимВыбора = Истина , -Форма.ЗакрыватьПриВыборе = Ложь;

Форма. РазрешитьСостояниеПрикрепленное = Истина,-

//открыть форму или активизировать уже открытую форму Форма.Открыть();

Работа с табличным частями

Обращение к табличным частям справочника производится через их имена. Для обхода строк табличной части рекомендуется применять конструкцию «Для Каждого...».

Ниже показан пример обработки табличной части Утверждае-мыеДокументы для справочника Сотрудники:

Сообщить(”Выбранный сотрудник утверждает следующие документы:”);

Для Каждого УтвДок Из ВыбСотр.УтверждаемыеДокументы Цикл Сообщить(УтвДок.Документ);

КонецЦикла;

Модуль объекта

В версии 8.0 введено такое понятие как модуль объекта, который отличается от модуля формы элемента справочника. В новой версии экранные формы отделены от самих объектов конфигурации, поэтому необходимо понимать предназначение модуля объекта. Дело в том, что именно в нем располагаются обработчики событий, связанных с элементом справочника.

В версии 8.0 существуют следующие события, обработчики которых располагаются в модуле справочника:

ПриКопировании

Событие возникает при создании элемента справочника копированием. В обработчике события ПриКопировании можно вмешаться в этот процесс и более интеллектуально заполнить некоторые реквизиты элемента справочника.

ПередЗаписью

Процедура-обработчик вызывается после начала транзакции, но до начала записи элемента справочника. В данном обработчике можно отказаться от записи элемента.

ПриЗаписи

Событие возникает после записи элемента справочника в базу данных, но до окончания транзакции записи. В данном обработчике также можно отказаться от записи элемента.

ПередУдалением

Событие возникает перед непосредственным удалением

Разработка в системе 1 С: Предприятие 8.0

элемента или группы справочника из базы данных. В обработчике события это действие можно отменить.

ПриУстановкеНовогоКода

Событие возникает в момент, когда выполняется установка нового кода элемента справочника.

ОбработкаЗаполнения

Событие возникает при вводе элемента справочника на основании, а также при выполнении метода Заполнить. В процедуре-обработчике этого события должен быть описан алгоритм заполнения реквизитов элемента справочника на основании переданного значения.

Обработчики этих событий должны располагаться в модуле объекта и только там, независимо от наличия у справочника различных форм. Обработчики событий будут вызываться всегда при наступлении указанных событий, даже если событие инициировано программными вызовами, например методами Записать и Удалить. Это важное отличие в обработке событий по сравнению с версией 7.7, в которой такие события вызывались только при интерактивных действиях пользователя.

Приведем пример использования обработчика события. Допустим, в конфигурации категорически не допускается ввод позиции номенклатуры без указания основной единицы измерения. Тогда в модуле объекта справочника Номенклатура необходимо предусмотреть обработку события ПередЗаписью:

Процедура ПередЗаписью(Отказ)

Если ЭтоГруппа = Ложь И ЕдиницаИзмерения.Пустая() Тогда Сообщить(”Не указана основная ед. измерения!”);

Отказ = Истина;

КонецЕсли;

КонецПроцедуры

Обратите внимание, что реквизит ЕдиницаИзмерения определен только для элементов справочника Номенклатура, поэтому сначала проверяется, что записывается именно элемент, а не группа (условие «ЭтоГруппа = Ложь»).

Также заметьте, что вторая часть условия в операторе Если не выполняется, если первое условие не выполнено. Это происходит, потому, что, как уже говорилось в главе «Встроенный язык», в 1С:Предприятии 8.0 применяется сокращенное вычисление усло-

вий. Если после вычисления части составного условия уже можно определить результат всего условия, то остальная часть условия не вычисляется. Если бы в нашем примере для группы вычислялась вторая часть условия, то выдавалась бы ошибка, поскольку реквизит ЕдиницаИзмерения для групп не определен.

Важные отличия от версии 7.7

Общие отличия:

• Справочники могут иметь несколько табличных частей.

• Справочник может быть подчинен нескольким владельцам. В качестве владельца может выступать другой справочник, план видов характеристик или план счетов.

• У групп справочника-владельца тоже могут быть подчиненные элементы в других справочниках. Эта возможность включается в свойствах справочника.

• В справочнике с иерархией элементов они могут являться родителями, т.е. у них могут быть подчиненные элементы. Глубину иерархии справочника можно сделать неограниченной.

• У справочников могут быть предопределенные элементы и группы, задаваемые еще на этапе разработки конфигурации.

• Модуль справочника не то же самое, что модуль любой из его форм.

• Список элементов справочника может быть показан в любом табличном поле (в любой форме), если у него соответствующим образом указано свойство ТипЗначения.

• Элемент справочника может быть введен на основании документа, счета и других объектов, или наоборот.

• Реквизиты справочника, как и других объектов, могут быть составного типа данных, перечень возможных типов указывается в свойствах реквизита.

• Максимальная длина наименования увеличена до 150 символов, максимальная длина кода — 50 символов.

• Нумерация элементов в подчиненном иерархическом справочнике может быть установлена в пределах подчинения владель-

ДУ-

Отличия в свойствах и методах:

• Вместо метода ПометкаУдаленияО для объекта типа

СправочникОбъект введено свойство ПометкаУдаления, которое имеет тип «булево» и доступно для чтения и записи. Если ему присвоить значение Истина и записать объект, то элемент будет помечен на удаление. Метод Удалить с параметром 0 уже не применяется для установки пометки удаления. Для установки пометки удаления также можно использовать метод УстановитьПометкуУдаления.

• Вместо метода ЭтоГруппа() введено свойство ЭтоГруппа типа «булево», доступное только для чтения.

• Методы Выбрать и ВыбратьИерархически возвращают объект типа СправочникВыборка (см. выше взаимосвязь объектов).

• Методы НайтиПоКоду, НайтиПоНаименованию и НайтиПо-Реквизиту возвращают ссылку на найденный элемент или пустую ссылку, если элемент не найден. В любом случае возвращается объект типа СправочникСсылка.

• Для получения пустой ссылки вместо несуществующей теперь функции ПолучитьПустоеЗначение необходимо использовать метод ПустаяСсылка.

• Вместо метода ПринадлежшТруппе введен метод Принадле-житЭлементу, поскольку иерархические справочники могут состоять только из элементов (без групп).

• Вместо метода Блокировка с разными параметрами нужно применять методы Заблокировать, Разблокировать и Заблокирован. Последний метод проверяет, удалось ли установить блокировку элемента данным объектом Справочник-Объект.

• Для обращения к метаданным у объектов СправочникСсылка и СправочникОбъект существует метод Метаданные, который возвращает объект специального типа для описания метадан-ного.

Документы и журналы документов

Документы предназначены для хранения информации обо всех событиях, происходящих на предприятии и имеющих смысл с точки зрения экономики. При помощи документов отражаются платежи с расчетного счета и операции по кассе, кадровые перемещения сотрудников и движения товаров, а также другие события.

Типичными примерами документов являются платежное поручение, счет, приходная накладная, расходная накладная, приходный кассовый ордер. Каждый документ предназначен для отражения своего типа событий, что определяет его структуру и свойства.

Наиболее важными характеристиками документа, отличающими его от других объектов, является наличие у него номера и даты. В 1С:Предприятии 8.0 значения типа «дата» включают в себя также и время.

Дата и время — наиболее важные характеристики документов. Все документы вне зависимости от вида образуют единую хронологическую последовательность. Фактически эта последовательность отражает последовательность событий — так, как они происходили реально. Внутри даты последовательность документов определяется их временем, при этом время документа является не столько средством отражения реального (астрономического) времени ввода документа, сколько средством, позволяющим четко упорядочить документы внутри одной даты. Если получится так, что два документа имеют одинаковую дату и время, то они все равно выстраиваются в последовательность.

Данные, вводимые в реквизиты документа, обычно содержат информацию о событии, например, в расходной накладной — информацию о том, с какого склада, каких товаров и сколько отгружено; в приказе о приеме на работу — информацию о сотруднике, оклад и другие сведения; в договоре с клиентом — условия договора, график плановых платежей и т.д.

Кроме собственно записи, для документа весьма важным аспектом является его проведение. Именно при проведении документ обычно отражает зафиксированное им событие в регистрах

Разработка в системе 1 (лПредприятие 8.0

1 (лПредприятия 80, например, в виде движений по регистру бухгалтерии и/или движений по регистру остатков товаров.

Структура документа

Под структурой документа в первую очередь понимаются реквизиты шапки и табличные части, а также тип и длина номера документа. В Конфигураторе настраивается множество дополнительных параметров документов, например, возможность его проведения и перечень регистров, по которым он может делать движения, экранные формы и макеты (шаблоны печатных форм), последовательности, в которые входит данный документ и т.д

В отличие от версии 7 7, в 1 С:Предприятии 8.0 у документов может быть несколько табличных частей, различных по структуре. Для некоторых документов эта возможность будет полезной в целях более полного отражения содержания хозяйственной операции

Ниже показана закладка «Данные», предназначенная для редактирования списка реквизитов и табличных частей документа:

S Дикумеітг П^икздиіяНіииим _ ? X
Основные

^ Данные

Нумерация
? в р

Контрагент
Движения Склад
Последовательности - С^маДок
Журналы - Организация
Макеты
Подсистемы а И

В
Вида на основании Состав
Праее - Номенклатуре
Интерфейсу - Количество
Прочее - Цене
1 ? - Сумма

- НДС

ДопРасюды
Денггеня Ў <Нзэад Далее> - ВцаДогРастюца л Cyh-t-ta

Закрыть Справка
Реквизиты содержат данные, относящиеся ко всему документу в целом, тогда как табличные части содержат некоторую списковую

информацию, часто встречающуюся в экономических документах, например, перечень продаваемых товаров и список дополнительных расходов.

Экранные формы документа

Документ может иметь несколько экранных форм, некоторые из которых назначаются в качестве основных

Ниже описаны возможные типы экранных форм документа:

Форма документа

Основная экранная форма, представляющая документ на экране. Она необязательно должна совпадать по внешнему виду с печатной формой реального документа. Ее первейшая обязанность — обеспечить удобный способ ввода и просмотра данных.

Форма списка

Данная экранная форма отображает список документов определенного вида и является аналогом журнала, содержащего документы одного вида.

Форма выбора

Форма выбора обычно вызывается системой, когда пользователь заполняет реквизиты типа ДокументСсылка.

Если какая-то из форм не была создана разработчиком, то система сгенерирует нужную форму «на лету», когда в ней возникнет необходимость. Конечно, это может быть недостаточно для удобного ввода и просмотра информации, поэтому рекомендуется, когда это необходимо, создавать собственные формы с эргономичным интерфейсом. Особенно это актуально для ежедневно используемых документов Пользователь работает с этими документами каждый день, и малейшая недоработка будет постоянно мешать, снижая его производительность и повышая утомляемость.

При разработке экранной формы обратите внимание на логичную группировку элементов управления, последовательность ввода данных, поведение формы при изменении размеров (см. главу «Интерфейс пользователя»), насыщенность формы элементами управления и возможность использования горячих клавиш Все

Разработка в системе ЮПредприятие 8.0

эти факторы необходимо учитывать при разработке любой экранной формы, а не только форм документов, но с документами пользователь работает чаще всего, поэтому именно здесь требуется высокая скорость и безошибочность работы.

Ниже приведена экранная форма для документа Расходная-Накладная, редактируемая в Конфигураторе:
Внимание! У экранных форм могут быть собственные реквизиты Не путайте их с реквизитами документа. Подробнее про реквизиты формы см. главу «Интерфейс пользователя»

Макеты документа

Макеты документа предназначены для формирования его печатных форм, которые могут быть показаны на экране и напечатаны на принтере.

У документа может быть несколько печатных форм, поэтому и макетов может быть несколько. Например, из документа «Посту-

Разработка в системе 1 С:Предприятие 8.0

Проведенные документы помечаются в списке специальным значком с галочкой ("). Документы, для которых проведение запрещено, в списке отображаются с почти таким же значком, как и проведенные документы. Считается, что после записи таких документов с точки зрения пользователя их обработка полностью завершена, аналогично проведенным документам. Непроведенные документы, которые могут проводиться, также отмечаются в списке особым значком.

Ниже показана закладка «Движения», на которой задаются основные параметры проведения документа.



Самый первый параметр разрешает или запрещает проведение документа.

В списке регистров нужно выбрать только те регистры, по которым данный документ может делать движения. Не стоит отмечать все регистры подряд, так как это может отрицательно сказаться на производительности. В этом списке должны быть помечены только те регистры, по которым документ действительно может делать движения.

Внимание! Не снимайте флажок напротив регистра, если вы точно не уверены, что делаете. При снятии флажка и реструктуризации базы данных все существующие движения документа по

этому регистру будут уничтожены! Даже если вы вновь установите флажок, движения по регистру не восстановятся, и потребуется перепроведение документов или повторный ввод движений, если движения были введены вручную.

Стоит отметить, что в 1 С:Предприятии 8.0 проведение документа и движения по регистрам не связаны жестко. Документ может быть не проведен и иметь движения.

Рассмотрим параметр «Оперативное проведение». При таком проведении можно контролировать текущие остатки регистров, например, при проведении расходной накладной нужно проверить, достаточно ли товара на складе.

Однако иногда бывает так, что документы проводятся не текущей датой, а «задним числом». Обычно такое случается, когда в документе была обнаружена ошибка или какой-то документ раныие не был введен в базу данных. В таких случаях применяется неоперативное проведение, при котором в конфигурации не должно быть обращений к текущим итогам регистров.

Таким образом, документ проводится оперативно в момент совершения самой операции в жизни предприятия, и такое проведение должно помочь выполнить эту операцию непротиворечиво. А неоперативное проведение отражает уже свершившийся факт, при этом не следует использовать реальные итоги регистров.

Например, в модуле документа расходной накладной в процедуре ОбработкаПроведения могут быть следующие строки:

Процедура ОбработкаПроведения (Отказ, Режим)

//проверка остатка производится только при оперативном проведении Если Режим = РежимПроведенияДокумента.Оперативный Тогда Если ОстатокНаСкладе < СтрокаСостава.Количество Тогда

Сообщить(”Товара ” + СокрЛП(СтрокаСостава.Номенклатура) +

" имеется только " + Остаток);

Отказ = Истина;

Возврат;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

При удалении документа или при отмене его проведения движения документа обычно удаляются автоматически, но это можно регулировать установкой параметра «Удаление движений». Для некоторых видов документов разработчик может отменить дан-

Разработка в системе 1 ^Предприятие 8.0

ную возможность и управлять удалением движении самостоятельно через свойство Движения, предоставляющее доступ к коллекции движений документа.

Оперативная отметка времени

При оперативном проведении дата документа, как правило, изменяется на текущий момент, что является обычным поведением системы. Но разработчик может взять этот процесс под свой контроль. Он сам может получать очередную оперативную отметку времени и присваивать ее документу при проведении или при записи. Для этого предназначен метод глобального контекста ПолучитьОперативнуюОтметкуВремени. Его возвращаемое значение соответствует текущей дате (с учетом времени), но будет не меньше, чем последняя оперативная отметка времени, полученная каким-либо пользователем в этом сеансе работы с информационной базой. Таким образом, 1 С:Предприятие 8.0 предоставляет механизм для получения неповторяющихся отметок времени.

Например:

Процедура ПередЗаписыз (Отказ, РежимЗаписи, РежимПроведения)

Дата = ПолучитьОперативнуюОтметкуВремени();

КонецПроцедуры

Модуль документа

Следует отличать модуль документа и модули его форм (как и в версии 7.7). В модуле документа располагаются процедуры и функции, связанные с документом как объектом конфигурации, независимо от его экранных форм.

Например, там и только там располагаются обработчики следующих событий:

ОбработкаПроведения

Событие возникает в момент проведения документа. Обычно в нем содержится алгоритм формирования движений документа по регистрам. Событие имеет два параметра: Отказ и Режим. Если в обработчике события первому параметру присвоить значение Истина, тогда документ не бу-

дет проведен. Второй параметр позволяет узнать режим проведения документа: оперативный или неоперативный. Перед началом выполнения данной процедуры, если документ раньше сформировал движения, то они обычно очищаются системой автоматически.

ОбработкаУдаленияПроведения

Событие возникает в момент отмены проведения документа. При этом движения документа, как правило, очищаются автоматически.

ОбработкаЗаполнения

Это событие возникает при вводе документа на основании другого документа (или, например, элемента справочника), который передается в параметр Основание. В данной процедуре программист должен предусмотреть заполнение реквизитов документа.

ПередЗаписью

Это событие возникает перед выполнением записи объекта после начала транзакции, но до начала записи документа в базу данных.

ПередУдалением

Событие возникает перед удалением документа из базы, независимо от того, программно или интерактивно он удаляется.

ПриУстановкеНовогоНомера

Данное событие возникает в момент, когда выполняется установка нового номера документа.

ПриКопировании

Это событие возникает при создании документа копированием. В процедуре-обработчике можно произвести дополнительные действия, например, присвоить новую дату и новый номер, заполнить реквизит Автор и т.д.

Замечание. Все эти процедуры-обработчики событий вызываются при наступлении указанных событий независимо от того, как они были инициированы: программно или интерактивно. Даже если документ записывается методом Записать, то будут вы-

Разработка в системе 1 С:Предприятие 8.0

званы процедуры-обработчики ПередЗаписью и ПриЗаписи. Это следует учитывать при разработке конфигураций.

Кроме вышеперечисленных процедур, в модуле документа могут располагаться процедуры и функции, созданные разработчиком. Если их объявить с ключевым словом Экспорт, то они станут доступными вне документа, как обычные методы.

Часто таким образом производится печать документов, например, ниже приведена процедура печати расходной накладной:

Процедура Печать(ТабДок) Экспорт //получение макета

Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать"); //вывод шапки

Область = Макет.ПолучитьОбласть("Шапка");

Область.Параметры.НомерДокумента = Номер;

Область.Параметры.От = Дата;

ТабДок.Вывести(Область);

//вывод табличной части Состав

Для Каждого СтрокаСостава Из Состав Цикл

Область = Макет.ПолучитьОбласть("Строка”); Область.Параметры.Заполнить(СтрокаСостава); ТабДок.Вывести(Область);

КонецЦикла;

//вывод подвала

Область = Макет.ПолучитьОбласть("Подвал");

Область.Параметры.ИтогоКоличество = Состав .Итог ("Количество") ; Область.Параметры.ИтогоСумма = Состав.Итог{"Сумма"); ТабДок.Вывести(Область);

КонецПроцедуры

Теперь в любом программном модуле можно вызвать эту процедуру и передать ей в качестве параметра табличный документ, который затем можно показать на экране или отправить сразу на принтер.

Например, в форме документа по кнопке «Печать» вызывается следующая процедура:

Процедура ПечатьСПросмотром(Кнопка)

ТабДок = Новый ТабличныйДокумент;

Печать(ТабДок); //вызывается приведенная выше процедура ТабДок.Показать();

КонецПроцедуры

Аналогично, можно организовать печать текущей расходной накладной из журнала документов, и снова будет вызвана наша процедура Печать из модуля документа, например:

Процедура ПечатьТекущегоДокумента()

Список = ЭлементыФормы.Список,

Если Список.ТекущаяСтрока = Неопределено Тогда Возврат;

КонецЕсли;

ТекДокумент = Список.ТекущаяСтрока.ПолучитьОбъект();

ТабДок = Новый ТабличныйДокумент;

ТекДокумент.Печать(ТабДок);

ТабДок.Показать();

КонецПроцедуры

Приемы программирования

С помощью встроенного языка 1 С:Предприятия 8.0 можно выполнять различные операции над документами: создавать, изменять и удалять их, искать документ по номеру, перебирать их в цикле и т.д.

Работа с документами производится с помощью нескольких программных объектов (аналогичные объекты мы уже рассматривали для справочников):

ДокументыМенеджер

Обеспечивает доступ к менеджерам всех документов конфигурации. Свойства этого объекта совпадают по имени с именами документов и содержат объекты типа Документ-Менеджер.

ДадсументМенеджер

Обеспечивает доступ к действиям над документами определенного вида как множеством объектов. Через методы этого объекта можно осуществлять поиск, получать выборку, создавать новый документ, обращаться к формам и макетам документа.

ДокументСсылка

Это специальный объект, однозначно идентифицирующий документ в базе данных и позволяющий обращаться к нему в режиме «только чтение». Значение данного типа хранится, например, в реквизитах других объектов, ссылающихся

Разработка в системе 1 С:Предприятие 8.0

на документы данного вида. Через свойства и методы этого объекта можно прочитать реквизиты документа, обратиться к его табличным частям.

ДокументОбъект

Предоставляет доступ к документу с возможностью записи и проведения. Данный объект содержит методы, изменяющие документ в базе данных, например, метод Записать.

ДокументВыборка

Предоставляет возможность обхода (перебора) документов определенного вида. Объект этого типа возвращается методом Выбрать объекта ДокументМенеджер.

ДокументСписок

Объект для управления списком документов, отображаемым в форме. Позволяет управлять колонками, отбором и сортировкой в списке. Этот объект не может быть создан программно, он создается системой автоматически при размещении в форме табличного поля, отображающего список документов.

Из одних объектов с помощью определенных свойств или методов можно получить другие объекты, как показано на следующей схеме:



Замечание. На схеме показаны не все возможные взаимосвязи Например, метод Скопировать существует не только у объекта ДокументСсылка, но и у самого объекта ДокументОбъект.

Рассмотрим на примерах выполнение типичных операций с документами.

Обращение к менеджеру документа

Обращение к менеджеру документа производится следующим образом:

ДокСчет = Документы.Счет;

ДокСчет = Документы["Счет"];

При обращении к менеджеру документа ошибкой будет применение ключевого слова Новый. Оно предназначено для создания новых объектов, например, списков значений. Следует помнить, что при работе с прикладными объектами всегда используется обращение через менеджер.

Внимание! С помощью ключевого слова Новый нельзя создавать новые документы. Для этого предназначен метод СоздатьДо-кумент объекта ДокументМенеджер, который возвращает объект типа ДокументОбъект. <ИмяДокумента>.

Следующий фрагмент показывает пример создания нового документа.

ДокМенеджер = Документы.Счет;

НовыйДок = ДокМенеджер.СоздатьДокумент();

//при создании документа программным способом //дата документа не заполняется системой,

//это должен сделать разработчик НовыйДок.Дата = Дата;

НовыйДок Записать() ;

Выборка документов

Перебор документов производится через объект ДокументВыбор-ка, который возвращается при вызове метода Выбрать объекта ДокументМенеджер:

ДокВыборка = Документы.Счет.Выбрать();

Пока ДокВыборка.Следующий() Цикл

Сообщить("К " + ДокВыборка.Номер + " от " + ДокВыборка.Дата);

//перебор строк табличной части Для Каждого стр Из ДокВыборка.Состав Цикл Сообщить!" " + стр Номенклатура);

КонецЦикла;

КонецЦикла ,-

Создание и проведение документа

В 1С:Предприятии 8.0 можно программно создать, записать и провести документ. Для создания нового документа применяется метод СоздатьДокумент, который возвращает объект для записи типа ДокументОбъект. Через другие объекты и механизмы нельзя создать, изменить или удалить документ.

Следующий пример демонстрирует создание документа, его запись без проведения и запись с неоперативным проведением:

НовыйДок = Документы.Счет.СоздатьДокумент();

НовыйДок.Дата = Дата;

НовыйДок.Записать(); //обычная запись документа

//запись документа с неоперативным проведением НовыйДок.Записать(РежимЗаписиДокумента.Проведение,

РежимПроведенияДокумента.Неоперативный);

Внимание! Теперь у документа нет метода Провести, как это было в версии 7.7. Программное проведение документа выполняется с помощью метода Записать с параметрами РежимЗаписиДокумента и РежимПроведенияДокумента.

Ниже приведены возможные значения параметров метода Записать:

Параметр «РежимЗаписиДокумента»:

• Запись (по умолчанию),

• ОтменаПроведения,

• Проведение (в этом случае имеет смысл указывать второй параметр).

Параметр «РежимПроведенияДокумента»:

• Неоперативный (по умолчанию),

• Оперативный.

Поиск документа

Поиск документа по номеру производится методом НайтиПоНо-меру. Этот метод возвращает ссылку на найденный документ или

пустую ссылку, если документ не найден. Проверка на пустую ссылку производится методом Пустая():

ДокСсылка = Документы.Счет.НайтиПоНомеру("Сч1ОО1");

Если ДокСсылка. Пустая () Тогда

Сообщить("Документ с данным номером не найден!");

КонецЕсли;

Если требуется отобрать множество документов с определенным значением реквизита, то можно применить метод Выбрать с указанием структуры отбора и затем обойти полученную выборку. Не забудьте, что у реквизита, по которому производится отбор, должен быть установлен в Конфигураторе флажок «Индексировать» (для даты документа можно считать, что он уже установлен).

Для выборки документов из базы данных по комбинированному условию, например, по нескольким полям, рекомендуется применять запросы (см. главу «Запросы»).

Удаление документа

Удаление документа производится с помощью объекта ДокументОбъект и только так. Другим способом удалить документ нельзя.

ДокСсылка = Документы. Счет.НайтиПоНомеру ("Сч1001") ;

Если Не ДокСсылка.Пустая() Тогда

ДокОбъект = ДокСсылка.ПодучитьОбъект();

//1-й вариант пометки на удаление

//если документ был проведен, то он остается проведенным (!) //движения документа по регистрам сохраняются (!) ДокОбъект.ПометкаУдаления = Истина;

ДокОбъект.Записать();

//2-й вариант пометки на удаление

//если документ был проведен, то он делается непроведенным //движения документа по регистрам удаляются ДокОбъект.УстановитьПометкуУдаления(Истина);

//непосредственное удаление объекта

//если документ был проведен, то движения по регистрам удаляются ДокОбъект.Удалить();

КонецЕсли;

Внимание! При пометке на удаление методом Установить-ПометкуУдаления проведенный документ делается непроведен-

ным и движения документа по регистрам удаляются (если не установлено свойство документа «Удалять движения автоматически»). А при присвоении свойству ПометкаУдаления значения Истина проведенный документ остается проведенным и движения документа по регистрам сохраняются.

При непосредственном удалении документа контроль за удалением движений документа возлагается на разработчика.

Открытие форм документа

Часто требуется программно открыть какую-либо форму документа. Рассмотрим на примерах варианты открытия различных форм документа:

//открытие формы по имени

Документы.Счета.Получитьформу("ОсновнаяФорма").Открыть();

//открытие формы для нового документа

Документы.Счета.ПолучитьФормуНовогоДокумента().Открыть();

//открыть основную форму списка документов Форма = Документы.Счета.ПолучитьФормуСписка();

Форма.Открыть();

//открыть форму для выбора документа из списка

//текущая форма будет являться владельцем для открываемой формы Форма = Документы.Счета.ПолучитьФормуВыбора(, ЭтаФорма);

Если НЕ Форма.Открыта() Тогда //если она еще не открыта Форма.ИмяСохраненияПоложенияОкна = "ПодборСчетов";

КонецЕсли;

//открыть форму или активизировать уже открытую форму Форма.Открыть();

Работа с табличным частями

Обращение к табличным частям документа производится по их именам. Для обхода строк табличной части рекомендуется применять конструкцию «Для Каждого...».

Например, ниже показан фрагмент модуля документа Приход-наяНакладная:

у Для каждой строки сформируем движения //по регистру остатков УчетНоменклатуры лля Каждого СтрокаСостава Из Состав Цикл

Движение = Движения.УчетНоменклатуры.ДобавитьПриход();

Разработка в системе 1 (^Предприятие 8.0

Движение.Период = Дата;

Движение.Номенклатура = С трсжаСостава. Номенклатура,

Движение.Склад = Склад;

Движение.Количество = СтрокаСостава.Количество,

КонецЦикла;

движения.УчетНоменклатуры.Записать();

Замечание. В 1С:Предприятии 8.0 больше нет понятия «итог по колонке», т.е. система больше не поддерживает хранение итога по колонке табличной части при установке флажка, как это было в версии 7.7. Если требуется хранить и быстро получать итоговую сумму по колонке табличной части, то для этого нужно завести реквизит документа и заполнять его, например, в процедуре ПередЗаписью.

Движения документа

ш •

Доступ к движениям документа обычно осуществляется через его свойство Движения. Свойствами данной коллекции являются наборы записей по тем регистрам, по которым документ может делать движения.

Рассмотрим типичную схему создания новых движений по регистру остатков и регистру бухгалтерии при проведении документа:

ВидыСубконто = ПланыВидовХарактеристик.ВидыСубконто;

//по каждой строке сформируем движения по регистру УчетНоменклатуры

Для Каждого СтрокаСостава Из Состав Цикл

Движ = Движения.УчетНоменклатуры. ДобавитьПриходи ;

движ.Период = Дата;

Движ.Склад = Склад;

Движ. Номенклатура = СтрокаСостава. Номенклатура;

Движ.Количество = СтрокаСостава. Количество;

КонецЦикла;

// сформируем одну бухгалтерскую проводку на общую сумму Движ = Движения . Основной. Добавить () ;

Движ.Период = Дата;

^Г^^тдГ^ПланнСчетов^Ё^овной.НДСпоПриобретеннемЦенностям;

Движ СчетКт = ПланыСчетов.Основной.Поставщики;

Движ . СубконтоКт [ВидыСубконто . Контрагенты] - Контрагент ;

Движ.Сумма = Состав.Итог(”НДС” );

//записываем движения в базу данных Движения.УчетНоменклатуры. Записать О ;

Движения.Основной.Записать(),

Нумерация документов

Важной характеристикой документа является его номер. Система 1 ^Предприятие 8.0 имеет широкие возможности по настройке правил нумерации документов. Разработчик может доверить системе присвоение номеров, включив автоматическую нумерацию документа. В Конфигураторе настраивается тип и длина номера, периодичность, включается или отключается контроль уникальности номеров в пределах периода.

Внимание! Поле, содержащее номер документа, теперь называется Номер, а не НомерДок, как было в версии 7.7. Аналогично, поле, содержащее дату документа, называется Дата, а не ДатаДок.

При редактировании правил нумерации документа доступны для установки следующие параметры:

Автонумерация

Этот параметр заставляет систему автоматически присваивать номера для новых документов.

Периодичность

Здесь указываются две важные характеристики нумератора: пределы контроля уникальности номеров документов и период повторяемости номеров. Если включен признак контроля уникальности номеров (см. ниже), то периодичность нумератора показывает, в каких пределах осуществлять этот контроль. Например, если установлено «В пределах дня», то уникальность номеров документов будет контролироваться в пределах суток. При включенной автоматической нумерации система будет присваивать очередной порядковый номер каждому новому документу. После завершения очередного периода нумерация документов начнется с 1.

Длина

Устанавливает максимальную длину номера документа. Самая большая длина номера, которую можно установить, — 50 символов.

Тип

Здесь выбирается тип значения для номера документа —

Разработка в системе 1 С: Предприятие 8.0

числовой или строковый. Выбор строкового типа номера бывает необходим, когда используется сложная система нумерации документов. При этом номер документа может включать, помимо цифр, также буквы и символы-разделители, например «К10-56».

Контроль уникальности

Если эта опция включена, то при записи документа в базу данных его номер проверяется на уникальность в пределах, установленных в реквизите Периодичность.

Нумераторы

Нумератор представляет собой объект метаданных, описывающий правила нумерации документов: тип и длину номера, периодичность, необходимость контроля уникальности.

Основное назначение нумератора — обеспечить возможность единой (сквозной) нумерации документов разного вида, для чего этим документам назначается один нумератор. Например, для всех кадровых приказов, к которым относятся документы ПриемНаРаботу, Увольнение, КадровоеПеремещение, назначается нумератор Кадровый.

Так же, как для обычного номера документов, для нумератора можно задать периодичность, длину и тип номера, включить или отключить уникальность номеров в пределах периода. Тогда эти параметры будут действовать на все документы, использующие данный нумератор.

Префиксы номеров

Для некоторых видов документов необходим префикс, например, для всех кадровых приказов можно завести префикс «К», для складских — «С» и т.д. Аналогичным образом можно назначить префиксы для номеров документов одного вида, например, у документа РасходнаяНакладная в префикс номера включить код подразделения.

JL

138

Для назначения префикса номера документа следует применять метод УстановитьНовыйНомер, например:

Процедура ПриОткрытии()

Если ЭтоНовый{) Тогда

ПрефиксНомера = глПользователь.Подразделение.ПрефиксНомеров;

УстановитьНовыйНомер{ПрефиксНомера};

КонецЕсли;

КонецПроцедуры

Журналы документов

В системе 1С:Предприятие 8.0 журналы документов являются объектами конфигурации, предназначенными для смысловой группировки документов. Для отображения журнала используется элемент управления ТабличноеПоле. Работая со списком документов, пользователь может создать новый документ, открыть или удалить его, найти нужный документ по номеру. Кроме того, есть возможность установить нужный интервал, тем самым ограничив выборку документов.

Стоит отметить, что у самого документа может быть форма списка, которая является аналогом журнала для документов одного вида. Если она не создана, то генерируется системой автоматически, когда в ней возникает потребность, но, если требуется, можно создать ее в Конфигураторе и настроить удобный внешний вид формы.

Документ при записи может регистрироваться в нескольких журналах, что настраивается в Конфигураторе. Не рекомендуется указывать много журналов, в которых должен регистрироваться документ, поскольку это может отрицательно сказаться на производительности системы при интенсивном вводе документов.

Разработка в системе 1C Предприятие 8 О

В журнале обычно отображаются документы разного вида Например, ниже показан журнал Торговля, в котором регистрируются все торговые документы (счета, приходные и расходные накладные и т д )

По лацч Д“ист& ія *•

Перент і
Вид дс* уме ига

Пр уДМай HJK ад
ДоГд ’

501 L 12 (X 00
Hct-usp

0П009
Контрагент

Темп пярс
*пес іщ- я по just р ]1 ^002 14 00 00 1
L4PT эі эсюггт 5бг7 соосп Алле 2002
Прі* однж накл<- Л 2002 1200 00 00001 Максиму
ешишвие J3 2002 12 00 СП 0001 & Эльвис
Расходная нвклс. Л 2002120000 00001 Эіъбдо
Расходная нвклол 01 200221 5607 00002 Алекс 2002
Снег UQ1 20021200 00 00004 Филипенко
LJ9T Б 01 200212-0000 00002 Бо-ыл-энсі
Нои^іПЁенап іб и дюгіу&И, .нош.................. Ботъшакое- ндг
' НомажлИтщИІ вши Кдалшееті*.
1J1001 2М2 2(1001 200>

1Г Бухгалтерия 1 1 Бунгаятерия і

а в офиса авофдея

Графы журнала

В журнале документов могут быть созданы графы журнала, которые отображают информацию из документов

Например, в журнале Торговля создана графа Контрагент:



При настройке графы журнала указывается список реквизитов документов, из которых она будет отображать информацию Из каждого документа можно взять только один реквизит Не рекомендуется смешивать в одной графе разнородную информацию, например, контрагента и сумму документа

Последовательности

Последовательности документов — это специальный механизм 1C Предприятия 8 0, который позволяет поддерживать правильность движений документов В версии 8 0 возможности последовательностей получили дальнейшее развитие

Если документ при проведении использует текущие итоги регистра (например, расходная накладная списывает товары по методу FIFO или LIFO), то в случае изменения движений «задним чис лом» движения всех последующих документов становятся некорректными, и эти документы необходимо перепровести

При настройке последовательности в Конфигураторе описывается, какие изменения регистров будут влиять на последователь ность и какие документы входят в эту последовательность (это могут быть документы разного вида)



Обратите внимание, что документ ПриходнаяНакладная не входит в последовательность УчетНоменклатуры, потому что при своем проведении он не использует текущие итоги регистров Од нако при проведении приходной накладной «задним числом» сформируются новые движения по регистру накопления

Разработка в системе 1С:Предприятие 8.0

СтоимостнойУчетНоменклатуры, что нарушит последовательность. Чтобы ее восстановить, нужно будет перепровести все расходные накладные, начиная от границы последовательности.

Граница последовательности — это позиция последнего проведенного документа с «правильными» движениями Если какие-то движения изменяются задним числом, граница последовательности отодвигается назад на последний документ, при проведении которого использовались последние «правильные» итоги, а все документы, проведенные на основе изменившихся итогов, окажутся после границы последовательности.

Восстановление последовательности производится перепроведе-нием всех документов, входящих в последовательность, начиная от границы последовательности и заканчивая последним документом или, например, рабочей датой. Для восстановления последовательности в режиме «Предприятие» необходимо воспользоваться пунктом «Проведение документов» из меню «Операции».

В 1 ^Предприятии 8.0 появилась новая возможность указать измерения для последовательности документов. В этом случае пере-проводиться будут только те документы, которые изменили состояние регистра по данному значению измерения, например, только по конкретному товару. Это значительно ускоряет пере-проведение документов, когда их очень много.

Важные отличия от версии 7.7

Встроенные реквизиты НомерДок и ДатаДок заменены реквизитами Номер и Дата. Значения типа «дата» включают в себя также и время.

У документа может быть несколько табличных частей, различных по структуре.

Максимальная длина номера документа увеличена до 50 символов.

Для каждого документа указывается перечень регистров, по которым он может делать движения.

Больше нет общих реквизитов документов. Поддержка общих реквизитов отрицательно сказывалась на производительности

Разработка в системе 1 (^Предприятие 8.0



нут видимы снаружи, наравне с обычными свойствами и методами документа.

У документа теперь нет метода Провести. Программное проведение документа осуществляется методом Записать с параметрами РежимЗаписиДокумента (возможные значения: Запись, Проведение и ОтменаПроведения) и РежимПроведения-Документа (возможные значения: Оперативный и Неоперативный).

Движения документа не связаны жестко с признаком его проведения. Проведенность документа означает окончание его обработки с точки зрения пользователя. За соответствием признака проведенности документа и актуальностью его движений должен следить разработчик.

Движения документа по регистрам могут быть с разными датами. Например, документ Договор может записать в регистр ПланыПродаж график плановых платежей по договору.

Больше нет такого понятия, как «подчиненные документы», соответственно метод ВыбратьПодчиненныеДокументы был удален. Вместо этого можно использовать критерии отбора. Больше нет граф отбора, вместо них предлагается использовать критерии отбора.

Перечисления

Перечисления используются в системе Ю:Предприятие 8.0 для описания постоянных наборов значений, не изменяемых в процессе работы конфигурации. В отличие от элементов справочников, значения перечислений вводятся на этапе разработки прикладного решения и не могут быть изменены в процессе работы с программой. Пользователь обычно выбирает одно из значений перечисления.

Типичными примерами перечислений являются: *' '

• ТипКлиента (значения: Обычный, Важный), <

• Пол (значения: Мужской, Женский),

• ВидКонтрагента (значения: ЧастноеЛицо, Организация).

Список значений перечисления нельзя редактировать, так как алгоритм конфигурации ориентирован на наличие определенных значений. Например, в процедуре расчета скидки может быть следующий фрагмент:

Если ТипКлиента - Перечисления.ТипКлиента.Обычный Тогда //расчет скидки для обычных клиентов

ИначеЕсли ТипКлиента = Перечисления.ТипКлиента.Важный Тогда //расчет скидки для важных клиентов

Иначе

Сообщить("Не указан тип клиента!");

КонецЕсли;

Отсюда видно, что при изменении значений перечисления возможно потребуется изменение программных модулей, иначе программа перестанет правильно работать.

Внимание! В отличие от версии 7.7, в версии 8.0 при обращении к значению перечисления используется множественное число в слове «Перечисления», например, Перечисления.ТипКлиен-та.Важный.

Разработка в системе 1 (лПредприятие 8.0

Отчеты и обработки

Отчеты и обработки - это не сохраняемые в базе данных объекты, предназначенные для формирования печатных форм или оо-работки данных в базе данных.

Отчеты и обработки совершенно идентичны по структуре, у них просто разное назначение:

. Отчеты предназначены для вывода информации, формирования различных печатных форм с детальными и сводными данными, например, отчеты АнализПродаж, ПрайсЛист, Реестр-Документов.

. Обработки предназначены для изменения данных в базе данных и выполнения других действий, например, Перерасчет-Зарплаты, ЗакрытиеПериода, КлиентБанк.

Структура отчета и обработки одинакова:

Реквизиты ,

Реквизиты отчета (обработки) содержат параметры формирования отчета (выполнения обработки). Эти реквизиты отличаются от реквизитов справочников тем, что они не сохраняются в базе данных. Например, реквизиты НачДата и КонДата у отчета АнализПродаж.

Табличные части

Табличные части содержат списки параметров для отчета или обработки, обычно состоящие из нескольких колонок. Например, табличная часть условияПоСубконто у отчета «ОСВ по счету».

Ф°РМЭкранные формы предназначены для отображения отчета/обработки на экране. Это могут быть и различные дополнительные формы, предназначенные для ввода параметров или отображения результатов. В качестве примера можно назвать формы ВыборПериода и ФормаВложен-нойТаблицы обработки КонсольЗапросов.



Макеты

Макеты являются шаблонами печатных форм, на основе которых формируются выходные формы. Макеты могут быть как у отчетов, так и обработок. Например, макеты Реестр-Документов, ОсновнойМакет.

Правилом хорошего тона при разработке в системе 1 ^Предприятие 8.0 является реализация основного алгоритма формирования отчета (выполнения обработки) в модуле объекта. Экранная форма и ее модуль предназначены лишь для взаимодействия с пользователем, задания параметров отчета (обработки) и отображения результатов, а основная обработка данных должна производиться в модуле объекта.

Например, в модуле отчета объявляется процедура Печать с ключевым словом Экспорт, которая в качестве параметра принимает табличный документ:

Модуль отчета Модуль формы отчета
Процедура Печать(ТабДок) Экспорт Процедура КмолкаОКНажэт>іе(Эл?мент)
Л—- - Печать(ЭлементыФормы ПояеТа&Док)
Ком (^Процедуры КонецПроцедуры
В модуле формы в обработчике события Нажатие кнопки «О/С» вызывается процедура Печать и ей передается элемент формы типа ПолеТабличногоДокумента. Процедура Печать выбирает информацию из базы данных и заполняет табличный документ.

Такая техника реализации отчетов (обработок) позволяет сформировать отчет (выполнить обработку) из любого места программы. Предварительно программа должна передать в реквизиты и табличные части параметры, тогда отчет (обработка) будет полностью отделен от экранной формы.

Чтобы научиться формировать печатные формы, необходимо прочитать главу «Отчеты». Отчеты часто извлекают информацию из базы данных с помощью запросов. Механизм запросов является очень гибким и описан в отдельной главе «Запросы». Во многих случаях отчеты и обработки обращаются к регистрам, работа с которыми описана в главах «Регистры сведений», «Регистры накопления» и др.

Разработка в системе 1 (лПредприятие 8.0

Внешние обработки

Так же, как и в версии 7.7, в версии 8.0 любой отчет или обработка может быть сохранен во внешний файл, т.е. он будет храниться вне информационной базы. В версии 8.0 изменился формат у внешних обработок, теперь они хранятся в файлах с расширением «EPF».

Для запуска внешней обработки можно использовать команду меню «Файл -> Открыть». Если же это требуется сделать программным образом, то необходимо воспользоваться менеджером внешних обработок, для чего предназначено свойство ВнешниеОбработки глобального контекста. Обратите внимание, что теперь нет команды ОткрытьФорму, которая была в версии 7.7.

Следующий пример обращается к внешней обработке «Анализ-Продаж.ерг», задает ей параметр Контрагент и вызывает процедуру Печать, а результат помещается в поле табличного документа:

Обработка = ВнешниеОбработки.Создать("с:ХАнализПродаж.epf"); Обработка.Контрагент = ВыбКонтрагент;

Обработка.Печать(ЭлементыФормы.ПолеТабДок);

Заметьте, что форма внешней обработки даже не показывается на экране. Из нее используется только процедура Печать для формирования печатной формы.

Важные отличия от версии 7.7

• У отчетов и обработок может быть несколько экранных форм.

• Отчеты и обработки могут иметь реквизиты и табличные части, но их смысл отличается от реквизитов и табличных частей справочников и документов. Через них передаются параметры формирования отчета или выполнения обработки.

• Основная процедура формирования отчета или выполнения обработки обычно располагается в модуле объекта и объявляется с ключевым словом Экспорт. В модуле формы (или из любого другого программного модуля) производится вызов данной процедуры.

Изменилась техника формирования печатной формы (табличного документа), о чем подробно рассказывается в главе «Отчеты».

Внешние обработки хранятся в EPF-файлах, несовместимых с ERT. Для программного запуска внешней обработки или открытия ее формы необходимо воспользоваться менеджером внешних обработок.

Даже если вы вновь установите флажок, движения по регистру не восстановятся, и потребуется перепроведение документов или повторный ввод движений, если движения были введены вручную.

Стоит отметить, что в 1 С:Предприятии 8.0 проведение документа и движения по регистрам не связаны жестко. Документ может быть не проведен и иметь движения.

Рассмотрим параметр «Оперативное проведение». При таком проведении можно контролировать текущие остатки регистров, например, при проведении расходной накладной нужно проверить, достаточно ли товара на складе.

Однако иногда бывает так, что документы проводятся не текущей датой, а «задним числом». Обычно такое случается, когда в документе была обнаружена ошибка или какой-то документ раньше не был введен в базу данных. В таких случаях применяется неоперативное проведение, при котором в конфигурации не должно быть обращений к текущим итогам регистров.

Таким образом, документ проводится оперативно в момент совершения самой операции в жизни предприятия, и такое проведение должно помочь выполнить эту операцию непротиворечиво. А неоперативное проведение отражает уже свершившийся факт, при этом не следует использовать реальные итоги регистров.

Например, в модуле документа расходной накладной в процедуре ОбработкаПроведения могут быть следующие строки:

Процедура ОбработкаПроведения(Отказ, Режим)

//проверка остатка производится только при оперативном проведении Если Режим = РежимПроведенияДокумента.Оперативный Тогда Если ОстатокНаСкладе < СтрокаСостава. Количество Тогда

Сообщить("Товара " + СокрЛП(СтрокаСостава.Номенклатура) +

’’ имеется только ’’ + Остаток) ;

Отказ = Истина;

Возврат;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

При удалении документа или при отмене его проведения движения документа обычно удаляются автоматически, но это можно регулировать установкой параметра «Удаление движений». Для некоторых видов документов разработчик может отменить дан-

Разработка в системе 1 С:Предприятие 8.0

ИзменениеРазмера

Признак, который разрешает или запрещает изменение размера окна.

ИмяСохраненияПоложенияОкна

Свойство позволяет сохранить параметры окна под определенным именем, которые восстанавливаются при следующем показе формы. Таким способом можно запомнить несколько вариантов положения окна.

ПоложениеПрикрепленногоОкна

Позволяет прикрепить окно к любому краю главного окна 1С:Предприятия: верхнему, нижнему, левому или правому.

СостояниеОкна

Определяет текущее состояние окна: обычное, прикрепленное, свободное или прячущееся. Различные состояния окна могут быть разрешены или запрещены.

СоединяемоеОкно

Разрешает или запрещает соединение данного окна с другими свободными окнами.

Панель

-, Позволяет обратиться к главной панели формы, добавить или удалить страницы и т.д. Элемент управления Панель был подробно описан выше.

Стиль

Определят стиль отображения формы.

У большинства интерфейсных объектов (форма, элементы управления) существуют свойства, определяющие цвет, рамку, линии, шрифт. Для программной установки этих свойств используются специальные служебные объекты и их конструкторы.

Ниже приводится пример изменения внешнего вида обычной кнопки:

Кнопка = ЭлементыФормы.КнопкаОК;

Кнопка.ЦветТекстаКнопки = Новый Цвет(100/250/100) ; //зеленый Кнопка.ЦветФонаКнопки = Новый Цвет(50,50,50); //серый Кнопка.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Двойная, 1) ; Кнопка.Шрифт = Новый Шрифт(,,Истина,Истина) ; //жирный и наклонный

//установим также сочетание клавиш Alt-P

Кнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.Р,Истина) ;

//назначим процедуру-обработчик события Нажатие //в модуле должна быть определена //процедура Сформировать с параметром Элемент

Кнопка.УстановитьДействие("Нажатие"/Новый Действие ("Сформировать") ) ;

Элементы формы

Форма позволяет обращаться к расположенным в ней элементам управления, для чего предназначено свойство ЭлементыФормы. В 1 ^Предприятии 8.0 можно даже программно добавлять и удалять элементы управления в форму при выполнении программы, чего не было в версии 7.7.

Обращение к элементу управления обычно производится по его имени через коллекцию ЭлементыФормы, например:

КнопкаОК = ЭлементыФормы.КнопкаОК;

тпСотр = ЭлементыФормы.ТабпичноеПолеСотрудникиСписок;

НадписьТипЦен = ЭлементыФормы["ТипЦен"];

С помощью методов Добавить, Удалить, Очистить можно редактировать список элементов управления «на лету». Переустанавливая свойства элементов управления, можно изменять их внешний вид и поведение.

Внимание! Индексация элементов в коллекции начинается с 0.

У элементов управления, расположенных в форме, появляются дополнительные свойства и методы. Ниже показаны наиболее важные дополнительные свойства таких элементов управления:

Имя

Имя элемента управления, например, «КнопкаОК».

Данные

Это свойство содержит имя связанного реквизита формы или реквизита объекта. Для элементов управления, связанных с реквизитами объектов, изменение значения в элементе управления автоматически влечет изменение значения связанного реквизита.

ТипЗначения

Это свойство описывает допустимые типы значений для элемента управления.



Первый вариант (через точку) применяется, когда имя справочника известно программисту и оно неизменно. Такая конструкция более простая и рекомендуется к применению в большинстве случаев.



Во втором варианте имя справочника задается строкой. Такая конструкция может быть использована, когда неизвестно имя справочника, с которым будут производиться действия, например, в универсальном отчете ПечатьСправочника, который выводит на печать содержимое любого заданного справочника.

При обращении к справочнику не следует применять ключевое слово Новый, которое предназначено для создания новых объектов определенных типов, например, массивов или таблиц значений.

Ниже показываются два варианта обращения к справочнику, первый из которых ошибочный:



в форме расположены различные элементы управления надписи, поля ввода, табличное поле, командные панели,

• при размещении элементов управления в форме их можно выравнивать по сетке, которую можно включить и выключить, а также задать ее шаг,

• у экранных форм, помимо диалога, имеется модуль формы и реквизиты формы, которые не следует путать с модулем и реквизитами объекта



Все запросы хранятся в древовидном списке, который можно сохранить в файл и загрузить из файла. Результат запроса отображается в виде таблицы, дерева или выводится в табличный документ (отчет), который можно напечатать или скопировать в другую программу через буфер обмена. Кроме того, Консоль запросов позволяет получить результат запроса в виде сводной таблицы, для чего предназначена соответствующая закладка в нижней части формы.

Для написания текста запроса можно задействовать Конструктор запросов, описанный выше. Для этого достаточно щелкнуть правой кнопкой на текстовом поле, в которое вводится запрос, и выбрать пункт «Конструктор запросов».



SQL - Structured Query Language, язык структурированных запросов к базам данных, который был изобретен еще в начале 1970-х. Первоначально язык назывался SEQUEL, и отсюда исторически сохранилось произношение его названия



Примечание. Виртуальные поля.

Некоторые поля в таблицах-источниках виртуальные, например, поле «Представление» для таблицы справочника и документа, или поле «МоментВремени» для документа. Это значит, что они не хранятся в базе данных, а генерируются «на лету». Виртуальные поля не включаются в результат запроса, когда вместо списка полей указана звездочка («»), их нужно указывать явно, например «ВЫБРАТЬ , Представление ИЗ Справочник.Товары». Такое решение было принято для ускорения выполнения классического запроса «ВЫБРАТЬ ИЗ...». В этом случае не требуется генерировать представления для элементов справочников и документов, следовательно запросы будут выполняться быстрее.



Позволяет узнать количество строк в результате запроса. Для этого в качестве параметра функции надо указать звездочку («»). Это наиболее часто встречающийся вариант использования функции КОЛИЧЕСТВО. Даже если в строке все поля содержат NULL, то такая строка тоже будет посчитана.

• Позволяет подсчитать количество значений указанного поля, не являющихся NULL-значениями. В качестве параметра функции можно указывать ссылки на поля, содержащие значения любого типа, при этом NULL-значения игнорируются.

• Позволяет узнать количество различных значений указанного поля. Для этого перед спецификацией поля надо указать клю-



Это простейший пример использования построителя отчетов, который, тем не менее, демонстрирует, с какой легкостью можно сформировать отчет с двумя измерениями.

Теперь предоставим пользователю возможность настройки отчета. Можно не бояться сложности задачи, это делается несколькими щелчками мыши! В форме необходимо разместить табличные поля и указать им свойство Данные в одно из следующих значений

• Построитель.Порядок — условия сортировки данных;



Построитель.Отбор — условия отбора (фильтры);

• Построитель.ИзмеренияСтроки — измерения отчета по строкам, например, Номенклатура;



Именованные области макета автоматически будут использованы для вывода соответствующих областей отчета. Можно задать свой макет для каждой области, используя следующие свойства:

• МакетДетальныхЗаписей,

• МакетШапкиТаблицы,

• МакетЗаголовкаОтчета,



МакетПодвалаТаблицы,

• МакетПодвалаОтчета.



На момент выхода версии 1 С: Предприятия 8.0.3 (31.07.2003) эти механизмы включены в поставку в целях бета-тестирования.



На момент выхода версии 1 (ЛПредприятия 8.03 (31.07.2003) эти механизмы включены в поставку в целях бета-тестирования.



Содержание раздела