Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
константы и пречисления.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
227.33 Кб
Скачать
  1. Работа со справочниками

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

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

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

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

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

  1. Контекст работы со справочниками

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

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

Пример:

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

Наименование = "Сидоров С.С.";

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

Пример:

* Если в документе значение реквизита "Сотрудники" имеет тип «Справочник», имя сотрудника можно узнать следующим образом:

ИмяСотр = Док.Сотрудники.Наименование;

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

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

Справочник.Имя_Справочника

где <Имя_Справочника> — название справочника, определенное в конфигураторе.

Англоязычный синоним ключевого слова Справочник — Reference. Допускается создавать объект неопределенного вида справочника. В этом случае название конкретного вида справочника в параметре вызова функции СоздатьОбъект опускается. Далее для работы с таким объектом ему надо установить вид справочника при помощи метода Вид.

Пример:

Спр1=СоздатьОбъект("Справочник.Товары");

Спр2=СоздатьОбъект("Справочник.Клиенты");

СпрЗ=СоздатьОбъект("Справочник");

СпрЗ.Вид("Валюты");

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

Замечание. Объект, созданный при помощи функции СоздатьОбъект, изначально не позиционирован, т. е. не указывает на конкретный элемент справочника. Чтобы начать с ним работать, его предварительно надо позиционировать при помощи методов НайтиЭлемент, НайтиПоКоду, ПолучитьЭлемент и т. п.

Пример:

*

//В модуле Формы списков Справочника

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

Наименование = "Администрация";

*

// В модуле Формы элемента справочника или

// В модуле Формы группы справочника

// при редактирования одного элемента справочника

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

Наименование = "Бухгалтерия";

*

// В других программных модулях

Спр = СоздатьОбъект("Справочник.Товары");

Спр.Новый();

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

Спр.Наименование = "Авто-Элемент";

Спр.Код = 1032;

Спр.Размер = 10045;

Спр.Записать();

Работа с объектом "справочник"

Назначение "Справочников"

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

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

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

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

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

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

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

Спр=СоздатьОбъект(«Справочник.НазваниеСправочника»); // создается ссылка на справочник Спр.ИспользоватьДату(<Дата>); // Используется, если есть периодические реквизиты // Используется, если нужно выбрать только элементы, подчиненные владельцу Спр.ИспользоватьВладельца(<Владелец>);

// Используется, если нужно выбрать только элементы, принадлежащие Группе

Спр.ИспользоватьРодителя(<Группа>);

Спр.ВыбратьЭлементы(); // позициирование на элемент справочника

Пока Спр.ПолучитьЭлемент()=1 Цикл // Сообщить(Спр.Код+« »+Спр.Наименование); // Обработка текущего элемента выборки КонецЦикла;

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

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

1 способ

СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрДолж = СоздатьОбъект("Справочник.Должности");

2 способ

СпрСотр = СоздатьОбъект("Справочник");

СпрСотр.Вид("Сотрудники"); СпрДолж = СоздатьОбъект("Справочник");

СпрДолж.Вид("Должности");

Создание и запись нового элемента

СпрСотр.Новый(); СпрСотр.Наименование = "Иванов Иван Иванович"; СпрСотр.Оклад = 5000; СпрСотр.Записать();

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

//например, в приказе об увольнении СпрСотр.НайтиЭлемент(Сотрудник); // Возвращает 1 если найден элемент справочника СпрСотр.НайтиПоКоду(123); // Возвращает 1 если найден код элемента справочника СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович"); СпрСотр.НайтиПоРеквизиту("Оклад", 5000); // Например, поиск элемента справочника по наименованию, если элемент найден, то

// он становится текущим и его можно прочитать так:

Если СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович")=1 Тогда //Возвращает значение элемента справочника (как объект)

НайденныйСотр = СпрСотр.ТекущийЭлемент(); КонецЕсли;

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

СпрСотр.Удалить(1); //непосредственное удаление

СпрСотр.Удалить(0); //пометка на удаление СпрСотр.СнятьПометкуУдаления(); // проверить, помечен ли элемент на удаление

// функция ПометкаУдаления() возвращает 1 - если помечен, 0 - если нет Пометка = СпрСотр.ПометкаУдаления();

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

СпрСотр.ВыбратьЭлементы(); // Перемещаемся на начало справочника (активизируем первый элемент) Пока СпрСотр.ПолучитьЭлемент() = 1 Цикл // Получение элемента справочника //действия с очередным элементом, например Сообщить("Сотрудник " + СпрСотр.Наименование); КонецЦикла;

Значения реквизита (атрибута) справочника

СпрСотр.ВыбратьЭлементы(); // Перемещаемся на начало справочника (активизируем первый элемент) Пока СпрСотр.ПолучитьЭлемент() = 1 Цикл // Получение элемента справочника //действия с очередным элементом, например СпрСотр.УстановитьАтрибут("Оклад","35000") // меняем значение реквизита Оклад на 35000

Сообщить(СпрСотр.ПолучитьАтрибут("Оклад")); // вывод на экран значения реквизита Оклад КонецЦикла

Родитель

Перебор элементов внутри группы. Группа в терминах 1С - это "родитель". .........

СпрСотр.НайтиПоНаименованию("Работающие"); Работающие = СпрСотр.ТекущийЭлемент(); СпрСотр.ИспользоватьРодителя(Работающие); //дальше, например, цикл по сотрудникам СпрСотр.ВыбратьЭлементы(); // Перемещаемся на начало справочника Пока СпрСотр.ПолучитьЭлемент() = 1 Цикл // Получение элемента справочника //действия с очередным элементом, например Сообщить("Сотрудник " + СпрСотр.Наименование); КонецЦикла;

Владелец

Перебор элементов справочника принадлежащих элементу другого справочника. Один справочник подчинен другому справочнику, например спр. НалоговыеЛьготы подчинен спр.Сотрудники.

СпрНЛ = СоздатьОбъект("Справочник.НалоговыеЛьготы"); СпрНЛ.ИспользоватьВладельца(Сотрудники); //дальше, например, цикл по льготам этого сотрудника СпрНЛ.ВыбратьЭлементы(); // Перемещаемся на начало справочника Пока СпрНЛ.ПолучитьЭлемент() = 1 Цикл // Получение элемента справочника //действия с очередным элементом, например Сообщить("Сотрудник " + СпрНЛ.Наименование); КонецЦикла;

Атрибуты и методы контекста модуля формы

Описанные в данной главе атрибуты и методы доступны только в контексте Модуля формы. К Модулям форм относятся практически все программные модули (исключение составляют Глобальный модуль, Модуль документа, Модуль вида расчета).

Атрибуты контекста Модуля формы

СтрокаДействийФормы

Содержит командную строку системных действий в кнопке формы.

Атрибут СтрокаДействийФормы предоставляет доступ к значению командной строки кнопки формы (строка системных команд в свойствах кнопки после символа #). Данный атрибут доступен в процедуре, вызываемой перед знаком # из строки формулы кнопки (кнопка — «Свойства» — «Дополнительные» — «Формула»).

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

Пример:

* Допустим, что в некоторой форме в свойствах какой-либо кнопки записана следующая формула:

УстКоманд() # Записать? Провести? Закрыть?

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

Процедура УстКоманд()

Если НазваниеНабораПрав() = "Продавец" Тогда

СтрокаДействийФормы = "Записать? Закрыть?";

ИначеЕсли НазваниеНабораПрав() = "Менеджер" Тогда

СтрокаДействийФормы = "Записать? Провести? Закрыть?";

Иначе

СтрокаДействийФормы = "Закрыть?";

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

Форма

Объект агрегатного типа «Форма».

Атрибут Форма представляет собой ссылку на объект типа «Форма». Атрибуты и методы объекта «Форма» позволяют в программном модуле изменять свойства визуального отображения диалога в целом (такие как Заголовок, Закладки и т. п.), а также свойства визуального отображения отдельных элементов диалога.

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

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

Пример:

Форма.ТолькоПросмотр(0);

Форма.Prompt.Видимость(0);

Атрибуты объекта Форма

Закладки

Объект типа «СписокЗначений», содержащий описания закладок текущей формы.

Атрибут объекта «Форма» Закладки представляет собой объект типа «СписокЗначений», содержащий описания закладок текущей формы. Данный атрибут предоставляет возможность программно манипулировать порядком и названиями закладок формы. В тексте программного модуля через точку после имени объекта «Форма» можно вызвать атрибут «Закладки», а далее через точку можно вызывать методы управления закладками как объектом типа «СписокЗначений».

Доступ к данному атрибуту возможен только в контексте Модуля формы после применения метода ИспользоватьЗакладки.

Пример:

Процедура ОбработкаКлиектов()

Если ФлагФранчайзи = 1 Тогда

Если Форма.Закладки.НайтиЗначение(2) = 0 Тогда

Форма.Закладки.ДобавитьЗначение(2, "Поставщики");

КонецЕсли;

Иначе

Позиция = Форма.Закладки.НайтиЗначение(2);

Если Позиция > 0 Тогда

Форма.Закладки.УдалитьЗначение(Позиция);

КонецЕсли;

КонецЕсли;

форма.Закладки.Сортировать();

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

<ЭлементДиалога>

Значение атрибута объекта «Форма» <ЭлементДиалога> представляет собой ссылку на элемент диалога. Элементы диалога — это объекты специального агрегатного типа. Методы элементов диалога позволяют в программном модуле изменять их свойства, такие как Цвет, Видимость, Доступность.

В тексте программного модуля через точку после имени объекта «Форма» можно вызвать атрибут <ЭлементДиалога>, а далее через точку можно вызывать методы управления их свойствами. В тексте программного модуля в каче­стве названия данного атрибута подставляется идентификатор конкретного элемента диалога, существующего в диалоговом окне формы.

Пример:

// в форме диалога существуют элементы

// НазвФирмы, ИнформПоле, Название

// Поменяем свойства этих элементов диалога

Форма.НазвФирмы.Доступность(0);

Форма.ИнформПоле.Видимость(0);

Форма.Название.Цвет(255, 0, 0);

Параметр

Параметр, переданный при программном открытии формы.

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

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

Пример:

ПереданныйПараметр = Форма.Параметр;