Основы разработки прикладных решений для 1С:Предприятие 8.1

advertisement
А.А. Заика
Основы разработки прикладных решений для
«1С: Предприятие 8.1»
2010
Основы разработки прикладных решений для 1С:Предприятие 8.1
Автор: А.А. Заика
Заика Александр Александрович
Старший преподаватель кафедры ИТ, Институт Управления, Бизнеса и Права, Ростов-наДону. Профессиональные интересы: программирование (VBA, C#), ИНС, разработка
компьютерных игр.
Информация о курсе
Курс предназначен для пользователей, желающих освоить разработку прикладных
решений в системе 1С:Предприятие 8.1. В курсе на практическом примере
рассмотрены основы работы с документами, справочниками, константами,
регистрами накопления, отчетами, запросами, перечислениями, подсистемами,
рассмотрены основы встроенного языка системы.
Курс является вступительным курсом учебной программы «Разработка и модификация
прикладных решений для 1С:Предприятие 8». Он предназначен для читателей, желающих
научиться разрабатывать и модифицировать прикладные решения для системы
1С:Предприятие 8.1. Приступать к изучению курса можно, не обладая начальными
знаниями по разработке для 1С:Предприятия, так как рассмотрение особенностей работы
с системой и ее концепций приведено в расчете на неподготовленного пользователя. В
курсе, наряду с общим обзором объектов системы, присутствует подробное описание
методов работы и практический разбор основных приемов работы с документами,
справочниками, константами, регистрами
накопления, отчетами, запросами,
перечислениями, подсистемами, рассмотрены основы встроенного языка системы. Курс
построен на практическом примере разработки учебной конфигурации.
Дополнительные курсы
Практика бухгалтерского учета в 1С:Бухгалтерии 8
Основы конфигурирования в системе "1С:Предприятие 8.0"
Основы бухгалтерского учета
Оглавление
1. ЛЕКЦИЯ: ОСНОВЫ ............................................................................................................................................ 5
1.1. РЕЖИМЫ РАБОТЫ СИСТЕМЫ, СОЗДАНИЕ ИНФОРМАЦИОННОЙ БАЗЫ .............................................................................. 5
1.2. ОПИСАНИЕ ЗАДАЧИ .............................................................................................................................................. 11
1.3. СОЗДАЕМ ОБЪЕКТЫ .............................................................................................................................................. 12
1.4. АРХИВНАЯ КОПИЯ ИНФОРМАЦИОННОЙ БАЗЫ ........................................................................................................... 13
1.5. ОСНОВНАЯ КОНФИГУРАЦИЯ И КОНФИГУРАЦИЯ БАЗЫ ДАННЫХ .................................................................................... 14
1.6. ВАРИАНТЫ ЗАПУСКА 1С:ПРЕДПРИЯТИЯ ИЗ КОНФИГУРАТОРА ...................................................................................... 16
1.7. ВЫВОДЫ ............................................................................................................................................................. 17
2. ЛЕКЦИЯ: ВИДЫ ОБЪЕКТОВ, ПОДСИСТЕМЫ, КОНСТАНТЫ ............................................................................ 18
2.1. ОБЗОР ОБЪЕКТОВ 1С:ПРЕДПРИЯТИЕ 8: ОБЩИЕ ОБЪЕКТЫ .......................................................................................... 18
2.2. ОБЗОР ОБЪЕКТОВ 1С:ПРЕДПРИЯТИЕ 8: ПРИКЛАДНЫЕ ОБЪЕКТЫ ................................................................................. 20
2.3. ОБЗОР ОБЪЕКТОВ 1С:ПРЕДПРИЯТИЕ 8: ПОДЧИНЕННЫЕ ОБЪЕКТЫ ............................................................................... 22
2.4. ПОДСИСТЕМЫ ..................................................................................................................................................... 23
2.5. КОНСТАНТЫ И ФОРМЫ КОНСТАНТ ........................................................................................................................... 26
2.6. ПРОВЕРКА КОНФИГУРАЦИИ В РЕЖИМЕ 1С:ПРЕДПРИЯТИЕ .......................................................................................... 31
2.7. ВЫВОДЫ ............................................................................................................................................................. 32
3. ЛЕКЦИЯ: СПРАВОЧНИКИ, ПЕРЕЧИСЛЕНИЯ, ОСНОВЫ ВСТРОЕННОГО ЯЗЫКА ............................................... 33
3.1. СПРАВОЧНИКИ ..................................................................................................................................................... 33
3.2. HELLO WORLD! .................................................................................................................................................... 46
3.3. ВИДЫ МОДУЛЕЙ .................................................................................................................................................. 47
3.4. ПРОЦЕДУРЫ И ФУНКЦИИ ....................................................................................................................................... 48
3.5. ВЫВОД ПРИВЕТСТВИЯ ПРИ ЗАГРУЗКЕ СИСТЕМЫ ......................................................................................................... 49
3.6. ВЫВОДЫ ............................................................................................................................................................. 53
4. ЛЕКЦИЯ: СПРАВОЧНИКИ, КОНСТРУИРОВАНИЕ ФОРМ.................................................................................. 54
4.1. ДОКУМЕНТЫ И СПРАВОЧНИКИ ............................................................................................................................... 54
4.2. СПРАВОЧНИКИ: КОНТРАГЕНТЫ И ПРЕДСТАВИТЕЛИКОНТРАГЕНТОВ .............................................................................. 54
4.3. МЕХАНИЗМ ФОРМ ПО УМОЛЧАНИЮ ....................................................................................................................... 64
4.4. ДОРАБОТКА ФОРМЫ СПИСКА СПРАВОЧНИКА КОНТРАГЕНТЫ ....................................................................................... 64
4.5. СОЗДАНИЕ ДОПОЛНИТЕЛЬНЫХ СПРАВОЧНИКОВ ........................................................................................................ 72
4.6. ВЫВОДЫ ............................................................................................................................................................. 80
5. ЛЕКЦИЯ: ДОКУМЕНТЫ, РЕГИСТРЫ НАКОПЛЕНИЯ ......................................................................................... 81
5.1. СОЗДАНИЕ ДОКУМЕНТА......................................................................................................................................... 81
5.2. РЕГИСТРЫ НАКОПЛЕНИЯ ........................................................................................................................................ 91
5.3. НАСТРОЙКА ПРОВЕДЕНИЯ ДОКУМЕНТА .................................................................................................................... 94
5.4. ВЫВОДЫ ...........................................................................................................................................................100
6. ЛЕКЦИЯ: ДОКУМЕНТЫ, МАКЕТЫ, ЖУРНАЛЫ ДОКУМЕНТОВ ...................................................................... 101
6.1. РАЗРАБОТКА ПЕЧАТНОЙ ФОРМЫ ДОКУМЕНТА.........................................................................................................101
6.2. РАЗРАБОТКА ДОКУМЕНТА ОТПУСКМАТЕРИАЛОВМАСТЕРУ .......................................................................................110
6.3. ЖУРНАЛ ДОКУМЕНТОВ........................................................................................................................................118
6.4. ВЫВОДЫ ...........................................................................................................................................................120
7. ЛЕКЦИЯ: ЗАПРОСЫ, ОБРАБОТКИ ................................................................................................................. 121
7.1. ОСНОВНЫЕ СВЕДЕНИЯ О ЗАПРОСАХ .......................................................................................................................121
Источники данных для запросов ..................................................................................................................122
Написание текста запроса ...........................................................................................................................122
4
Основы разработки прикладных решений для 1С: Предприятие 8.1
Выполнение запроса и обработка результатов запроса.........................................................................122
7.2. СОЗДАНИЕ ВНЕШНЕЙ ОБРАБОТКИ КОНСОЛЬЗАПРОСОВ ............................................................................................123
7.3. ИЗУЧЕНИЕ КОНСТРУКТОРА ЗАПРОСОВ И ЯЗЫКА ЗАПРОСОВ ........................................................................................127
Левое внешнее соединение............................................................................................................................140
Правое внешнее соединение .........................................................................................................................143
Полное внешнее соединение .........................................................................................................................145
Внутреннее соединение ................................................................................................................................146
7.4. ВЫВОДЫ ...........................................................................................................................................................147
8. ЛЕКЦИЯ: ОТЧЕТЫ .......................................................................................................................................... 149
8.1. СОЗДАНИЕ ОТЧЕТА .............................................................................................................................................149
8.2. ВЫВОДЫ ...........................................................................................................................................................158
1. Лекция: Основы
В этой лекции рассматриваются режимы работы с системой 1С:Предприятие 8, создание
информационной базы, работа в Конфигураторе, рассматривается выполнение некоторых
сервисных операций.
Содержание лекции
1.1. Режимы работы системы, создание информационной базы
1.2. Описание задачи
1.3. Создаем объекты
1.4. Архивная копия информационной базы
1.5. Основная конфигурация и конфигурация базы данных
1.6. Варианты запуска 1С:Предприятия из конфигуратора
1.7. Выводы
Цель лекции: освоить базовые операции по разработке прикладных конфигураций в среде
1С:Предприятие 8.
1.1. Режимы работы системы, создание информационной базы
Система 1С:Предприятие может работать в двух режимах. Первый называется
"1С:Предприятие", второй - "Конфигуратор". Разработка прикладных решений ведется в
конфигураторе, а их исполнение - то есть - работа пользователей с ними - в режиме
1С:Предприятие.
Говоря о системе программ "1С:Предприятие" следует помнить, что существуют понятия
"платформа" и "конфигурация". Платформа - это среда, в которой разрабатывают и
исполняют конфигурации. А конфигурацию можно сравнить с набором команд, для
исполнения которых нужна платформа.
При запуске программы первым делом на экране появляется окно Запуск
1С:Предприятия (рис. 1.1). В нем нужно, во-первых, указать нужную конфигурацию, вовторых - выбрать режим ее запуска. Если в списке пока нет информационных баз - запуск
программы будет сопровождаться сообщением о том, что список информационных баз
пуст и предложением добавить в него новую базу.
6
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 1.1. Окно запуска программы
В области Информационные базы находится список подключенных информационных
баз. В данный момент этот список пуст.
Окно содержит следующие кнопки:
1С:Предприятие. Запуск системы в режиме 1С:Предприятие.
Конфигуратор. Запуск системы в режиме Конфигуратор.
Добавить. Запуск процесса добавления в список новой информационной базы.
Изменить. Открывает окно изменения параметров добавленной информационной базы.
Удалить. Удаляет из списка информационную базу.
Настройка. Позволяет настроить внешний вид списка Информационные базы, установить
каталог для поиска шаблонов конфигураций и обновлений.
Нажмем на кнопку Добавить (или ответим Да на вопрос о создании новой базы).
Появится окно Добавление информационной базы/группы. Фактически, это мастер,
который проводит вас через несколько шагов по добавлению базы в список (рис. 1.2).
1. Лекция: Основы
7
Рис. 1.2. Окно добавления новой информационной базы
Здесь мы можем пойти двумя путями:
Создание новой информационной базы.
Добавление в список существующей информационной базы.
Нас интересует именно первый пункт, так как мы должны будем создать базу для
последующей разработки в ней учебной конфигурации. Выберем его и нажмем на кнопку
Далее. Появится окно, где можно выбрать вариант создания новой информационной базы
(рис. 1.3).
8
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 1.3. Выбор способа создания базы
Если ранее вы устанавливали в систему шаблоны каких-либо конфигураций, их перечень
можно будет найти в данном окне. Нас готовые конфигурации в данном курсе не
интересуют, поэтому мы выбираем вариант создания информационной базы без
конфигурации. Он предназначен либо для разработки новой конфигурации, либо для
загрузки в пустую конфигурацию выгруженной ранее информационной базы или
конфигурации из файла. Нажав в очередной раз кнопку Далее мы попадаем в следующее
окно, которое служит для указания наименования и типа расположения базы (рис. 1.4).
Рис. 1.4. Указание наименования информационной базы и типа расположения
1. Лекция: Основы
9
В нашем случае наименованием будет "Основы разработки", тип расположения - На
данном компьютере или на компьютере в локальной сети. Второй вариант
используется в том случае, если вы имеете дело с сетевой версией программы и
собираетесь разместить базу на сервере 1С:Предприятия.
Нажав в очередной раз Далее, мы попадаем в последнее окно добавления
информационной базы (рис. 1.5)
Рис. 1.5. Указание параметров информационной базы
Здесь мы задаем каталог информационной базы и язык.
Нажмем Готово - будет создана пустая информационная база, в списке баз появится
название новой базы (рис. 1.6).
Рис. 1.6. Новая информационная база в окне запуска программы
10
Основы разработки прикладных решений для 1С: Предприятие 8.1
Обратите внимание на то, что по нажатию кнопки Удалить выделенная информационная
база будет удалена лишь из списка стартового окна, но не из системы.
В каталоге только что созданной пустой информационной базы (рис. 1.7) есть файл
1Cv8.1CD и папка 1Cv8Log. Файл - это и есть информационная база. Сейчас он имеет
совсем небольшой размер - 256 Кб. Размер будет расти в ходе разработки конфигурации и
ввода данных пользователями системы.
Рис. 1.7. Каталог новой информационной базы
Сейчас, после создания новой пустой конфигурации мы готовы к первому ее запуску в
режиме конфигуратора. Выделим ее наименование и нажмем на кнопку Конфигуратор.
Откроется окно конфигуратора - оно будет совершенно пустым. Выполним команду меню
Конфигурация > Открыть конфигурацию. В левой части окна появится дерево
конфигурации (рис. 1.8).
Рис. 1.8. Дерево конфигурации
1. Лекция: Основы
11
Деревом конфигурации вы будете постоянно пользоваться при разработке. Можно
заметить, что в окне дерева конфигурации уже что-то есть, хотя выше мы создали новую
пустую конфигурацию. Дело в том, что здесь представлены лишь пустые группы
элементов, которые мы, при работе над нашей учебной конфигурацией, заполним
соответствующими объектами.
Конфигурация - это описание структуры данных, на основе которых строится работа
пользователя с системой в режиме 1С:Предприятие.
Предположим, нам нужно, чтобы пользователь мог ввести в систему некий документ,
который имеет следующие графы (реквизиты, говоря языком 1С:Предприятия):
Дата;
Номер документа;
Ответственное лицо;
Сумма выручки;
Для этого мы создаем (описываем) в режиме конфигуратора объект Документ, указываем
набор его реквизитов, задаем типы данных для этих реквизитов, настраиваем экранные
формы документа и другие параметры. В итоге, пользователь системы сможет работать с
документом в режиме 1С:Предприятие.
Нередко, говоря о разработке для платформы 1С:Предприятие, применяют термин
"программирование". "Программирование" для 1С:Предприятия - это не только написание
программного кода, но и работа в визуальном режиме - создание и настройка объектов,
разработка экранных форм, работа с различными конструкторами, ускоряющими процесс
разработки. Некоторые действия в ходе разработки можно совершить лишь в визуальном
режиме.
Прежде чем начинать изучение конфигурирования, опишем практическую ситуацию,
которая легла в основу сквозного примера, а так же рассмотрим некоторые основные
приемы работы, которые пригодятся нам в дальнейшем.
1.2. Описание задачи
Мы будем рассматривать основы разработки прикладных конфигураций на примере
автоматизации деятельности салона красоты "Марина". В салоне работают директор,
администратор, мастера и другие сотрудники. Основная задача мастеров - оказание услуг
клиентам. Салон закупает материалы у поставщиков. Материалы расходуются в ходе
оказания услуг, а так же их можно продавать клиентам - физическим лицам или
организациям.
Мы автоматизируем деятельность салона. В частности, нужно автоматизировать учет
материалов, учет деятельности мастеров, учет клиентов с возможностью назначения
особых условий обслуживания для постоянных клиентов. Нужно автоматизировать расчет
заработной платы для сотрудников, создать отчеты, которые позволят руководству
анализировать эффективность деятельности салона. В ходе решения задачи мы
столкнемся и со многими другими практическими ситуациями, требующими
автоматизации.
Мы не будем стремиться к созданию решения, которое можно будет использовать на
практике. Наша основная задача - рассмотреть работу с объектами системы, использовав
12
Основы разработки прикладных решений для 1С: Предприятие 8.1
избранную предметную область для демонстрации возможностей и особенностей
системы. Хотя, с другой стороны, нашу итоговую конфигурацию, после доработки, можно
будет использовать на практике.
Продолжим знакомство с Конфигуратором. А именно, приступим к изучению операций с
объектами.
1.3. Создаем объекты
Первой операцией с объектами, которую мы освоим в Конфигураторе, будет создание
объектов. Создать объект нужного вида можно несколькими способами. Например вызвав контекстное меню группы объектов и выбрав в нем пункт Добавить (рис. 1.9).
Рис. 1.9. Создаем новый объект
Обратите внимание на пиктограмму, которая сопровождает пункт меню. Такую же
пиктограмму имеет кнопка Добавить на панели инструментов окна дерева конфигурации.
Эта же команда продублирована в меню Действия.
Обратите внимание на то, что одно и то же действие в Конфигураторе можно выполнить
различными способами.
Пока не будем выполнять описанную команду. В следующей лекции мы попрактикуемся
в создании объектов и в других операциях с ними.
Выше мы использовали понятие "объект", однако, не поясняли его. Если вы знакомы с
объектно-ориентированной методологией программирования, понятие "объект" должно
быть вам знакомо. Если нет - давайте рассмотрим простой пример, который позволит
понять сущность объектов. Представьте себе, что конфигурация - это ноутбук. Ноутбук
состоит из отдельных частей, связанных воедино, взаимодействующих друг с другом. Это
1. Лекция: Основы
13
- монитор, клавиатура, материнская плата, центральный процессор, оперативная память список можно продолжать очень долго. Всѐ то, из чего состоит наш ноутбук, его детали это объекты. Каждый объект обладает определенной функциональностью. Он может
связываться каким-то образом с другими объектами, он имеет средства управления, может
сообщать другим объектам о своем состоянии. В более широком смысле и ноутбук - это
тоже объект. Им можно управлять, используя клавиатуру. Он может выводить сообщения
с помощью монитора. Они составляют интерфейс, с помощью которого пользователь
взаимодействует с ноутбуком.
Итак, объект, это "деталь" конфигурации. Существуют объекты различных видов - их
список можно видеть в окне дерева конфигурации.
Сейчас рассмотрим некоторые другие не менее важные действия, которые выполняют в
Конфигураторе.
1.4. Архивная копия информационной базы
Одна из важнейших сервисных операций, которую вам постоянно придется выполнять это создание архивной копии информационной базы.
Архивные копии рабочих баз нужно делать достаточно регулярно - для того, чтобы
обезопасить себя от потери информации. Если вы собираетесь выполнить какую-нибудь
операцию, которая может повлиять на нормальную работу конфигурации, например обновить конфигурацию - прежде чем ее выполнять, вы должны обязательно сделать
архивную копию информационной базы.
Имейте в виду, что операция по архивированию информационной базы универсальна, как
и многие другие операции в Конфигураторе. То есть - используя описанные команды вы
сможете сделать архивную копию любой конфигурации, работающей на платформе
1С:Предприятие 8.
Сделать архивную копию информационной базы можно несколькими способами.
Первый из них заключается в обычном копировании или архивировании каталога с
информационной базой.
Второй способ - воспользоваться инструментами архивирования, встроенными в
Конфигуратор. А именно, если выполнить команду меню Администрирование >
Выгрузить информационную базу, появится окно, которое содержит стандартный
запрос о задании имени сохраняемого файла. В нашем случае это файл с расширением
.DT. Он содержит архивную копию информационной базы. В случае повреждения или
утери информационной базы вы можете восстановить ее из архивного файла командой
Администрирование > Загрузить информационную базу.
Помните, что информационная база содержит не только конфигурацию, но и базу данных,
которая формируется при работе пользователя с системой, то есть - данные, которые он
вводит в систему в режиме 1С:Предприятие.
При загрузке информационной базы из файла вы получаете то ее состояние, которое она
имела на момент выгрузки. Изменения, сделанные после этого, теряются. Предположим,
мы выгрузили информационную базу и после этого создали новый объект системы, ввели
14
Основы разработки прикладных решений для 1С: Предприятие 8.1
какие-то данные в пользовательском режиме. Если после этих действий загрузить ранее
выгруженную информационную базу, окажется, что сделанные изменения утрачены.
1.5. Основная конфигурация и конфигурация базы данных
Информационная база хранит две конфигурации. Одна из них называется основной
конфигурацией или просто конфигурацией. Именно ее мы правим в ходе работы с
конфигуратором и именно ее открываем командой Конфигурация > Открыть
конфигурацию. Вторая конфигурация называется конфигурацией базы данных. Она
используется в ходе работы пользователей. Редактировать основную конфигурацию
можно в процессе работы пользователей с информационной базой. Для того, чтобы
перенести изменения в конфигурацию базы данных, нужно, чтобы пользователи
завершили работу с программой. Для того, чтобы открыть конфигурацию базы данных,
выполните команду Конфигурация > Конфигурация базы данных > Открыть
конфигурацию БД. Команды изменения объектов в окне конфигурации базы данных
заблокированы.
Если, открыв конфигурацию, мы внесем в нее изменения, например, создадим новый
объект, в заголовке окна дерева конфигурации можно будет наблюдать значок: "*"
(признак модифицированности конфигурации) (рис. 1.10).
Рис. 1.10. Признак модифицированности конфигурации
Значок "*" означает, что внесенные изменения не сохранены в основной конфигурации.
То есть он сигнализирует о том, что изменения, которые мы внесли на этапе
конфигурирования, могут быть утеряны при, например, внезапном отключении питания.
Для того, чтобы сохранить основную конфигурацию, нужно выполнить команду меню
Конфигурация > Сохранить конфигурацию.
1. Лекция: Основы
15
После сохранения значок модифицированности конфигурации исчезает, но появляется
значок отличия конфигураций "<!>" (рис. 1.11).
Рис. 1.11. Признак отличия конфигураций
Знак отличия конфигураций указывает на то, что изменения, внесенные в основную
конфигурацию, пока не внесены в конфигурацию базы данных.
Для того, чтобы перенести изменения из основной конфигурации в конфигурацию базы
данных, нужно выполнить команду Конфигурация > Обновить конфигурацию базы
данных. Если изменения, внесенные в основную конфигурацию не были сохранены до
выполнения этой команды - система, перед обновлением конфигурации базы данных,
предложит сначала сохранить изменения.
При обновлении конфигурации базы данных система выводит окно с перечнем
изменений, которые будут внесены в конфигурацию базы данных (рис. 1.12).
Рис. 1.12. Запрос о реорганизации информации
Если вы согласны с перечнем изменений, нажмите на кнопку Принять, в противном
случае - на кнопку Отмена.
Признаки отличия конфигураций и модифицированности могут отображаться в заголовке
окна дерева конфигурации одновременно. Если вы внесли изменения в конфигурацию,
сохранили основную конфигурацию, не обновляя конфигурацию базы данных, а потом
продолжили вносить изменения - оба значка отобразятся в заголовке окна.
16
Основы разработки прикладных решений для 1С: Предприятие 8.1
Если вы внесли изменения в основную конфигурацию, сохранили их, но еще не обновляли
конфигурацию базы данных, вы можете вернуться к конфигурации базы данных, отменив
изменения, сделанные в основной конфигурации. То есть, фактически, заменить основную
конфигурацию конфигурацией базы данных. Для этого нужно выполнить команду
Конфигурация > Конфигурация базы данных > Вернуться к конфигурации БД.
Конфигурацию можно сохранять в файл и загружать из файла. Для сохранения основной
конфигурации в файл выполните команду Конфигурация > Сохранить конфигурацию в
файл. Для загрузки конфигурации из файла выполните команду Конфигурация >
Загрузить конфигурацию из файла. Выгруженная конфигурация хранится в файле с
расширением .CF.
В файл можно выгружать не только основную конфигурацию, но и конфигурацию базы
данных - это можно сделать командой Конфигурация > Конфигурация базы данных >
Сохранить конфигурацию БД в файл.
Обратите внимание на то, что выгружая информационную базу в файл, вы сохраняете в
этом файле информационную базу целиком - то есть основную конфигурацию,
конфигурацию базы данных и саму базу данных, которая содержит информацию,
введенную пользователем в пользовательском режиме.
Сохраняя конфигурацию в файл вы сохраняете лишь конфигурацию - структуру данных,
которая используется для описания возможностей, доступных пользователю в режиме
1С:Предприятие.
1.6. Варианты запуска 1С:Предприятия из конфигуратора
В процессе правки конфигурации в режиме конфигуратора бывают моменты, когда нужно
проверить функциональность разрабатываемого решения в режиме 1С:Предриятие.
Конфигурацию можно открыть в этом режиме прямо из Конфигуратора,
воспользовавшись командой Сервис > 1С:Предприятие или соответствующей кнопкой
на панели инструментов. При таком способе запуска программа будет работать точно так
же, как она работала бы, если бы вы запустили ее в режиме 1С:Предприятие из стартового
окна программы.
Еще один режим запуска, доступный из Конфигуратора, предназначен для отладочных
целей. Для того, чтобы открыть конфигурацию в режиме отладки, выполните команду
Отладка > Начать отладку или нажмите соответствующую кнопку.
Если до попытки запуска системы 1С:Предприятие из Конфигуратора в конфигурацию
были внесены изменения, не отраженные в конфигурации базы данных, перед запуском
система уточнит, хотите ли вы обновить конфигурацию базы данных (рис. 1.13).
Рис. 1.13. Запрос об обновлении конфигурации базы данных
1. Лекция: Основы
17
Если вы ответите Нет - программа запустится, но изменения из основной конфигурации
не будут перенесены в конфигурацию базы данных. При ответе Да система сначала
обновит конфигурацию базы данных, а потом запустится в режиме 1С:Предприятие.
1.7. Выводы
В данной лекции мы начали знакомство с платформой 1С:Предприятие 8. Сейчас вы
должны уметь создавать новую информационную базу, запускать программу в режиме
конфигуратора и 1С:Предприятие, открывать информационную базу, создавать объекты,
архивировать информационную базу и сохранять конфигурацию в файл. Так же вы
должны уметь запускать 1С:Предприятие из Конфигуратора для проверки
функциональности разрабатываемого прикладного решения в различных режимах - в
режиме отладки и в обычном режиме.
18
Основы разработки прикладных решений для 1С: Предприятие 8.1
2. Лекция: Виды объектов, подсистемы,
константы
В этой лекции рассматриваются виды объектов 1С:Предприятие 8.1., правила именования
объектов, более подробно обсуждаются объекты конфигурации Подсистема и Константа.
Содержание
2.1. Обзор объектов 1С:Предприятие 8: общие объекты
2.2. Обзор объектов 1С:Предприятие 8: прикладные объекты
2.3. Обзор объектов 1С:Предприятие 8: подчиненные объекты
2.4. Подсистемы
2.5. Константы и формы констант
2.6. Проверка конфигурации в режиме 1С:Предприятие
2.7. Выводы
Цель лекции: получить обзорное представление об объектах системы, освоить объекты
Подсистема и Константа.
2.1. Обзор объектов 1С:Предприятие 8: общие объекты
В предыдущей лекции мы открыли Дерево конфигурации и могли видеть список
объектов системы. Сейчас кратко рассмотрим эти объекты, поговорим об их основном
предназначении.
Все объекты системы можно разделить на три большие группы: Общие объекты,
прикладные объекты и подчиненные объекты.
Общие объекты (рис. 2.1) расположены в ветви дерева конфигурации Общие. Они играют
вспомогательную роль при разработке конфигурации.
2. Лекция: Виды объектов, подсистемы, константы
19
Рис. 2.1. Общие объекты
В частности, с их помощью можно управлять логической структурой разрабатываемой
конфигурации, настраивать особенности взаимодействия пользователя с конфигурацией,
они включают в себя объекты, которые могут быть настроены для совместного
использования другими объектами конфигурации.
Общие объекты играют вспомогательную, с точки зрения разработки прикладного
решения роль. Результат их работы интересен скорее программисту, чем пользователю,
хотя нельзя сказать, что эти объекты не участвуют в работе пользователя или неважны для
целей решения прикладной задачи. Они - важная часть конфигурации. Дадим краткую
характеристику этих объектов.
Подсистемы. Позволяют структурировать конфигурацию по видам решаемых с ее
помощью задач. Например, если конфигурация решает задачи бухгалтерского учета и
расчета зарплаты, логично будет создать две подсистемы. При создании новых объектов
можно "привязывать" их к подсистемам в зависимости от их предназначения.
Использование подсистем облегчает работу с большими конфигурациями.
Общие модули. Содержат процедуры и функции, доступные из других объектов. В этих
модулях нельзя определять переменные.
Параметры сеанса. Они нужны, в основном, для настройки прав доступа к данным. Эти
параметры устанавливаются при старте системы. Например, в этот параметр может быть
записано имя пользователя, вошедшего в систему.
Роли. Роли. предназначены для настройки полномочий различных групп пользователей по
доступу к данным. После создания и настройки роли ее можно назначить пользователю
(для настройки списка пользователей применяют команду меню Администрирование >
Пользователи).
Планы обмена. Определяют правила обмена данными между информационными базами.
Например, этот механизм можно использовать для обмена данными между головной
организацией и филиалами или между подразделениями организации.
20
Основы разработки прикладных решений для 1С: Предприятие 8.1
Критерии отбора. Позволяют создавать правила отбора, которые пользователь может
применять при работе со списками данными в режиме 1С:Предприятие.
Подписки на события. С помощью подписок на события можно назначать обработчики
для событий объектов. Например, обработчик может быть вызван при копировании
документа.
Регламентные задания. Регламентные задания позволяют выполнять различные
операции по расписанию.
Общие формы. Эти формы могут быть использованы различными объектами для решения
схожих задач.
Интерфейсы. Хранит пользовательские интерфейсы (главное меню, набор панелей
инструментов), которые можно назначать различным пользователям. Каждый интерфейс
можно оснастить лишь теми командами, которые нужны определенному пользователю.
Общие макеты. Хранит общие макеты (шаблоны печатных форм), которые доступны
другим объектам конфигурации для формирования печатных вариантов электронных
материалов.
Общие картинки. Хранит общедоступные картинки. Их можно, например, использовать в
формах при настройке изображений на кнопках и в других случаях.
Пакеты XDTO. XML Data Transfer Object (XDTO) - это универсальный способ представления
данных, который предназначен для организации взаимодействия с внешними
программными системами. В частности, с другими конфигурациями 1С:Предприятия 8, с
другими информационными системами.
WEB-сервисы. Здесь можно создать и настроить WEB-сервисы, которые обеспечивают
экспорт функциональности конфигурации.
WS-ссылки. Содержит статические ссылки на опубликованные WEB-сервисы. Позволяет
использовать функциональность этих сервисов.
Стили. Содержит наборы настроек форматирования, которые можно применить в ходе
разработки. Например - с помощью механизма стилей можно быстро настроить форму
заранее заданным образом.
Языки. Позволяют задавать различные языки, на которых можно будет настраивать
интерфейс программы. Если в системе задано несколько языков, при настройке объекта
появляется возможность задавать некоторые параметры на разных языках. В итоге это
приводит к тому, что интерфейс системы может существовать для различных языков.
2.2. Обзор объектов 1С:Предприятие 8: прикладные объекты
Прикладные объекты применяются для разработки прикладного решения. Именно эти
объекты "видны" пользователю, который работает с большинством из них в режиме
1С:Предприятие. Дадим характеристику прикладных объектов (рис. 2.2).
2. Лекция: Виды объектов, подсистемы, константы
21
Рис. 2.2. Прикладные объекты
Константы. Предназначены для хранения информации, которая либо не изменяется в ходе
деятельности организации, либо изменяется очень редко. Например, в константе можно
сохранить название организации, ФИО директора и другие подобные данные.
Справочники. Предназначены для хранения списков однотипных данных. Например, в
справочниках хранят списки клиентов, сотрудников, товаров, материалов.
Документы. С их помощью информация попадает в систему. Документы могут выступать в
качестве электронных аналогов первичных учетных документов. Вместе с документами
используются такие объекты, как Нумераторы (для обеспечения сквозной нумерации
различных документов) и Последовательности (для обеспечения правильной
последовательности документов).
Журналы документов. Они используются для группировки документов различных видов.
Перечисления. Их применяют для хранения наборов значений, заданных в процессе
конфигурирования и не изменяемых в ходе работы пользователя с конфигурацией.
Отчеты. Применяются для создания отчетов, которые являются средством представления
выходных данных учетной системы.
Обработки. Предназначены для обработки информации, выполнения различных
операций с данными.
Планы видов характеристик. Применяются для описания видов характеристик объектов.
Планы счетов. Используются для целей организации бухгалтерского учета. Представляют
собой списки счетов учета. Применяются совместно с регистрами бухгалтерии.
Планы видов расчета. Используются для описания видов расчета и их взаимосвязей,
применяются совместно с регистрами расчета.
Регистры сведений. Предназначены для накопления информации по нескольким
измерениям с возможностью хранения истории изменения данных и с возможностью
хранения нечисловых данных.
Регистры накопления. Предназначены для хранения данных в разрезе нескольких
измерений, поддерживают получение информации об остатках и оборотах хранимых
величин.
Регистры бухгалтерии. Хранят информацию о бухгалтерских операциях.
22
Основы разработки прикладных решений для 1С: Предприятие 8.1
Регистры расчета. Хранят информацию о расчетах. Применяются, в основном, для целей
расчета заработной платы.
Бизнес-процессы. Позволяют создавать структуры, автоматизирующие выполнение
многошаговых операций. Например - движение документа между различными
должностными лицами организации.
Задачи. Используются совместно с Бизнес-процессами. Нужны для ведения учета задач по
исполнителям.
2.3. Обзор объектов 1С:Предприятие 8: подчиненные объекты
Подчиненные объекты подчинены другим объектам конфигурации. Например, на рис. 2.3
вы можете видеть объект конфигурации Документ, которому принадлежит несколько
подчиненных объектов. Перечислим и опишем их.
Рис. 2.3. Объекты, подчиненные объекту Документ
Реквизиты. Реквизиты позволяют добавлять объекту дополнительные свойства.
Например, если нам нужно, чтобы в документ можно было ввести сумму операции, мы
можем ввести в него соответствующий реквизит.
Табличные части. Используются в том случае, если в документ (или другой объект,
которому подчинена табличная часть) нужно добавить произвольное количество записей
(фактически - дополнительных свойств), оформленных в виде таблицы. Табличные части,
в свою очередь, имеют реквизиты.
Формы. Формы используют для организации ввода и просмотра информации. В
1С:Предприятие 8 существует специальный редактор, который предназначен для
разработки и модификации форм.
Макеты. Макеты применяют для описания печатных форм различных объектов. Макет
содержит "заготовки", которые, при формировании печатной формы конкретного объекта
заполняются данными.
2. Лекция: Виды объектов, подсистемы, константы
23
На рис. 2.4 представлены еще несколько подчиненных объектов - на этот раз - для
прикладных объектов Журнал документов и Регистр накопления.
Рис. 2.4. Объекты, подчиненные объектам Журнал документов и Регистр накопления
Графы. Графы журнала документов используются для отображения информации о
документах, входящих в журнал.
Измерения. Измерения регистров - это объекты, в разрезе которых ведется учет
показателей в регистрах.
Ресурсы. Ресурсы регистров используют для хранения данных, по которым ведется учет в
регистре.
Выше мы дали краткую характеристику объектам конфигурации. Вся наша дальнейшая
работа будет посвящена изучению методов работы с этими объектами и с различными
механизмами системы. Начнем более близкое знакомство с объектами системы с
подсистем.
2.4. Подсистемы
Подсистемы применяют для логической структуризации конфигурации по решаемым с ее
помощью задачам.
24
Основы разработки прикладных решений для 1С: Предприятие 8.1
Для добавления новой подсистемы щелкнем правой кнопкой мыши по разделу
Подсистемы дерева конфигурации и выберем в появившемся контекстном меню пункт
Добавить. Сразу же после этого в дерево конфигурации будет добавлен новый объект и
будет выведено окно для настройки свойств этого объекта (рис. 2.5).
Рис. 2.5. Создаем новую подсистему
Такое поведение системы характерно при создании общих объектов. При создании же
прикладных объектов появляются окна редактирования объектов.
Окно свойств будет встречаться вам буквально на каждом шагу, поэтому сразу же
рассмотрим его устройство.
Панель инструментов окна содержит следующие кнопки (для уточнения названия кнопки
просто наведите на нее курсор и подождите некоторое время):
Сортировка по алфавиту. Позволяет отсортировать содержимое окна по алфавиту. Это
полезно в том случае, если вы знаете название параметра, но не знаете точно в каком
разделе он расположен. Окна свойств, с которыми мы встретимся ниже, содержат гораздо
больше параметров, чем то, которое изображено на рисунке, поэтому данная возможность
весьма полезна.
Сортировка по категориям. Этот режим включен по умолчанию. Категории свойств
можно сворачивать и разворачивать, щелкая мышью по их заголовкам.
Показывать только важные. Отображает в окне лишь важнейшие, по мнению
разработчиков, свойства.
Отменить. Если вы отредактировали свойство, редактирование можно отменить, нажав
на эту кнопку. Например, если вы изменили имя объекта и хотите вернуться к прежнему
имени - вы можете это сделать до тех пор, пока не переходили к редактированию другого
свойства. После перехода к другому свойству изменения будут сохранены автоматически
и кнопка будет недоступна.
2. Лекция: Виды объектов, подсистемы, константы
25
Сохранить. Сохраняет изменения, внесенные в поле без выхода из режима
редактирования поля. Обычно разработчики пользуются возможностью автоматического
сохранения изменений.
Рассмотрим свойства объекта:
Имя. Это важнейшее свойство объекта, именно по нему к нему можно будет обращаться
из встроенного языка. При создании нового объекта ему автоматически присваивается
новое имя, но его обычно сразу же заменяют на имя, которое соответствует его
предназначению. Существуют особые стандарты построения имен объектов, переменных,
процедур, функций в 1С:Предприятии 8. В частности, составляя имя нужно принять во
внимание синоним объекта. В идеале имя соответствует синониму, слова которого
"склеены", а первая буква каждого слова сделана заглавной. Например, подсистема, имя
которой "БухгалтерскийУчет" в синониме должна содержать текст "Бухгалтерский учет".
При практической работе в конфигураторе сразу после создания объекта обычно меняют
его имя, а синоним строится автоматически на основе имени. После этого синоним можно
редактировать - это не внесет изменений в имя.
Синоним. В отличии от имени объекта, которое предназначено для целей разработчика
конфигурации, синоним нужен для представления объекта в пользовательском режиме.
Как было сказано выше, в идеале синоним и имя должны соответствовать друг другу.
Комментарий. Позволяет ввести поясняющий текст.
Включать в содержание справки. Если этот флаг установлен, в справочную систему
продукта будет включена тема, соответствующая синониму объекта.
Справочная информация. Ссылка Открыть позволяет открыть HTML-редактор,
который нужен для редактирования справочного раздела, соответствующего объекту.
Создадим в нашей конфигурации следующие подсистемы (табл. 2.1):
Таблица 2.1. Параметры подсистем
Объект
Подсистема
Имя
Синоним
БухгалтерскийУчет
Бухгалтерский учет
-
ОперативныйУчетМатериалов
Оперативный учет материалов
-
УчетРаботыМастеров
Учет работы мастеров
-
РасчетЗаработнойПлаты
Расчет заработной платы
Вот, что получилось в итоге (рис. 2.6).
26
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 2.6. Созданные подсистемы
При создании новых объектов мы будем устанавливать в них соответствие той или иной
подсистеме. В результате мы сможем включать в дереве конфигурации отбор по
подсистемам, а так же - облегчим процесс создания интерфейсов для различных
пользователей и настройки ролей.
В ходе работы над конфигурацией мы сможем добавлять новые подсистемы в
разрабатываемое решение, изменять свойства существующих, а так же управлять
привязкой объектов к подсистемам.
Подсистемы еще встретятся нам в дальнейшей работе, а пока переходим к следующим
объектам - к константам.
2.5. Константы и формы констант
Константы используются для хранения информации, которая либо никогда не меняется,
либо меняется очень редко. Например, константу, которая содержит фамилию имя и
отчество директора организации можно сравнить с табличкой на двери директорского
кабинета. Обычно подобные таблички меняют не слишком часто.
Прежде чем создавать константы, давайте подумаем о том, какие именно данные нам
хотелось бы хранить в них. Сразу отметим, что в процессе работы над конфигурацией мы
можем свободно изменять и дополнять список констант. Сейчас мы создадим одну
константу, которая будет служить для хранения приветствия, выводимого системой при
начале пользовательского сеанса работы. Здесь же состоится ваше первое знакомство с
встроенным языком системы.
Создадим константу (табл. 2.2). Обратите внимание на то, что в таблице мы не указываем
синоним - мы оставляем его таким, каким его создает система. В дальнейшем мы будем
указывать в подобных таблицах лишь те свойства, которые мы изменяем при создании
объекта. Свойства, значения которых оставляем по умолчанию, в таблице не указываем.
2. Лекция: Виды объектов, подсистемы, константы
27
Таблица 2.2. Параметры константы
Объект
Имя
Длина
Константа ТекстСообщения
50
На рис. 2.7 вы можете видеть форму настройки константы и дерево конфигурации с новой
константой.
Рис. 2.7. Создание и настройка константы
Некоторые элементы окна свойств константы уже вам знакомы, а другие требуют
пояснений.
Подсистемы. В группе свойств Основные мы видим новое свойство Подсистемы. При
нажатии на кнопку с тремя точками в правой части поля появляется окно, в котором
можно выбрать подсистемы, к которым относится константа (рис. 2.8).
Рис. 2.8. Окно выбора подсистемы
28
Основы разработки прикладных решений для 1С: Предприятие 8.1
Как видите, для нашей константы выбраны все подсистемы. Не будем менять этот выбор,
так как константа в нашей конфигурации будет играть универсальную роль, имеющую
отношение ко всем подсистемам.
Модуль менеджера значений. Здесь, по нажатию на кнопку Открыть будет открыт на
редактирование модуль менеджера значения константы. Модули содержат программный
код. Менеджер значения константы - это особый объект, который предназначен для
работы с данными, хранящимися в константе. В модуле менеджера значения константы
можно определить процедуры, которые выполняются перед записью константы и при
записи константы. Подробнее о таких модулях мы поговорим ниже.
Тип. Это свойство определяет вид информации, которую может содержать объект. В
нашем случае это - строка. Помимо указания типа данных здесь можно увидеть
дополнительные настройки. Тип данных - одно из ключевых понятий системы и
нуждается в более подробном раскрытии, что и будет сделано в следующей лекции.
Режим управления блокировкой данных. Этот параметр задает режим, в котором
осуществляется блокировка данных при работе системы. Блокировки нужны для того,
чтобы, например, при многопользовательской работе с информационной базой данные, с
которыми работает один пользователь, не были бы изменены другим. Мы рассмотрим
механизмы блокировки в соответствующей лекции.
После того, как константа создана, нужно создать форму констант. Для того, чтобы это
сделать, нужно вызвать контекстное меню для ветви Константы дерева конфигурации и
выбрать в нем пункт Создать форму констант. Появится окно конструктора общих форм
(рис. 2.9).
Рис. 2.9. Конструктор общих форм, первое окно
2. Лекция: Виды объектов, подсистемы, константы
29
Оставим параметры, установленные в данном окне, в значениях по умолчанию. Изменим
лишь поля Имя и Синоним. В поле Имя введем ФормаКонстант, в поле Синоним,
соответственно, Форма констант. Нажмем на кнопку Далее. Отобразится второе окно
конструктора общих форм (рис. 2.10), которое содержит перечень элементов управления,
которые будут размещены на форме.
Рис. 2.10. Конструктор общих форм, второе окно
Здесь представлена таблица, в левой колонке которой, называемой Реквизиты, можно
найти список констант, для которых создается общая форма. При необходимости можно
снять галочки напротив имен констант, которые не нужно включать в общую форму. В
правой колонке таблицы, которая называется Элементы формы, можно настроить вид
элемента управления, который будет представлять константу на форме. В данном случае
это - поле ввода. Позже мы рассмотрим особенности различных элементов управления и
вам станут понятны особенности их использования.
Завершим создание общей формы констант нажатием на кнопку Готово. В ветви Общие
формы дерева конфигурации появится новый объект - Форма констант. На экран будет
выведено окно редактора форм, в котором можно увидеть только что созданную форму
(рис. 2.11).
30
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 2.11. Общая форма, созданная автоматически
В нижней части окна формы, которое на рисунке развернуто на всю свободную правую
часть экрана, можно заметить три вкладки. С их помощью можно переключаться между
различными режимами работы с формой.
Диалог. Эта вкладка в настоящий момент активна. Она предназначена для
редактирования видимой части формы, ее диалогового окна. Обратите внимание на то,
что в нижней части окна имеется панель инструментов, которая содержит кнопки для
быстрого добавления элементов управления на форму. В визуальном режиме
редактирования на форме можно размещать элементы управления, редактировать их
свойства, настраивать взаимное расположение и поведение при изменении размеров
формы.
Модуль. Здесь расположены тексты программ, написанные на встроенном языке
1С:Предприятие 8. Обычно эти тексты оформлены в виде процедур и функций, которые
можно вызывать при наступлении различных событий. Например, мы можем добавить на
форму кнопку, по нажатию на которую будет выполнена процедура, заданная в модуле
формы.
Реквизиты (рис. 2.12). Реквизиты формы определяют связь формы с данными, а основной
реквизит формы (тот, который выделен в списке жирным шрифтом) определяет
особенности ее поведения. В нашем случае можно видеть единственный реквизит формы,
который является и ее основным реквизитом - это объект типа КонстантыНабор.
2. Лекция: Виды объектов, подсистемы, константы
31
Рис. 2.12. Реквизиты формы
Объект типа КонстантыНабор позволяет выполнять операции с группами констант.
2.6. Проверка конфигурации в режиме 1С:Предприятие
Сейчас наша конфигурация готова для первого пробного запуска. Выполним команду
Сервис > 1С:Предприятие. Прежде чем запустить 1С:Предприятие система сообщит нам
о том, что редактируемая конфигурация отличается от конфигурации базы данных и
предложит принять решение об обновлении конфигурации базы данных. Ответим на
вопрос Да. После этого основная конфигурация будет сохранена, потом произойдет
обновление конфигурации базы данных. В ходе этого процесса вам будут задавать
вопросы, на которые нужно отвечать утвердительно.
В режиме 1С:Предприятие мы увидим пустое окно (рис. 2.13).
Рис. 2.13. Режим 1С:Предприятие
32
Основы разработки прикладных решений для 1С: Предприятие 8.1
Больше всего нас сейчас интересует пункт меню Операции, а точнее пункт Операции >
Константы. Если выбрать его - появится форма констант, которую мы создали выше (рис.
2.14).
Рис. 2.14. Форма констант в режиме 1С:Предприятие
Если мы введем в поле ввода Текст сообщения какой-нибудь текст и нажмем на кнопку
ОК, этот текст будет записан в константу ТекстСообщения, форма констант будет
закрыта. Введя текст и нажав на кнопку Записать мы инициируем запись значения
константы, но форма после записи закрыта не будет. Кнопка Закрыть закрывает окно,
при закрытии, если введенные данные не были ранее сохранены, выводится стандартное
окно (рис. 2.15).
Рис. 2.15. Запрос о сохранении измененных данных
Введем в поле Текст сообщения следующий текст: "Здравствуйте, уважаемый
пользователь!". Нажмем на кнопку ОК. константа будет записана, а окно формы констант
закрыто.
Константа, которую мы создали, пока еще не используется в каких-либо механизмах
системы. Как вы помните, изначально мы хотели использовать ее для того, чтобы
выводить на экран текст приветствия после запуска системы в пользовательском режиме.
Эту задачу мы решим в следующей лекции.
2.7. Выводы
В этой лекции мы сделали краткий обзор объектов 1С:Предприятие 8, а так же начали
знакомиться с подсистемами и константами. В частности, мы создали несколько
подсистем, константу, форму констант.
3. Лекция: Справочники, перечисления, основы встроенного языка
33
3. Лекция: Справочники, перечисления,
основы встроенного языка
В этой лекции начинается знакомство читателя со справочниками, рассматриваются
перечисления, продолжает раскрываться тема констант с рассмотрением основ
встроенного языка.
Содержание
3.1. Справочники
3.2. Hello World!
3.3. Виды модулей
3.4. Процедуры и функции
3.5. Вывод приветствия при загрузке системы
3.6. Выводы
Цель лекции: дать общее представление о справочниках и перечислениях; рассмотреть
модуль приложения и начать знакомство читателя со встроенным языком системы.
3.1. Справочники
Справочники в 1С:Предприятии 8 используются для организации хранения
информации об однотипных объектах. Например, справочник Клиенты будет хранить
данные о клиентах, справочник Сотрудники - о сотрудниках организации,
Контрагенты - о контрагентах, Номенклатура - о товаро-материальных ценностях,
Подразделения - о подразделениях организации. Справочник можно сравнить с
обычной бумажной картотекой. Каждая конфигурация обычно содержит множество
справочников.
Обратите внимание на то, что в режиме конфигурирования мы создаем структуру
справочника, определяем формы, которые позволяют работать с ним, устанавливаем
его связи с другими объектами конфигурации. А в режиме 1С:Предприятие, то есть - в
пользовательском режиме - происходит наполнение справочника информацией. Эта
особенность характерна и для других подобных объектов. Их структуру и особенности
задает программист, а ввод в систему новых элементов осуществляет пользователь.
Стоит отметить, что в случае со справочниками мы все же можем создавать его
элементы в режиме конфигурирования. Это - так называемые предопределенные
элементы, на которые обычно опираются какие-то алгоритмы разрабатываемой
конфигурации. Пользователь не может удалить такие элементы - иначе нарушилась бы
логика работы системы.
Давайте создадим новый справочник и рассмотрим особенности работы с ним. Пусть
это будет справочник ФизическиеЛица. Как следует из названия, он предназначен
для хранения сведений о физических лицах. Мы планируем хранить в этом
справочнике персональные сведения о физических лицах.
Для того чтобы создать справочник, перейдем в ветвь Справочники дерева
конфигурации и создадим в ней новый элемент (рис. 3.1).
34
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 3.1. Окно редактирования справочника, закладка Основные
Окно редактирования объекта конфигурации имеет множество закладок, которые
позволяют последовательно настраивать свойства объекта, редактировать его
структуру. Обратите внимание на кнопки Назад и Далее, которые расположены в
нижней части окна. Они предназначены для прохождения по вкладкам и настройки его
свойств в правильной последовательности. Вы можете либо пользоваться этими
кнопками, либо выбирать закладки вручную. Рассмотрим вкладки окна
редактирования объекта. Сейчас мы не будем стремиться рассмотреть их все - позже,
работая над конфигурацией, мы сможем увидеть особенности их использования.
Основные. Здесь расположены уже знакомые вам свойства Имя, Синоним,
Комментарий. Они имеют тот же смысл, что и у других объектов.
Данные. Одна из важнейших закладок настройки справочника (рис. 3.2)
3. Лекция: Справочники, перечисления, основы встроенного языка
35
Рис. 3.2. Окно редактирования справочника, закладка Данные
Для начала на закладке Данные нужно настроить длину кода и наименования
элемента справочника.
Длина кода. 9-значный код способен вместить такое количество элементов, которого
гарантированно хватит не только для нашей учебной конфигурации, да и для
большинства реально используемых конфигураций. На практике длина кода бывает
как меньше, так и больше 9. Код используется для идентификации элементов
справочника и код каждого элемента уникален. Система сама следит за уникальностью
кодов.
Длина наименования. Это свойство справочника обычно хранит краткое
наименование элемента. В нашем случае в справочнике планируется хранить сведения
о физических лицах, вполне логично в качестве наименования использовать какую-то
комбинацию фамилии, имени и отчества физического лица. Будем использовать
сокращенную форму, например, "Иванов И.И.", однако, фамилии могут быть довольно
длинными, поэтому увеличим длину наименования до 50 символов.
Обратите внимание на то, что в реквизиты любого справочника входят, как минимум,
код и наименование. То есть, если мы на данном этапе работы запустим систему в
режиме 1С:Предприятие и попытаемся поработать со справочником, то набор данных
для каждого из его элементов будет ограничен кодом и наименованием. На практике
могут применяться подобные справочники, например, что-то вроде справочника
Должности. Поля Наименование вполне хватает для того, чтобы сохранить название
должности, а код используется в служебных целях.
36
Основы разработки прикладных решений для 1С: Предприятие 8.1
Продолжаем настройку закладки Данные. Здесь можно найти два очень важных поля:
Реквизиты и Табличные части.
Реквизиты - в этом поле можно описать дополнительные характеристики элемента
справочника. Для того, чтобы добавить в справочник новый реквизит, щелкните по
кнопке Добавить в поле Реквизиты или воспользуйтесь соответствующей командой
контекстного меню. Добавление нового реквизита сродни добавлению нового объекта
- система создает его, присваивает имя по умолчанию и выводит окно его свойств. На
рис. 3.3 вы можете видеть реквизит с уже настроенными свойствами.
Рис. 3.3. Добавляем в справочник новый реквизит
Перед нами реквизит Фамилия. Очевидно, что такой реквизит должен хранить
фамилию физического лица в виде строки, длину строки можно ограничить 30-ю
символами.
Добавим в справочник следующие реквизиты (табл. 3.1):
Таблица 3.1. Реквизиты справочника ФизическиеЛица
Имя реквизита
Тип
Параметры типа
Фамилия
Строка
Длина: 30
Имя
Строка
Длина: 30
Отчество
Строка
Длина: 30
ДатаРождения
Дата
Состав даты: Дата
Пол
ПеречислениеСсылка.Пол
-
Район
СправочникСсылка.Районы
-
3. Лекция: Справочники, перечисления, основы встроенного языка
37
В конце таблицы есть пара строк, которые могут вызвать у вас затруднения. Типов
данных "Перечисление.Ссылка.Пол" и "Справочник.Ссылка.Районы" в системе нет. Их
нужно создать самостоятельно, создав соответствующие объекты. Прежде чем
создавать эти объекты, давайте поговорим о данных, которые они будут хранить.
Для указания пола сотрудника мы не случайно выбрали объект Перечисление. Дело в
том, что при выборе пола мы ограничены двумя вариантами - либо мужской, либо
женский. Почему бы не предоставить пользователю возможность вводить
информацию о поле в виде строки, не используя перечисление? Предположим, мы
дадим пользователю текстовое поле, в которое предложим ввести пол. Разные
пользователи (да и один и тот же пользователь в разное время) введут в это поле
разные значения. Это могут быть "М" и "Ж" или "муж." и "жен." или "мужской" и
"женский". Можно подобрать и другие варианты. Как видите, в итоге получится, что
если мы захотим, например, получить сведения о количестве физических лиц
мужского пола, зарегистрированных в нашей базе, нам придется "пробираться" сквозь
разнообразные наименования, введенные пользователями при заполнении базы. Такая
ситуация весьма нежелательна и неудобна. Поэтому везде, где только можно, следует
применять средства, стандартизирующие ввод данных. В случае с закрытым (или
редко пополняемым, причем, пополняемым администратором в конфигураторе)
списком вариантов следует пользоваться перечислениями.
Реквизит Район мы будем использовать для указания района города, в котором
проживает физическое лицо. Этот реквизит администрация автоматизируемого салона
красоты будет использовать для планирования выездной работы мастеров. Для
хранения этой информации мы применим справочник. Почему бы нам не использовать
перечисление? Дело в том, что набор районов города обычно далек от закрытого.
Поэтому логично предоставить пользователям самостоятельно формировать список
районов и самостоятельно контролировать правильность его заполнения. Почему бы, в
таком случае, не сделать реквизит Район в виде обычной текстовой строки? Дело,
снова, в том, что пользователи могут назвать один и тот же район по-разному, в итоге,
возникнут сложности с автоматической обработкой данных о районах. То есть,
например, если нам нужно будет выполнить задачу "подобрать мастеров, которые
могут обслужить клиента, проживающего в районе Х", при использовании
справочника Районы мы указываем системе конкретный элемент справочника,
соответствующего району проживания клиента, а система подбирает по этому району
мастеров. Если же сделать ввод данных о районах произвольным, неразбериха в базе
гарантирована.
В следующих лекциях мы будем использовать этот справочник для хранения сведений
не только о физических лицах-клиентах, но и о мастерах, доработав его.
Создадим два новых объекта - перечисление Пол и справочник Районы.
На рис. 3.4 вы можете видеть окно настройки свойств перечисления Пол. Мы
находимся на его вкладке Данные. Здесь мы можем добавлять значения перечисления.
38
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 3.4. Создание перечисления Пол
Добавим два значения для перечисления: "Мужской" и "Женский". Окно свойств
значения перечисления поддерживает лишь ввод имени, синонима и комментария,
других свойств у значения перечисления нет. Перечисление может иметь формы,
которые используются для вывода информации, макеты, которые применяются для
формирования печатных форм.
В предыдущей лекции мы создали несколько подсистем. Начиная с созданного только
что объекта, мы не будем уточнять, к какой именно подсистеме он относится. Мы
вернемся к этому вопросу и укажем распределение объектов конфигурации по
подсистемам в той лекции, где будут рассматриваться механизмы, основанные на
использовании подсистем.
На рис. 3.5 вы можете видеть окно настройки свойств только что созданного
справочника.
Рис. 3.5. Создание справочника Районы
Он не имеет дополнительных реквизитов, и всѐ, что мы для него настроили - это
установили длину наименования, равную 100 символам.
3. Лекция: Справочники, перечисления, основы встроенного языка
39
Кстати, обратите внимание на окно Свойство - его можно использовать вместе с
окном редактирования объекта конфигурации для правки свойств справочника.
На рис. 3.6 вы можете видеть вкладку Данные для справочника ФизическиеЛица.
Обратите внимание на окно, в котором отображаются свойства реквизита справочника.
Рис. 3.6. Настройка реквизитов справочника ФизическиеЛица
Сейчас пришло время опробовать только что созданный справочник ФизическиеЛица
на практике. Запускаем 1С:Предприятие с нашей конфигурацией.
Выполним команду меню Операции > Справочник. Появится окно выбора
справочника (рис. 3.7).
Рис. 3.7. Выбор справочника Физические лица в режиме 1С:Предприятие
Обратите внимание на то, что в окне Выбор объекта: Справочник мы видим
синоним справочника, а не его имя. В реально используемых конфигурациях имя и
синонимы справочников нередко различаются весьма значительно. Подобные окна
появляются и при выборе многих других пунктов меню Операции. Выберем нужный
справочник - Физические лица (рис. 3.8). Сделаем по строке с его наименованием
40
Основы разработки прикладных решений для 1С: Предприятие 8.1
двойной щелчок или, выделив, нажмем ОК, или, опять же, выделив, нажмем клавишу
Enter на клавиатуре.
Рис. 3.8. Окно Справочник Физические лица
В настоящий момент справочник пуст. Мы можем видеть лишь строку, которая
содержит заголовки, соответствующие реквизитам справочника. Создадим новый
элемент справочника, для этого воспользуемся кнопкой Добавить, выберем пункт
меню Действия > Добавить или просто нажмем кнопку Ins на клавиатуре. Одного и
того же результата можно добиться различными путями, это характерно для многих
операций - учитывайте это при работе в режиме 1С:Предприятие. На рис. 3.9 вы
можете видеть форму редактирования элемента справочника.
Рис. 3.9. Окно редактирования элемента справочника
Как видите, здесь представлены все реквизиты, которые мы задавали в режиме
конфигурирования.
Код присваивается элементу справочника автоматически. В данном случае мы можем его
редактировать, но делать этого не будем. Эту возможность, кстати, весьма разумно
3. Лекция: Справочники, перечисления, основы встроенного языка
41
заблокировать (или разработать особую процедуру смены номера, которая исключает
случайную смену номера и т.д.).
В полях Наименование, Фамилия, Имя, Отчество, содержится, в соответствии со
свойствами реквизитов справочника, обычные строковые значения. Мы можем вводить их
вручную с клавиатуры. Если, предположим, мы вводим сведения о некоем Иванове Иване
Ивановиче, то понятно, что содержимое поля Наименование (а там, при таком
предположении должно быть Иванов И.И.) вполне можно сформировать автоматически на
основе данных, введенных в поля Фамилия, Имя, Отчество. Эту удобную возможность
мы реализуем позже, это - одна из многочисленных доработок справочника Физические
лица.
Когда мы заполняем поле Дата рождения, мы можем либо ввести дату с клавиатуры (в
формате ДД.ММ.ГГГГ), либо, что обычно удобнее, ввести ее с помощью кнопки
Выбрать, расположенной в правой части окна (рис. 3.10).
Рис. 3.10. Ввод даты
Заполняя поле Пол, мы нажимаем кнопку с тремя точками (она тоже называется
Выбрать) и выбираем нужное значение из выпадающего списка. Заполняя поле Район,
мы, нажав на кнопку Выбрать, видим окно справочника Районы. Прежде чем мы сможем
указать район в справочнике Физические лица, мы должны внести его в справочник
Районы.
Создаем новый элемент справочника Районы (рис. 3.11), пусть это будет район с
наименованием "Ленинский".
42
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 3.11. Ввод элемента одного справочника для использования в другом
Когда ввод информации в элемент справочника Районы завершен, нажмем кнопку ОК в
форме элемента справочника. Этот элемент появится в окне Справочник Районы, после
чего мы сможем выбрать его двойным щелчком для подстановки в поле Район
редактируемого элемента справочника Физические лица.
В табл. 3.2 вы можете видеть состав данных созданного элемента справочника
Физические лица.
Таблица 3.2. Данные, введенные в элемент справочника Физические лица
Реквизит
Содержимое
Иванов И.И.
Наименование
Иванов
Фамилия
Иван
Имя
Иванович
Отчество
27.02.1984
Дата рождения
Мужской
Пол
Ленинский
Район
Заполнив поля окна редактирования элемента справочника, нажмем кнопку ОК. Данные
будут записаны в базу, элемент появится в окне Справочник Физические лица.
Что еще мы можем сделать с элементом справочника на данном этапе работы?
Осмотримся в окне списка справочника, в частности, посмотрим на меню Действия,
выделив элемент справочника (рис. 3.12).
3. Лекция: Справочники, перечисления, основы встроенного языка
43
Рис. 3.12. Меню Действия
Действие большинства команд, которые перечислены в меню Действия вполне понятно
из их названий. Однако некоторые из них нуждаются в пояснениях.
Команда Удалить непосредственно позволяет удалить текущий элемент справочника
непосредственно. При непосредственном удалении элемента справочника возможно
нарушение ссылочной целостности информационной базы.
Команда Установить пометку удаления лишь помечает объект на удаление, не
производя его удаления из базы.
Создадим в справочнике Районы еще одну запись - добавим туда район, который
называется "Ненужный район". Пометим на удаление все элементы справочника. В
данный момент это - "Ненужный район" и "Ленинский", рис. 3.13.
Рис. 3.13. Пометка на удаление двух элементов справочника
Для того, чтобы попытаться удалить помеченные объекты, следует выбрать пункт меню
Операции > Удаление помеченных объектов.
44
Основы разработки прикладных решений для 1С: Предприятие 8.1
В появившемся окне (рис. 3.14) следует запустить проверку нажатием на кнопку
Контроль.
Рис. 3.14. Проверка возможности удаления помеченных объектов
После проведения контроля станет известно, какие объекты можно удалить, а какие нельзя (рис. 3.15).
3. Лекция: Справочники, перечисления, основы встроенного языка
45
Рис. 3.15. Результат проверки
Система сообщает нам о том, какие из помеченных объектов можно удалить (они
отмечены зеленой галочкой) а какие - нет (они отмечены красной галочкой). Здесь же,
выделив мышью удаляемый объект, можно узнать, где на него есть ссылки. Нажав на
кнопку Удалить мы удаляем те объекты, которые ни к чему не "привязаны".
Нельзя удалить те объекты, которые привязаны к другим объектам. В нашем случае
элемент справочника Физические лица содержит ссылку на элемент справочника
Районы. Физическому лицу Иванову И.И. сопоставлен район Ленинский. Теперь если мы
захотим удалить район Ленинский, система не даст нам этого сделать до тех пор, пока
этот район "привязан" к одному из физических лиц.
Если вызвать меню Действия для объекта, помеченного на удаление, в нем можно будет
найти пункт Снять пометку удаления.
Кнопка Вывести список позволяет выводить справочник в виде, подходящем для
распечатки или сохранения. Сразу после выполнения этой команды появится окно,
которое позволяет, во-первых, указать формат выходного документа (табличный
документ или текстовый документ), а во-вторых - выбрать состав данных справочника,
которые в этот документ выгружаются (рис. 3.16).
46
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 3.16. Настройка вывода содержимого справочника в документ
На рис. 3.17 вы можете видеть результат выгрузки справочника в табличный документ.
Работа с табличным документом напоминает работу в Microsoft Excel.
Рис. 3.17. Настройка вывода содержимого справочника и документа
Кстати, вы обратили внимание на то, что наши справочники оснащены формами, а мы,
работая в конфигураторе, никаких форм не создавали? Если да - тогда вам будет
интересно узнать о том, как управлять поведением форм объектов. К тому же, напомним,
что мы, работая в справочнике Физические лица, решили, что в нем не помешает
настроить автоматическое заполнение поля Наименования на основе полей Фамилия,
Имя, Отчество. Всем этим займемся в следующей лекции, а теперь - вернемся к
константам и поговорим о программировании.
3.2. Hello World!
Лучший способ научиться программировать на новом для вас языке - начинать писать
программы на нем. Для того, чтобы получить максимум пользы от разбора тех строк кода,
которые мы здесь приводим, постарайтесь не копировать их из документа в редактор кода.
Программа при таком подходе будет работать, но вы недополучите очень важный и
3. Лекция: Справочники, перечисления, основы встроенного языка
47
ценный опыт самостоятельного ввода текстов программ. Поверьте, время, затраченное на
самостоятельный набор текстов, оправдает себя.
Сейчас мы рассмотрим приемы работы с константами из встроенного языка. Напишем
нашу первую программу, классическую "Hello World!" с стиле 1С:Предприятие 8.
Написание такой простой программы, однако, позволяет рассмотреть базовые операции
по работе с новым языком программирования и подготовиться к более серьезным делам.
Прежде чем начинать писать нашу первую программу, рассмотрим виды модулей,
которые существуют в системе.
3.3. Виды модулей
Как вы уже знаете, программный код в разрабатываемой конфигурации хранится в
модулях. Причем, в системе существует несколько видов модулей.
Модули форм. К настоящему моменту вы уже должны были обратить внимание на
существование модулей форм. В предыдущей лекции мы создали общую форму констант
и могли наблюдать ее пустой модуль в редакторе форм. Эти модули используются, в
основном, для организации работы с формой. Например, если нам нужно реализовать
возможность автоматического заполнения одних полей на основании данных, введенных в
другие, то нам нужно работать именно с модулем формы. Модули включают в себя
процедуры, функции, объявления переменных. Получить доступ к этим модулям можно в
редакторе форм.
Модули набора записей. Они используются в регистрах.
Модули объектов. Эти модули соответствуют отдельным объектам системы и позволяют
организовывать работу с объектом. Получить доступ к модулю объекта можно, например,
щелкнув правой кнопкой мыши по значку объекта в дереве конфигурации и выбрав в
появившемся контекстном меню пункт Открыть модуль объекта.
Общие модули. Эти модули создают в ветви Общие модули дерева конфигурации. Они
используются в самых разных целях. В частности для того, чтобы сделать некоторые
процедуры общими для различных объектов конфигурации. Например, в нескольких
объектах нужно выполнить одинаковую проверку данных, введенных пользователем.
Если для этого применяется один и тот же код - вполне логично вынести этот код в общий
модуль.
Модуль сеанса можно открыть, вызвав контекстное меню конфигурации (рис. 3.18).
48
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 3.18. Контекстное меню конфигурации
Модуль сеанса. Используется для установки параметров сеанса.
Модуль внешнего соединения. Используется для работы в режиме внешнего
соединения.
Модуль приложения. Хранит обработчики событий, которые происходят при начале и
при окончании работы системы. Если мы хотим, чтобы некоторые действия выполнились
автоматически при начале работы пользователя с информационной базой, нам можно
воспользоваться именно этим модулем.
Программный код в модулях оформлен в виде процедур и функций.
3.4. Процедуры и функции
Процедуры и функции используются для логического структурирования программного
кода. Процедура отличается от функции тем, что функция, будучи вызванной, возвращает
в точку вызова некоторое значение. То есть можно сказать, что функцию вызывают для
того, чтобы получить от нее некоторое значение, с которым потом можно работать в коде
основной программы. Процедура же ориентирована на выполнение некоторых действий, а
не на возврат значений.
Для объявления процедуры используется ключевое слово Процедура. Шаблон процедуры
выглядит так:
Процедура ИмяПроцедуры(ИмяПараметра1, ИмяПараметра2, …)
//Тело процедуры, команды на встроенном языке
КонецПроцедуры
Для объявления функции используется ключевое слово Функция. Шаблон функции
выглядит так:
Функция ИмяФункции(ИмяПараметра1, ИмяПараметра 2, …)
//Тело функции, команды на встроенном языке
Возврат(ВозвращаемоеЗначение);
КонецФункции
3. Лекция: Справочники, перечисления, основы встроенного языка
49
Обратите внимание на то, что команды в теле процедур и функций разделяются символом
";" - точка с запятой. Имя процедур и функций строится способом, похожим на способ
построения имен объектов. Начинаться имя должно с буквы или с символа подчеркивания
"_". В состав имени процедуры или функции могут входить буквы, цифры и символы
подчеркивания.
3.5. Вывод приветствия при загрузке системы
Как вы помните, в предыдущей лекции мы создавали константу для того, чтобы вывести
текст, хранящийся в ней, в качестве приветствия в начале работы пользователя с
информационной базой. Код программы, которая будет выполнять это действие, мы
будем хранить в модуле приложения. Откроем модуль приложения командой
контекстного меню конфигурации Открыть модуль приложения (рис. 3.19).
Рис. 3.19. Модуль приложения
В настоящий момент модуль пуст. Мы можем добавить в него процедуры-обработчики
событий, предусмотренные для данного модуля. Для добавления таких процедур нужно
либо воспользоваться командой Текст > Процедуры и функции, либо - нажать на кнопку
Процедуры и функции на панели инструментов. Окно процедур и функций (рис. 3.20)
содержит список предопределенных процедур-обработчиков событий.
50
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 3.20. Выбор имени процедуры
Здесь можно увидеть несколько имен процедур. В частности, нас интересует процедура
ПриНачалеРаботыСистемы. Она выполняется при начале работы системы, в частности при отображении главного окна программы. Здесь, в этой процедуре, мы можем
программно открывать формы, выводить сообщения, выполнять другие необходимые
действия.
Нас устраивает эта процедура, поэтому мы установим выделение на строке
ПриНачалеРаботыСистемы и нажмем на кнопку Перейти. В поле модуля появится
определение процедуры (рис. 3.21).
Рис. 3.21. Процедура добавлена в тело модуля
3. Лекция: Справочники, перечисления, основы встроенного языка
51
Тело процедуры содержит текст:
// Вставить содержимое обработчика
Этот текст представляет собой комментарий. Комбинация символов "//" означает
комментарий.
Теперь нам нужно вставить в тело модуля программный код, который выведет сообщение
при начале работы пользователя с системой. Первый вопрос, который нам нужно решить,
заключается в том, чтобы определить, куда именно должно выводиться сообщение. Одно
из решений этого вопроса заключается в использовании окна служебных сообщений. Для
того, чтобы вывести в него какой-нибудь текст, используют команду Сообщить.
Например, такая команда Сообщить("Привет!"); выведет в окно служебных сообщений
текст "Привет!".
Теперь нам нужно узнать, как вывести с помощью команды Сообщить содержимое нашей
константы. Для того, чтобы выводить содержимое констант мы можем воспользоваться
такой конструкцией:
Константы.ИмяКонстанты.Получить();
При выполнении этого кода в точке его вызова окажется содержимое константы. В нашем
случае это - строка, содержащая текст приветствия. Напомним, что наша константа
называется ТекстСообщения. В итоге, выходим на такой код, выводящий значение
нашей константы:
Константы.ТекстСообщения.Получить();
Данный код берет выводимое значение из базы данных.
Вот как выглядит полный текст модуля, который выводит приветствие при начале работы
системы:
Процедура ПриНачалеРаботыСистемы()
Сообщить(Константы.ТекстСообщения.Получить());
КонецПроцедуры
Тот же текст вы можете видеть на рис. 3.22.
Рис. 3.22. Код модуля, выводящий приветствие при начале работы системы
52
Основы разработки прикладных решений для 1С: Предприятие 8.1
Обратите внимание на то, что около заголовка процедуры можно видеть знак "-" - он
указывает на то, что процедура в настоящий момент развернута и мы можем ее свернуть
(сгруппировать) при желании. Свернутую процедуру вы можете видеть на рис. 3.23.
Рис. 3.23. Свернутый код модуля
Группировка нужна для удобства - если в модуле много процедур и функций и они не
сгруппированы, с ними не очень удобно работать. А если они сгруппированы,
разворачивать можно лишь те процедуры и функции, с которыми вы в данный момент
работаете.
Теперь все готово для того, чтобы опробовать только что написанный код на практике.
Обновим базу данных и откроем нашу конфигурацию в режиме 1С:Предприятие. Вот, что
у нас получилось (рис. 3.24).
3. Лекция: Справочники, перечисления, основы встроенного языка
53
Рис. 3.24. Сообщение, взятое из константы
Теперь если мы захотим изменить текст приветствия, которое видит пользователь, нам
будет достаточно изменить значение константы. При следующем запуске нашей
конфигурации в режиме 1С:Предприятие текст приветствия будет соответствовать
текущему значению, хранящемуся в константе.
3.6. Выводы
В этой лекции мы познакомились со справочниками, перечислениями, начали
рассматривать работу со встроенным языком системы. Далее мы продолжим работу над
конфигурацией.
54
Основы разработки прикладных решений для 1С: Предприятие 8.1
4. Лекция: Справочники,
конструирование форм
Лекция посвящена продолжению работы над справочниками прикладного решения,
рассматриваются различные виды справочников, особенности ручного редактирования
форм, управления поведением элементов управления.
Содержание лекции:
4.1. Документы и справочники
4.2. Справочники: Контрагенты и ПредставителиКонтрагентов
4.3. Механизм форм по умолчанию
4.4. Доработка формы списка справочника Контрагенты
4.5. Создание дополнительных справочников
4.6. Выводы
4.1. Документы и справочники
Документы - это прикладные объекты, которые используются для ввода информации в
систему. Нередко документы конфигураций 1С:Предприятие являются электронными
аналогами бумажных документов. Как правило, прикладные конфигурации строят с
учетом того, что информация о совершенной хозяйственной операции вводится в систему
лишь один раз с использованием соответствующего документа, после чего используется в
различных системных механизмах.
Создавая конкретные документы, обычно ориентируются на хозяйственные операции,
которые нужно отражать в системе с их помощью. Мы хотим создать документ
ПоступлениеМатериалов, который, как следует из его названия, будет использоваться
для фиксирования факта поступления материалов в организацию. Для того чтобы создать
этот документ, нам предварительно нужно будет расширить набор справочников. А
именно, следующие:
Контрагенты - для хранения сведений о контрагентах;
ПредставителиКонтрагентов - для хранения сведений о представителях контрагентов;
ЕдиницыИзмерения - для хранении информации о единицах измерения номенклатуры;
Номенклатура - для хранения данных о материалах, товарах, услугах;
Подразделения - для описания подразделений организации;
Сотрудники - для описания списка сотрудников организации;
Ниже в этой лекции мы будем заниматься созданием и настройкой справочников.
4.2. Справочники: Контрагенты и ПредставителиКонтрагентов
Справочник Контрагенты будем использовать для хранения информации о контрагентах
- то есть о тех организациях, с которыми взаимодействует наш салон красоты.
4. Лекция: Справочники, конструирование форм
55
Так же создадим справочник ПредставителиКонтрагентов. Он будет содержать список
контактных лиц контрагента и, кроме того, будет подчинен справочнику Контрагенты.
Создадим справочник Контрагенты. Это будет иерархический справочник, который
содержит основные сведения о контрагентах. Рассмотрим настройки вкладок окна
параметров этого справочника.
На вкладке Основные мы зададим имя справочника Контрагенты и такой же синоним.
Вкладка Иерархия, которую мы еще не рассматривали, предназначена для настройки
параметров иерархического справочника (рис. 4.1).
Рис. 4.1. Справочник Контрагенты, вкладка Иерархия
Рассмотрим установки, которые можно сделать на этой вкладке.
Иерархический справочник. Этот флажок по умолчанию сброшен. То есть, новые
справочники по умолчанию не являются иерархическими.
Вид иерархии. Здесь доступно два варианта. Первый - он установлен у нашего
справочника - это Иерархия групп и элементов. Второй - это Иерархия элементов.
Иерархия групп и элементов означает, что справочник может включать в себя группы,
которые, в свою очередь, могут включать в себя другие группы и элементы. Например, в
справочнике Контрагенты можно создать такие группы, как Покупатели, Поставщики,
56
Основы разработки прикладных решений для 1С: Предприятие 8.1
Деловые партнеры. В каждую из этих групп можно включать тех контрагентов (то есть те элементы справочника), характер взаимодействия с которыми соответствует названию
группы. Группа, к которой относится элемент, называется его родителем.
Иерархия элементов позволяет создать справочник, элементы которого могут служить
родителями для других элементов. То есть - выполнять и функции групп, и функции
элементов. Ниже мы рассмотрим такой справочник.
Размещать группы сверху. Это свойство управляет отображением справочника,
предусматривающего иерархию групп и элементов. Если оно установлено, то при
просмотре справочника как иерархического списка, названия групп будут находиться в
верхней части списка. Если этот параметр отключить, они не будут пользоваться
преимуществом перед обычными элементами.
Ограничение количества уровней иерархии. При активации позволяет ограничивать
количество уровней иерархии значением, установленным в соответствующем поле ввода.
Перейдем на вкладку Данные нашего справочника (рис. 4.2) и зададим ему следующие
реквизиты (табл. 4.1).
Таблица 4.1. Реквизиты справочника Контрагенты
Имя реквизита
Тип
Параметры типа
ПолноеНаименование
Строка
Длина: 50
КонтактныеСведения
Строка
Длина: 100
4. Лекция: Справочники, конструирование форм
57
Рис. 4.2. Справочник Контрагенты, вкладка Данные
Теперь займемся справочником ПредставителиКонтрагентов.
На вкладке Основные введем имя ПредставителиКонтрагентов и перейдем на вкладку
Владельцы, на этой вкладке нажмем на кнопку Редактировать список владельцев.
Появится окно (рис. 4.3), которое содержит список объектов, которые можно назначить
владельцами справочника.
58
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 4.3. Справочник ПредставителиКонтрагентов, вкладка Владельцы
В появившемся окне Выбор объекта установим флаг напротив поля Контрагенты.
Нажав на кнопку ОК, возвращаемся на вкладку Владельцы, рис. 4.4.
4. Лекция: Справочники, конструирование форм
59
Рис. 4.4. Справочник ПредставителиКонтрагентов, вкладка Владельцы
Поле Использование подчинения позволяет задать подчинение элементам справочникавладельца, группам, или группам и элементам. Выбор варианта использования
подчинения осуществляется в зависимости от особенностей справочников. Например, в
нашем случае, очевидно, что в иерархическом справочнике Контрагенты каждому
контрагенту может соответствовать один или несколько представителей. Поэтому мы
указываем в поле Использование подчинения вариант Элементам.
Перейдем на вкладку Данные справочника ПредставителиКонтрагентов (рис. 4.5).
60
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 4.5. Подготовка к копированию реквизитов одного справочника в другой
Мы собираемся добавить реквизиты справочника, которые позволят хранить ФИО
представителя и его телефон. Вспомним, что ранее мы создавали похожий справочник это справочник ФизическиеЛица. Среди реквизитов этого справочника есть такие,
которые подойдут нам при конструировании нового справочника. Гораздо быстрее
скопировать нужные реквизиты из одного объекта в другой, чем создавать эти реквизиты
с нуля. Удобно копировать реквизиты, просто перетаскивая их мышью из одного места
дерева конфигурации в другое. В итоге, пользуетесь вы копированием или нет, у вас
должен получиться следующий набор реквизитов (табл. 4.2).
Таблица 4.2. Реквизиты справочника ПредставителиКонтрагентов
Имя реквизита
Тип
Параметры типа
Фамилия
Строка
Длина: 30
Имя
Строка
Длина: 30
Отчество
Строка
Длина: 30
Телефон
Строка
Длина: 30
Примечание
Строка
Длина: 100
Длину наименования элемента справочника установим в 50 - мы будем хранить в ней
сокращенный вариант фамилии, имени и отчества контактного лица.
4. Лекция: Справочники, конструирование форм
61
Создав объекты, опробуем механизмы работы иерархических и подчиненных
справочников на практике. Для этого запустим нашу конфигурацию в режиме
1С:Предприятие.
Создадим в справочнике Контрагенты группы Покупатели и Поставщики. Для того,
чтобы создать группу, используем кнопку панели инструментов Добавить группу. При
создании группы (рис. 4.6) нам обычно нужно лишь заполнить наименование группы.
Рис. 4.6. Создание новой группы в справочнике Контрагенты
Код присваивается автоматически, поле Родитель так же заполняется автоматически
(хотя его можно заполнить и вручную) - оно содержит наименование группы, в которую
входит создаваемая группа. В нашем случае это поле остается пустым, так как группы
создаются на верхнем уровне справочника Контрагенты. При необходимости мы можем
создавать вложенные группы. Например - в группе Поставщики создадим подгруппы
Новые и Постоянные (рис. 4.7).
62
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 4.7. Создание подгруппы Постоянные в группе Поставщики справочника Контрагенты
Теперь мы сможем просматривать в левой части окна справочника его иерархическую
структуру, представленную группами, а в правой части - содержимое текущей группы.
Если, создавая элемент иерархического справочника, вы случайно поместили его не в ту
группу (или хотите перенести из одной группы в другую по другим соображениям), вы
можете переместить его в другую группу. Для этого выделите перемещаемый элемент
справочника и, нажав на кнопку Переместить элемент в другую группу, выберите
нужную группу.
Обратите внимание на кнопку панели инструментов Перейти. Если нажать ее - откроется
меню, которое будет содержать лишь один пункт - Представители контрагентов. Если
мы, на данном этапе работы со справочником (или на более раннем, когда он не содержал
еще ни одной группы) попытаемся выполнить эту команду - мы получим сообщение об
ошибке. В частности, если в нашем справочнике будет выделена одна из только что
созданных групп, данная команда приведет к сообщению о том, что владелец не может
быть группой. Эта команда позволяет открывать справочник Представители
контрагентов, отфильтровав его по владельцу (как мы говорили выше, владельцами
элементов этого справочника являются элементы справочника Контрагенты).
Прежде чем приступать к вводу данных о представителях контрагента вполне логично
ввести данные о самом контрагенте. Поэтому, выберем одну из групп (например Поставщики > Новые) и создадим в ней новый элемент (рис. 4.8).
4. Лекция: Справочники, конструирование форм
63
Рис. 4.8. Создание нового элемента справочника Контрагенты
Сохраним созданный элемент нажатием на кнопку ОК и, выделив его в правой части
справочника, выполним команду Перейти > Представители контрагентов. Будет открыт
справочник Представители контрагентов. Если теперь мы попытаемся создать новый
элемент справочника, в его поле Владелец будет автоматически внесено ООО "Рассвет".
Заполним поля элемента справочника (рис. 4.9) и сохраним его.
Рис. 4.9. Создание элемента подчиненного справочника Контрагенты
64
Основы разработки прикладных решений для 1С: Предприятие 8.1
Теперь, если мы будем выбирать элемент справочника Контрагенты и выполнять
команду Перейти > Представители контрагента, мы будем видеть список
представителей, владельцем которых является выбранный элемент справочника
Контрагенты.
Эта схема достаточно логична, но будет гораздо удобнее, если, выделяя контрагента, мы
тут же будем видеть сопоставленных с ним представителей. Для того, чтобы это сделать,
нам понадобится самостоятельно сконструировать форму списка справочника
Контрагенты.
4.3. Механизм форм по умолчанию
Мы уже создали немало объектов, но пока не занимались редактированием их форм.
Лишь форму констант мы создавали явно. Формы справочников были созданы
автоматически. 1С:Предприятие автоматически создает нужные формы объектов. Такие
формы поддерживают лишь минимально необходимую функциональность - ввод,
просмотр и изменение данных объектов. Эти формы создаются "на лету" в ходе работы
пользователя с объектом. Если форма должна поддерживать какую-нибудь
дополнительную функциональность - она должна быть создана при проектировании
объекта. Например, выше мы столкнулись с необходимостью выводить элементы
подчиненного справочника в форме справочника Контрагенты. Автоматически подобная
функциональность не создается.
Существует несколько видов форм. В частности, формы объектов (форма элемента
справочника, форма документа, например), формы списков объектов, формы выбора и
другие. Если формы не созданы вручную и не указаны в нужном качестве в окне
редактирования объекта, они генерируются автоматически при необходимости их
использования.
4.4. Доработка формы списка справочника Контрагенты
Откроем в конфигураторе окно свойств справочника Контрагенты и перейдем на его
вкладку Формы (рис. 4.10).
4. Лекция: Справочники, конструирование форм
65
Рис. 4.10. Вкладка Формы окна свойств справочника Контрагенты
Здесь есть группа элементов Основные формы. Как видите, ни одна из форм не задана,
то есть все они формируются системой при возникновении необходимости в них. Нажмем
на кнопку Открыть в поле Списка. Будет вызван конструктор форм (рис. 4.11) для
формы списка справочника. Именно эта форма открывается при выборе
соответствующего справочника из окна Справочники в режиме 1С:Предприятие.
66
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 4.11. Конструктор формы справочника, первый шаг
Не будем менять установки, заданные по умолчанию и нажмем на кнопку Далее.
Появится второе окно конструктора форм (рис. 4.12).
Рис. 4.12. Конструктор формы справочника, второй шаг
4. Лекция: Справочники, конструирование форм
67
Здесь мы можем видеть список реквизитов формы. В частности, это реквизиты Список и
Дерево. Дерево - это то, что мы видим в левой части окна формы иерархического
справочника, созданной автоматически. Список - это список элементов справочника,
который можно видеть в правой части окна формы. Здесь мы можем отредактировать
набор отображаемых свойств. Оставим эти значения в неизменном виде и нажмем на
кнопку Готово. Откроется окно редактора форм, который содержит автоматически
сгенерированную форму, готовую к ручному редактированию (рис. 4.13).
Рис. 4.13. Результат работы конструктора форм
Как вы помните, мы собирались добавить в эту форму список элементов справочника
ПредставителиКонтрагентов,
который
должен
отображать
представителей,
соответствующих конкретному контрагенту.
Мы должны доработать видимую часть формы. Здесь можно поступить двумя путями.
Первый путь заключается в том, чтобы предоставить системе возможность автоматически
разместить поле, соответствующее новому реквизиту. Второй - ручное добавление поля и
настройка его свойств.
Попробуем ручное добавление нового поля в форму. Перейдем на вкладку Формы,
изменим размер формы, подготовив место для нового табличного поля, которое будет
содержать список контактных лиц и изменим размер правого поля формы для того, чтобы
оно заняло всю форму.
Изменение размеров форм производится аналогично изменению размеров окон в Windows
- нужно подвести указатель мыши к краю формы, указатель превратится в
68
Основы разработки прикладных решений для 1С: Предприятие 8.1
двунаправленную стрелку, после чего, зажав левую кнопку мыши, можно перемещать
границу формы.
Для изменения размеров элемента управления или его перемещения, достаточно выделить
его щелчком мыши, после чего вокруг элемента появятся маркеры выделения. Потянув за
соответствующий маркер, можно изменить размер. Если же навести указатель на участок
границы объекта, свободный от маркеров, элемент управления можно перемещать по
форме.
Теперь, когда все готово, добавим на форму новый элемент управления Табличное поле.
Для этого щелкнем по кнопке Табличное поле (она расположена на панели
инструментов, которая находится в нижней части окна программы) и с помощью мыши
"нарисуем" прямоугольник, в котором будет располагаться новое табличное поле.
Зададим следующие свойства нового табличного поля, табл. 4.3.
Таблица 4.3. Свойства нового табличного поля
Свойство
Значение
Имя
ПредставителиКонтрагентов
ТипЗначения
СправочникСписок.ПредставителиКонтрагентов
Связь по владельцу СправочникСписок.ПриАктивизацииСтроки
На рис. 4.14 вы можете видеть процесс изменения свойств поля, и, в частности, открытое
окно выбора значения свойства Связь по владельцу.
Рис. 4.14. Настройка свойств нового табличного поля
При выборе связи по владельцу мы нажимаем кнопку с тремя точками в соответствующем
поле, после чего в появившемся окне Выбор связи активируем вкладку События и
выбираем событие ПриАктивизацииСтроки для СправочникСписок. Напомним, что
4. Лекция: Справочники, конструирование форм
69
реквизит формы СправочникСписок соответствует списку элементов справочника
Контрагенты.
После указанных операций, кроме прочих изменений, список реквизитов формы (вкладка
Реквизиты окна редактирования формы) будет пополнен новым реквизитом
ПредставителиКонтрагентов (именно он указан в свойстве Данные табличного поля,
которое заполняется автоматически при указании типа поля) с типом
СправочникСписок.ПредставителиКонтрагентов.
После выполнения указанных действий мы уже можем получить желаемую
функциональность. Но в поле, выводящем список представителей, есть лишь столбцы Код
и Наименование. Нам хотелось бы видеть не только эти поля, но и телефон
представителя. Для того, чтобы добавить в табличное поле новую колонку, вызовем его
контекстное меню и выберем в нем пункт Добавить колонку. Настроим свойства новой
колонки так, как указано в табл. 4.4.
Таблица 4.4. Свойства новой колонки табличного поля
Свойство
Значение
Имя
Телефон
Данные
Телефон
На рис. 4.15 вы можете видеть результат нашей работы. Поле Данные заполняется из
списка, который формируется на основании реквизитов списка справочника
ПредставителиКонтрагентов.
Рис. 4.15. Настройка свойств столбца табличного поля
Размещая табличное поле, мы оставили немного свободного места. Это место мы
используем для добавления командной панели (она содержит уже знакомые вам кнопки
Добавить и другие). Работать со справочником (добавлять, редактировать элементы и
70
Основы разработки прикладных решений для 1С: Предприятие 8.1
т.д.) можно и без командной панели, вызывая контекстное меню (рис. 4.16). Однако
работать с командной панелью удобнее.
Рис. 4.16. Форма списка справочника Контрагенты в режиме 1С:Предприятие, контекстное меню
табличного поля ПредставителиКонтрагентов
В режиме конфигурирования разместим на форме элемент управления Командная панель.
Настроим ее в соответствии с табл. 4.5.
Таблица 4.5. Свойства командной панели
Свойство
Значение
Имя
КоманднаяПанельПредставителей
АвтоЗаполнение
Истина (флажок нужно установить)
ИсточникДействий ПредставителиКонтрагентов
На рис. 4.17 вы можете видеть результат добавления командной панели.
4. Лекция: Справочники, конструирование форм
71
Рис. 4.17. Добавление командной панели и настройка ее свойств
В результате теперь, когда мы открываем конфигурацию в режиме 1С:Предприятие и
открываем справочник Контрагенты, при выборе контрагента в нижней части формы
можно просматривать, редактировать и пополнять список его представителей, не переходя
в справочник ПредставителиКонтрагентов, рис. 4.18.
Рис. 4.18. Доработанная форма списка справочника Контрагенты в режиме 1С: Предприятие
72
Основы разработки прикладных решений для 1С: Предприятие 8.1
4.5. Создание дополнительных справочников
Напомним, что этот урок мы начинали с разговора о создании документа
ПоступлениеМатериалов. Для того, чтобы его создать нам понадобится добавить в
систему еще несколько справочников.
Создадим справочник ЕдиницыИзмерения. В таблице 4.6 приведены параметры этого
справочника. Здесь и далее в подобных таблицах приведена информация лишь о тех
параметрах, которые мы изменяем.
Таблица 4.6. Параметры справочника ЕдиницыИзмерения
Вкладка окна редактирования объекта
Параметр
Значение
Основные
Имя
Данные
Длина наименования 100
Формы
Редактирование
ЕдиницыИзмерения
В списке
Для простых справочников, которые содержат немного реквизитов и для которых не
нужно проводить какую-либо обработку данных сразу же после ввода их в форму, можно
задавать вариант редактирования В списке. Он предусматривает редактирование элемента
справочника в форме списка справочника без вызова формы элемента. В этом
справочнике мы планируем использовать реквизит Наименование (напомним, что у
справочников, по умолчанию, есть два реквизита - Код и Наименование, их не нужно
создавать) для хранения названия единицы измерения. Другие реквизиты нам не
понадобятся.
Создадим справочник Номенклатура. (табл. 4.7).
Таблица 4.7. Параметры справочника Номенклатура
Вкладка окна
редактирования объекта
Параметр
Значение
Основные
Имя
Номенклатура
Иерархия
Иерархический
справочник
Истина (флаг установлен)
Данные
Длина наименования
100
Реквизит
ЕдиницаИзмерения
Тип:
СправочникСсылка.ЕдиницыИзмерения
Реквизит Услуга
Тип: Булево
Создадим справочник Подразделения (табл. 4.8).
4. Лекция: Справочники, конструирование форм
73
Таблица 4.8. Параметры справочника Подразделения
Вкладка окна редактирования
объекта
Параметр
Значение
Основные
Имя
Подразделения
Данные
Длина наименования
100
Формы
Редактирование
В списке
Создадим справочник Сотрудники (табл. 4.9),
Таблица 4.9. Параметры справочника Сотрудники
Вкладка окна
редактирования объекта
Параметр
Значение
Основные
Имя
Сотрудники
Данные
Длина наименования
100
Реквизит ФизическоеЛицо
СправочникСсылка.ФизическиеЛица
Реквизит Подразделение
СправочникСсылка.Подразделения
Реквизит
ПриказОПриемеНаРаботу
Строка, длина 50
Логика работы с данным справочником такова. ФизическоеЛицо, данные о котором
хранятся в справочнике ФизическиеЛица, принимается на работу в определенное
подразделение организации, данные об этом фиксируются в справочнике Сотрудники.
Реквизит ПриказОПриемеНаРаботу нужен для хранения данных о приказе, которым
работник был принят на работу (например: Приказ №1 от 01.01.2010).
Доработаем форму элемента справочника таким образом, чтобы его реквизит
Наименование заполнялся автоматически при вводе или изменении данных в полях
ФизическоеЛицо или Подразделение, и, в результате содержал бы текст такого вида:
Фамилия И.О. (Подразделение).
Перейдем на вкладку окна редактирования объекта Формы, нажмем кнопку Открыть в
поле указания формы элемента. В появившемся окне конструктора форм сразу же нажмем
на кнопку Готово. У нас получится автоматически созданная форма такого вида (рис.
4.19).
74
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 4.19. События поля ввода формы элемента справочника Сотрудники
Для того чтобы реализовать необходимую функциональность, нам нужно написать
обработчики соответствующих событий полей ввода Физическое лицо и Подразделение.
В частности, нас интересует событие ПриИзменении. Оно генерируется при изменении
данных, хранящихся в поле. В частности, заполняя эти поля, мы будем подбирать нужные
элементы из справочников, окончание подбора инициирует это событие.
Выделим поле ввода Физическое лицо и в окне его свойств нажмем на кнопку Открыть
в поле ПриИзменении. В модуле формы будет создан обработчик соответствующего
события, рис. 4.20.
Рис. 4.20. Обработчик события поля
Процедура ФизическоеЛицоПриИзменении создается автоматически. Она будет
использоваться в качестве обработчика события в том случае, если будет указана в поле
ПриИзменении. Это уже сделано при ее создании. То есть, другими словами, имя
процедуры значения не имеет. Значение имеет то, что эта процедура будет указана в поле
ПриИзменении окна свойств поля ввода Физическое лицо. Не каждая процедура может
4. Лекция: Справочники, конструирование форм
75
быть выбрана в качестве обработчика события. В частности, в нашем случае процедура
должна иметь один параметр.
Приступим к написанию текста процедуры. Он будет таким:
Наименование = ФизическоеЛицо.Наименование +"
("+Подразделение.Наименование+")";
Здесь Наименование соответствует реквизиту Данные поля с именем Наименование. Мы
можем обращаться к нему напрямую, записывая данные, которые отобразятся в поле
Наименование.
ФизическоеЛицо.Наименование дает нам доступ к реквизиту Наименование элемента
справочника ФизическиеЛица, подобранного в поле ФизическоеЛицо. Аналогично, код
Подразделение.Наименование позволяет работать с реквизитом Наименование элемента
справочника Подразделения, который подобран в поле Подразделение. Здесь, опять же,
мы обращаемся не к элементу управления (то есть - не к полю), а к данным, которые оно
содержит и которые задаются его свойством Данные.
Знак "+" используется для конкатенации (связывания) строк. Символы, заключенные в
кавычки интерпретируются системой как текст.
При наборе текста работают подсказки. Например, на рис. 4.21 вы можете видеть окно
редактора кода в ходе набора текста. После того, как мы ставим точку, набрав
ФизическоеЛицо, выдается справка. Нужное свойство (или метод, то есть - функцию)
можно выбрать из выведенного списка нажав клавишу Enter, когда оно будет выделено,
или щелкнув по нему мышью, можно и проигнорировать подсказку, просто продолжив
набор с клавиатуры.
Рис. 4.21. Помощь при наборе текста модуля
Для того, чтобы получить справку по коду, можно воспользоваться функцией вызова так
называемого Синтакс-помощника из окна редактирования модуля. Для того чтобы
76
Основы разработки прикладных решений для 1С: Предприятие 8.1
получить такую справку, нужно установить курсор в интересующий нас участок текста и
нажать сочетание клавиш Ctrl + F1. Например, установим курсор на слово Процедура и
нажмем Ctrl + F1. Откроется окно со справочной информацией (рис. 4.22).
Рис. 4.22. Синтакс-помощник
Создадим обработчик события ПриИзменении для поля Подразделение. Он будет таким
же точно, каким был текст обработчика аналогичного события для поля Физическое
лицо, рис. 4.23.
Рис. 4.23. Тексты процедур обработчиков событий
Это - типичная в программировании ситуация, когда один и тот же код используется в
различных процедурах. Разумно будет вынести его в отдельную процедуру и вызывать эту
процедуру в обработчиках событий. Создадим в модуле новую процедуру, введя с
клавиатуры следующий код (код, находящийся в теле процедуры, можно добавить
копированием из тела одной из других процедур, выделение, копирование, вырезание
текста в редакторе модулей выполняется аналогично подобным операциям в любом
текстовом редакторе):
Процедура СформироватьНаименование ()
Наименование = ФизическоеЛицо.Наименование +
" ("+Подразделение.Наименование+")";
КонецПроцедуры
4. Лекция: Справочники, конструирование форм
77
Для удобства можно разбивать длинные строки кода на несколько строк, мы можем это
сделать, нажав Enter в нужном месте. Не следует разрывать переносом строки участки
кода, заключенные в кавычки - при попытке сохранения такого кода мы получим
сообщение об ошибке.
Одно из преимуществ выделения в отдельную процедуру одинакового кода,
используемого в различных участках программы, заключается в том, что при
необходимости внести изменения в этот код их можно внести лишь в общей процедуре.
Например, если мы решим изменить способ формирования поля Наименование, мы
можем внести изменения лишь в код процедуры СформироватьНаименование.
На рис. 4.24 вы можете видеть итоговый вариант кода модуля.
Рис. 4.24. Тексты процедур обработчиков событий
Проверим в режиме 1С:Предприятие работу только что созданного механизма. На
практике работоспособность кода проверяют обычно не только в самом конце работы над
ним, но и в процессе работы для того, чтобы убедиться в правильности хода разработки.
Создадим новый элемент справочника Сотрудники, и, заполняя его, заполним, выбором
из справочника ФизическиеЛица поле Физическое лицо. Так как поле Подразделение
пока пустое, в поле Наименование отобразится текст вида Фамилия И.О. (), рис. 4.25.
78
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 4.25. Создание элемента справочника Сотрудники
Выбрав подразделение, в котором работает сотрудник, мы снова инициируем процедуру
формирования наименования. После заполнения всех полей нажмем на кнопку ОК и
получим новый элемент справочника (рис. 4.26).
Рис. 4.26. Созданный элемент справочника Сотрудники
Выполним еще одну модификацию формы элемента справочника Сотрудники. Можно
заметить, что пользователь может свободно редактировать поле Наименование. То есть,
он вполне может, после того, как поле заполнено автоматически, изменить его
содержимое, нарушив желаемый шаблон заполнения. Для того, чтобы запретить
пользователю менять содержимое поля, можно отредактировать свойство поля
Доступность, сняв флаг, установленный по умолчанию, что сделает его недоступным для
редактирования.
Мы, однако, пойдем другим путем - отредактируем свойство поля программно. Для этого
перейдем в редактор модуля формы и, нажав на кнопку Процедуры и функции, которая
расположена на панели управления в верхней части окна программы, выберем в
появившемся окне (рис. 4.27) <ПриОткрытии> и нажмем на кнопку Перейти (или
подтвердим выбор двойным щелчком мыши).
4. Лекция: Справочники, конструирование форм
79
Рис. 4.27. Создание обработчика события формы ПриОткрытии
Обработчик события ПриОткрытии выполняется при открытии формы, до ее показа
пользователю, здесь можно настроить свойства элементов управления. Свойства
элементов управления можно настраивать и после того, как форма отображена.
Внесем в тело обработчика такой код:
ЭлементыФормы.Наименование.Доступность=Ложь;
Свойство формы ЭлементыФормы дает доступ к коллекции элементов управления,
расположенных на форме. При наборе этого текста действуют подсказки.
На рис. 4.28 вы можете видеть готовый текст обработчика.
Рис. 4.28. Текст обработчика события формы ПриОткрытии
80
Основы разработки прикладных решений для 1С: Предприятие 8.1
Испытаем созданный механизм - при создании нового элемента справочника (или при
открытии для редактирования уже существующего элемента) поле Наименование
оказывается заблокированным для изменений пользователем, но в нем по-прежнему
можно видеть данные, вносимые программно (рис. 4.29).
Рис. 4.29. Результат изменения свойства поля в обработчике события формы ПриОткрытии
4.6. Выводы
Напомним, что в начале этой лекции мы собирались создать документ
ПоступлениеМатериалов. Для того чтобы этот документ создать, нам понадобилось
добавить в систему несколько новых справочников, настроить их. Сейчас все готово для
того, чтобы начать работу над документом - в следующей лекции мы этим займемся.
5. Лекция: Документы, регистры накопления
81
5. Лекция: Документы, регистры
накопления
Лекция посвящена документам, регистрам накопления и настройке проведения документа.
Содержание лекции
5.1. Создание документа
5.2. Регистры накопления
5.3. Настройка проведения документа
5.4. Выводы
Цель лекции: научиться создавать документы и настраивать проведение документов по
регистрам накопления.
5.1. Создание документа
Напомним, что в предыдущей лекции мы собирались создать документ
ПоступлениеМатериалов, который планировалось использовать для отражения в
учетной системе факта поступления материалов.
Добавим новый документ в ветви дерева конфигурации Документы. Откроется окно
редактирования объекта, рис. 5.1.
Рис. 5.1. Вкладка Основные окна редактирования свойств документа
82
Основы разработки прикладных решений для 1С: Предприятие 8.1
Как видите, вкладка Основные похожа на такую же вкладку у справочников. Здесь мы,
как обычно, вводим имя, синоним и комментарий. Вкладка Данные предназначена для
настройки реквизитов документа. Добавим следующие реквизиты, табл. 5.1.
Таблица 5.1. Реквизиты документа ПоступлениеМатериалов
Имя реквизита
Контрагент
Параметры
типа
Тип
СправочникСсылка.Контрагенты
ПредставительКонтрагента СправочникСсылка.ПредставителиКонтрагентов
ОтветственныйСотрудник
СправочникСсылка.Сотрудники
СтоимостьМатериалов
Число
Длина 15,
точность 2
На рис. 5.2 вы можете видеть вкладку Данные с заполненными реквизитами.
Рис. 5.2. Вкладка Данные окна редактирования свойств документа
Как мы говорили выше, с помощью этого документа мы собираемся отражать факт
поступления в организацию материалов. Обратите внимание на группу параметров,
5. Лекция: Документы, регистры накопления
83
расположенную в нижней части вкладки Данные. Здесь можно добавлять в документ
табличные части и настраивать их свойства.
Табличную часть можно сравнить с обычной таблицей. Эту таблицу заполняют при
создании документа. На этапе конфигурирования задаются реквизиты табличной части (то
есть - набор колонок, которые входят в состав таблицы), а строки создаются на этапе
работы с программой конечного пользователя.
Мы можем добавлять в документ столько табличных частей, сколько нам нужно. В нашем
случае мы добавим в документ одну табличную часть, которую назовем Материалы. Для
добавления табличной части воспользуемся кнопкой Добавить табличную часть.
После того, как табличная часть добавлена, мы можем добавлять ее реквизиты. При
добавлении реквизитов табличной части их параметры настраиваются аналогично
параметрам обычных реквизитов документа. В таблице 5.2 вы можете видеть список
реквизитов табличной части документа.
Таблица 5.2. Реквизиты табличной части Материалы документа Поступление
Материалов
Имя реквизита
Тип
Параметры типа
Номенклатура
СправочникСсылка.Номенклатура
Цена
Число
Длина 10, точность 2
Количество
Число
Длина 10, точность 3
Сумма
Число
Длина 10, точность 2
На рис. 5.3 вы можете видеть список реквизитов табличной части Материалы и окно
настройки свойств одного из них.
84
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 5.3. Реквизиты табличной части Материалы
Перейдем на вкладку Формы окна настройки объекта. Создадим форму документа, нажав
кнопку Открыть в поле Документа группы параметров Основные формы. Появится
окно конструктора форм (рис. 5.4).
Рис. 5.4. Создание формы документа
Здесь мы оставим всѐ по умолчанию и нажмем на кнопку Далее и попадем в следующее
окно настройки параметров формы документа, рис. 5.5.
5. Лекция: Документы, регистры накопления
85
Рис. 5.5. Выбор элемента управления
Реквизит СтоимостьМатериалов будет содержать итоговую сумму по стоимости каждой
номенклатурной позиции материалов, которые будут добавлены в табличное поле
Материалы. Мы планируем автоматически заполнять этот реквизит после ввода данных в
табличную часть Материалы. Пользователь не должен вручную редактировать этот
параметр.
В предыдущей лекции мы рассматривали вариант ограничения ввода пользователя,
блокируя поле. Можно пойти другим путем - изначально, на этапе использования
Конструктора форм выбрать для отображения реквизита СтоимостьМатериалов
элемент управления, который не предусматривает редактирование данных пользователем.
Это - элемент управления Надпись.
Обратите внимание на то, что документ имеет реквизиты по умолчанию Номер и Дата.
Нажмем кнопку Готово - будет создана форма и открыт редактор форм, рис. 5.6.
86
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 5.6. Форма документа после работы редактора форм
Понятно, что форма требует доработки. В частности, нам обязательно нужно написать
код, который будет поддерживать в актуальном состоянии поле, которое должно
отображать стоимость материалов (сейчас в нем можно видеть текст Надпись7).
Есть ли у нашей формы еще какие-нибудь проблемы, которые нужно решить перед
началом ее практического использования?
Для того, чтобы ответить на этот вопрос, лучше всего уже на данном этапе работы с
формой запустить решение в режиме 1С:Предприятие и попытаться поработать с формой.
Так и поступим.
Поработав с формой в режиме 1С:Предприятие, понимаем, что ей нужны еще некоторые
улучшения.
Перечислим доработки, которые мы планируем выполнить:
1. Автоматическое заполнение поля СтоимостьМатериалов на основании данных,
введенных в табличное поле.
2. Автоматическое заполнение поля Сумма для каждой строки табличного поля.
3. Ограничение списка представителей контрагентов (поле ПредставительКонтрагента) тем
контрагентом, который выбран в поле Контрагент.
Для начала свяжем поле ПредставительКонтрагента с полем Контрагент. Для того,
чтобы в поле ПредставительКонтрагента можно было выбирать лишь тех
представителей, которые соответствуют выбранному контрагенту, нужно настроить связь
5. Лекция: Документы, регистры накопления
87
этих полей. А именно - связь по владельцу. Для этого откроем окно свойств поля ввода
ПредставительКонтрагента и модифицируем его свойство Связь по владельцу,
установив в нем Контрагент (рис. 5.7).
Рис. 5.7. Настройка связи по владельцу
Проверим поведение формы документа после указанной настройки. Можно отметить одну
проблему при использовании полей Контрагент и ПредставительКонтрагента. Опишем
эту проблему. Предположим, у нас есть контрагент А, которому соответствуют
представители кА1 и кА2. Так же имеется контрагент В, которому соответствуют
представители кВ1 и кВ2. В поле Контрагент мы выбрали контрагента А. После этого в
поле ПредставительКонтрагента мы можем выбирать лишь из представителей кА1 и
кА2. Выберем в поле ПредставительКонтрагента представителя кА1. Если теперь в
поле Контрагент выбрать контрагента В, то в поле представителя останется все тот же
кА1. В нашей форме нет механизма, который отслеживал бы правильность заполнения
поля ПредставительКонтрагента при изменении содержимого поля Контрагент.
Для того, чтобы это исправить, нам нужно придумать механизм, который отслеживал бы
правильность заполнения поля ПредставительКонтрагента при смене значения поля
Контрагент. Если при смене контрагента окажется, что новый контрагент не является
владельцем элемента справочника ПредставителиКонтрагентов, выбранного в поле
ПредставительКонтрагент - поле очищается.
Создадим обработчик события ПриИзменении для поля Контрагент. Он будет выглядеть
следующим образом:
88
Основы разработки прикладных решений для 1С: Предприятие 8.1
Процедура КонтрагентПриИзменении(Элемент)
Если Не ПредставительКонтрагента.Пустая() Тогда
Если Контрагент<>ПредставительКонтрагента.Владелец Тогда
ПредставительКонтрагента =
Справочники.ПредставителиКонтрагентов.ПустаяСсылка();
Сообщить("Поле ""Представитель контрагента"" очищено");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В этом коде есть некоторые команды, новые для вас. Рассмотрим их. Управляющая
конструкция Если - Тогда - КонецЕсли позволяет управлять ходом программы. На
обычном языке вышеприведенный код можно описать так:
Если поле ПредставительКонтрагента не пустое, тогда, если в поле Контрагент записан
контрагент, который не является владельцем данных, записанных в поле
ПредставительКонтрагента, очистить поле ПредставительКонтрагента и сообщить об
этом.
Если логическое выражение, которое вычисляется после ключевого слова Если, истинно,
выполняется код, расположенный между Тогда и КонецЕсли. В нашем случае этот код
выполнится только в том случае, если в поле ПредставительКонтрагента что-то есть.
Функция Пустая() возвращает значение Истина, если ссылка (в нашем случае - ссылка на
элемент справочника) не указывает ни на какой объект, то есть ссылка пустая. Если
ссылка не пустая - функция возвращает Ложь. Результат вычисления логического
выражения Не Ложь получается Истина и начинается выполнение кода. Если же ссылка
пустая, ничего модифицировать не нужно и выполнение программы прекращается.
Когда выполнилось первое условие, проверяется второе условие. А именно - если
владелец элемента справочника, ссылка на который соответствует данным, хранящимся в
поле ПредставительКонтрагента, не равен текущему значению поля Контрагент, в
ПредставительКонтрагента записывается пустая ссылка. Так же здесь мы выводим
сообщение Поле "Представитель контрагента" очищено. Двойные кавычки внутри не
случайны - такой прием позволяет вывести кавычки (рис. 5.8) при выводе сообщения.
5. Лекция: Документы, регистры накопления
89
Рис. 5.8. Сообщение, выводимое программой
Как видите, с проблемой взаимосвязи полей Контрагент и Представитель контрагента
мы справились. Но впереди еще одна проблема - автоматический расчет сумм по каждой
номенклатурной позиции, добавленной в табличное поле.
Для того, чтобы система автоматически рассчитывала поле Сумма для каждой
номенклатурной позиции, нам понадобится написать обработчик событий изменений
полей таблицы. А именно - при изменении поля Цена или Количество в поле Сумма
должен подставляться результат умножения цены и количества материалов.
Сразу же можно обратить внимание на то, что код, который будет пересчитывать
значение в поле Сумма будет одинаковым и при изменении поля Цена и при изменении
поля Количество, поэтому его мы сразу вынесем в отдельную процедуру. Создадим эту
процедуру:
Процедура РассчитатьСумму()
ТекущаяСтрока=ЭлементыФормы.Материалы.ТекущиеДанные;
ТекущаяСтрока.Сумма=ТекущаяСтрока.Цена*
ТекущаяСтрока.Количество;
КонецПроцедуры
Свойство табличного поля ТекущиеДанные содержит данные текущей строки. Для
доступа к этим данным мы используем переменную ТекущаяСтрока.
Создадим два обработчика событий для полей ввода Цена и Количество. Они будут
выглядеть так:
90
Основы разработки прикладных решений для 1С: Предприятие 8.1
Процедура МатериалыЦенаПриИзменении(Элемент)
РассчитатьСумму();
КонецПроцедуры
Процедура МатериалыКоличествоПриИзменении(Элемент)
РассчитатьСумму();
КонецПроцедуры
Теперь перейдем к следующему этапу нашей работы - настроим автоматический расчет
поля СтоимостьМатериалов. Для этого создадим обработчик события табличного поля
ПриОкончанииРедактирования и добавим в него команду для расчета значения общей
стоимости материалов:
Процедура МатериалыПриОкончанииРедактирования(Элемент, НоваяСтрока,
ОтменаРедактирования)
СтоимостьМатериалов = Материалы.Итог("Сумма");
КонецПроцедуры
Напомним, что табличная часть, с которой мы работаем, называется Материалы. У
табличных частей есть метод Итог, который возвращает сумму всех строк в колонке,
указанной при его вызове. В нашем случае это - колонка Сумма. В итоге, после каждого
изменения табличного поля итоги будут пересчитаны и внесены в поле, связанное с
данными СтоимостьМатериалов.
Напомним еще раз о пользе синтакс-помощника при работе над кодом. Не забывайте
пользоваться им для того, чтобы лучше разобраться в предложенных фрагментах кода и
узнать что-нибудь новое.
При добавлении новых строк и редактировании существующих наш механизм работает
верно. Но если на данном этапе работы попытаться удалить строку из уже заполненного
табличного поля, окажется, что итоговая сумма не пересчитывается. Для того чтобы
предусмотреть такую ситуацию, добавим в модуль формы обработчик события
ПослеУдаления для табличного поля Материалы:
Процедура МатериалыПослеУдаления(Элемент)
СтоимостьМатериалов = Материалы.Итог("Сумма");
КонецПроцедуры
Теперь можно снова испытать наш документ в режиме 1С:Предприятие и убедиться в том,
что описанные механизмы функционируют (рис. 5.9).
5. Лекция: Документы, регистры накопления
91
Рис. 5.9. Работа с формой документа
Остановимся теперь на некоторых особенностях работы с документами в режиме
1С:Предприятие. А именно, обратите внимание на кнопки ОК и Записать, которые
расположены в нижней части формы. Кнопка Записать приводит к сохранению
информации, введенной в документ (обычно говорят - "к сохранению документа") в
информационной базе. По нажатию на кнопку ОК документ сначала сохраняется в
информационной базе, после чего выполняется его проведение. При проведении документ
вносит изменения в различные регистры, модификация которых при проведении задана на
этапе конфигурирования.
То есть, записанный документ лишь хранит данные, введенные в него, не оказывая
влияния на другие объекты информационной системы, а проведенный документ не только
хранится в базе, но и выполняет изменения в других объектах системы. В частности,
такими объектами служат регистры.
5.2. Регистры накопления
Когда информация, введенная в документ, записана в базу данных, мы уже можем с ней
работать. Например, в течение недели в организацию поступали материалы, каждый раз
это оформлялось с помощью соответствующего документа. Как можно узнать, сколько и
каких материалов имеется в организации? Если информацию о поступивших материалах
хранят лишь документы, то для того, чтобы узнать некие итоговые суммы, придется
сначала собирать данные о материалах, просматривая все документы (или документы за
какой-то период), потом эти данные обрабатывать. Просматривать документы для того,
чтобы получить итоговую информацию о материалах, это слишком медленный процесс.
Гораздо лучше было бы при проведении документа выписывать важнейшие данные этого
документа в какую-нибудь таблицу, работать с которой быстрее и удобнее, чем со
множеством документов. Такие таблицы в 1С:Предприятие называются регистрами.
Выше мы упоминали, что в 1С:Предприятие существуют различные регистры. В
частности, это регистры накопления, регистры сведений, регистры расчета и регистры
бухгалтерии. В данный момент нас интересуют регистры накопления.
92
Основы разработки прикладных решений для 1С: Предприятие 8.1
Создадим новый регистр накопления ОстаткиМатериалов. Окно редактирования
объекта регистра накопления устроено точно так же, как другие подобные окна. На
первой вкладке (рис. 5.10) можно задать имя, синоним, комментарий, и задать очень
важный для регистра накопления параметр - вид регистра.
Рис. 5.10. Создание нового регистра накопления
Существует два вида регистров накопления - регистры остатков и регистры оборотов.
Сейчас нас интересует регистр остатков, который позволит получить остатки по
отдельным материалам на заданную дату.
Перейдем на вкладку Данные. Здесь можно настроить состав измерений, ресурсов и
реквизитов регистра.
Регистр накопления можно представить в виде многомерной системы координат, осями
которой являются измерения, а ресурсы - это данные (числовые), которые хранятся в
узлах этой системы координат. Реквизиты позволяют хранить дополнительную
информацию произвольного типа.
Мы хотели бы получать информацию о количестве и стоимости отдельных видов
материалов по отдельным ответственным сотрудникам.
5. Лекция: Документы, регистры накопления
93
Для этого создадим следующую структуру измерений и ресурсов регистра (табл. 5.3):
Таблица 5.3. Измерения и ресурсы регистра ОстаткиМатериалов
Имя измерения или ресурса
Тип
Параметры типа
Измерение: Номенклатура
СправочникСсылка.Номенклатура
Измерение:
ЦентрОтветственности
СправочникСсылка.Сотрудники
Ресурс: Количество
Число
Длина 10, точность 3
Ресурс: Сумма
Число
Длина 10, точность 2
На рис. 5.11 вы можете видеть вкладку Данные редактируемого регистра накопления.
Рис. 5.11. Состав измерений и ресурсов регистра накопления
Если мы попытаемся на данном этапе работы запустить конфигурацию в режиме
1С:Предприятие - мы получим следующее сообщение об ошибке:
РегистрНакопления.ОстаткиМатериалов:
регистратором для регистра.
Ни
один
из
документов
не
является
Регистры накопления не существуют автономно. С регистром обязательно должен быть
сопоставлен хотя бы один документ-регистратор.
94
Основы разработки прикладных решений для 1С: Предприятие 8.1
5.3. Настройка проведения документа
Данные для хранения в регистры попадают из документов. В регистре накопления
хранятся записи с нужным набором измерений, ресурсов и реквизитов. Каждой записи
соответствует регистратор - документ, который сделал эту запись. Записи в регистры
выполняются при проведении документа. Этот процесс еще называют формированием
движений по регистру.
Для того чтобы назначить документ ПоступлениеМатериалов регистратором для
регистра, пройдем в окно свойств документа, перейдем на вкладку Движения и отметим
регистр накопления ОстаткиМатериалов (рис. 5.12). Сразу после этого станет активна
кнопка Конструктор движений в нижней части формы. Документ можно назначить
регистратором и из формы настройки свойств регистра.
Рис. 5.12. Начало настройки движений документа
Обратите внимание на настройки, которые можно задавать на вкладке Движения.
Проведение. Может принимать значения Разрешить и Запретить. Определяет
возможность проведения документа.
Оперативное проведение. Так же принимает значения Разрешить и Запретить.
Оперативное проведение - это проведение документа в режиме реального времени. При
оперативном проведении документ получает оперативную отметку времени, которая либо
соответствует текущему системному времени, либо превышает его - в том случае, если
другой документ получил оперативную отметку времени, равную текущему системному
времени. В итоге, документы, проведенные в оперативном режиме, выстраиваются в
5. Лекция: Документы, регистры накопления
95
логически верную последовательность, соответствующую последовательности их ввода.
При оперативном проведении документов производится контроль различных параметров
реального времени. Например, если документ, проводимый оперативно, должен
списывать какие-либо материалы, можно осуществить контроль фактического наличия
материалов. Если дата документа отличается от текущей, документ может быть проведен
в неоперативном режиме.
Удаление движений. По умолчанию этот параметр установлен в значение Удалять
движения автоматически. Такая установка позволяет автоматически удалять движения,
сформированные документом ранее, при перепроведении документа или при отмене
проведения. Если вы хотите управлять удалением движений самостоятельно (например,
для того, чтобы ускорить работу системы при перепроведении больших документов), это
свойство можно установить в значение Не удалять движения автоматически, но тогда
удалять ненужные движения придется, используя средства встроенного языка.
Сейчас мы готовы к тому, чтобы настроить процедуру проведения документа. Нажмем на
кнопку Конструктор движений. Появится форма конструктора (рис. 5.13).
Рис. 5.13. Форма конструктора движений
В окне конструктора мы можем выбрать регистр, по которому следует сформировать
движение (в нашем случае - это единственный регистр ОстаткиМатериалов. Параметр
Тип движения регистра может принимать одно из двух значений: Приход или Расход. В
нашем случае здесь нужно оставить значение по умолчанию - то есть - Приход.
Здесь же нужно указать, какие реквизиты документа и реквизиты табличных частей
документа соответствуют измерениям, ресурсам и реквизитам регистра. В нашем случае
документ имеет одну табличную часть Материалы - ее следует указать в поле
Табличная часть.
96
Основы разработки прикладных решений для 1С: Предприятие 8.1
Теперь, если нажать на кнопку Заполнить выражения, конструктор попытается
автоматически сопоставить данные документа и регистра.
Автоматическое заполнение производится, во-первых, с учетом типов, во-вторых, с
учетом названий. На рис. 5.14 вы можете видеть окно конструктора движений после
выбора в поле Табличная часть табличной части Материалы и нажатия на кнопку
Заполнить выражения.
Рис. 5.14. Результаты автоматического заполнения выражений
Автоматическое заполнение сопоставляет документ и регистр, основываясь на именах и
типах параметров. Следует обязательно проверять результаты автоматического
заполнения выражений. В частности, в нашем случае три выражения заполнены верно. А
вот выражение для измерения ЦентрОтветственности, которое, напомним, имеет тип
СправочникСсылка.Сотрудники, осталось незаполненным. Обратите внимание на то,
что система подсказывает, какой именно реквизит документа (или табличной части
документа) подходит к выделенному в таблице полю регистра. В таблице Реквизиты
документа выделяется галочкой тот реквизит, который соответствует выделенному в
таблице полю регистра. Причем, одному и тому же полю регистра могут соответствовать
несколько реквизитов документа.
Выделим поле ЦентрОтветственности. Ему соответствует реквизит документа
ОтветственныйСотрудник. Для того, чтобы подставить реквизит в поле, достаточно
5. Лекция: Документы, регистры накопления
97
сделать по нему двойной щелчок. На рис. 5.15 вы можете видеть результат заполнения
поля ЦентрОтветственности.
Рис. 5.15. Заполнение поля ЦентрОтветственности
В поле ЦентрОтветственности подставлен реквизит документа, а в остальные поля реквизиты табличной части документа. Особенность табличной части заключается в том,
что она может содержать несколько строк с информацией о полученных материалах. Одна
запись соответствует одной строке. Табличная часть обрабатывается построчно, поэтому
мы видим записи такого содержания:
ТекСтрокаМатериалы.Номенклатура
ТекСтрокаМатериалы.Количество
ТекСтрокаМатериалы.Сумма
Сейчас работа с конструктором движений завершена, нажмем на кнопку ОК. Будет
сформирована процедура, которая сработает при проведении документа, рис. 5.16.
98
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 5.16. Процедура ОбработкаПроведения, сформированная автоматически
Ниже приведен текст процедуры:
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную
изменения будут утеряны!!!
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// регистр ОстаткиМатериалов Приход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаМатериалы.Номенклатура;
Движение.ЦентрОтветственности = ОтветственныйСотрудник;
Движение.Количество = ТекСтрокаМатериалы.Количество;
Движение.Сумма = ТекСтрокаМатериалы.Сумма;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Эта процедура расположена в модуле объекта - то есть - документа.
Основой процедуры является цикл:
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
КонецЦикла;
Этот цикл выполняется для каждой строки (на нее ссылается переменная
ТекСтрокаМатериалы) табличной части Материалы. То есть, в цикле последовательно
перебираются все строки табличной части
В теле цикла создается новое движение из коллекции движений документа:
Движение = Движения.ОстаткиМатериалов.Добавить();
5. Лекция: Документы, регистры накопления
99
Далее устанавливается вид движения и заполняются реквизиты движения.
Проверим созданный механизм на практике. В пользовательском режиме создадим новый
документ ПоступлениеМатериалов, заполним табличную часть несколькими строками
материалов. Обратите внимание на то, что регистр ОстаткиМатериалов пуст, рис. 5.17.
Рис. 5.17. Заполненный, но непроведенный документ и регистр накопления
Провести документ можно нажатием на кнопку ОК - тогда он будет сохранен, проведен и
закрыт. Так же можно воспользоваться кнопкой Провести, которая находится на панели
управления документа. Этой кнопкой удобно пользоваться в тех случаях, когда вы хотите
проверить результаты проведения документа и предполагаете, при необходимости,
продолжить заполнение документа или исправить его, и провести снова, или, для отмены
проведения, воспользоваться кнопкой Отмена проведения, которая становится активной
после проведения документа. Обратите внимание на кнопку Перейти на панели
инструментов документа. С ее помощью можно перейти к регистру накопления
ОстаткиМатериалов.
Проведем документ нажатием на кнопку Провести - посмотрим - какие движения он
сформировал и проверим правильность отражения сведений в регистре, рис. 5.18.
100
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 5.18. Проведение документа
В регистре появились записи. Это - записи по приходу материалов (в левой части каждой
строки мы видим знак "+"), регистратором выступает документ, который мы только что
сформировали. Реквизиты Номенклатура, Центр ответственности, Количество,
Сумма, заполнены верно.
5.4. Выводы
Теперь в нашей конфигурации есть документ, который позволяет отражать в учетной
системе поступление материалов, есть механизмы для хранения данных о поступивших
материалах и "инфраструктура" в виде набора справочников. Следующим шагом нашей
работы станет дальнейшее расширение возможностей документа.
6. Лекция: Документы, макеты, журналы документов
101
6. Лекция: Документы, макеты, журналы
документов
Лекция посвящена работе с документами, разработке печатных форм документов, а так же
- журналам документов.
Содержание лекции:
6.1. Разработка печатной формы документа
6.2. Разработка документа ОтпускМатериаловМастеру
6.3. Журнал документов
6.4. Выводы
Цель лекции: научиться разрабатывать печатные формы документов, работать с
журналами документов.
6.1. Разработка печатной формы документа
В предыдущей лекции мы создали документ ПоступлениеМатериалов, который
используется для отражения в учетной системе информации о поступивших материалах.
Работа над документом еще не завершена. В частности, обычно документы имеют не
только электронные, но и печатные представления.
В реальных учетных системах, построенных на базе 1С:Предприятие 8 работа с
некоторыми документами строится следующим образом. Документ заполняют,
сохраняют, распечатывают. После распечатки выполняются какие-либо действия,
предусмотренные документом, на печатной форме документа собираются необходимые
подписи, после чего документ, уже электронный, открывают, проверяют соответствие
электронной и печатной версий и проводят.
Для создания печатной формы документа используют макеты. Макет - это объект
конфигурации, который чаще всего используется для хранения табличных документов, на
основе которых создаются печатные формы. Процесс разработки печатной формы состоит
из двух этапов.
На первом этапе происходит разработка макета. Макеты обычно представляют собой
табличные документы, однако, можно работать с макетами других видов. В табличном
документе задаются именованные области, настраиваются параметры этих областей,
после чего данные области применяют для "сборки" печатной формы документа.
Второй этап разработки печатной формы - это создание программного кода, который на
основе данных документа и макета "собирает" печатную форму.
Разработку печатных форм можно ускорить, воспользовавшись так называемым
конструктором печати. Для этого откроем в конфигураторе окно редактирования
документа ПоступлениеМатериалов, в этом окне выберем вкладку Макеты, на ней
нажмем кнопку Конструкторы, в выпавшем меню выберем пункт Конструктор печати
(рис. 6.1).
102
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 6.1. Вкладка Макеты окна редактирования свойств документа
Появившееся окно конструктора печати, проведет вас через несколько шагов,
необходимых для создания печатной формы. А именно, на первом шаге нужно указать
имя процедуры печати и ее расположение. По умолчанию процедура называется Печать,
расположена она будет в модуле объекта. Укажем модуль формы документа для хранения
процедуры (рис. 6.2) и нажмем на кнопку Далее.
6. Лекция: Документы, макеты, журналы документов
103
Рис. 6.2. Начало работы с конструктором печати
Во втором окне конструктора (рис. 6.3), нам предлагается задать, какие реквизиты
документа попадут в шапку печатной формы, то есть - в ее верхнюю часть.
104
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 6.3. Конструктор печати документа, задание параметров шапки печатной формы
В правой части формы, которая называется Реквизиты документа можно найти список
реквизитов документа, в левой части, которая представляет собой список реквизитов
шапки, отображаются реквизиты документа, перенесенные туда либо двойным щелчком,
либо - с помощью кнопки с изображением стрелки. Для того, чтобы перенести все
реквизиты в шапку - достаточно нажать на кнопку с двумя стрелками. Перенесем в шапку
печатной формы все реквизиты документа кроме реквизита СтоимостьМатериалов. Его
мы прибережем для того, чтобы вывести в подвале - то есть - в нижней части печатной
формы.
Нажав в очередной раз кнопку Далее, мы попадаем в окно конструктора печати, которое
предназначено для настройки вывода в печатную форму табличной части документа.
Логика работы с данным окном ничем не отличается от работы с вышеописанным. На рис.
6.4 вы можете видеть состояние третьего окна конструктора печати после того, как мы
настроили его таким образом, чтобы на печать выводились все доступные реквизиты
табличной части документа.
6. Лекция: Документы, макеты, журналы документов
105
Рис. 6.4. Конструктор печати документа, задание параметров табличной части печатной формы
Следующее, четвертое, окно конструктора, содержит набор полей для вывода в подвале.
Выберем для отображения в подвале реквизит СтоимостьМатериалов.
Очередное нажатие кнопки Далее приводит нас к последнему окну конструктора. Здесь
мы укажем, что хотим, чтобы в форму документа была добавлена кнопка Печать, рис. 6.5.
106
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 6.5. Конструктор печати документа, последнее окно, настройка кнопки вызова процедуры
печати
Кнопка ОК завершает работу конструктора. Сразу после этого на экране будет
отображено окно редактирования макета и окно редактора форм, рис. 6.6.
Рис. 6.6. Редактор форм и редактор макетов
Обратите внимание на то, что на нижней панели управления формы появилась новая
кнопка - Печать. Обратите так же внимание на то, что табличный документ, который
представляет собой макет, разбит на именованные области. Здесь мы можем видеть
области Заголовок, Шапка, МатериалыШапка, Материалы и Подвал. В этих областях
мы можем видеть ячейки, содержащие обычный текст, без каких-либо специальных
6. Лекция: Документы, макеты, журналы документов
107
символов. При выводе именованной области в печатный документ, эти тексты будут
выведены в том виде, в котором они представлены в макете, с использованием того же
форматирования. Если же в макет выводится ячейка, текст в которой обрамлен значками
"<>", в этой ячейке будет выведен какой-либо реквизит документа. В частности, в
угловых скобках в данном случае выводятся параметры для вывода их в ячейках.Имена
параметров совпадают с соответствующими именами реквизитов документа.
То, что вы сейчас узнали, сделает достаточно простым знакомство с процедурой печати,
которая была сформирована автоматически. Напомним, что при работе конструктора
печати мы указали, что хранить эту процедуру следует в модуле формы. Найдем
процедуру в модуле формы (вкладка Модуль). Вот как выглядит текст модуля:
Процедура Печать(Элемент)
//{{_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ(Печать)
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную
изменения будут утеряны!!!
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.ПоступлениеМатериалов.ПолучитьМакет("Печать");
// Заголовок
Область = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Область);
// Шапка
Шапка = Макет.ПолучитьОбласть("Шапка");
Шапка.Параметры.Заполнить(ЭтотОбъект);
ТабДок.Вывести(Шапка);
// Материалы
Область = Макет.ПолучитьОбласть("МатериалыШапка");
ТабДок.Вывести(Область);
ОбластьМатериалы = Макет.ПолучитьОбласть("Материалы");
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
ОбластьМатериалы.Параметры.Заполнить(ТекСтрокаМатериалы);
ТабДок.Вывести(ОбластьМатериалы);
КонецЦикла;
// Подвал
Подвал = Макет.ПолучитьОбласть("Подвал");
Подвал.Параметры.Заполнить(ЭтотОбъект);
ТабДок.Вывести(Подвал);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
//}}_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ
КонецПроцедуры
Поясним программные конструкции, которые были использованы в данной процедуре
ТабДок = Новый ТабличныйДокумент;
В переменную ТабДок записываем ссылку на новый объект типа ТабличныйДокумент.
Это именно тот документ, который, после работы процедуры, будет содержать готовую
печатную форму. Сразу после создания табличный документ не виден пользователю, то
есть все действия, которые мы с ним будем производить дальше, выполняются с
невидимым документом. После завершения программного формирования документа, мы
сделаем его видимым.
108
Основы разработки прикладных решений для 1С: Предприятие 8.1
Макет = Документы.ПоступлениеМатериалов.ПолучитьМакет("Печать");
В переменную Макет записываем ссылку на макет с именем Печать, который
принадлежит нашему документу. Будем использовать эту переменную для доступа к
макету.
// Заголовок
Область = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Область);
В этом участке кода мы сначала получаем именованную область макета, которая носит
имя Заголовок. Фактически, метод ПолучитьОбласть объекта Макет возвращает новый
табличный документ, который представляет собой область, полученную по имени или
другим способом. Ссылка на документ записывается в переменную Область. Используя
метод Вывести объекта ТабДок мы выводим полученную область в наш табличный
документ.
// Шапка
Шапка = Макет.ПолучитьОбласть("Шапка");
Шапка.Параметры.Заполнить(ЭтотОбъект);
ТабДок.Вывести(Шапка);
В заголовке, если посмотреть на макет, есть лишь текст, содержащий название документа
и никаких полей, которые нужно заполнять данными документа. А вот в шапке такие
параметры имеются. Область, соответствующую шапке, мы получаем уже рассмотренным
методом. А вот следующая команда - Шапка.Параметры.Заполнить(ЭтотОбъект);
позволяет заполнить ячейки области, содержащие параметры, реквизитами объекта,
переданного в качестве параметра (в данном случае мы имеем дело с объектом
ЭтотОбъект - он позволят получить тот документ, с которым мы в данный момент
работаем). Соответствия между параметрами и реквизитами документа устанавливаются
по именам. Ячейка, содержащая параметр <Номер> будет заполнена реквизитом
документа с именем Номер и так далее.
// Материалы
Область = Макет.ПолучитьОбласть("МатериалыШапка");
ТабДок.Вывести(Область);
В данном участке кода мы получаем область, соответствующую шапке таблицы и
выводим ее в табличный документ. Далее следует обработка таблицы и ее построчный
вывод:
ОбластьМатериалы = Макет.ПолучитьОбласть("Материалы");
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
ОбластьМатериалы.Параметры.Заполнить(ТекСтрокаМатериалы);
ТабДок.Вывести(ОбластьМатериалы);
КонецЦикла;
Здесь мы видим цикл, который перебирает каждую строку табличной части Материалы.
На основе каждой из строк (переменная ТекСтрокаМатериалы) он заполняет параметры
области Материалы и выводит ее в табличный документ.
6. Лекция: Документы, макеты, журналы документов
109
// Подвал
Подвал = Макет.ПолучитьОбласть("Подвал");
Подвал.Параметры.Заполнить(ЭтотОбъект);
ТабДок.Вывести(Подвал);
Подвал выводится уже знакомым вам образом. Далее настраиваются некоторые свойства
формируемого документа, влияющие на его внешний вид:
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
Здесь отключается отображение сетки, обычной для табличных документов,
устанавливаются в Ложь свойства документа, отвечающие за его защиту и за запрет
редактирования, отключается отображение заголовков, и, после того как все настроено,
табличный документ делается видимым - с помощью метода Показать.
Запустим наше прикладное решение в режиме 1С:Предприятие и посмотрим, как
выглядит печатная форма для какого-нибудь документа, ПоступлениеМатериалов (рис.
6.7).
Рис. 6.7. Сформированная печатная форма документа
Для того чтобы распечатать эту форму, достаточно воспользоваться командой главного
меню программы Файл > Печать.
Выше, говоря об устройстве макета, мы рассмотрели лишь результаты работы
конструктора печати. Вы можете видеть, что то, что получилось на выходе конструктора
печати, позволяет получить вполне стандартно выглядящую печатную форму. Если нам
нужно что-то большее - как в плане внешнего вида формы, так и в плане использования
параметров для ее заполнения, нам нужно будет воспользоваться ручным
редактированием (или созданием с нуля) макетов и модулей печати.
110
Основы разработки прикладных решений для 1С: Предприятие 8.1
На данном этапе не будем больше улучшать и дорабатывать документ
ПоступлениеМатериалов. Займемся еще одним документом нашей конфигурации.
6.2. Разработка документа ОтпускМатериаловМастеру
В соответствии с логикой нашей учетной системы, мы создали документ, который
отражает поступление материалов, которые хранятся у определенного материально
ответственного лица - сотрудника организации. Теперь создадим документ, который
используется для отпуска материалов, вверенных материально-ответственным лицам.
Назовем его ОтпускМатериаловМастеру.
Логика бизнес-процесса организации, который мы собираемся автоматизировать с
помощью данного документа, такова. К сотруднику, за которым закреплены материалы
(назовем его "кладовщик") обращается другой сотрудник (назовем его "мастер"),
которому материалы нужны для проведения каких-либо работ. В заказе мастера есть
количество требуемых материалов. На основании требования мастера, кладовщик должен
передать ему требуемое количество материалов - но не больше, чем за ним числится - и
выдать документ, который содержит информацию о количестве и стоимости выданных
материалов. Если у одного из кладовщиков не хватает материалов для выдачи мастеру он может выполнить заказ в пределах своих возможностей, а мастер, в свою очередь,
может воспользоваться услугами нескольких кладовщиков.
Материалы отпускают по средней стоимости. Наш документ должен иметь печатную
форму, он так же должен проводиться по регистру ОстаткиМатериалов, отражая в нем
факт выбытия материалов.
Документ будет иметь следующие реквизиты, табл. 6.1:
Таблица 6.1. Реквизиты документа ОтпускМатериаловМастеру
Имя реквизита
Тип
ПолучательМатериалов
Параметры типа
СправочникСсылка.Сотрудники
ОтветственныйСотрудник СправочникСсылка.Сотрудники
СтоимостьМатериалов
Число
Длина 15, точность 2
Документ будет иметь табличную часть Материалы, которая будет иметь следующие
реквизиты:
Таблица 6.2. Реквизиты табличной части Материалы документа
ОтпускМатериаловМастеру
Имя реквизита
Тип
Параметры типа
Номенклатура
СправочникСсылка.Номенклатура
Количество
Число
Длина 10, точность 3
Сумма
Число
Длина 10, точность 2
6. Лекция: Документы, макеты, журналы документов
111
Вот как выглядит окно редактирования объекта и форма документа после создания
реквизитов и автоматического создания формы, рис. 6.8. Напомним, что если какие-либо
объекты конфигурации имеют реквизиты, схожие с теми, которые нужны в новых
объектах - их можно копировать - это ускоряет работу.
Рис. 6.8. Документ Отпуск материалов мастеру
Прежде чем заниматься дальнейшей работой над документом, нам нужно
модифицировать регистр накопления ОстаткиМатериалов. А именно, мы введем в него
новый реквизит ОтпущеноМастеру с типом СправочникСсылка.Сотрудники. В этом
реквизите мы будем хранить справочные сведения о том, какому именно сотруднику были
отпущены материалы (рис. 6.9). Запись в этот реквизит будет осуществляться документом
ОтпускМатериаловМастеру.
112
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 6.9. Дополнительный реквизит регистра накопления ОстаткиМатериалов
Не забудем добавить документ ОтпускМатериаловМастеру в список регистраторов
регистра ОстаткиМатериалов, установив галочку напротив наименования документа на
вкладке Регистраторы окна редактирования свойств регистра.
При вводе информации в табличную часть документа, мы будем заполнять лишь
реквизиты Номенклатура и Количество. Сумма для списания будет вычисляться по
нажатию специальной кнопки. В частности, при нажатии на эту кнопку будет
проверяться, достаточно ли материалов каждого вида числится за ответственным лицом,
и, если достаточно - будет рассчитываться средняя стоимость материалов, которые
предполагается списать.
Добавим на командную панель формы новую кнопку. Для этого щелкнем мышью по
схематичному изображению кнопки в правой части командной панели, в появившемся
окне редактирования свойств кнопки введем ее имя - Рассчитать, в поле Действие
нажмем на кнопку Открыть. В модуле формы будет создана процедура, которая будет
выполняться при нажатии на кнопку, рис. 6.10.
6. Лекция: Документы, макеты, журналы документов
113
Рис. 6.10. Добавление и настройка кнопки Рассчитать
Теперь заблокируем поле табличной части Сумма от изменений, установим его свойство
ТолькоПросмотр. Поле мы собираемся рассчитывать по нажатию на кнопку Рассчитать
и заполнять программно.
Если поразмышлять над тем, как реализовать расчет средней стоимости, то, основываясь
на тех знаниях, которые у вас уже есть, можно прийти к выводу о том, что нужно
выполнить следующую последовательность действий:
1. Поочередно перебрать строки табличной части;
2. Получить для номенклатурной позиции, упомянутой в строке, сведения о количестве и
сумме из регистра ОстаткиМатериалов;
3. Вычислить стоимость единицы материала (делением общего суммового остатка на общий
количественный остаток);
4. Вычислить стоимость списываемых материалов;
5. Записать в поле Сумма табличной части результат вычисления.
Пожалуй, из всех вышеперечисленных операций наибольшую сложность для вас может
составить работа с регистром накопления. Напомним, что регистр ОстаткиМатериалов это регистр накопления, вид регистра - Остатки. Для такого регистра можно получить
значение остатков (ресурсов) по выбранным измерениям. Вот как выглядит процедура
расчета средней стоимости материалов, введенных в табличную часть документа
пользователем.
Процедура ДействияФормыРассчитать(Кнопка)
ОстМатериалов=РегистрыНакопления.ОстаткиМатериалов;
Фильтр=Новый Структура;
Фильтр.Вставить("ЦентрОтветственности", ОтветственныйСотрудник);
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
Фильтр.Вставить("Номенклатура",
ТекСтрокаМатериалы.Номенклатура);
ТабОстатков = ОстМатериалов.Остатки(,Фильтр,,);
ТекСтрокаТабОстатков = ТабОстатков.Получить(0);
ТекСтрокаМатериалы.Сумма=(ТекСтрокаТабОстатков.Сумма/ТекСтрокаТабОстат
ков.Количество)
114
Основы разработки прикладных решений для 1С: Предприятие 8.1
*ТекСтрокаМатериалы.Количество;
КонецЦикла;
СтоимостьМатериалов = Материалы.Итог("Сумма");
КонецПроцедуры
Прежде чем рассматривать процедуру, следует дать некоторые пояснения. Здесь мы
пользуемся объектом типа РегистрНакопленияМенеджер, доступ к которому
обеспечивается с помощью свойства глобального контекста РегистрыНакопления. То
есть, другими словами, для того, чтобы получить доступ к регистру накопления
ОстаткиМатериалов, определенному в конфигурации, нам следует обратиться к нему с
помощью конструкции РегистрыНакопления.ОстаткиМатериалов. Эта конструкция
имеет тип РегистрНакопленияМенеджер.
У менеджера регистра накопления (ОстМатериалов) есть различные методы, один из
которых - а именно - Остатки() - предназначен для получения остатков. Причем, полный
вызов этого метода выглядит так:
Остатки(<Момент времени>, <Отбор>, <Измерения>, <Ресурсы>)
Нас, в данном случае, интересует получение текущих остатков, то есть, остатков на
наибольшую дату движения регистра. Поэтому параметр Момент времени мы не
используем. Параметры Измерения и Ресурсы мы так же не используем - нам нужно
получить остатки по всем измерениям и ресурсам в рамках, заданных параметром Отбор.
Параметр Отбор для нас важен, так как мы собираемся получать данные об одном из
видов номенклатуры, числящемся за материально ответственным лицом. Параметр Отбор
имеет тип Структура. Структура - это набор ключей и соответствующих им значений. В
нашем случае структура должна содержать имена измерений регистра, по которым мы
хотим получить остатки, и значения, которые нужно отобрать среди указанных
измерений. Имена задаются в виде строк, значения имеют тот же тип, что и тип
соответствующих измерений.
Данные, полученные из регистра накопления, собраны в таблице значений. Это - таблица,
которая имеет несколько строк (в нашем случае это одна строка, нумерация строк
начинается с 0) и столбцов. Имена столбцов соответствуют данным, которые хранятся в
таблице. В нашем случае таблица будет, кроме прочих, иметь столбцы Сумма и
Количество, которые и хранят нужные нам данные.
Теперь рассмотрим процедуру.
ОстМатериалов=РегистрыНакопления.ОстаткиМатериалов;
Записываем в переменную
ОстаткиМатериалов.
ОстМатериалов
ссылку
на
менеджер
регистра
Фильтр=Новый Структура;
В переменную Фильтр запишем ссылку на только что созданную пустую структуру.
Фильтр.Вставить("ЦентрОтветственности", ОтветственныйСотрудник);
6. Лекция: Документы, макеты, журналы документов
115
Мы планируем получать остатки различных материалов по одному ответственному
сотруднику, который указан в шапке документа. Поэтому сразу же вставляем в структуру
пару - ключ - "ЦентрОтветственности", значение - ОтветственныйСотрудник.
Обратите внимание на то, что остальные операции процедуры выполняются в цикле.
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
Открываем цикл перебора строк табличной части Материалы, записывая ссылку на
текущую строку в переменную ТекСтрокаМатериалы.
Фильтр.Вставить("Номенклатура", ТекСтрокаМатериалы.Номенклатура);
Вставляем в структуру еще одну пару Ключ - Значение. Она будет применяться для
отбора по номенклатуре, указанной в текущей строке табличной части. Метод Вставить у
структур действует следующим образом. Если ключа, указанного при вызове метода, еще
нет в структуре, он создается. Если есть - его значение заменяется на то, которое передано
при вызове метода. Мы вызываем этот метод столько раз, сколько строк есть в табличной
части документа. Получается, что лишь первый вызов создает в структуре ключ
"Номенклатура". Последующие вызовы лишь меняют его значение на номенклатуру,
указанную в строке.
ТабОстатков = ОстМатериалов.Остатки(,Фильтр,,);
В переменную ТабОстатков попадает результат работы метода Остатки(), который
выполняется для регистра накопления ОстаткиМатериалов. В результате в переменной
ТабОстатков окажется таблица значений, состоящая из одной строки, а эта строка будет
содержать значение остатков материалов указанного ранее вида по ответственному
сотруднику.
ТекСтрокаТабОстатков = ТабОстатков.Получить(0);
В переменную ТекСтрокаТабОстатков будет записан результат выполнения метода
таблицы значений Получить(). В качестве параметра ему передается номер строки.
ТекСтрокаМатериалы.Сумма=(ТекСтрокаТабОстатков.Сумма/ТекСтрокаТабОстатков.Кол
ичество)
*ТекСтрокаМатериалы.Количество;
В этом выражении мы сначала получаем среднюю стоимость единицы материалов - делим
сумму стоимостного остатков материалов на количество единиц материала. После этого
умножаем найденную среднюю стоимость на количество материалов, указанное в строке
табличной части и записываем полученное значение в колонку Сумма текущей строки.
КонецЦикла;
Закрываем цикл.
СтоимостьМатериалов = Материалы.Итог("Сумма")
116
Основы разработки прикладных решений для 1С: Предприятие 8.1
Выводим в реквизит шапки документа итоговую стоимость списываемых материалов.
Проверим работу механизма на практике, рис. 6.11.
Рис. 6.11. Проверка правильности работы созданного механизма
На этом мы завершим разработку формы и ее механизмов, хотя, безусловно, здесь можно
сделать еще множество доработок, повышающих удобство работы пользователя,
предотвращающих возникновение ошибок. Вы можете проделать эти работы
самостоятельно.
Напомним, что документ ОтпускМатериаловМастеру пока не формирует движений по
регистру ОстаткиМатериалов. Создадим процедуру проведения документа,
воспользовавшись конструктором движений регистров. Обратите внимание на то, что
документ фиксирует расход материалов (тип движения регистра - Расход). На рис. 6.12 вы
можете видеть форму конструктора движений после заполнения ее параметров.
6. Лекция: Документы, макеты, журналы документов
117
Рис. 6.12. Настройка проведения документа
Процедура, сформированная конструктором, списывает материалы, не обращая внимание
на их фактическое наличие. Реализация механизма контроля возможности проведения
документа в зависимости от фактического наличия материалов, которые нужно списать
этим документом, будет рассмотрена в следующих лекциях.
И, наконец, создадим печатную форму документа, воспользовавшись конструктором
печати. Проверим правильность работы механизмов (рис. 6.13).
Рис. 6.13. Проведение документа по регистру накопления, печатная форма документа
118
Основы разработки прикладных решений для 1С: Предприятие 8.1
После проведения документа в регистре накопления появились движения с видом
движения Расход.
6.3. Журнал документов
В нашей конфигурации теперь два документа, а это значит, что пришло время научиться
пользоваться объектом конфигурации Журнал документов. В журналах документов
обычно собирают документы, относящиеся к какому-то одному направлению
деятельности организации. В итоге, открыв один журнал документов можно быстро
просмотреть все документы по этому направлению. В нашем случае это будет
направление автоматизации работы кладовщиков. Создадим новый журнал документов в
ветви Журналы документов дерева конфигурации. Зададим имя журнала
СкладскиеДокументы.
Перейдем на вкладку Данные окна редактирования свойств журнала. В поле
Регистрируемые документы добавим документы ПоступлениеМатериалов и
ОтпускМатериаловМастеру, рис. 6.14.
Рис. 6.14. Настройка журнала документов
Теперь, если мы откроем конфигурацию в режиме 1С:Предприятие и выполним команду
меню Операции > Документы, в нем появится новый журнал документов Складские
документы. Журнал объединил два вида документов, рис. 6.15.
6. Лекция: Документы, макеты, журналы документов
119
Рис. 6.15. Журнал документов в режиме 1С: Предприятие
Как видите, состав граф журнала предоставляет нам информацию лишь о виде документа,
о дате и о номере. Если есть необходимость в том, чтобы журнал отображал
дополнительные графы, нужно добавить эти графы в конфигураторе и настроить их
состав. Обратите внимание на то, что включать и отключать отображение уже
существующих граф в журнале можно, воспользовавшись командой Настройка списка
меню Действия журнала.
Если попытаться создать новый элемент журнала, нажав на кнопку Добавить в его
командной панели, появится окно Выбор вида документа, в котором будут перечислены
виды документов, входящих в журнал, рис. 6.16.
Рис. 6.16. Выбор вида документа при создании нового документа из окна журнала
Для создания документа, нужно выбрать его вид и нажать кнопку ОК в окне Выбор вида
документа.
Улучшим журнал. Добавим в него две новые графы. Для этого перейдем в режим
конфигурирования, откроем окно редактирования свойств объекта СкладскиеДокументы
на вкладке Данные.
В поле для добавления граф добавим новую графу, в открывшемся окне ее свойств введем
имя - ОтветственныйСотрудник, в поле Ссылки нажмем кнопку с тремя точками появится окно Выбор объекта: Реквизит. В этом окне отметим реквизиты документов,
которые должны отображаться в графе, рис. 6.17.
120
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 6.17. Настройка свойств новой графы журнала документов
В нашем случае выбраны реквизиты ОтветственныйСотрудник. Каждый документ
может отобразить в графе журнала лишь один из своих реквизитов.
Точно так же создадим новую графу с именем СтоимостьМатериалов, настроим
отображение в ней реквизитов документов СтоимостьМатериалов.
На рис. 6.18 представлен измененный журнал в режиме 1С:Предприятие.
Рис. 6.18. Журнал с дополнительными графами
6.4. Выводы
Конфигурация, над которой мы работаем, растет и развивается. Мы создали очередной
документ, разработали журнал документов, познакомились с макетами. В нашей
информационной базе начинают накапливаться данные. Такие данные обычно нуждаются
в визуализации, а это значит, что логичным продолжением нашего курса должна стать
лекция об отчетах. Но отчеты не обходятся без запросов, поэтому следующая лекция
будет посвящена запросам.
7. Лекция: Запросы, обработки
121
7. Лекция: Запросы, обработки
Лекция посвящена работе с запросами, созданию внешних обработок.
Содержание лекции:
7.1. Основные сведения о запросах
o Источники данных для запросов
o Написание текста запроса
o Выполнение запроса и обработка результатов запроса
7.2. Создание внешней обработки КонсольЗапросов
7.3. Изучение конструктора запросов и языка запросов
o Левое внешнее соединение
o Правое внешнее соединение
o Полное внешнее соединение
o Внутреннее соединение
7.4. Выводы
Цель лекции: научиться создавать внешние обработки, изучить основные сведения о
запросах.
7.1. Основные сведения о запросах
Одна из функций учетной системы - предоставление пользователям различной
информации. Как правило, делается это с помощью отчетов. Например, в нашем случае
вполне логично было бы иметь отчет, который выводит информацию о поступивших и
выбывших материалах по отдельным материально-ответственным лицам (а может быть и
по всей организации в целом), а так же - об остатках материалов. Подобная
функциональность - то есть - выборка данных, осуществляется в 1С:Предприятии с
помощью запросов.
Поэтому, прежде чем говорить об отчетах, да и прежде чем продолжать изложение
дальнейших тем, нам необходимо познакомиться с запросами.
Запросы создают с некоторой целью. Например, она может звучать так: "Узнать
количество и стоимость материалов, числящихся за Ивановым И.И.". После того, как цель
запроса сформулирована, нужно выполнить определенные шаги, которые позволяет
получить нужную информацию:
1.
2.
3.
4.
Подобрать подходящие источники данных для запроса;
Составить текст запроса - либо вручную, либо пользуясь конструктором запросов;
Выполнить запрос;
Обработать результаты запроса.
Прежде чем переходить к практической работе с запросами, обсудим общие положения,
важные для дальнейшего понимания материала.
122
Основы разработки прикладных решений для 1С: Предприятие 8.1
Источники данных для запросов
При работе с запросами возникает такое понятие, как источник данных для запроса. То
есть - те места, откуда запрос будет брать данные. Источники данных делятся на две
группы. Первая - это так называемые реальные таблицы. Вторая - виртуальные.
Реальные таблицы называются так потому, что они физически хранятся в базе данных.
Реальные таблицы, в свою очередь, подразделяются на объектные (ссылочные) и
необъектные (не ссылочные).
В объектных таблицах хранятся данные объектов системы, то есть - ссылочных типов
данных. Это - документы, справочники. Эти таблицы имеют поле Ссылка, которое
содержит ссылку на объект, данные которого представлены в таблице.
В необъектных таблицах хранятся данные других типов - например - записи регистров.
Виртуальные таблицы, в отличие от реальных, нигде специально не хранятся. Система
"собирает" эти таблицы из реальных данных, используя одну или несколько реальных
таблиц. При создании виртуальных таблиц их можно параметризовать - то есть - задать
параметры, которые ограничивают отбор данных в эти таблицы. Если вы пользуетесь
виртуальными таблицами (а без них вы вряд ли сможете обойтись, как вы увидите позже),
и вам нужно, чтобы они включали в себя данные, ограниченные некоторым отбором,
нужно выполнять этот отбор, используя параметры виртуальных таблиц. Есть и другие
способы выбора из виртуальных таблиц нужных данных, но они уступают в скорости
работы параметризации этих таблиц.
Поля таблицы могут содержать либо какие-то данные, либо - вложенные таблицы.
Причем, поле таблицы может иметь какой-то один тип, либо - составной тип данных.
Однако, если поле хранит данные, они всегда какого-то одного типа.
Перед созданием запроса, или в процессе создания, нужно определиться с источниками
данных для него. После того, как источники данных определены, следует написать текст
запроса.
Написание текста запроса
Во встроенном языке системы есть объект Запрос. Именно он используется для работы с
запросами. Особенности получения данных определяет текст запроса. Этот текст можно
либо написать вручную, используя конструкции языка, либо воспользоваться так
называемым конструктором запросов. Конструктор запросов позволяет в наглядном виде
настроить запрос, однако, его результатом является точно такой же текст, который пишут
вручную. В запрос можно передавать параметры, делать это нужно до выполнения
запроса.
Выполнение запроса и обработка результатов запроса
После того, как создан текст запроса и в запрос переданы параметры, запрос выполняют.
Результат выполнения запроса выглядит в виде таблицы, содержащей запрошенные
данные. Эту таблицу необходимо обработать и применить полученные данные по
назначению - вывести их в отчет, использовать для проверки каких-либо ограничений и
так далее.
7. Лекция: Запросы, обработки
123
Для того, чтобы начать практическую работу с запросами, мы немного отвлечемся от,
собственно, запросов, и создадим небольшую внешнюю обработку, которая позволит нам
в максимально наглядном виде освоить основы работы с запросами.
7.2. Создание внешней обработки КонсольЗапросов
Внешние отчеты и обработки удобно использовать для того, чтобы выполнять
предусматриваемые ими действия в различных системах. Так же внешние отчеты и
обработки обычно используют для того, чтобы добавить в существующую конфигурацию
какие-то новые возможности, настроить ее под нужды клиента, но при этом не изменять
основную конфигурацию.
Войдем в Конфигуратор и выполним команду Файл > Новый > Внешняя обработка,
рис. 7.1.
Рис. 7.1. Начало создания внешней обработки
Введем в поле имя КонсольЗапросов, для начала редактирования формы обработки
нажмем на кнопку Открыть в поле Основная форма внешней обработки. Появится
окно Конструктор формы обработки, оставим в нем все по умолчанию и нажмем
Готово.
Добавим в форму элемент управления Поле текстового документа, зададим ему имя
ТекстЗапроса, установим в параметре Расширение значение Язык запросов. Добавим в
список реквизитов формы новый реквизит, зададим ему имя ТекстЗапросов и тип
Строка.
124
Основы разработки прикладных решений для 1С: Предприятие 8.1
Это позволит использовать в данном поле, при работе в режиме 1С:Предприятие,
конструктор запросов, синтаксические конструкции языка запросов будут автоматически
выделяться, рис. 7.2.
Рис. 7.2. Добавление в форму внешней обработки поля текстового документа
Поле ТекстЗапроса будет содержать текст запроса, который мы можем либо написать
вручную, либо создать, воспользовавшись конструктором запроса.
Теперь добавим в форму еще один элемент управления - табличное поле. Зададим ему имя
- РезультатВыполненияЗапроса. Так же добавим в форму поясняющие надписи:
"Введите текст запроса" и "Результат выполнения запроса", рис. 7.3.
Рис. 7.3. Добавление в форму внешней обработки табличного поля
В табличное поле мы будем помещать результат выполнения запроса.
Теперь зададим обработчик нажатия кнопки Выполнить. Для этого откроем окно свойств
кнопки и нажмем на кнопку Открыть в поле Действие. Процедура обработчика события
нажатия на кнопку будет выглядеть следующим образом:
7. Лекция: Запросы, обработки
125
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос;
Запрос.Текст=ЭлементыФормы.ТекстЗапроса.ПолучитьТекст();
РезультатВыполненияЗапроса = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.РезультатВыполненияЗапроса.СоздатьКолонки();
КонецПроцедуры
Поясним ее команды. Они, в основном, связаны с новым для вас объектом Запрос.
Запрос = Новый Запрос;
Создаем новый объект типа Запрос, записываем ссылку на него в переменную Запрос.
Запрос.Текст=ЭлементыФормы.ТекстЗапроса.ПолучитьТекст();
Записываем в свойство запроса Текст данные, которые хранятся в поле текстового
документа.
РезультатВыполненияЗапроса = Запрос.Выполнить().Выгрузить();
Помещаем в поле табличного документа РезультатВыполненияЗапроса результат
выполнения запроса. Этот результат получается, во-первых, после использования метода
запроса Выполнить(). Этот метод выполняет запрос, если запрос выбрал какие-то данные
из базы, возвращаемое значение имеет тип РезультатЗапроса. Метод Выгрузить()
выгружает результат запроса в таблицу значений, которая и попадает в поле табличного
документа РезультатВыполненияЗапроса.
ЭлементыФормы.РезультатВыполненияЗапроса.СоздатьКолонки();
Благодаря этой команде в поле РезультатВыполненияЗапроса можно увидеть его
содержимое, иначе оно будет выглядеть пустым.
После того, как создание обработки завершено, сохраним ее командой главного меню
программы Файл > Сохранить.
Файлы внешних обработок имеют расширение *.EPF, рис. 7.4.
126
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 7.4. Сохраняем внешнюю обработку
Запустим систему в режиме 1С:Предприятие. Для того, чтобы работать с внешней
обработкой, нам сначала нужно открыть ее. Для этого воспользуемся командой главного
меню программы Файл > Открыть и с помощью стандартного окна открытия файлов
выберем интересующую нас обработку, рис. 7.5.
Рис. 7.5. Внешняя обработка, открытая в режиме 1С:Предприятие
Сейчас все готово для ваших первых экспериментов с запросами.
7. Лекция: Запросы, обработки
127
7.3. Изучение конструктора запросов и языка запросов
Пожалуй, самый лучший способ изучения языка запросов - это исследование его с
помощью конструктора запросов, а так же самостоятельная ручная модификация
запросов, полученных после работы конструктора. Когда к вам придет достаточно
уверенное понимание языка запросов и его конструкций, от модификации готовых
текстов можно перейти к написанию собственных.
Щелкнем правой кнопкой мыши по свободному пространству в поле ввода текста запроса
в обработке Консоль запросов. В появившемся контекстном меню выберем пункт
Конструктор запроса. Появится соответствующее окно, рис. 7.6.
Рис. 7.6. Конструктор запроса
Конструктором запроса можно пользоваться и в режиме конфигурирования, причем, там
он, преимущественно, и используется при составлении запросов.
Окно конструктора запроса имеет несколько вкладок. Вкладка Таблицы и поля служит
для указания таблиц (реальных и виртуальных), из которых будут отбираться данные, и
конкретных полей этих таблиц, которые и попадут в результаты запроса.
Вкладка Таблицы и поля имеет три области. Область, озаглавленная как База данных
показывает нам набор таблиц, которые имеются в системе. Можно заметить, что эта
область напоминает дерево конфигурации. Группы можно разворачивать, тогда мы
получаем доступ к конкретным таблицам. Как видите, здесь представлена база данных
конфигурации, над которой мы все это время работаем. Развернем несколько
группировок, рис. 7.7.
128
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 7.7. Набор таблиц базы данных
Среди таблиц есть реальные и виртуальные. Например, реальные таблицы - это таблицы
справочников
(ФизическиеЛица,
Номенклатура),
документов
(ПоступлениеМатериалов), регистров накопления (ОстаткиМатериалов). Виртуальные
таблицы в данный момент имеют отношение к регистру накопления
ОстаткиМатериалов. В частности, виртуальная таблица ОстаткиМатериалов.Обороты
предназначена для получения информации об оборотах по регистру. Таблица
ОстаткиМатериалов.Остатки - для получения данных об остатках, таблица
ОстаткиМатериалов.ОстаткиИОбороты, как следует из ее названия, предназначена для
получения и информации об остатках и информации об оборотах.
Рабочая область Таблицы окна Конструктор запроса содержит список таблиц, из
которых система выбирает данные. Этот список формируется переносом нужных таблиц
из рабочей области База данных.
Зададимся следующей целью: нужно сконструировать запрос, который выводит список
фамилий сотрудников, работающих в организации.
Очевидно, что данные для такого запроса будут храниться в справочнике Сотрудники.
Поэтому перенесем таблицу Сотрудники из области База данных в область Таблицы,
рис. и развернем таблицу.
7. Лекция: Запросы, обработки
129
Если вспомнить устройство справочника Сотрудники, то окажется, что один из его
реквизитов имеет тип СправочникСсылка.ФизическиеЛица, именно из этого реквизита
можно "вытащить" фамилию сотрудника. Развернем группировку ФизическоеЛицо,
найдем среди появившихся полей поле Фамилия и перенесем его в рабочую область
Поля, рис. 7.8.
Рис. 7.8. Выбор таблиц и полей
Собственно говоря, запрос, который выполняет вышеописанную задачу, готов. Для того,
чтобы просмотреть текст полученного запроса, не выходя из конструктора запроса, можно
нажать на кнопку Запрос, которая расположена в левом нижнем углу формы
конструктора. Нажмем на эту кнопку, рис. 7.9.
Рис. 7.9. Предварительный просмотр текста запроса
Запрос, который отображается в этом окне, можно отредактировать, нажав на кнопку
командной панели Редактировать запрос, его можно выполнить и посмотреть на
результаты выполнения запроса, нажав на кнопку Выполнить запрос. Команда
выполнения запроса доступна лишь при вызове конструктора запроса в режиме
1С:Предприятие.
Закроем окно предварительного просмотра запроса и нажмем на кнопку ОК в окне
Конструктор запроса.
Как вы уже могли понять, в поле ТекстЗапроса попадет следующий текст:
130
Основы разработки прикладных решений для 1С: Предприятие 8.1
ВЫБРАТЬ
Сотрудники.ФизическоеЛицо.Фамилия
ИЗ
Справочник.Сотрудники КАК Сотрудники
Весь этот текст представляет собой описание запроса. Ключевое слово ВЫБРАТЬ
обязательно должно присутствовать в начале описания. Оно показывает, какие именно
данные должен получать запрос.
Ключевое слово ИЗ позволяет задавать источники данных для запроса. В нашем случае
мы видим здесь следующий текст:
Справочник.Сотрудники КАК Сотрудники
Это
выражение
означает,
что
источником
данных
является
таблица
Справочник.Сотрудники. Для этой таблицы, с помощью ключевого слова КАК задан
псевдоним Сотрудники. Именно по этому псевдониму в рамках запроса осуществляется
обращение к таблице Справочник.Сотрудники.
Вернемся к пояснениям области ВЫБРАТЬ. Здесь имеется следующая команда:
Сотрудники.ФизическоеЛицо.Фамилия
Этой командой мы обращаемся к таблице ФизическоеЛицо, которая хранится в таблице
Сотрудники (напомним, что это - псевдоним) и выбираем из нее фамилию сотрудника.
Полям, которые попадают в выборку данных, создаваемую запросом, так же можно
назначать псевдонимы с помощью ключевого слова КАК.
Если попытаться выразить текст рассматриваемого запроса на естественном языке, то
получится следующее. Нужно выбрать из таблицы Справочник.Сотрудники (которую в
запросе будем называть просто Сотрудники) фамилию сотрудника, которая хранится в
таблице ФизическоеЛицо, соответствующей конкретному сотруднику.
Теперь нажмем на кнопку Выполнить в форме обработки Консоль запросов. Вот, что у
нас получилось, рис. 7.10.
7. Лекция: Запросы, обработки
131
Рис. 7.10. Результат выполнения запроса
Продолжим знакомство с запросами. Решим несколько задач, направленных на получение
данных из нашей базы. Будем писать запросы вручную. К Конструктору запросов мы
еще вернемся, сейчас наша задача - сконцентрировать внимание на текстах запросов,
понять их сущность.
Получим из справочника ЕдиницыИзмерения коды и наименования единиц измерения.
В результатах запроса поле Код должно иметь наименование "Код", поле
"Наименование" - "Название". Справочник ЕдиницыИзмерения нужно представить в
запросе как ТабЕдИзм.
Написание запроса удобно начинать с группы ИЗ. Напишем следующий шаблон:
ВЫБРАТЬ
ИЗ
Справочник.ЕдиницыИзмерения как ТабЕдИзм
После того, как источник данных определен, определяем поля для выбора:
ВЫБРАТЬ
ТабЕдИзм.Код,
ТабЕдИзм.Наименование КАК Название
ИЗ
Справочник.ЕдиницыИзмерения как ТабЕдИзм
Исполним запрос, рис. 7.11.
132
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 7.11. Результат выполнения запроса
Усложним задачу. Результат предыдущего запроса нужно упорядочить по полю
Название.
Для этого в запросе нужно использовать конструкцию УПОРЯДОЧИТЬ ПО. Теперь наш
запрос будет выглядеть так:
ВЫБРАТЬ
ТабЕдИзм.Код,
ТабЕдИзм.Наименование КАК Название
ИЗ
Справочник.ЕдиницыИзмерения как ТабЕдИзм
УПОРЯДОЧИТЬ ПО
Название
На рис. 7.12 вы можете видеть результат выполнения запроса
7. Лекция: Запросы, обработки
133
Рис. 7.12. Результат выполнения запроса
При составлении запроса можно задавать выбор не всех результатов, полученных из базы,
а лишь тех, которые удовлетворяют какому-либо условию. Наиболее простое проявление
этого утверждения - выбор некоторого количества первых элементов результата.
Реализуется это с использованием слова ПЕРВЫЕ с указанием количества отбираемых
элементов. Обратите внимание на то, что элементы выбираются с учетом их
упорядочивания, заданного в запросе.
Выберем первые 2 элемента из результатов, модифицировав предыдущий запрос:
ВЫБРАТЬ ПЕРВЫЕ 2
ТабЕдИзм.Код,
ТабЕдИзм.Наименование КАК Название
ИЗ
Справочник.ЕдиницыИзмерения как ТабЕдИзм
УПОРЯДОЧИТЬ ПО
Название
Выполним запрос (рис. 7.13).
134
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 7.13. Результат выполнения запроса
Для того чтобы в выборку попали лишь различные элементы, можно воспользоваться
ключевым словом РАЗЛИЧНЫЕ после слова ВЫБРАТЬ.
Выше мы делали выборки из неиерархического справочника ЕдиницыИзмерения.
Попробуем теперь поработать с иерархическим справочником. Выберем все элементы из
справочника Номенклатура. Для выбора всех полей можно воспользоваться командой
"*", рис. 7.14.
ВЫБРАТЬ
*
ИЗ
Справочник.Номенклатура
7. Лекция: Запросы, обработки
135
Рис. 7.14. Результат выполнения запроса
Как видите, в результат запроса попали не только элементы справочника (Одеколон,
Стрижка и т.д.), но и группы (Парфюмерия, Парикмахерские услуги). Для того, чтобы
при работе с иерархическим справочником ограничить выбор всеми элементами,
исключая группы, в текст запроса нужно ввести условие отбора. Обратите внимание на
поле ЭтоГруппа, его можно увидеть на рис. 7.14 это поле у обычных элементов
справочника принимает значение ложь, у групп - истина.
Для отбора элементов можно использовать ключевое слово ГДЕ. Оно позволяет задавать
условия отбора. Напишем запрос, который отбирает наименования элементов
справочника Номенклатура, исключая наименования групп (рис. 7.15).
ВЫБРАТЬ
ТабНоменклатура.Наименование
ИЗ
Справочник.Номенклатура КАК ТабНоменклатура
ГДЕ
НЕ ТабНоменклатура.ЭтоГруппа
136
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 7.15. Результат выполнения запроса
Рассмотрим еще один вариант отбора результатов запроса, а заодно еще немного
продвинемся в изучении Конструктора запроса.
Нам нужно отобрать среди документов поступления материалов лишь те, сумма которых
превышает 2000 рублей, и вывести в результаты запроса даты, номера документов, ФИО
материально-ответственного лица, принявшего материалы, а так же сумму документа,
упорядочив выводимые строки по сумме документа.
Откроем Конструктор запроса и на вкладке Таблицы и поля отберем в область
Таблицы таблицу документов ПоступлениеМатериалов, в область Поля перенесем
следующие поля, рис. 7.16:
ПоступлениеМатериалов.Дата
ПоступлениеМатериалов.Номер
ПоступлениеМатериалов.ОтветственныйСотрудник
ПоступлениеМатериалов.СтоимостьМатериалов
Рис. 7.16. Конструктор запроса, вкладка Таблицы и поля
7. Лекция: Запросы, обработки
137
Теперь нам нужно задать условие отбора. Для этого перейдем на вкладку Условия. Здесь
нам нужно перенести поле СтоимостьМатериалов из области Поля в область задания
условий. После этого (рис. 7.17) нужно выбрать условие выбором их списка (мы выбрали
условие "больше") и заменить выражение СтоимостьМатериалов на число 2000.
Рис. 7.17. Конструктор запроса, вкладка Таблицы и поля
Здесь нас подстерегает одна особенность конструктора запросов. Дело в том, что и
выражение СтоимостьМатериалов, и число 2000 он будет воспринимать как имя
переменной, которая должна быть передана в запрос до его исполнения. Нам же нужно,
чтобы 2000 было воспринято именно как число, а не как имя переменной. Для того, чтобы
это сделать, установим галочку в поле Произвольное. Это приведет к тому, что поле
Условие превратится в одну строку, в которой будет написано следующее:
ПоступлениеМатериалов.СтоимостьМатериалов > &2000
Символ & нам не нужен - он, как раз, и даст понять системе, что 2000 - это переменная.
Поэтому мы удалим его вручную, и, в итоге, получим следующий вид вкладки Условие,
рис. 7.18.
Рис. 7.18. Конструктор запроса, вкладка Условия
138
Основы разработки прикладных решений для 1С: Предприятие 8.1
Для того чтобы упорядочить результат запроса по сумме документа, перейдем на вкладку
Порядок, из области Поля добавим в область настройки упорядочивания поле
СтоимостьМатериалов и зададим их упорядочивание, рис. 7.19.
Рис. 7.19. Конструктор запроса, вкладка Порядок
Работа с Конструктором запроса завершена. Нажмем на кнопку ОК, текст запроса
попадет в поле обработки Консоль запросов, нажмем на кнопку Выполнить и убедимся
в том, что запрос выполнен правильно, рис. 7.20.
Рис. 7.20. Текст запроса и результат выполнения запроса
7. Лекция: Запросы, обработки
139
Вот, какой текст сгенерировал Конструктор запроса:
ВЫБРАТЬ
ПоступлениеМатериалов.Дата,
ПоступлениеМатериалов.Номер,
ПоступлениеМатериалов.ОтветственныйСотрудник,
ПоступлениеМатериалов.СтоимостьМатериалов КАК СтоимостьМатериалов
ИЗ
Документ.ПоступлениеМатериалов КАК ПоступлениеМатериалов
ГДЕ
ПоступлениеМатериалов.СтоимостьМатериалов > 2000
УПОРЯДОЧИТЬ ПО
СтоимостьМатериалов
Выше мы занимались получением данных из какой-то одной таблицы. Существует и
другой вариант получения данных - с использованием нескольких таблиц. В целом
порядок работы при использовании в качестве источников нескольких таблиц, как
правило, взаимосвязанных по каким-то признакам, очень похож на работу с отдельными
таблицами. Однако если запрос выбирает данные из нескольких таблиц, нужно настроить
взаимосвязь этих таблиц, а настройка такой взаимосвязи требует, для начала, получения
дополнительных знаний о том, как соединяются результаты запросов по разным таблицам.
Существуют следующие виды соединения таблиц:
1.
2.
3.
4.
Левое внешнее соединение;
Правое внешнее соединение;
Полное внешнее соединение;
Внутреннее соединение;
Рассмотрим эти виды соединения таблиц на примере.
В нашей конфигурации есть два взаимосвязанных справочника. А именно, речь идет о
справочниках Номенклатура и ЕдиницыИзмерения. Элементам справочника
Номенклатура могут быть назначены единицы измерения, взятые из справочника
ЕдиницыИзмерения. Причем, в справочнике Номенклатура могут существовать
элементы, которым не назначена ни одна единица измерения, а в справочнике
ЕдиницыИзмерения могут присутствовать элементы, которые не назначены элементам
справочника Номенклатура. В таблице 7.1 представлена таблица справочника
Номенклатура - наименования номенклатурных позиций и соответствующие им единицы
измерения.
Таблица 7.1. Таблица справочника Номенклатура
Номенклатура
Единица измерения Группа
ложь
Бальзам для волос
Штука
ложь
Духи
Час
ложь
Завивка
Упаковка
ложь
Лак для волос
Упаковка
ложь
Одеколон
истина
Парикмахерские услуги
истина
Парфюмерия
Час
ложь
Стрижка
истина
Уход за волосами
140
Основы разработки прикладных решений для 1С: Предприятие 8.1
Как видите, Бальзам для волос не имеет установленной единицы измерения, остальным
элементам единицы измерения назначены. Группам, естественно, единицы измерения так
же не назначены.
В таблице 7.2 вы можете видеть состав справочника ЕдиницыИзмерения.
Таблица 7.2. Таблица справочника ЕдиницыИзмерения
Единица измерения
Килограмм
Метр
Упаковка
Час
Штука
Левое внешнее соединение
При левом соединении таблиц Номенклатура и ЕдиницыИзмерения в выборку попадут
все записи из справочника Номенклатура и только те записи из справочника
ЕдиницыИзмерения, которые соответствуют условиям соединения. Если записи из
справочника Номенклатура не соответствует ни одна запись из справочника
ЕдиницыИзмерения, поле окажется пустым - в него будет записано значение Null.
Воспользуемся Конструктором запроса для того, чтобы построить запрос по двум
таблицам. На рис. 7.21 вы можете видеть вкладку конструктора Таблицы и поля.
Рис. 7.21. Конструктор запроса, вкладка Таблицы и поля
В область Таблицы добавлены таблицы справочников Номенклатура и
ЕдиницыИзмерения, в область Поля добавлены поля Номенклатура.Наименование и
ЕдиницыИзмерения.Наименование.
Если на вкладке Таблицы и поля задается выборка более чем из одной таблицы, в окне
появляется дополнительная вкладка - Связи. На ней задаются связи между таблицами.
Перейдем на эту вкладку, рис. 7.22.
7. Лекция: Запросы, обработки
141
Рис. 7.22. Конструктор запроса, вкладка Связи
По умолчанию здесь установлен выбор всех элементов справочника Номенклатура и
подбор соответствующих им полей из справочника ЕдиницыИзмерения по следующему
условию:
Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка
То есть - условие предполагает выполнение равенства реквизита ЕдиницаИзмерения
справочника Номенклатура с элементом справочника ЕдиницыИзмерения.
Обратите внимание на поле Все около поля Таблица1, в котором установлена галочка.
Такая настройка соответствует правилам левого внешнего соединения, то есть - в запрос
попадут все данные из Таблицы1 и лишь соответствующие им данные из Таблицы2.
Такое же поле есть и около поля Таблица2. Расстановка галочек в этих полях и
определяет вид соединения таблиц.
Сделаем еще некоторые настройки в Конструкторе запроса. В частности, перейдем на
вкладку Объединения/Псевдонимы, рис. 7.23.
Рис. 7.23. Конструктор запроса, вкладка Объединения/Псевдонимы
Здесь, в поле Имя поля задаются имена полей результатов запроса. Так как поля разных
справочников имеют одинаковые имена (Наименование), здесь мы видим имя
Наименование для справочника Номенклатура и Наименование1 для справочника
ЕдиницыИзмерения. Для удобства работы изменим эти имена, соответственно, на
Номенклатура и ЕдиницаИзмерения, рис. 7.24.
142
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 7.24. Конструктор запроса, вкладка Объединения/Псевдонимы
Теперь настройки Конструктора окончены, нажмем ОК и выполним полученный запрос,
рис. 7.25.
Рис. 7.25. Результат выполнения запроса
Мы получили следующий текст запроса:
ВЫБРАТЬ
Номенклатура.Наименование КАК Номенклатура,
ЕдиницыИзмерения.Наименование КАК ЕдиницаИзмерения
ИЗ
Справочник.Номенклатура КАК Номенклатура
7. Лекция: Запросы, обработки
143
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК
ЕдиницыИзмерения
ПО Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка
Команда ЛЕВОЕ СОЕДИНЕНИЕ задает способ соединения таблиц.
Этот запрос можно интерпретировать так: выбрать все элементы из справочника
Номенклатура и "присоединить" к ним элементы справочника ЕдиницыИзмерения,
соответствующие условию.
Правое внешнее соединение
Правое соединение в точности противоположно левому. Из первой таблицы выбираются
только те строки, которым находятся соответствия во второй таблице. А из второй
выбираются все строки. Вместо "недостающих" строк первой таблицы подставляется
значение Null.
Для того, чтобы модифицировать текст запроса, превратив его из "левого" в "правый",
достаточно заменить ЛЕВОЕ СОЕДИНЕНИЕ на ПРАВОЕ СОЕДИНЕНИЕ. Причем, это
мы сделаем вручную, рис. 7.26.
Рис. 7.26. Результат выполнения запроса
Вот какой текст запроса у нас получился:
144
Основы разработки прикладных решений для 1С: Предприятие 8.1
ВЫБРАТЬ
Номенклатура.Наименование КАК Номенклатура,
ЕдиницыИзмерения.Наименование КАК ЕдиницаИзмерения
ИЗ
Справочник.Номенклатура КАК Номенклатура
ПРАВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК
ЕдиницыИзмерения
ПО Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка
Как видите, таблица ЕдиницыИзмерения представлена здесь в полном объеме, а вот из
таблицы Номенклатура выбраны лишь те позиции, которым назначена единица
измерения.
Если попытаться добиться такого же эффекта с помощью Конструктора запроса, то он,
вместо того, чтобы использовать команду ПРАВОЕ СОЕДИНЕНИЕ, использует ЛЕВОЕ
СОЕДИНЕНИЕ, но при этом изменяет запрос.
На рис. 7.27 вы можете видеть вкладку Связи Конструктора запросов. Здесь мы сняли
галочку из поля Все таблицы Номенклатура и установили ее в поле Все для таблицы
ЕдиницыИзмерения.
Рис. 7.27. Конструктор запроса, вкладка Связи
В итоге мы получаем следующий запрос, сгенерированный автоматически:
ВЫБРАТЬ
Номенклатура.Наименование КАК Номенклатура,
ЕдиницыИзмерения.Наименование КАК ЕдиницаИзмерения
ИЗ
Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка
Выборка осуществляется уже из таблицы ЕдиницыИзмерения, ее элементам
сопоставляются элементы таблицы Номенклатура, для которых выполняется условие
соединения. Эффект от такого запроса точно такой же, рис. 7.28, как и от вышеописанного
запроса с командой ПРАВОЕ СОЕДИНЕНИЕ, которую мы вводили вручную.
7. Лекция: Запросы, обработки
145
Рис. 7.28. Результат выполнения запроса
Полное внешнее соединение
При полном внешнем соединении в результат запроса попадают все поля из таблиц,
участвующих в запросе. В Конструкторе запроса это задается установкой галочек в двух
полях Все на вкладке Связи, рис. 7.29.
Рис. 7.29. Конструктор запроса, вкладка Связи
Текст запроса выглядит следующим образом:
ВЫБРАТЬ
146
Основы разработки прикладных решений для 1С: Предприятие 8.1
Номенклатура.Наименование КАК Номенклатура,
ЕдиницыИзмерения.Наименование КАК ЕдиницаИзмерения
ИЗ
Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО (Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка)
На рис. 7.30 представлен результат выполнения запроса:
Рис. 7.30. Результат выполнения запроса
После того, как мы связывали таблицы правым соединением, наш запрос немного
изменился. Сейчас мы, фактически, выбираем поля из таблицы ЕдиницыИзмерения и
связываем с ними поля таблицы Номенклатура, однако такое изменение на правильность
выполнения запроса не влияет.
Внутреннее соединение
Внутреннее соединение позволяет вывести в результаты запроса только те поля, для
которых справедливо условие соединения. Для того, чтобы его задать, галочки в полях
Все на вкладке Конструктора запросов Связи следует снять, рис. 7.31.
7. Лекция: Запросы, обработки
147
Рис. 7.31. Конструктор запроса, вкладка Связи
Вот какой запрос сгенерировал Конструктор при таких настройках:
ВЫБРАТЬ
Номенклатура.Наименование КАК Номенклатура,
ЕдиницыИзмерения.Наименование КАК ЕдиницаИзмерения
ИЗ
Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО Номенклатура.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка
А вот - результаты запроса, рис. 7.32.
Рис. 7.32. Результат выполнения запроса
7.4. Выводы
Мы не случайно уделили столько внимания запросам. Правильное понимание этого
материала - залог успешного освоения дальнейших тем курса. Запросы - это очень важно,
148
Основы разработки прикладных решений для 1С: Предприятие 8.1
ими мы будем пользоваться на протяжении всего времени обучения программированию
для системы 1С:Предприятие. В следующей лекции мы займемся созданием отчета, и,
кроме того, рассмотрим еще некоторые вопросы, касающиеся конструирования запросов.
8. Лекция: Отчеты
149
8. Лекция: Отчеты
Лекция посвящена работе с отчетами.
Содержание лекции
8.1. Создание отчета
8.2. Выводы
Цель лекции: освоить технологию разработки отчетов.
8.1. Создание отчета
Для создания отчетов в системе 1С:Предприятие используется прикладной объект Отчет.
В рамках использования этого объекта существует несколько способов построения отчета.
В частности, это способ, предусматривающий использование Конструктора выходной
формы. Именно с ним мы познакомимся на данном занятии, рассмотрев простейший
вариант построения отчета.
Мы будем разрабатывать отчет который предназначен для вывода количественного
остатка всех материалов на определенную дату по выбранному ответственному лицу.
Создадим новый объект Отчет, назовем его ОстаткиМатериалов, рис. 8.1.
Рис. 8.1. Начало создания отчета
150
Основы разработки прикладных решений для 1С: Предприятие 8.1
Нажмем на кнопку Действия в форме настройки параметров объекта и выберем пункт
меню Конструкторы > Конструктор выходной формы. В появившемся окне оставим
все по умолчанию и нажмем на кнопку ОК. Появится окно (рис. 8.2), внешне
напоминающее окно Конструктора запросов, но с дополнительными вкладками.
Основная задача, которая сейчас стоит перед нами - создать с помощью Конструктора
запрос, который будет получать нужные нам данные.
Рис. 8.2. Создание запроса
Данные для получения информации об остатках материалов мы будем выбирать из
регистра
ОстаткиМатериалов,
в
частности,
из
виртуальной
таблицы
ОстаткиМатериалов.Остатки. Это означает, что если мы хотим вводить в запрос какиелибо условия отбора данных, делать это нужно в параметрах виртуальной таблицы.
Мы отобрали следующие поля виртуальной таблицы:
ЦентрОтветственности;
Номенклатура;
КоличествоОстаток.
Напомним, нам нужны условия, которые позволят отобрать остатки:
1. На определенную дату;
2. По заданному материально ответственному лицу.
Для того, чтобы задать параметры виртуальной таблицы, выделим ее в области Таблицы
и нажмем на кнопку Параметры виртуальной таблицы в командной панели формы,
вызвав таким образом окно настройки параметров, рис. 8.3.
Рис. 8.3. Окно настройки параметров виртуальной таблицы
В поле Период введем следующий текст: &Дата. Дата - это имя параметра, который
будет устанавливать пользователь перед выполнением запроса.
8. Лекция: Отчеты
151
В поле Условие нажмем кнопку с тремя точками и в появившееся окно ввода условия
(рис. 8.4) введем следующий текст:
ЦентрОтветственности = &Ответственный
Рис. 8.4. Ввод произвольного выражения для поля Условие
Его можно вводить как полностью вручную, так и выбирая доступные поля таблицы и
функции из списков в верхней части окна. Здесь переменная Ответственный так же
будет устанавливаться пользователем перед выполнением запроса и передаваться в
запрос.
Вот как, в итоге, выглядит окно настройки параметров виртуальной таблицы, рис. 8.5.
Рис. 8.5. Окно настройки параметров виртуальной таблицы
Нажмем кнопку ОК, если все введено верно - система не выдаст никаких
предупреждающих сообщений и можно будет переходить к дальнейшей работе над
запросом.
152
Основы разработки прикладных решений для 1С: Предприятие 8.1
Обратите внимание на вычисляемые функции (f(x) ПРЕДСТАВЛЕНИЕ…), которые
автоматически добавляются в раздел Поля при добавлении туда полей, соответствующих
измерениям регистра. Эти функции предназначены для получения строкового
представления данных, они будут использоваться для вывода строковых представлений в
отчет.
Перейдем на вкладку Итоги, рис. 8.6.
Рис. 8.6. Конструктор выходной формы, вкладка Итоги
На этой вкладке укажем в качестве группировочного поля ЦентрОтветственности. Это
улучшает наглядность отчета, не приводя в каждой строке выводимых данных ФИО
сотрудника и наименование подразделения, а выводя их лишь один раз.
Перейдем на вкладку Отчет. Здесь нужно настроить параметры вывода отчета. Мы, для
того, чтобы сделать процесс конструирования отчета максимально наглядным, снимем
галочку в поле Использовать построитель отчета, рис. 8.7. Построитель отчета
расширяет возможности пользователя по работе с запросом, однако, для того, чтобы не
перегружать наш пример, мы в данный момент не будем им пользоваться.
Рис. 8.7. Конструктор выходной формы, вкладка Отчет
Переместимся на вкладку Выходная форма. Здесь нужно задать типы параметров,
которые мы собираемся передавать в отчет, рис. 8.8. Параметру Дата установим тип Дата,
параметру Ответственный - СправочникСсылка.Сотрудники. Это позволит нам
выбирать дату из календаря, а сотрудника, по которому строится отчет, из справочника.
8. Лекция: Отчеты
153
Рис. 8.8. Конструктор выходной формы, вкладка Выходная форма
Работа с Конструктором завершена, нажмем на кнопку ОК. Посмотрим, что создал
конструктор, рис. 8.9.
Рис. 8.9. Результаты работы Конструктора выходной формы
Конструктор создал, во-первых - макет, который будет использоваться для формирования
печатной формы отчета, во-вторых - форму. В верхней части формы находятся поля для
установки параметров отчета, в нижней находится поле, куда, с использованием макета,
будут выведены результаты запроса.
Запрос формируется по нажатию на кнопку Сформировать.
Конструктор, помимо визуальных элементов, генерирует программный код. Его можно
найти в модуле выходной формы, рис. 8.10.
154
Основы разработки прикладных решений для 1С: Предприятие 8.1
Рис. 8.10. Процедуры, сгенерированные Конструктором выходной формы
А
именно,
здесь
мы
видим
две
процедуры.
Одна
из
них
ДействияФормыОстаткиМатериаловСформировать() - это обработчик события нажатия на
кнопку. Вторая - ОстаткиМатериалов() отвечает за формирование отчета. Рассмотирм эти
процедуры подробнее. Для начала - обработчик события.
Процедура ДействияФормыОстаткиМатериаловСформировать(Кнопка)
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ОстаткиМатериалов(ТабДок, Дата, Ответственный);
КонецПроцедуры
В этой процедуре мы сначала присваиваем переменной ТабДок ссылку на поле
табличного документа, расположенное на форме и предназначенное для вывода отчета.
Далее, мы вызываем процедуру ОстаткиМатериалов(), передавая ей в качестве параметров
ссылку на поле табличного документа, а так же - два параметра, которые мы будем
использовать при формировании отчета - это Дата и Ответственный. Эти параметры
нужно предварительно задать в окне формы.
Прежде чем рассматривать процедуру ОстаткиМатериалов(), сделаем в ней одно
исправление. Оно будет касаться приведения даты, переданной в параметре Дата к концу
дня. Дело в том, что если этого не сделать, то в отчет, скажем, за 6 мая, не попадут
данные, сформированные документами за этот день.
Приведение даты к концу дня можно выполнить с помощью функции КонецДня(). Эта
функция возвращает дату и время конца дня для переданной даты.
Найдите такую строку в процедуре ОстаткиМатериалов():
Запрос.УстановитьПараметр("Дата", Дата);
Отредактируйте ее, чтобы она стала выглядеть так:
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Теперь, прежде чем приступить к разбору этой процедуры, давайте проверим, как
работает созданный отчет в режиме 1С:Предприятие. Его можно найти в меню Операции
8. Лекция: Отчеты
155
> Отчет. В открывшейся форме выберем ответственного сотрудника, по которому мы
хотели бы получить данные, укажем дату, на которую нас интересуют остатки и нажмем
на кнопку Сформировать. Вот, что у нас получилось (рис. 8.11).
Рис. 8.11. Отчет Остатки материалов
Здесь видно, что отчет, с точки зрения поставленных перед его созданием целей, выводит
данные верно. Однако внешний вид отчета можно улучшить. В частности, можно
поменять наименования столбцов ЦентрОтветственности и КоличествоОстаток на чтонибудь более благозвучное, уменьшить ширину столбцов и добавить границы ячеек. Все
эти действия можно выполнить в редакторе макета, вводя текст в нужные ячейки и
настраивая их размер и форматирование. Вот как выглядит отчет после исправления
"косметических" недочетов, рис. 8.12.
Рис. 8.12. Отчет Остатки материалов
Теперь переходим к рассмотрению процедуры, ответственной за формирование этого
отчета.
Процедура ОстаткиМатериалов(ТабДок, Дата, Ответственный) Экспорт
Макет = ОтчетОбъект.ПолучитьМакет("ОстаткиМатериалов");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|
ОстаткиМатериаловОстатки.ЦентрОтветственности КАК
ЦентрОтветственности,
156
Основы разработки прикладных решений для 1С: Предприятие 8.1
|
ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.ЦентрОтветственности),
|
ОстаткиМатериаловОстатки.Номенклатура,
|
ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.Номенклатура),
|
ОстаткиМатериаловОстатки.КоличествоОстаток
|ИЗ
|
РегистрНакопления.ОстаткиМатериалов.Остатки(&Дата,
ЦентрОтветственности = &Ответственный)
КАК ОстаткиМатериаловОстатки
|ИТОГИ ПО
|
ЦентрОтветственности";
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Запрос.УстановитьПараметр("Ответственный", Ответственный);
Результат = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьЦентрОтветственности =
Макет.ПолучитьОбласть("ЦентрОтветственности");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаЦентрОтветственности =
Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаЦентрОтветственности.Следующий() Цикл
ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветствен
ности);
ТабДок.Вывести(ОбластьЦентрОтветственности,
ВыборкаЦентрОтветственности.Уровень());
ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей,
ВыборкаДетали.Уровень());
КонецЦикла;
КонецЦикла;
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
КонецПроцедуры
Приступим к разбору тех частей этой процедуры, которые являются для вас новыми. Так,
обратите внимание на то, что каждая новая строка текста запроса начинается с
вертикальной черты. Если попытаться ввести текст запроса в код модуля, не разбив его
таким образом - система выдаст ошибку.
8. Лекция: Отчеты
157
Обратите внимание на блок ИЗ в теле текста запроса:
|ИЗ
|
РегистрНакопления.ОстаткиМатериалов.Остатки(&Дата,
ЦентрОтветственности = &Ответственный) КАК ОстаткиМатериаловОстатки
Именно здесь задаются параметры виртуальной таблицы - Дата и Ответственный.
Причем, просто задать параметры и даже передать их в процедуру, содержащую текст
запроса, недостаточно для того, чтобы они были переданы в запрос. Следующими
командами параметры, переданные в процедуру ОстаткиМатериалов() передаются в
запрос.
Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
Запрос.УстановитьПараметр("Ответственный", Ответственный);
Обратите внимание на то, что параметры в запрос передают после того, как в свойство
запроса Текст записан текст запроса, но до выполнения запроса.
Значительная часть кода процедуры отведена под нужды формирования печатной формы
отчета.
Обратите внимание на следующие команды, одна из которых предшествует командам
вывода данных в табличное поле, а другая находится после завершения вывода, но перед
окончательным отображением таблицы:
ТабДок.НачатьАвтогруппировкуСтрок();
//Команды вывода данных в табличный документ
ТабДок.ЗакончитьАвтогруппировкуСтрок();
После первой команды вывод в поле становится возможен с использованием указания
уровней в команде Вывести. Вторая команда, соответственно, заканчивает работу в таком
режиме.
Уровень записи - это число, которое представляет собой уровень этой записи в иерархии и
группировках.
ВыборкаЦентрОтветственности =
Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Эта команда получает выборку результатов запроса, обходя запрос по группировкам. В
дальнейшем
мы
будем
получать
данные
именно
из
переменной
ВыборкаЦентрОтветственности.
Пока ВыборкаЦентрОтветственности.Следующий() Цикл
Эта команда открывает цикл обхода выборки. Метод Следующий() возвращает Истина,
если в выборке еще есть данные, первый его вызов позиционируется на первый элемент
выборки. После того, как этот метод возвратит Ложь - это будет означать, что
предыдущий вызов метода отработал для последней строки выборки. Первая строка
выборки
(за
счет
использования
выше
команды
158
Основы разработки прикладных решений для 1С: Предприятие 8.1
Выбрать(ОбходРезультатЗапроса.ПоГруппировкам)) получает первую группировку - она
представляет собой данные об ответственном сотруднике, по которому будут
сгруппированы строки с информацией о номенклатуре.
ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности);
ТабДок.Вывести(ОбластьЦентрОтветственности,
ВыборкаЦентрОтветственности.Уровень());
С помощью этих команд заполняются параметры области ОбластьЦентрОтветственности,
область выводится в табличный документ с использованием информации об уровне
записи. В данном случае мы имеем дело с выводом группировки верхнего уровня, метод
Уровень() возвращает 0.
ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();
Этой командой мы получаем из общей выборки детальные данные о номенклатуре и
будем выводить их в отчет, используя переменную ВыборкаДетали.
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей,
ВыборкаДетали.Уровень());
КонецЦикла;
Этим внутренним циклом, который действует аналогично внешнему, мы заполняем те
части отчета, которые имеют отношение к детальной выборке. Метод Уровень() в данном
случае возвращает 1.
8.2. Выводы
В этой лекции мы познакомились с основами построения запросов. Конечно же, наш
разговор о запросах не завершен. Мы продолжим его в следующих частях данного курса.
А сейчас пришло время браться за выполнение практического задания. Для того, чтобы
свериться, вы можете так же скачать файл выгрузки информационной базы (1Cv8.DT).
http://www.intuit.ru/department/se/base1cdev/8/1Cv8.dt
Download