Лабораторная работа 4. Проектирование и программирование справочников

4.1. Работа со справочником из встроенного языка системы
    4.1.1. Менеджер справочника
    4.1.2. Организация выборки
    4.1.3. Получение ссылки на элемент справочника
    4.1.4. Работа с отдельными записями как с объектами
    4.1.5. Закладка "Прочие" и Модуль объекта
4.2. Предопределенные записи в справочнике
4.3. Работа со справочниками в режиме "1Средприятие"
    4.3.1. Ввод элементов в справочник "Фирмы"
    4.3.2. Ввод элементов в справочник "Подразделения"
    4.3.3. Ввод записей в справочник "Сотрудники"
4.4. Использование языка запросов
4.4.1. Конструктор запросов
4.4.2. Конструктор выходных форм
4.5. Что мы узнали

 

 

4.1. Работа со справочником из встроенного языка системы

4.1.1. Менеджер справочника
4.1.2. Организация выборки
4.1.3. Получение ссылки на элемент справочника
4.1.4. Работа с отдельными записями как с объектами
4.1.5. Закладка "Прочие" и Модуль объекта

Для того чтобы обратиться к справочникам из встроенного языка системы необходимо воспользоваться свойством Справочники глобального контекста. Это свойство имеет тип СправочникиМенеджер.

 

 

4.1.1. Менеджер справочника

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

Такая запись СправочникМенеджер.<Имя справочника> - это менеджер конкретного справочника, который имеет методы:

*       для организации выборки,

*       для поиска отдельных записей,

*       для получения макета,

*       для получения формы справочника,

*       для создания отдельных записей.

 

 

4.1.2. Организация выборки

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

Приведем ряд примеров.

В предыдущем разделе мы с помощью конструктора печати написали в модуле формы списка справочника "Фирмы" процедуру Печать(), в которой цикл выборки выглядит следующим образом:

Процедура Печать(Элемент)
    ……………………
      Выборка = Справочники.Фирмы.Выбрать();
      Пока
Выборка.Следующий() = Истина Цикл
            Объект = Выборка.ПолучитьОбъект();
            Секция = Макет.ПолучитьОбласть("Элемент");
            Секция.Параметры.Код = Объект.Код;
            Секция.Параметры.Наименование = Объект.Наименование;
            ТабДок.Вывести(Секция);
      КонецЦикла;

………………………

Обычно метод .Выбрать() применяют для неиерархических справочников. Если справочник имеет два и более уровня, то в таких случаях лучше применять метод .ВыбратьИерархически(…), поскольку он открывает выборку с учетом иерархии записей.

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

Упражнение №4.1.

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

Откроем модуль основной формы списка справочника "Подразделения" и обратим внимание на цикл выборки из процедуры "Печать":

………………………………………………………………
Выборка = Справочники.Подразделения.ВыбратьИерархически();
Пока
Выборка.Следующий() = Истина Цикл
   
Объект = Выборка.ПолучитьОбъект();
    Если
Объект.ЭтоГруппа = Истина Тогда
       
Секция = Макет.ПолучитьОбласть("Группа");
        Секция.Параметры.Код = Объект.Код;
        Секция.Параметры.Наименование = Объект.Наименование;
        ТабДок.Вывести(Секция);
         Иначе
        Секция = Макет.ПолучитьОбласть("Элемент");
        Секция.Параметры.Код = Объект.Код;
        Секция.Параметры.Наименование = Объект.Наименование;
        ТабДок.Вывести(Секция);
         КонецЕсли;
КонецЦикла;
………………………………………………………………

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

Методов у этого типа данных всего три:

*       Следующий();

*       УровеньВВыборке();

*       ПолучитьОбъект();

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

Метод УровеньВВыборке() имеет смысл применять, если выборка была открыта методом ВыбратьИерархически(…). Номер уровня отсчитывается от 0.

Упражнение №4.2.

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

Удалите комментарии конструктора и исправьте текст процедуры.

 

 

 

4.1.3. Получение ссылки на элемент справочника

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

*       НайтиПоКоду(…);

*       НайтиПоНаименованию(…);

*       НайтиПоРеквизиту(…).

Все эти методы возвращают в качестве значения тип данных СправочникСсылка.<Имя справочника>.

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

 

 

4.1.4. Работа с отдельными записями как с объектами

У объектов типа СправочникСсылка.<Имя справочника> и СправочникВыборка.<Имя справочника> есть метод ПолучитьОбъект(), который позволяет получить доступ к объекту типа СправочникОбъект.<Имя справочника>.

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

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

У объекта типа СправочникМенеджер.<Имя справочника> есть два метода, которые позволяют создавать новые записи в справочнике:

*       СоздатьГруппу();

*       СоздатьЭлемент();

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

При этом процесс создания нового элемента программным путем может выглядеть следующим образом:

НовыйЭлемент=Справочники.Имя.СоздатьЭлемент();
НовыйЭлемент.Код = …;
НовыйЭлемент.Наименование = …;
НовыйЭлемент.… = …;
………………………………………
НовыйЭлемент.Записать();

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


Рис. 4.1. Закладка "Прочие".

Тот же вывод верен и для изменения (модификации) существующих записей.

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

 

 

4.1.5. Закладка "Прочие" и Модуль объекта

Если открыть окно редактирования справочника и выбрать закладку "Прочие" (см. рис. 3.15), то кнопка "Модуль объекта" позволит открыть одноименный модуль.

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

*       ПриУстановкеНовогоКода(<Стандартная обработка>, <Префикс>)

*       ПриКопировании(<Объект копирования>)

*       ОбработкаЗаполнения(<Основание>)

*       ПередЗаписью(<Отказ>)

*       ПриЗаписи(<Отказ>)

*       ПередУдалением(<Отказ>)

Рассмотрим, как это можно делать на следующем примере.

Предположим, что при копировании записи в справочнике "Фирмы" мы хотим, чтобы к наименованию добавлялся бы символ "1". Тогда текст модуля объекта этого справочника будет следующим:

// Модуль объекта справочника "Фирмы"
Процедура ПриКопировании(ОбъектКопирования)
    Наименование = Наименование+"1";
КонецПроцедуры

Упражнение №4.3.

Откройте модуль справочника "Фирмы" и внесите в него текст процедуры ПриКопировании(…).

 

 

4.2. Предопределенные записи в справочнике

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


Рис. 4.2. Окно для редактирования списка предопределенных записей справочника.

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

Упражнение №4.4.

В окне "Предопределенные элементы справочника" для справочника "ОсновныеСредства" выберите пункт меню "Действия – Новая группа Ctrl+F9" и заполните окно "Элемент справочника".

Свойство

Значение

Родитель:

Элементы

Имя:

Компьютеры

Код:

00000001

Наименование:

Компьютеры и оргтехника

Нажмите на кнопку "ОК", чтобы сохранить новую группу в справочнике.

Установите для версии конфигурации значение "1.0.0.7" и обновите ее.


Рис. 4.3. Предопределенная запись.

После выполнения этого упражнения справочник будет содержать группу с кодом "00000001" и наименованием "Компьютеры и оргтехника", которую пользователь не сможет удалить в режиме "1Средприятие".

 

 

4.3. Работа со справочниками в режиме "1Средприятие"

4.3.1. Ввод элементов в справочник "Фирмы"
4.3.2. Ввод элементов в справочник "Подразделения"
4.3.3. Ввод записей в справочник "Сотрудники"

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

Прежде всего, отметим, что в результате установки флажков на закладке "Интерфейсы" в окне редактирования справочника, основной интерфейс конфигурации содержит пункты меню для вызова формы списка справочников "Фирмы","Подразделения","Сотрудники".(см. рис 4.4).


Рис. 4.4. Основной интерфейс конфигурации после создания справочников.

 

 

 

 

4.3.1. Ввод элементов в справочник "Фирмы"

Сначала мы приступим к заполнению справочника "Фирмы".

Упражнение №4.5.

Запустите режим "1Средприятие".

В основном меню программы выберите пункт "Справочники – Фирмы" и заполните справочник следующими значениями:

Код

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

Префикс

1

АО "Альтернатива"

АЛ

2

ЗАО "Бухгалтер"

БХ

Проверьте работу кнопки "Печать".

Если Вы все сделали правильно, то форма списка справочника "Фирмы" в режиме "1Средприятие" будет выглядеть так, как это изображено на рисунке 4.5.


Рис. 4.5. Форма списка справочника "Фирмы" в режиме "1Средприятие".

 

 

4.3.2. Ввод элементов в справочник "Подразделения"

Приступим к заполнению справочника "Подразделения":

Упражнение №4.6.

Откройте форму списка справочника "Подразделения", используя пункт меню "Справочники".

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

Реквизит

Значение

Код:

1

Наименование:

Администрация

Владелец:

АО "Альтернатива"

Родитель:

 -

Нажмите на кнопку "ОК", чтобы сохранить элемент в ИБ.

Введите в справочник следующий элемент:

Реквизит

Значение

Код:

1

Наименование:

Администрация

Владелец:

ЗАО "Бухгалтер"

Родитель:

 -

Нажмите на кнопку "ОК", чтобы сохранить элемент в ИБ.

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

Упражнение №4.7 (продолжение).

В справочнике "Подразделения" установите курсор в строку с ЗАО "Бухгалтер".

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

Введите в справочник следующий элемент:

Реквизит

Значение

Код:

2

Наименование:

Дирекция

Владелец:

ЗАО "Бухгалтер"

Родитель:

Администрация

При выборе Родителя нажмите кнопку F4 и выберите соответствующий элемент (см. рис. 3.20).

Опять нажмите на клавишу Ins и введите новый элемент:

Реквизит

Значение

Код:

3

Наименование:

Секретариат

Владелец:

ЗАО "Бухгалтер"

Родитель:

Администрация

Нажмите на кнопку "ОК", чтобы сохранить элемент в ИБ.

Используя клавишу "Ctrl+Стрелка вверх", вернитесь на первый уровень и введите новый элемент со следующими свойствами:

Реквизит

Значение

Код:

4

Наименование:

Бухгалтерия

Владелец:

ЗАО "Бухгалтер"

Родитель:

 -

Проверьте работу кнопки "Печать".


Рис. 4.6. Использование формы выбора справочника.

 

 

4.3.3. Ввод записей в справочник "Сотрудники"

Записи в этом справочнике могут принадлежать как справочнику "Фирмы", так и справочнику "Подразделения", что определяется содержимым реквизита "Владелец". Этот реквизит имеет так называемый составной тип данных.

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

Упражнение №4.8.

В форме списка справочника "Фирмы" установите курсор на записи "АО "Альтернатива"" и выберите пункт меню "Перейти – Сотрудники".

Введите новый элемент со следующими свойствами:

Реквизит

Значение

Код:

1

Наименование:

Никитина Алла Андреевна

Владелец:

АО "Альтернатива"

Обратите внимание, что реквизит "Владелец" уже заполнен.

Закройте все окна.

Продолжим ввод данных в справочник "Сотрудники". Нажмите на кнопку Ins и введите следующий элемент в справочник:

Реквизит

Значение

Код:

2

Наименование:

Баранов Борис Борисович

Для заполнения поля "Владелец" нажмите в нем на кнопку F4, после чего выберите в диалоге "Выбор типа данных" (см. рис. 4.7) справочник "Подразделения".


Рис. 4.7. Диалог "Выбор типа данных".

По окончании выбора типа еще раз нажмите на кнопку F4, тогда система откроет форму со списком подразделений (см. рис. 4.8).


Рис. 4.8. Форма выбора справочника "Подразделения".

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

 

 

 

 

 

4.4. Использование языка запросов

4.4.1. Конструктор запросов
4.4.2. Конструктор выходных форм

В этом разделе мы рассмотрим использование языка запросов для обращения к данным на примере формирования печатных форм справочников "Фирмы" и "Подразделения

 

4.4.1. Конструктор запросов

В этом разделе мы рассмотрим использование конструктора запросов на примере печати списка записей справочника "Фирмы".

Сначала выполните подготовительные действия самостоятельно.

Упражнение №4.9.

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

Свойство

Значение

Имя:

ПечатьЧерезЗапрос

Тип:

Действие

Действие:

ПечатьЧерезЗапрос

Текст:

Печать через запрос

Подсказка:

Печать через запрос

Пояснение:

Печать через запрос

Отображение:

Надпись

Наберите в модуле следующий текст процедуры:

// Печать списка справочника, используя запрос
Процедура ПечатьЧерезЗапрос(Кнопка)
       Запрос = Новый Запрос();
       Запрос.Текст =
КонецПроцедуры

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

Упражнение №4.10.

Установите курсор в конце строки Запрос.Текст = и нажать на правую кнопку мыши (см. рис. 4.9).


Рис. 4.9. Вызов конструктора запросов.

Сразу после этих действий Конструктор запросит о необходимости создания нового запроса.

В ответ на вопрос "Создать новый запрос?" нажмите на кнопку "Да", для того чтобы Конструктор открыл свое окно (см. рис. 4.10).

Это окно содержит 3 закладок, которые позволяют написать текст запроса визуальным образом.

Как правило, текст запроса начинают формировать с закладки "Таблицы и поля".


Рис. 4.10. Окно конструктора запросов.

На первом этапе Конструктор предложит указать таблицы и поля, которые должен обработать объект Запрос.

Упражнение №4.11 (продолжение).

Используя кнопки ">" в окна диалога Конструктора выберите в качестве полей Код и Наименование из справочника "Фирмы" (см. рис. 4.11.).

Нажмите на кнопку "Вперед>".


Рис. 4.11. Выбор таблиц и полей запросов.

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

Используя кнопки ">" в окна диалога Конструктора выберите в качестве порядка сортировки поле "Код" (см. рис. 4.12).


Рис. 4.12. Выбор порядка расположения записей в запросе.

Нажмите на кнопку "ОК".

Закладку "Итоги" также можно пропустить, т.к. этот справочник не содержит числовых реквизитов.

После завершения упражнения в текст нашей процедуры добавились строки:

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
                | Фирмы.Код КАК Код,
                | Фирмы.Наименование
                |ИЗ
                | Справочник.Фирмы КАК Фирмы
                |
                |УПОРЯДОЧИТЬ ПО
                | Код"

Упражнение №4.12.

Используя полученные ранее знания, доработайте тест процедуры ПечатьЧерезЗапрос(Кнопка) так, чтобы она формировала результирующий табличный документ как и тот, что получается в результате работы процедуры Печать(Элемент).

Проверьте работу обеих кнопок в режиме "1Средприятие".

 

 

4.4.2. Конструктор выходных форм

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

 выходных форм.

Вызвать этот Конструктор можно разными способами. Наиболее простой – из окна "Конфигурация" (см. рис. 4.13).


Рис. 4.13. Вызов Конструктора выходных форм.

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


Рис. 4.14. Выбор места расположения выходной формы.

Упражнение №4.13.

Запустите Конструктор выходных форм для справочника "Подразделения". Укажите на первом этапе для новой выходной формы название – "Подразделения".

Используя кнопки ">" в окна диалога Конструктора выберите в качестве полей: Код, Наименование и Владелец из справочника "Подразделения" (см. рис. 4.15).


Рис. 4.15. Выбор таблиц и полей запросов.

Нажмите на кнопку "Далее>".

Поскольку справочник подчиненный, то на закладке "Группировка" мы укажем в качестве группировки поле "Владелец" из справочника "Подразделение".

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


Рис. 4.16. Выбор группировки.

Переключитесь на закладку "Порядок".

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

На закладке укажите следующий порядок сортировки (см. рис. 4.17).


Рис. 4.17. Выбор порядка сортировки

Перейдите к закладке "Выходная форма".

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

Установите переключатель "Расположение элементов управления" в положение "Новая форма" (см. рис. 4.18).

И нажмите на кнопку "ОК".


Рис. 4.18. Настройка выходной формы.

Итак, выходная форма создана. Теперь необходимо добавить ее вызов из формы списка справочника "Подразделения".

Упражнение №4.14.

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

Перейдите на закладку "Модуль" формы списка. В процедуру СформироватьНажатие(Кнопка) добавим следующий текст:

Процедура СформироватьНажатие(Кнопка)
   
Справочники.Подразделения.ПолучитьФорму("Подразделения",,).Открыть();
КонецПроцедуры

Запустите режим "1Средприятие" и проверьте работу новой кнопки.

 

 

4.5. Что мы узнали

В этой лабораторной работе познакомились с прикладным объектом "Справочник", который предназначен для хранения в ИБ нормативно-справочной информации.

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

"Основные", "Иерархия", "Владельцы", "Данные", "Нумерация", "Формы", "Макеты" и "Интерфейсы".

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

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

Также как и регистр сведений, справочник может иметь дополнительные реквизиты, назначение которых - описывать какие-либо свойства объекта учета. Справочник в системе "1Средприятие 8.0" может иметь несколько табличных частей.

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

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

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