I.Введение
Данные материалы рассчитаны на пользователей, знакомых с интерфейсом 1С:Предприятия и имеющих навыки программирования. Основное назначение методических материалов - помочь начинающим разработчикам в конфигурировании системы 1С:Предприятие. Они также могут использоваться как дополнение к книгам по администрированию и конфигурированию системы 1С:Предприятие. Материалы построены на основе 2-х летнего опыта ведения соответствующего курса и содержат ответы на наиболее актуальные для начинающих разработчиков вопросы по конфигурированию. Они используются в качестве методического пособия при прохождении курса по настройке системы 1С:Предприятие, а также могут использоваться для самостоятельного обучения конфигурированию на платформе V7.
Материал изложенный в данном пособии охватыавет все виды объектов системы 1С: Предприятие и позволяет самостоятельно составить техническое задание на разработку конфигурации на платформе V7.
Рост объемов обрабатываемой информации выдвигает на передний план проблему эффективности средств организации данных и доступа к ним. Для этого создаются различные системы баз данных. Основными критериями при построении таких систем являются быстрота доступа к информации и возможность группировки различных данных в виде удобном для пользователя. Система обслуживания данных состоит из специальных форм хранения данных, которые позволяют объединить данные с общими свойствами в отдельные структуры называемые базами данных, и программы, позволяющей сохранить данные в базах данных, считать любой элемент данных из них, а также создать удобный интерфейс для интерактивной работы с базами данных.
При проектировании системы нужно учитывать, что для того чтобы получить из нее какие-либо данные, необходимо сначала накопить соответствующие записи в системе.
Пример предложенный для рассмотрения раскрывает основные свойства и методы объектов, а также приёмы организации учета хозяйственной деятельности предприятия. При создании реальных баз данны последовательность разработки отличается от предложенной в примере: вначале определяются параметры необходимые для анализа деятельности предприятия и формы их представления - соответственно объекты учета и отчета; после этого создаются документы, которые определяют, как накапливается информация в объектах учета, справочники и другие базовые объекты.
I. Введение 7
1.1. Создание баз данных
Базу данных можно представить в виде таблицы. Набор данных в базе состоит из записей, а каждая запись данных — из отдельных полей. Структура всех записей базы одинакова: все они содержат одну и ту же последовательность полей, но наполнение полей у каждой записи свое. Таким образом, в строке таблицы содержится запись элемента данных, свойства которого расположены в отдельных полях строки и сгруппированы по колонкам таблицы. Создание базы данных производится в несколько этапов.
1.2.Реляционные базы данных
Рассмотрим пример создания базы данных адресов. Запись адреса состоит из следующих составляющих:
Почтовый индекс, Страна,
Город,
Административный округ, Улица,
Дом,
Подъезд,
Квартира,
Абонент.
Можно конечно для каждого абонента записывать полную строку адреса, но гораздо удобнее создать отдельные списки стран, городов, округов и улиц для
8 1С:Предприятие. Практика программирования на платформе V7
того, чтобы не набирать каждый раз одни и те же значения. Для этого необходимо структурировать запись адреса, разбив её на отдельные поля.

Чтобы можно было в первую таблицу подставлять значения из других таблиц нужно привязать таблицы 2-5 к соответствующим ячейкам таблицы 1. Для этого нужно задать тип полей таблицы 1: 1 и 6-9 — число, 10 — строка, 2 — тип значения Страны, 3 — тип значения Города, 4 — тип значения Округа, 5 — тип значения Улицы.
Таким образом, реляционные базы данных (БД) представляют собой систему связанных таблиц. Для связи между таблицами в них создаются ключевые поля. Ключевое поле является как бы адресом данной записи в таблице, с помощью которого устанавливается отношение (реляция) между различными базами данных. Теперь если мы хотим записать (или получить) в поле одной таблицы элемент данных из другой таблицы, мы должны определить тип поля первой таблицы как вторая таблица, а в значение поля (первой таблицы) записать значение ключевого поля записи второй таблицы.
/. Введение 9
В нашем примере надо учесть, что таблицы городов будет подчинена таблице стран, таблица округов - таблице городов, а таблица улиц - таблице округов.

1.2.1.Индексация БД
Для облегчения поиска элемента данных по БД создаются таблицы индексов, в которых содержатся первичные ключи — значения ключевых полей БД, и описание очередности записей. Таблица БД остается неупорядоченной. Таблица индексов, как правило, гораздо меньше таблицы БД, поэтому поиск и сортировка записей таблицы индексов происходит гораздо быстрее, чем поиск и сортировка по таблице БД.
Наряду с первичным индексом таблица индексов может содержать индексы по другим полям таблицы БД, что позволяет упорядочить БД по значению индексированного поля. Записи индексных таблиц можно сортировать.

1.3.Основные принципы обработки информации
С точки зрения управления информацией, различают два типа памяти, к которым производится обращение из системы управления. Первый тип — это постоянная память, формат хранения информации — файлы на жестком диске или другом носителе. Эта память, как правило, энергонезависимая, позволяющая хранить большие объемы информации и относительно медленная. Второй тип — это оперативная память, в которой формируются
10 1С:Предприятие. Практика программирования на платформе V7
интерактивные образы и выполняются алгоритмы обработки информации. Оперативная память — энергозависима, то есть при выключении питания её состояние не сохраняется, это быстрая и постоянно обновляемая из формата хранения память.
Таким образом, процесс обработки информации состоит из следующих основных этапов:

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

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

Обратим внимание на поля Адм. Округ и Почтовый индекс. В них обращение к конкретному значению выполняется посредством разделенных точкой названий полей соответствующих таблиц. Значение улицы определено в каждой записи данных - в строке таблицы, поэтому к нему можно
12 1С:Предприятие. Практика программирования на платформе V7
обращаться. С другой стороны значение улицы, тоже имеет свою структуру, в которую входят, помимо названия, значения административного округа — поле Окр, почтового индекса — поле Инд, и города — поле Гор, к которым так же можно обращаться. В результате такой записи мы получим конкретные значения административного округа и почтового индекса для каждой строки интерактивной таблицы. Чтобы данная запись была правомочна, необходимо определи ь систему обработки данных, включающую в себя язык для описания алгоритмов обработки, и определить в языке соответствующую операцию доступа к значениям данных, расположенных в связанных таблицах.
Таким образом, реляционные БД позволяют
- осуществить централизованное хранение информации,
- уменьшить затраты времени на ввод данных,
- уменьшить объем БД, что повысит скорость их обработки.
//. Основные понятия системы 13
II.Основные понятия системы
Ключевым понятием системы 1С: Предприятие является объект.
Представьте себе, что мы хотим описать машину, состоящую из множества узлов, в процессе работы. В алгоритмических системах свойства машины мы можем представить в виде элементов данных, описываемых простыми типами данных: число, дата и строка, изменяя которые можно управлять машиной в целом или отдельными её узлами.
В нашей системе, для описания машины, мы можем создать структуру, состоящую из отдельных взаимосвязанных узлов и агрегатов машины, а так же их свойств. Элементами системы будут как сама машина, так и её составные части, и их свойства. В отдельные объекты выделяются группы элементов данных с одинаковыми параметрами и предназначением. При описании автомобиля можно выделить следующие объекты: автомобиль в целом, система подачи топлива, карбюратор, жиклеры, другие агрегаты системы подачи топлива с детализацией, ходовая часть и её узлы с детализацией, другие части машины с детализацией. К этим объектам можно обращаться, как к элементам данных, а не только к их свойствам, описываемым простыми типами данных. Для объекта необходимо определить соответствующие методы, которые характерные только для него. В самом деле, очевидно, что методы управления карбюратором не будут работать для передней подвески или рулевой колонки. Такая система позволяет создавать новые типы данных с характерными для них методами обработки и управления, что, в свою очередь, позволяет абстрагироваться от элементарных свойств описываемого предмета, и создавать более глубокие и разветвленные связи в реляционной структуре данных.
Таким образом, объект - это инкапсуляция данных и алгоритмов их обработки (от английского encapsulation - пакетирование). Другими словами - это формальное описание совокупности понятий, характеризующих элементы данных с одинаковыми свойствами (синий и красный — это различные значения одного и того же свойства - цвет) и предназначением, в котором объединяются как свойства этих данных, так и методы обработки, характерные для типа данных. В контексте баз данных объект — совокупность данных с
14 1C:Предприятие. Практика программирования на платформе V7
одинаковыми свойствами и предназначением, имеющих общие структуры хранения и интерактивного представления, и методами их обработки.

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

Это те "кирпичики" и "шестеренки" из которых создаются объекты системы. Таким образом мы будем создавать не любые объекты, а объекты метаданных.
Благодаря такой структуре существенно уменьшается время разработки БД. Экономится время на описание объектов: в "1С:Предприятии" связанный объект с двумя - тремя десятками реквизитов (связей) можно "накидать" за 5-7 минут. Основное время разработки при этом уделяется описанию
//, Основные понятия системы 15
алгоритмов управления данными и их обработки средствами системы. Используя реляционную структуру полученной базы, можно создавать всевозможные выборки для генерации отчетов.
Другими словами, метаданные - это "информация о данных", представляющая виды данных, характерные для системы "1С:Предприятие".

Объекты метаданных определяются видами метаданных, которые мы видим в корне дерева метаданных: это константы, перечисления, отчеты, обработки, справочники, документы и пр.. Свойства вида метаданных определены в самой системе " 1С:Предприятие" и распространяются на любой объект метаданных данного вида. Для объектов метаданных вида Перечисление, Справочник, Документ, Регистр, ЖурналРасчетов, Календарь и Счет идентификатор вида объекта метаданных возвращается методом Вид().
Объект метаданных - это объект определенного в конфигурации вида метаданных.
Таким образом:
•Объектом в системе "1С:Предприятие" является как сама конфигурация, так и любой объект метаданных, являющийся элементом конфигурации.
16_ 1С:Предприятие. Практика программирования на платформе V7
Объект метаданных, имеющий в своем составе подчиненные объекты, называется агрегатным объектом, например объекты типа Справочники или Документы. Доступ к подчиненным объектам осуществляется через атрибуты агрегатного объекта.

Примерами объектов метаданных являются конкретные объекты определенного вида метаданных, создаваемые пользователем в процессе конфигурирования:
Справочник.Номенклатура, Документ.РасходнаяНакладная, а также атрибуты и реквизиты агрегатных объектов метаданных: например цена в справочнике Номенклатура или в документе расхода товаров.
Таким образом, при создании нового объекта метаданных основные его свойства: ключевые поля, методы и др., задаются системой в соответствии со свойствами выбранного вида метаданных. Система "1С:Предприятие", однако, позволяет присоединять объекты, созданные в других средах разработки, с помощью директивы ЗагрузшпьВнешнююКомпоненту("Имя файла").
2.1. Типы данных определенные в системе 1С:Предприятие
В системе "1С:Предприятие" определены следующие типы данных: Базовые типы данных: число, строка и дата, - определены во встроенном языке;
Служебные типы метаданных, определенные во встроенном языке, но не представлены в дереве метаданных: это объекты Периодический, Таблица,
II Основные понятия системы 17
Запрос, СписокЗначений, ТаблицаЗначений, Бухгалтерские Итоги, Файловая система (ФС), Xbase, Форма и Метаданные;
Некоторые объекты метаданных могут образовывать типы значений для других объектов метаданных. Они называются типообразующими объектами метаданных.

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

Таким образом, связи между типизированными и типообразующими объектами отображают реляционную структуру БД.
18_ 1C:Предприятие. Практика программирования на платформе V7
III.Структура системы 1С:Предприятие

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

Система 1С:Предприятие предназначена для решения задач по автоматизации учёта товарных и материальных средств, взаиморасчётов с контрагентами, расчёта заработной платы, расчёта амортизационных средств, бухгалтерского учёта по любым разделам и других необходимых предприятию разрезов учёта. Она представляет собой систему управления различными объектамив предметной области и позволяющих записывать, корректировать и получать информацию в заданном виде и формате. Существует четыре режима запуска системы: собственно Предприятие, где вводятся конкретные значения элементов данных, т.е. производится заполнение базы данных, Конфигуратор, описывающий структуру системы и алгоритмы обработки данных, Отладчик - для отладки алгоритмов в пошаговом режиме и хронометрирования времени выполнения операторов программы, и Монитор - для контроля над деятельностью пользователей в системе.
Технологическая платформа разрабатывается фирмой 1С. Конфигурация, в отличие от технологической платформы, может произвольно изменяться конечным пользователем. В конфигураторе системы настраиваются конкретный набор объектов и особенности учёта. К ним относятся основные свойства плана счетов, виды аналитического учёта, состав и структура используемых справочников, документов, отчётов, система хранения
/// Структура системы 1С:Предприятие 19
оперативных итогов и т.д. На уровне системы 1С:Предприятие определены сами понятия и стандартные операции по их обработке. Средства конфигурирования позволяют описать конкретные структуры информации (объекты) и алгоритмы (процедуры и функции), описывающие специфику их обработки, для отражения различных особенностей учёта.
Конфигуратор позволяет записать в конфигурацию информацию об авторе конфигурации и его логотип, и, если необходимо, защитить эту информацию паролем от несанкционированного изменения. Просмотр информации об авторе конфигурации выполняется при помощи пункта О программе из меню Помощь главного меню системы 1С:Предприятие - как в режиме запуска 1С:Предприятие, так и в режиме Конфигуратора. Кроме этого, Конфигуратор позволяет также заменить центральную часть заставки системы в режиме запуска 1С:Предприятие.
3.1. Компонентная структура 1С:Предприятия
Система 1С:Предприятие имеет компонентную структуру. Основные объекты: Текст, Таблица, Запрос, Отчёты, Обработки, Константы, Справочники, Документы, Журналы документов и Перечисления, и базовые типы данных поставляются с любой компонентой. В отдельные компоненты выделены объекты учета.
Компонента Бухгалтерский учёт
Компонента Бухгалтерский учёт включает типы метаданных Бухгалтерские счета, Виды субконто, Операции, Проводки и Бухгалтерские итоги, что позволяет отразить (описать и анализировать) хозяйственную деятельность предприятия с точки зрения бухгалтерского учёта.
Компонента Оперативный учёт
Компонента Оперативный учёт включает типы метаданных регистры и понятие точка актуальности итогов, позволяющие регистрировать и получать информацию о движениях и остатках товарных, материальных, денежных и других средств предприятия в реальном времени.
Компонента Расчёт
Компонента Расчёт включает типы метаданных календари, виды и группы расчётов, и журналы расчётов и предназначена для автоматизации сложных периодических расчётов, в том числе - с пересчётом результатов задним числом и ведением архива расчётов за прошедшие периоды.
20 1С:Предприятие. Практика программирования на платформе V7
3.2. Регистрация новой конфигурации
Запустим 1С:Предприятие через меню Пуск или, используя соответствующий ярлык на Рабочем столе.

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

В окне Регистрация Информационной Базы введем название базы, выберем или создадим каталог для её размещения и нажмем кнопку ОК. Затем нажмем кнопку ОК в окне запуска 1С:Предприятия. Если у вас загружена SQL-версия программы (файл 1cv7s.exe), вам будет предложено выбрать формат базы данных (БД) SQL или DBF. Если вы выбрали формат DBF, то вам будет предложено выбрать нужную кодовую страницу.

Задаваемая сортировка алфавитно-цифровых символов должна совпадать с установками операционной системы, в среде которой будет запускаться система 1С:Предприятие. В случае несовпадения установок запуск невозможен. Следует помнить, что система 1С:Предприятие не
/// Структура системы 1С:Предприятие 21
приспособлена для работы одновременно с несколькими кодовыми страницами. Поэтому в процессе работы с одной информационной базой недопустимо переключение национальных настроек операционной системы, приводящее к смене кодовых страниц. Кодовую страницу можно изменить в Конфигураторе - меню Администрирование.
Создание интерфейсов и пользователей.
Интерфейсы нужны в системе, чтобы интерактивно активизировать объект или выполнить какую- либо задачу.
Для создания интерфейса

22 1С:Предприятие. Практика программирования на платформе V7


Для авторизации доступа в систему создается список пользователей. Создадим пользователя с помощью пункта меню Администрирование или соответствующей пиктограммы в панели Администрирование, отредактируем его свойства.
Каждому пользователю определяется пароль, пользовательский каталог для записи временных файлов, набор доступных интерфейсов и набор прав на интерактивное и программное использование объектов системы. По
/// Структура системы 1С:Предприятие 23

После этого сохраним изменения в конфигурации.

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

24 1С:Лредприятие. Практика программирования на платформе V7
После сохранения созданной конфигурации, в выбранном вами каталоге появятся файл конфигурации 1cv7.md и файл словаря БД 1cv7.dd.
Конфигурацию можно запустить минуя выбор БД в окне запуска 1С:Предприятия. Строка запуска имеет следующий вид:
"Путь к исполняемому файлу 1cv77.exe" Peжим:enterprise | config | debug | monitor /D"Пyть к БД"
/N"Имя пользователя системы" (список пользователей создается в конфигураторе)
/U"каталог пользователя" (в строке запуска его можно переопределить)
/Р"пароль пользователя". (задается строкой в явном виде)
Обычно строка запуска указывается в свойствах соответствующего ярлыка на закладке Ярлык в поле Объект.

/// Структура системы 1С:Предприятие 25_
Вспомним, что мы узнали из пройденного материала.
Вопросы для самоконтроля
Для чего создают связанные таблицы — реляционные базы данных?
Для чего создаются индексные файлы?
Из чего состоит система 1С: Предприятие?
Какая часть системы содержит конкретный набор объектов, определяющих структуру данных и их взаимосвязи?
Из каких элементов состоит платформа 1С: Предприятие?
Чем отличаются компоненты платформы?
Что такое объект в системе 1С:Предприятие?
Что такое метаданные?
Какие виды объектов можно создавать на платформе 1С:Предприятие?
Какие типы объектов изначально определены в системе 1С:Предприятие?
Какие части системы содержатся в платформе 1С: Предприятие?
Какой самый критичный момент при сохранении изменений в системе?
26_ 1С:Предприятие. Практика программирования на платформе V7
IV.Элементы конфигурирования на платформе 7.7
4.1. Работа с объектами метаданных

При его открытии активной становиться закладка Метаданные.

Работа с объектами метаданных выполняется в окне Конфигурация. Для открытия этого окна выберите пункт Конфигурация из меню Операции главного меню Конфигуратора.
4.2. Редактор форм
Одним из свойств некоторых объектов метаданных является форма. Для редактирования её свойств в системе 1С: Предприятие существует три вида редакторов:
IV Элементы конфигурирования на платформе 7.7 27



28 1C:Предприятие. Практика программирования на платформе V7
содержит три закладки. При открытии форма автоматически открывается на закладке Диалог - редакторе диалогов.
4.3.Палитра свойств
Палитру свойств можно открыть, если щелкнуть правой кнопкой мыши на выбранном объекте и выбрать пункт Свойства из открывшегося контекстного меню.

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

IVЭлементы конфигурирования на платформе 7.7 29_
2) для реквизитов позволяет ввести также тип объекта, форматирование для базовых типов и дополнительные свойства в зависимости типа объекта.

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

4.4.Свойства элемента интерактивной формы Текст
Вставка в диалог элемента типа Текст выполняется следующим образом: в меню Вставить главного меню Конфигу-ратора выберите пункт Текст и в диалоге очертите предполагаемое место размещения текста.

Для редактирования свойств текста используется палитра свойств, для ее вызова следует дважды щелкнуть элемент мышью. На закладке Общие
30 1С:Предприятие. Практика программирования на платформе V7
палитры свойств в поле Заголовок можно ввести текст, который должен выводиться в интерактивной форме объекта.

Изначально в этом поле находится слово Текст, которое подставляет редактор диалогов.

Закладка Шрифт позволяет задавать начертание, размер, цвет и другие свойства шрифта. Чтобы изменить шрифт установленный по умолчанию следует снять флажок Шрифт по умолчанию.
Если флажок Шрифт по умолчанию установлен, то свойства шрифта будут определяться установками в параметрах пользователя. В этом случае изменения системного шрифта, сделанные при помощи Панели управления (пункт Экран) окажут влияние на все элементы диалогов, для которых установлен флажок Шрифт по умолчанию - у них изменится шрифт и, возможно, что диалоги станут нечитаемыми.
V. Формат исходных текстов программных модулей. 31
V. Формат исходных текстов программных модулей. Элементы программирования на встроенном языке 1С
5.1.Виды программных модулей
Для написания процедур и функций в программе предусмотрено наличие различных видов модулей, которые запускаются в строго определенные моменты работы с системой.
Модуль Формы списка справочника - запускается при вызове формы списка справочника.
Модуль Формы группы справочника - запускается при открытии формы группы справочника.
Модуль Формы элемента справочника - запускается при открытии формы элемента справочника.
Модуль Формы документа - запускается при открытии формы документа.
Модуль документа - запускается при проведении документа, удалении проведенного документа, при снятии проведения, при выполнении архивации записей журнала расчетов.
Модуль Формы журнала документов - запускается при вызове формы журнала документов.
Модуль Формы счёта - запускается при открытии формы бухгалтерского счёта.
Модуль Формы списка плана счетов - запускается при вызове формы списка плана счетов.
Модуль Формы Операции запускается при вызове формы бухгалтерской операции.
Модуль Формы журнала операций - запускается при вызове формы журнала операций.
Модуль Формы журнала проводок- запускается при вызове формы журнала проводок.
Модуль Формы журнала расчетов - запускается при вызове формы журнала
32 1С:Предприятив. Практика программирования на платформе V7
расчетов.
Модуль Формы вида расчета - запускается при расчете записей журнала расчетов.
Модуль Формы отчета или обработки - запускается при открытии диалоговой формы отчета или обработки.
5.2. Элементы встроенного языка
Процедуры и функции
Действия, заданные в диалоге, оформляются в модуле как процедуры. Процедурой является некоторый отдельный алгоритм, имеющий имя - имя процедуры. Процедура оформляется строкой начала процедуры и строкой конца процедуры.
Процедура МояПроцедура()
Тело процедуры КонецПроцедуры
Между этими строками располагается тело процедуры - алгоритм, описывающий действия, которые процедура будет выполнять. В процедуре можно определить список передаваемых параметров, значения которым передаются при вызове процедуры и используются в теле процедуры. По умолчанию параметру процедуры всегда передается ссылка на значение. Для передачи самого значения используется ключевое слово Знач.
• Передача параметров по ссылке
Процедура Моя(а)
а = 12;
КонецПроцедуры Процедура А1(а)
а=10 ;
б = а ;
Моя(б); КонецПроцедуры
В конце процедуры А1 переменная б равна 12, потому что и переменная б, и параметр процедуры Моя а идентифицируют один и тот же адрес.
\/ Формат исходных текстов программных модулей. 33_
¦ Передача параметров по значению
Процедура Моя(а)
а=12;
КонецПроцедуры Процедура А1(а)
а=10 ;
б = а ;
Моя ( Знач б); КонецПроцедуры
В конце процедуры А1 переменная б равна 10 , потому что при вызове процедуры Моя() передавалась не ссылка, а значение.
Функция отличается тем, что возвращает значение, используя, оператор Возврат.
Функция МояФункция()
Возврат Авс; КонецФункции
Поэтому функции можно ставить в правой части операции присваивания и в поле формула элемент а диалоговой формы типа Текст.
В языке также определено предварительное описание процедур и функций с помощью ключевого слова Далее
Процедура Моя(а) Далее Процедура al(a)
Моя(б) ;
КонецПроцедуры Процедура Моя(а)
а=12; КонецПроцедуры
Переменная — это строка идентификатора, определяющая область оперативной памяти, в которую записываются значения объекта.
Переменные могут определяться явно, с помощью ключевого слова Перем перед именем переменной, или неявно при присваивании им значения.
Область действия переменной определяется контекстом, в котором она создана. Это может быть локальный контекст процедуры или функции,
34 1С:Првдприятие. Практика программирования на платформе V7
Функция С1()
Перем а, б, в;
Г=а; Возврат г;
КонецФункции
контекст модуля объекта или глобальный контекст.
Перем а,б,в;
Функция С1{)
КонецФункции
Выражение — это текст на встроенном языке.
Оператор это логически завершенная последовательность выражений.
Операторы в тексте разделяются точкой с запятой. Отдельно стоящая точка с запятой воспринимается системой, как пустой оператор.
Для объединения частей выражения — операндов, используются операции. Операнды должны иметь тип, соответствующий операции (см. Таблицу). Порядок выполнения операций в выражении соответствует общепринятому, с учетом скобок и приоритетов операций.
Операция определенные во встроенном языке

V Формат исходных текстов программных модулей. 35
5.3. Правила адресации объектов
Переменные типа объект метаданных могут использоваться только с именами или ссылками на объекты метаданных или с их методами, между которыми ставится операция точка, имена видов объектов метаданных могут использоваться только с именами объектов метаданных: Объект.[Атрибут|Метод()]
Спр=Создать0бъект(Справочник.Товары); Спр.НайтиПоКоду(1); Спр.Цена.Получить('01.04.00'); Кнст=Константа.ОсновнойСклад;
Встроенный язык "1С:Предприятия" можно охарактеризовать как язык с поздним связыванием, в котором связь между объектами формируется в момент выполнения кода программы, поэтому ошибки в программе, вызванные неправильным доступом к объектам проявляются только при запуске неправильного алгоритма из модуля соответствующего объекта.
5.4. Ввод формулы в поле ввода диалога формы
Для ввода формулы следует активи-зировать закладку Дополнительные палитры свойств, щелкнув мышкой в ее название.

Сама формула записывается в поле Формула с использованием синтаксиса языка "1С:Предприятие". Простейшим примером формулы является имя процедуры или функции, описанной в модуле: При Выборе Группы(). Для написания формулы можно также использовать операцию присваивания. Операция присваивания используется для занесения результатов расчета некоторого выражения в переменную или в элемент формы. Операция присваивания обозначается знаком =. Справа от знака указывается выражение, а слева - куда заносить ре-зультат вычисления выражения.
Цена=Товар.Цена;
В поле Формула элемента формы типа поле ввода можно указать не одну, а несколько формул, разделяя их знаком ;. Эти формулы будут вычисляться последовательно слева направо.
В зависимости от типа поля вычисление выражения происходит следующим образом:
36 1С:Предприятие. Практика программирования на платформе V7
Для текстовых полей выражение вычисляется каждый раз, когда в форме происходит любое изменение. Поэтому поле должно содержать либо имя элемента данных (реквизита), либо вызов функции. В любом случае результат выражения преобразуется к тестовому представлению и отображается в поле элемента формы.
Для полей ввода формула вычисляется при потере фокуса на элементе интерактивной формы: то есть в двух случаях
акселераторы) или мышь.
5.5.Метод СоздатьОбъект и основные методы позиционирования объектов. Операторы передачи управления
Обратим внимание на метод СоздатьОбъект,
0б= СоздатьОбъект("ИмяОбъектаМетаданных");
который передает переменной Об ссылку на объект типа ИмяОбъектаМетаданных в оперативной памяти. Имя объекта метаданных должно в точности соответствовать идентификатору вида объекта с учетом регистра букв. После определения переменной Об, если объект ИмяОбъектаМетаданных имеет структуру хранения, её надо спозиционировать на конкретное значение элемента данных, например, с помощью метода, начинающегося со слова Найти - Об.Найти***, который возвращает значение 1, если значение найдено, и 0 в противном случае. В результате исполнения этого метода происходит копирование значения элемента данных с дисковой памяти в оперативную.
Другие способы позиционирования объектов основаны на методах Выбрать ***(), который определяет множество значений поля выборки (записей в БД), и Получить ***(), возвращающем значение 1, если найдено следующее значение в поле выборки. Методом
Об.Выбрать***();
определим множество перебираемых значений, которое затем последовательно перебираем в цикле
Пока Об.Получить***()=1 Цикл
Тело цикла: операторы выполняющиеся периодически, пока верно условие цикла
КонецЦикла;
V Формат исходных текстов программных модулей. 37_
Если значения атрибутов объекта были изменены, и им были присвоены некоторые значения.
Об.Атрибут=3нач_е;
Для сохранения новых значений атрибутов объекта его необходимо записать с помощью метода Записать.
Об.Записать();
В языке описана ещё одна конструкция для организации цикла.
Для
ПараметрЦикла=НачальноеЗначениеПараметраЦикла
По КонечноеЗначениеПараметраЦикла Цикл
Тело цикла: операторы выполняющиеся периодически
КонецЦикла;
Передача управления по условию
Если Условие Тогда
Операторы, исполняемые если Условие верно ИначеЕсли Условие1 Тогда
Операторы, исполняемые если Условие
неверно, а Условие1 верно
Иначе
Операторы, исполняемые если ни одно из
условий неверно
КонецЕсли;
Конструкции ИначеЕсли и Иначе необязательны. Конструкций ИначеЕсли может быть несколько.
Безусловная передача управления на исполняемый оператор программного блока
Перейти Метка;
Условный оператор
Переменная = ?(Условие ,Выражение, значение которого будет присвоено переменной если условие выполняется. Выражение, значение которого будет присвоено переменной если условие не выполняется );
5.6. Отладка текстов программ
Для удобства написания тестов программ с в системе "1С:Предприятие"
38 1С:Предприятие. Практика программирования на платформе V7
существует Синтакс-Помощник,
в котором описаны все методы и атрибуты видов метаданных, а также основные конструкции языка. В нем можно использовать как русскоязычные, так англоязычные варианты имен. Тексты из Синтакс-Помощника можно подсмотреть в файлах
/lCv77/BIN/lcv7Lang.als и lcv7tOpr.als.
Предусмотрены методы вставки конструкций языка из Синтакс-Помощника в текстовые модули. Панель свойств Синтакс-Помощника, как обычно, вызывается щелчком правой кнопки мыши.

Синтакс-Помощник позволяет также настраивать собственные шаблоны пользователя, которые записываются в файл с расширением *.st. В типовых конфигурациях это файл 1cv7scrt.st. Этот файл можно присоединить к конфигурации через меню Сервис - Параметры, закладка Синтакс-Помощник.

V Формат исходных текстов программных модулей. 39_
Отладка текстов программ производится с помощью Отладчика, в котором доступны: стек вызова исполняемых процедур и функций, пошаговое исполнение алгоритма вычислений, возможность контроля вычислений, а также замеры производительности.

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

40_ 1С:Предприятие. Практика программирования на платформе V7
К сожалению, Отладчик не позволяет редактировать алгоритмы, поэтому отладка алгоритмов часто производится во внешнем текстовом файле (при запущенном Конфигураторе), в который переносится весь текст модуля объекта. Этот прием позволяет отредактировать отдельный текстовый блок, и тут же проверить правильность его работы в режиме "1С:Предприятия". Синтакс-Помошник не доступен из текстового файла, открытого в режиме Предприятие, поэтому его лучше открывать из Конфигуратора.
Для переключения загрузки программного модуля на загрузку из текстового файла используется директива #ЗагрузитьИзФайла, которая должна записываться слева в первой строке программного модуля с первой позиции. Имя файла, содержащего исходный текст программного модуля, записывается без кавычек и скобок.
Пример: #ЗагрузитьИзФайла textMod.txt
5.7. Предопределенные процедуры. Флаг статуса
возврата
Предопределенные процедуры вызываются при выполнении пользователем определенных интерактивных действий над объектами системы: запуск или выход из системы, открытие или закрытие формы объекта и т.д.
Для каждого текстового модуля определен свой список предопределенных процедур.
Для предопределенных процедур системой зарезервированы имена и определены списки параметров.
В предопределенных процедурах определен флаг статуса возврата, текущее значение которого можно установить или прочитать с помощью метода CmamycBo3epama(). Флаг статуса возврата используется системой при завершении предопределенной процедуры. Начальное значение, устанавливаемое системой при вызове предопределенно процедуры, равно 1 (выполнить действие). Если в предопределенной процедуре установить значение флага статуса возврата равным 0, то все действия, предусмотренные данной процедурой, выполнены не будут. Чтобы выйти из процедуры до её завершения, используется оператор Возврат.
5.8. Глобальный контекст
Глобальный контекст доступен из модуля любого объекта и позволяет оптимизировать алгоритмическую структуру и уменьшить объём конфигурации. В состав Глобального контекста входят:
Глобальный модуль
\/ Формат исходных текстов программных модулей. 41
Общие таблицы
Библиотека картинок Константы Перечисления Группы расчетов
Предположим, что счет-фактура у нас распечатывается из различных документов, тогда можно создать один шаблон печатной формы счета-фактуры в Общих таблицах и одну процедуру печати счет-фактуры в Глобальном модуле.
5.8.1. Глобальный модуль

Глобальный модуль имеет такую же структуру, как и любой другой модуль. В нём помещаются процедуры и функции, которые необходимо выполнять при запуске системы 1С:Предприятие, а также глобальные переменные, процедуры и функции, к которым можно обращаться из модуля любого объекта. Для этого при их описании указывается ключевое слово Экспорт.
Передача контекста объекта
Контекст - это элемент данных, на котором в данный момент интерактивно или программно спозиционирован объект. По значению контекста доступна вся совокупность значений атрибутов объекта. Для передачи контекста объекта в Глобальный контекст служит ключевое слово Контекст, которое используется в качестве фактического параметра при вызове процедур и
42 1С:Предприятие. Практика программирования на платформе V7
функций Глобального модуля, в описании которых есть ключевое слово Экспорт.


Различают контекст объекта и контекст интерактивной формы объекта. Контекст формы можно передавать через параметр КонтФормы в формы других объектов, открываемые методами ОткрытьФорму() и ОткрытьПодбор(), а также через параметр предопределенной процедуры ОбработкаПодбора(). Этот параметр позволяет управлять реквизитами первой формы, из которой была открыта вторая форма, в контексте второй формы.
5.8.2. Предопределенные процедуры глобального модуля
Для каждого модуля существуют предопределенные процедуры (действия), которые выполняются при определенных действиях пользователя. Для глобального модуля предусмотрены следующие процедуры:
ПриНачалеРаботыСистемы - отрабатывает в момент загрузки программы
ПриЗавершенииРаботыСистемы - отрабатывает в момент закрытия программы
ПриУдаленииДокумента - отрабатывает в момент удаления документов или постановки пометки на удHление документа
ПриУдаленииЭлемента - отрабатывает в момент удаления или постановки пометки на удаление элемента справочника
ПриЗаписиИстории - отрабатывает в момент записи истории значения периодического элемента
ПриУдаленииИстории - отрабатывает в момент удаления из списка истории значения периодического элемента
ПриЗаписи Константы - отрабатывает в момент записи значения константы
ПриОтменеПроведенияДокумента - отрабатывает в момент отмены проведения документа
V Формат исходных текстов программных модулей. 43
ПриИзмененииВремениДокумента - отрабатывает в момент изменения времени существующего документа
ПриУстановкеОтбора - отрабатывает в момент установления отбора
ПриСменеРасчетного Периода - отрабатывает в момент смены расчетного периода журналов расчетов.
Вопросы для самоконтроля Что такое контекст?
Чем отличаются процедуры и функции?
Как определяются переменные во встроенном языке 1С:Предприятия?
Как производится вызов процедур, функций и переменных модуля?
Как осуществляется доступ к свойствам агрегатных объектов метаданных?
Чем отличается контекст объекта от контекста формы объекта?
Чем отличаются предопределенные процедуры от остальных процедур?
Какова область действия переменных, процедур и функций?
Постановка учебной задачи
Создать механизм списания оборудования по амортизации. Списание производить с остаточной стоимости оборудования ежемесячно с учетом фактически отработанного времени в часах. Для каждого вида оборудования сохранять все закупочные цены, вводимые приходными документами, коэффициент амортизации в час и график работы. Предусмотреть ввод рекомендованной цены по группе элементов справочника. Для любого вида оборудования предусмотреть возможность оприходования в различных единицах измерения с соответствующим коэффициентом пересчета к наименьшей единице измерения. Предусмотреть возможность подчинения Документов друг другу с помощью общего реквизита Основание. Предусмотреть возможность задавать в документах тип учета. При вводе новых Документов указывать текущее значение типа учета. При копировании Документов, реквизиту Основание задать значение копируемого документа. Документ списания сделать регламентным, с проверкой на наличие соответствующих документов в текущем месяце. Предусмотреть возможность корректировки графиков работы оборудования по фактически отработанному времени. Алгоритм расчета суммы списания определять при оприходовании
44 1С:Предприятие. Практика программирования на платформе V7
новой партии оборудования. Создать движения по регистру остатков и по бухгалтерским счетам с аналитикой по оборудованию и по приходным партиям.

VI Пример создания простой реляционной структуры 45_
VI. Пример создания простой реляционной структуры
Каждый объект содержит набор данных со своими методами доступа и обработки.
6.1. Перечисления
Перечисления являются внутренними константами, присущими данной конфигурации. Они записываются не в отдельную таблицу, а непосредственно в файл конфигурации 1cv7.md и могут редактироваться только в конфигураторе. Это не агрегатные объекты, потому что содержат статичный (неизменяемый) набор значений. Они предназначены для создания некоторого постоянного списка возможных значений для выбора. Перечисления удобны в тех случаях, когда возникает необходимость в ограничении количества возможных вариантов значений константы, реквизита справочника или документа и т. д.
Пример выбора значения перечисления по его номеру:
Спис=Создать0бъект(СписокЗначений);
Всего = Перечисление.ТипыУчета.КоличествоЗначений();
Для Ном = 1 По Всего Цикл
Спис.ДобавитьЗначение.(Перечисление.ТипыУчета.ЗначениеПоНомеру (Ном)
, Перечисление.ТипыУчета.Идентификатор());
КонецЦикла;
Служебный объект метаданных типа СписокЗначений позволяет работать с одномерными массивами , в том числе создавать список с пометками и с интерактивным представлением объекта, поэтому при записи значения в список надо задать строковое представление значения для возможности интерактивной работы со списком значений.
Метод ДобавитьЗначение(Значение,Строка)
Добавляет значение в список значений.
Значение - значение, которое добавляется в список;
Строка - символьное представление значения (необязателен, по умолчанию - стандартное
символьное представление объекта).
6.2.Константы
Константы - предназначены для хранения информации, относящейся ко всему предприятию, необходимой для многократного использования в печатных Формах, расчетах и т. д. Информация может быть постоянной или
46 1С:Предприятие. Практика программирования на платформе V7
периодически меняющейся. Использование констант облегчает изменение величин, которые используются в разных местах конфигурации.
Константы могут сохранять историю изменения значения по датам. Для этого необходимо на закладке Дополнительные панели свойств константы установить флажок Периодический.
Для работы с периодическими значениями используются методы Получить() и Установить().
Получить(Дата)возвращает значение периодической константы на заданную дату. Параметры:Дата - необязательный параметр. Выражение типа дата или значение типа документ или позиция документа. Этот параметр задает момент времени, на который требуется получить значение периодической константы. Значение по умолчанию: ТА - если используется компонента "Оперативный учет", Рабочая дата - если компонента "Оперативный учет" не используется.
Установить(Дата,Значение)- установить значение периодической константы на дату. Параметры:Дата - дата, на которую требуется установить значение периодической константы; 3начение - новое значение константы.
Примеры записи значения периодической константы:
Константа.ТипУчета.Установить(Дата_зн, зн_е);
Используется так же служебный объект Периодический, предназначенный для работы с периодическими объектами, и имеющий атрибуты Значение и ДатаЗнач для чтения и редактирования истории изменения их значению.
Метод объекта периодический ИспользоватьОбъект(ИмяРеквизита,Объект) сопоставляет
объект типа 'Периодический' периодической константе или периодическому реквизиту справочника.
Возвращает: 1 - если вызов метода закончился успешно, 0 - иначе.
ИмяРеквизита - строка с названием периодического реквизита справочника или периодической
константы;
Объект - значение элемента справочника, для которого задается применение периодического
реквизита (для констант не нужен).
Если наименование реквизита пустая строка и передан объект типа справочник, то выборка будет
осуществляться по всем реквизитам справочника.
ТипУч = Константа.ТипУчета;
ТипУч = СоздатьОбъект(Периодический) ;
ТипУч.ИспользоватьОбъект(ТипУчета);
ТипУч.Значение= зн_е;
ТипУч.ДатаЗнач = Дата_зн;
ТипУч.Записать();
Упражнение 1. Создайте перечисление ТипыУчета, задайте несколько значений типов учета, не забудьте определить пользовательские представления значений, необходимые для интерактивного выбора значения типа перечисление.
Встаньте на ветвь метаданных Перечисления, по правой кнопке мыши выберите пункт контекстного меню Новое перечисление. В появившемся
VI Пример создания простой реляционной структуры 47
окне с помощью кнопки Новый введите возможные значения созданного вами перечисления. В поле Идентификатор укажите имя, по которому вы будете обращаться к данному значению программно из текстовых модулей.

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

Упражнение 2. Создайте периодическую константу ТекТипУчета типа Перечисление.ТипыУчета. Сохраните изменения, запустите режим Предприятие и, используя меню Операции, введите значения константы на разные даты.
48_ 1С:Предприятие. Практика программирования на платформе V7
В Конфигураторе:

На закладке Дополнительные установим флажок — Периодический.

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

V/ Пример создания простой реляционной структуры 49_
6.З. Создание программного модуля
6.3.1. Структура программного модуля
Прогаммный модуль всегда привязан к какому-либо объекту системы, чаще к интерактивной форме. Трансляция модуля в исполняемый код производится за один проход, поэтому важна последовательность описания переменных и процедур модуля. Его можно поделить на три части: Блок описания переменных модуля, Блок описания процедур и функций модуля и Раздел основной программы модуля.

Блок определения переменных модуля. Отделяется от остального текста точкой с запятой.
Блок описаний процедур и функций модуля. Если в теле одной процедуры вызывается другая процедура, то последняя должна быть описана выше по тексту (например: с помощью ключевого слова Далее после описания процедуры).
Раздел основной программы -содержит отдельные операторы, выполняющиеся До открытия интерактивной формы объекта
Упражнение 3(Необязательное) Создайте процедуры в глобальном модуле, которые позволят нам редактировать любые периодические константы с помощью служебных объектов ТаблицаЗначений, Периодический и "Метаданные. В теле процедуры опишем переменные для объектов ТаблицаЗначений и Периодический.
Служебный объект ТаблицаЗначений - позволяет создавать, редактировать и выбирать значения из двумерных массивов.
50 1С:Предприятие. Практика программирования на платформе V7
Служебный объект Метаданные - позволяет получить доступ к любому объекту метаданных даже в неизвестной конфигурации. Он является атрибутом Глобального контекста и для него зарезервировано ключевое слово Метаданные, поэтому его не надо создавать с помощью метода СоздатьОбъект.
1 этап.
Создадим в глобальном модуле процедуру, допустим, История, в которой определим объект типа таблица значений и опишем для него две колонки для записи даты и значения. Для колонок определим идентификаторы и ширину.
Метод
НоваяКолонка (Идентификатор,Тип,Длина,Точность,Заголовок,Ширина,Формат,
Положение) присоединяет к таблице значений новую колонку справа и возвращает номер новой
колонки.
Параметры: Идентификатор - необязательный параметр. Идентификатор колонки. Если не указан,
то обращение к колонке возможно только по номеру.
Тип - необязательный параметр. Задает тип колонки. Длина - необязательный параметр, определенный для строки или числа. Точность - необязательный параметр, определенный только для числа. 3аголовок - необязательный параметр.
Ширина - необязательный параметр. Числовое выражение, содержащее ширину колонки (в символах) для представления колонки. формат - необязательный параметр.
Положение - необязательный параметр. Определяет вариант выравнивания при визуальном отображении значений данной колонки. Число: 1 - слева; 2 - справа.
Процедура История()
// Просмотр истории периодических объектов ТаблицаЗначений=Создать0бъект("ТаблицаЗначений"); ТаблицаЗначений.НоваяКолонка("Дт",,,,"Дата",11); ТаблицаЗначений.НоваяКолонка("Зн",,,,"Значение",15);
КонецПроцедуры
Создадим объект Периодический, определим, какие периодические константы есть в конфигурации, спозиционируем объект Периодический в цикле на текущую константу, если она периодическая.
Метод Выбран() проверяет спозиционирован ли объект типа "Метаданные" на конкретном объекте метаданных или нет. Возвращает число: 1 - объект соответствует объекту метаданных (спозиционирован), 0 - если не соответствует.
Процедура История()
// Просмотр истории периодических объектов
ТаблицаЗначений=СоздатьОбъект("ТаблицаЗначений");
ТаблицаЗначений.НоваяКолонка("Дт",,,,"Дата",11);
ТаблицаЗначений.НоваяКолонка("Зн",,,,"Значение" , 15) ;
//Найдем периодические Объекты
Периодический=Создать0бъект("Периодический");
// По константам
i = 1;
Пока Метаданные.Константа(i).Выбран()=1 Цикл
VI Пример создания простой реляционной структуры 51
//Получим "Имя Константы" в переменной Описатель
Описатель=Метаданные.Константа(i).Идентификатор;
Если Периодический.ИспользоватьОбъект(Описатель)=1 Тогда
// Заполним таблицу значений периодическими значениями
КонецЕсли;
i=i+l;
КонецЦикла;
КонецПроцедуры
2 этап.
Создадим процедуру для заполнения таблицы значений периодическими значениями. Запишем получаемые в цикле значения и даты значений периодической константы в таблицу значений, используя атрибуты служебных объектов Периодический (Значение и ДатаЗнач) и ТаблицаЗначений (НомерСтроки и ИдентификаторКолонки).
Метод ВыбратьЗначения(ДатаНачала,ДатаКонца) открывает выборку периодических значений
по датам и возвращает: 1 - если вызов метода закончился успешно, 0 - иначе. Если даты не заданы, то
выбираются все значения.
Метод ПолучитьЗначение() позволяет получить из выборки следующий элемент и возвращает: 1 -
если элемент выбран, 0 - иначе.
Метод периодического объекта ТекущийРеквизит() возвращает наименование константы или текущего
реквизита справочника. Метод используется после получения очередного значения из выборки.
Метод НоваяСтрока(НомерСтроки) добавляет новую строку в таблицу значений.
Параметры:НомерСтроки - необязательный параметр. Числовое выражение, содержащее позицию, в
которую следует вставить новую строку.
В этой процедуре определим два параметра: откуда читаем П, куда пишем Тз.
Процедура ЗаполнениеТаблицы(Тз,П) П.ВыбратьЗначения();
Пока П.Получитьзначение()=1 Цикл
Тз.НоваяСтрока();
Тз.Дт=П.ДатаЗнач;
Тз.Зн=П.Значение;
Тз.Пар=П.ТекущийРеквизит();
КонецЦикла;
КонецПроцедуры //ЗаполнениеТаблицы
Организуем вызов этой процедуры из процедуры История, отсортируем полученную таблицу значений по дате и вызовем процедуру
52 1С:Предприятие. Практика программирования на платформе V7
РедактированиеИстории, в которой будет описан алгоритм просмотра и редактирования периодических элементов.
Метод таблицы значений Сортировать(Колонки,ДокумПоДате) позволяет сортировать
таблицу значений по колонкам.
Параметры:
Колонки - строковое выражение, которое определяет колонки, порядок и направление сортировки.
Формат передаваемой строки - это разделенные запятыми номера или идентификаторы колонок со
знаком направления сортировки ( "+" - сортировать по возрастанию; "- " - сортировать по
убыванию; "*" - сортировать по внутреннему значению). Знак направления сортировки можно
указывать до или после обозначения колонки через пробел или без пробела. По умолчанию
направление сортировки принимается по возрастанию.
ДокумПоДате - необязательный параметр. Имеет смысл только в том случае, если значениями
таблицы значений являются документы. В этом случае можно задавать сортировку документов по их
хронологии. Число: 1 - сортировка по хронологии документов; 0 - нет. Значение по умолчанию - 0.
Процедура История() // Просмотр истории периодических объектов
ТаблицаЗначений=Создать0бъект("ТаблицаЗначений");
ТаблицаЗначений.НоваяКолонка("Дт",,,,"Дата",11);
ТаблицаЗначений.НоваяКолонка("Зн",,,,"Значение",15);
ТаблицаЗначений.НоваяКолонка("Пар",,,,"Параметр",15);
//Найдем периодические Объекты
Периодический=Создать0бъект("Периодический");
// По константам
i = 1;
Пока Метаданные.Константа(i).Выбран()=1 Цикл
//Получим "Имя Константы" в переменной Описатель Описатель=Метаданные.Константа(i).Идентификатор;
Если Периодический.ИспользоватьОбъект(Описатель)=1 Тогда
// Заполним таблицу значений периодическими значениями
ЗаполнениеТаблицы(ТаблицаЗначений,Периодический);
КонецЕсли;
i=i+l;
КонецЦикла;
ТаблицаЗначений.Сортировать("Дт");
РедактированиеИстории(Периодический,ТаблицаЗначений);
КонецПроцедуры
3 этап.
В процедуре РедактированиеИстории просмотрим записанные значения в отдельном окне, с помощью метода таблицы значений ВыбратьСтроку(), и
VI Пример создания простой реляционной структуры 53
создадим СписокЗначений для того, чтобы можно было выбрать действие над значением из таблицы значений.
ВыбратьСтроку(Строка,Заголовок,Таймаут). Метод открывает окно для интерактивного выбора строки в таблице значений и возвращает число: 1 - если выбор произведен (нажата кнопка OК); 0 - если выбор не произведен (нажата кнопка "ОТМЕНА"); -1 (минус единица) - закончилось время Таймаут ожидания отклика пользователя.
Не забудем, что параметры методов, которым передается какое-либо значение при вызове метода, должны быть предварительно явно или неявно описаны; в данном случае это параметр Строка. Далее получим строку из таблицы значений и спозиционируем объект периодический на константу и на выбранное значение константы.
Метод таблицы значений ПолучитьСтрокуПоНомеру(НомерСтроки) позволяет получить строку таблицы значений по номеру. Указанная строка становится текущей. НомерСтроки - номер строки, на которую следует переместиться.
Метод объекта периодический НайтиЗначение(Дата,Режим) находит периодическое значение на заданную дату.Возвращает: 1 - если вызов метода закончился успешно, 0 -иначе. Параметры:
Дата - дата, на которую требуется найти периодический реквизит справочника или периодическую константу;
Режим - режим поиска на тот случай, когда на заданную дату не существуе| значения периодического реквизита: -1, возвращается значение на предыдущую дату;
Процедура РедактированиеИстории(Периодический,Таблица)
Перем НомерСтр;
Если Таблица. ВыбратьСтроку (НомерСтр/История
периодических объектов")=1 Тогда
Таблица. ПолучитьСтрокуПоНомеру (НомерСтр) ;
Периодический. ИспользоватьОбъект (Строка (Таблица. Пар) ) ;
Периодический.НайтиЗначение(Таблица. Дт, 0 ) ; КонецЕсли; КонецПроцедуры
4 этап.
Определим, что мы будем делать с найденной записью, запишем эти действия в СписокЗначений, организуем выбор действия из списка и выполним выбранное действие для периодического значения, После изменения значения, чтобвы увидеть это изменение, перезаполним ТаблицуЗначений., вызвав процедуру История().
Метод списка значений
ВыбратьЗначение(Значение,Заголовок,Позиция,Таймаут,Способ выбора) позволяет открыть окно для интерактивного выбора значения из списка.
Возвращает: -1 (минус единица) - закончилось время Таймаут ожидания отклика пользователя, 1 -если выбор произведен, 0 - иначе. Параметры: Значение - идентификатор переменной, куда помещается результат выбора;
54 1С:Предприятие. Практика программирования на платформе V7
3аголовок - строка заголовка диалогового окна.
Позиция - идентификатор переменной, куда помещается номер позиции выбранного значения в
списке.
Таймаут - необязательный параметр. Числовое выражение, значение которого задает время
ожидания системы (в секундах) на отклик пользователя.
Способ выбора - необязательный параметр. Число, значение которого задает способ выбора
значения. О - в виде диалога; 1 - выбор производится в виде меню, которое подстраивается по месту
текущего элемента диалога или ячейки таблицы; 2 - выбор маленьким списком (список похож на выбор
значения перечисления), также привязанным к позиции элемента диалога
Значение по умолчанию - 0.
Метод может использоваться только для переменных, созданных функцией СоздатьОбъект.
Процедура РедактированиеИстории(Периодический,Таблица)
Перем НомерСтр, Значение, Позиция;
СписокДействий=Создать0бъект("СписокЗначений");
СписокДействий.ДобавитьЗначение("У","Удалить");
СписокДействий.ДобавитьЗначение("И","Изменить");
Если Таблица.ВыбратьСтроку(НомерСтр,"История периодических
объектов")=1 Тогда
Таблица.ПолучитьСтрокуПоНомеру(НомерСтр);
Периодический.ИспользоватьОбъект(Строка(Таблица.Пар));
Периодический.НайтиЗначение(Таблица.Дт,0);
Если СписокДействий.ВыбратьЗначение(Значение,"Выберите действие",Позиция,,1)=1 Тогда
Если Значение="У" Тогда
Периодический.Удалить();
ИначеЕсли Значение="И" Тогда
Стр=Таблица.Зн;
ДатаЗначения=Периодический.ДатаЗнач;
Если ВвестиПеречисление(Стр,"Введите значение ")1 Тогда
Возврат;
КонецЕсли;
Периодический.ДатаЗнач=ДатаЗначения;
Периодический.Значение=Стр;
Периодический.Записать();
КонецЕсли;
КонецЕсли;
VI Пример создания простой реляционной структуры 55_
История();
КонецЕсли;
КонецПроцедуры
Мы видим, что у нас процедура РедактированиеИстории вызывается из процедуры История, и, наоборот, процедура История вызывается из процедуры РедактированиеИстории. Поэтому одну из них надо описать перед описанием другой с помощью ключевого слова Далее. Окончательный текст блока будет следующим.
Процедура РедактированиеИстории(Периодический,Таблица) Далее
Процедура ЗаполнениеТаблицы(Тз,П)
П.ВыбратьЗначения();
Пока П.Получитьзначение()=1 Цикл
Тз.НоваяСтрока();
Тз.Дт=П.ДатаЗнач;
Тз.Зн=П.Значение;
Тз.Пар=П.ТекущийРеквизит();
КонецЦикла;
КонецПроцедуры //ЗаполнениеТаблицы
Процедура История() // Просмотр истории периодических объектов
ТаблицаЗначений=Создать0бъект("ТаблицаЗначений");
ТаблицаЗначений.НоваяКолонка{"Дт",,,,"Дата",11);
ТаблицаЗначений.НоваяКолонка("Зн",,,,"Значение",15);
ТаблицаЗначений.НоваяКолонка("Пар",,,,"Параметр",15);
//Найдем периодические Объекты
Периодический=СоздатьОбъект("Периодический");
// По константам
i = 1;
Пока Метаданные.Константа(i).Выбран()=1 Цикл
//Получим "Имя Константы" в переменной Описатель
Описатель=Метаданные.Константа(i).Идентификатор;
Если Периодический.ИспользоватьОбъект(Описатель)=1 Тогда
// Заполним таблицу значений периодическими значениями
56 1C:Предприятие. Практика программирования на платформе V7
ЗаполнениеТаблицы(ТаблицаЗначений,Периодический);
КонецЕсли;
i=i+1;
КонецЦикла;
ТаблицаЗначений.Сортировать("Дт");
РедактированиеИстории(Периодический,ТаблицаЗначений);
КонецПроцедуры
Процедура РедактированиеИстории(Периодический,Таблица)
Перем НомерСтр,Значение,Позиция;
СписокДействий=СоздатьОбъект("СписокЗначений");
СписокДействий.ДобавитьЗначение("У","Удалить");
СписокДействий.ДобавитьЗначение("И","Изменить");
Если Тблица.ВыбратьСтроку(НомерСтр,"История периодических объектов")=1 Тогда
Таблица.ПолучитьСтрокуПоНомеру(НомерСтр);
Периодический.ИспользоватьОбъект(Строка(Таблица.Пар));
Периодический.НайтиЗначение(Таблица.Дт,0);
Если СписокДействий.ВыбратьЗначение(Значение,"Выберите действие".Позиция,,1)=1 Тогда
Если Значение="У" Тогда
Периодический.Удалить();
ИначеЕсли Значение="И" Тогда
Стр=Таблица.Зн;
ДатаЗначения=Периодический.ДатаЗнач;
Если ВвестиПеречисление(Стр,"Введите значение ")1 Тогда
Возврат;
КонецЕсли;
Периодический.ДатаЗнач=ДатаЗначения;
Периодический.Значение=Стр;
Периодический.Записать();
КонецЕсли;
КонецЕсли;
VI Пример создания простой реляционной структуры 57
История();
КонецЕсли;
КонецПроцедуры
Упражнение 4. Вставьте в меню пользовательского интерфейса вызов процедуры История() глобального модуля.
Чтобы процедура История() когда-нибудь выполнилась её надо вызвать.
Для редактирования интерфейса в конфигураторе необходимо открыть окно Конфигурация и перейти к закладке Интерфейсы, для этого достаточно просто щелкнуть мышкой по этой закладке. На экране появится список пользовательских интерфейсов. Каждый интерфейс - это совокупность меню и набора панелей инструментов. Для создания пункта меню, перейдём в режим редактирования меню интерфейса.
Для редактирования пользовательских интерфейсов в Конфигураторе существует 2 специализированных редактора: редактор меню и редактор панелей инструментов. Для вызова редактора меню необходимо:

В результате этих действий будет открыто окно - Редактор меню. В котором меню пользовательского интерфейса выводится не в том виде, в котором мы с ним работаем в 1С:Предприятии, то есть не в виде колонок, а в виде дерева, при этом ветви верхнего уровня соответствуют колонкам.
На платформе V77 можно не только создавать новые пункты меню, но и Редактировать системные пункты меню.
58_ 1С:Предприятие. Практика программирования на платформе V7
• Откроем свойства элемента меню новая колонка... через контекстное меню и отредактируем его.

• Щелкнем крестик слева от пункта меню Сервис и откроем двойным
щелчком мыши свойства пункта меню новый....

• На закладке Дополнительно укажем имя вызываемой процедуры.

• выберем команду Задача .Выполнить;
Можно ещё отредактировать в палитре свойств поля Название и Подсказка, автоматически заполненные программой, так, чтобы они более наглядно и естественно отражали назначение команды меню. Содержимое поля Название будет являться собственно названием команды меню, а содержимое поля Подсказка будет выводиться в нижней части экрана (cmamyc-строке) при установке курсора на данный пункт меню. Теперь если нажать кнопку ОК - введенная нами команда попадет в нижнюю часть ветви Сервис. Можно перетащить ее в другое место дерева меню.
VI Пример создания простой реляционной структуры 59
Сохраним сделанные изменения и запустим режим Предприятие. Запустим процедуру, выбрав созданный пункт интерфейса.

Упражнение 3.1 (дополнительное). Самостоятельно, используя Синтакс-Помошник, отредактируйте алгоритм, описанный в упражнении 3 таким образом, чтобы с помощью него можно было добавить значение в историю периодического элемента.
Упражнение 3.2 (дополнительное). Самостоятельно отредактируйте алгоритм, описанный в упражнении 3.1 таким образом, чтобы с помощью него можно было изменить или значение или дату значения периодического элемента.
Вопросы для самоконтроля
Как создаются новые типы объектов на платформе 1С:Предприятие?
Почему значения перечислений можно редактировать только в конфигураторе?
Чем отличаются периодические константы от простых констант?
60_ 1С:Предприятие. Практика программирования на платформе V7
VII. Справочники
Справочники - предназначены для хранения различных списков, перечней и т. д. Достоинство справочников - наличие неограниченного количества реквизитов (т. е. возможность хранения массива информации, а при организации аналитического учета по справочнику возможность получения широкого спектра аналитики через один объект), наличие нескольких уровней. Информация в справочнике может изменяться, а также хранить историю изменения реквизита справочника.
Для удобства выборки справочники можно сделать многоуровенными и подчиненными другим справочникам. Поиск в многоуровенном справочнике осуществляется либо по полному коду ПолныйКод() или наименованию ПолноеНаименование(), либо по атрибуту Родитель. В многоуровенном справочнике одному значению родительской группы соотносится несколько элементов или подгрупп справочника. Аналогично одному элементу справочника-владельца сопоставляется множество элементов подчиненного справочника. Таким образом эти связи образуют отношения один ко многим. Перед использованием подчиненного справочника сначала должен быть выбран элемент справочника Владелец. После этого при включенном режиме Иерархический список в окне подчиненного справочника будут показаны элементы, подчиненные выбранному элементу справочника Владелец.
Справочники имеют несколько видов форм для представления информации: Форма элемента, форма группы, форма списка. Форм списка может быть несколько. Каждая из этих форм имеет модуль, в который помещаются различные процедуры и функции.
7.1. Предопределенные процедуры модуля формы и модуля формы списка справочника
ВводНового - процедура, которая вызывается в момент ввода пользователем нового элемента справочника.
ПриЗаписи - процедура, которая вызывается перед записью элемента в справочник.
ПриВводеСтроки - процедура, которая вызывается в момент ввода новой строки в форме списка справочника.
ПриРедактированииНовойСтроки - процедура, которая вызывается в момент начала редактирования новой строки в форме Списка Справочника (после Отработки Процедуры ПриВводеНовой Строки).
VII.Справочники 61
ПриНачалеРедактированияСтроки - процедура, которая вызывается в момент начала редактирования существующей строки в форме списка справочника.
ПриПереносеЭлементаВДругуюГруппу - процедура, которая вызывается в момент переноса элемента справочника из одной группы в другую. Осуществляется посредством атрибута Родитель.
7.2. Атрибуты объекта метаданных типа Справочник

Атрибут или Реквизит - это некое хранилище информации определенного типа. Каждый введенный нами реквизит позволит вводить в объект данного вида некоторые значения.
Для объектов некоторых видов характерны атрибуты, например: код и наименование для справочников. Ввод атрибутов обеспечивается системой автоматически, наименования идентификаторов атрибутов не изменяются.
Атрибуты Код и Наименование характерны для любого справочника. По ним можно производить сортировку элементов справочника. Тип Наименования - строка. Тип Кода можно задать — или число, или строка.
Атрибут Родитель определен для элементов или групп справочника подчиненных какой-либо группе справочника и возвращает ссылку на неё.. Доступ к значению родительской группы выбранного элемента справочника осуществляет Метод ИспользоватьРодителя(Группа ), устанавливающий выборку элементов по группе справочника.
Метод ПринадлежитГруппе(Группа) проверяет, принадлежит ли указанной группе текущий элемент справочника (независимо на каком нижележащем уровне он находится). Метод возвращает: 1 - если элемент принадлежит указанной группе , 0 - если нет.
Атрибут Владелец определен для элементов подчиненного справочника и возвращает ссылку на сопряженный элемент справочника владельца. Доступ к владельцу выбранного элемента справочника в связанном справочнике осуществляет Метод ИспользоватьВладельца(Элемент). Элемент - это значение элемента связанного справочника, которому подчинен данный
62 1С:Предприятие. Практика программирования на платформе V7
справочник. Метод устанавливает выборку по элементу связанного справочника и возвращает значение текущего владельца для справочника (на момент до исполнения метода). В контексте Модуля формы списка справочника метод относится ко всему текущему справочнику.
Реквизиты это дополнительные свойства справочника, создаваемые при конфигурировании. Реквизиты можно создавать и для элемента, и для группы справочника. Они предоставляют доступ к одному из свойств объекта.
Редактирование структуры справочника
Упражнение 5. Создадим два вида справочников: Оборудование и Единицы, причем справочник Единицы сделаем подчиненным справочнику Оборудование, Справочник Оборудование сделаем иерархическим, и определим в нем периодический реквизит элемента справочника, изменяемый документами Цена, реквизит График, тип реквизита — Календарь, предназначенный для вычисления интервалов времени по различным графикам работы, и реквизит КоэффАморт, тип реквизита — Число, а также реквизит группы справочника ГрЦена, тип реквизита — Число.
В дереве метаданных выделим ветвь Справочники, далее в главном меню выберем пункт Действие и в появившемся подменю пункт Новый элемент.

VII Справочники 63
Появится окно редактирования структуры справочника (или конструктор справочника, если установлен флажок Использовать конструкторы для создания новых объектов), в которой редактируются свойства объекта.

Чтобы к объекту можно было обращаться, ему надо задать идентификатор, который не может содержать пробелов и специальных символов, кроме подчеркивания, и не должен начинаться с цифры, его длина не должна превышать 128 символов; кроме идентификатора, можно также задать комментарий и синоним. В отличие от идентификатора, на них не накладывается никаких ограничений. Синоним описывает пользовательское представление объекта, если он не задан, то для представления используется идентификатор. В комментариях обычно записывают текст, Расшифровывающий идентификатор или поясняющий назначение создаваемого объекта. Для подчиненных справочников задается свойство подчинения (связь со справочником владельцем типа много к одному). Для справочников любого вида характерны реквизиты Код и Наименование, названия которых не изменяются, длина кода (не более 24 символов) и наименования (не более 100 символов). Также здесь задаются основные параметры для нумерации и сортировки элементов - Контроль уникальности и Серии кодов. Из данной формы доступны различные формы представления справочника: форма элемента (индивидуальная карточка), форма группы, Формы списков и устанавливаются формы для редактирования элемента справочника: в списке, в диалоге - в индивидуальной карточке или обоими
64 1С:Предприятие. Практика программирования на платформе V7
способами.
По умолчанию справочнику дается идентификатор Новый1, изменим его на - Оборудование, установим тип кода — Текстовый.
Создание нового реквизита

Создание нового реквизита справочника может осуществляться как из дерева метаданных, через контекстное меню конкретного справочника, так и из вышеописанной формы нажатием кнопки Новый. При этом на экране появляется окно палитры свойств - Свойства реквизита. В верхней части закладки Общие следует ввести идентификатор нового реквизита. Идентификатор реквизита является некоторым уникальным словом, которое позволит отличить данный реквизит от других реквизитов данного объекта. При создании нового рекви-зита программа сама подставляет идентификатор новый1. Целесообразно вводить идентифика-торы, отражающие назначение реквизита. Введем в справочник Оборудование реквизит Цена Тип вводимого реквизита указывается выбором из списка возможных типов в поле Тип значения. Стандартными типами являются Число, Строка, Дата. Они позволяют вводить, соответственно, числовое значение, произвольную строку символов или календарную дату. Установим тип значения реквизита Число, который располагается вы-ше типа Строка.
Для числовых реквизитов, кроме самого типа Число, нужно также указать длину и точность (количество знаков после запятой). Обратите вни-мание, что длина числового реквизита указывается с учетом целой части, дробной и десятичной точки, на платформе 7.5 максимальная точность чисел - 5 знаков.
VII. Справочники 65
на платформе 7.7-9 знаков, максимальная длина чисел -19 знаков. На закладке Дополнительные можно задать разделение представления числа на триады -флажок Разделять триады,- которое не влияет на формат хранения чисел, то есть символ разделителя не включается в длину числа. Полностью данное свойство объекта метаданных можно именовать Разделять триады цифр при показе числового значения объекта метаданных. Это свойство доступно для редактирования только для объектов метаданных с типом значения число. Если это свойство включено, то при вводе и показе значения объекта метаданных будут автоматически вставляться разделители между тройками цифр, разделяя тысячи, миллионы, миллиарды и так далее. Здесь же можно установить флажок Неотрицательный, который не позволит Вам интерактивно ввести отрицательное значение реквизита, причем при вводе отрицательного значения в неотрицательный реквизит система запишет положительное значение.
Укажем для реквизита Цена длину 10 и точность 2, это значит, что максимальное число, коZорое можно будет ввести в реквизит количество, составит 9999999.99, то есть, в целой части количества мы сможем вводить 10-2-1 = 7 разрядов. При выборе длины и точности нужно ориентироваться на текущие потребности, оценив, какие при-мерно максимальные значения цены и с какой точностью встре-чаются в хозяйственных операциях. В дальнейшем можно легко увеличить и длину, и точность для любого реквизита. Максимальная точность числового значения - 9 знаков.
Уменьшение длины и точности реквизита может привести к потере существующих значе-ний в уже введенных элементах, но программа предупредит вас об этом.
На закладке Дополнительные свойств реквизита установим флажки Неотрицательный, Периодический, чтобы сохранялись все значения реквизита с привязкой к дате изменения, и Изменяется документами, чтобы
66_ 1С:Предприятие. Практика программирования на платформе V7
можно было отслеживать историю изменения значения по документам; флажок Ручное изменение устанавливается системой и служит для обеспечения возможности ручного ввода или изменения значений в истории реквизита.

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

V//. Справочники 67
Вернемся в окно редактирования свойств справочника Оборудование и создадим возможность группировать элементы справочника по группам. Для этого установим значение поля ввода Кол-во, уровней больше единицы.

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

68 1С:Предприятие. Практика программирования на платформе V7
Далее нажмем последовательно кнопки Формы списка и Редактировать. Форм списка может быть несколько. Две из них можно определить для просмотра каталога и для подбора значений по умолчанию.



При нажатии на кнопку Открыть списка конструктор предложит нам ввести реквизиты Код, Наименование, ГрЦена, Цена и График. Не забудьте установить флажок Вставить дерево групп. Нажмем кнопку Вставить и выбранные реквизиты будут помещены в форму списка справочника ОборудовHние.
VII. Справочники 69
Напомню, что форма включает в себя:
1. Диалоговое окно, в котором мы задаем расположение реквизитов, кнопок
и информационных полей (создаем визуальное представление объекта для пользователя);
2. Модуль формы, в который мы помещаем те процедуры и функции, которые