1С:ПРЕДПРИЯТИЕ - Справочники
ЯНГДЮМХЕ ДНЙСЛЕМРНБ НМКЮИМ
дНЙСЛЕМРШ Х АКЮМЙХ НМКЮИМ

нАЯКЕДНБЮРЭ

1С:ПРЕДПРИЯТИЕ - Справочники

экономика



Отправить его в другом документе 1С:ПРЕДПРИЯТИЕ - Справочники Hits:



ДРУГИЕ ДОКУМЕНТЫ

Деньги и денежный рынок. Денежно-кредитная политика
Финансовая отчетность
Глобализация мировой экономики
АНАЛИЗ ИСПОЛЬЗОВАНИЯ МАТЕРИАЛЬНЫХ РЕСУРСОВ
Происхождение денег и развитие товарооборота
стратегии дэйтрейдера в электронной торговле 1
Методы комплексного анализа уровня использования экономического потенциала хозяйствующего субъекта
Рынок капитала. Процентная ставка и инвестиции
 

1С:ПРЕДПРИЯТИЕ - Справочники

Справочники - предназначены для хран 323d39cd ения различных списков, перечней и т. д. Достоинство справочников - наличие неогран 323d39cd иченного количества реквизитов (т. е. возможность хран 323d39cd ения массива информации, а при организации аналитического учета по справочнику возможность получения широкого спектра аналитики через один объект), наличие нескольких уровней. Информация в справочнике может изменяться, а также хран 323d39cd ить историю изменения реквизита справочника.

Для удобства выборки справочники можно сделать многоуровенными и подчиненными другим справочникам. Поиск в многоуровенном справочнике осуществляется либо по полному коду ПолныйКод() или наименованию ПолноеНаименование(), либо по атрибуту Родитель. В многоуровенном справочнике одному значению родительской группы соотносится несколько элементов или подгрупп справочника. Аналогично одному элементу справочника-владельца сопоставляется множество элементов подчиненного справочника. Таким образом эти связи образуют отношения один ко многим. Перед использованием подчиненного справочника сначала должен быть выбран 323d39cd элемент справочника ╚Владелец╩. После этого при включенном режиме ╚Иерархический список╩ в окне подчиненного справочника будут показаны элементы, подчиненные выбран 323d39cd ному элементу справочника ╚Владелец╩.

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



7.1. Предопределенные процедуры модуля формы и модуля формы списка справочника

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

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

ПриВводеСтроки - процедура, которая вызывается в момент ввода новой строки в форме списка справочника.

ПриРедактированииНовойСтроки - процедура, которая вызывается в момент начала редактирования новой строки в форме Списка Справочника (после Отработки Процедуры ПриВводеНовой Строки).


VII.Справочники__________ ______ ____ __________ ______ ____ 61

ПриНачалеРедактированияСтроки - процедура, которая вызывается в момент начала редактирования существующей строки в форме списка справочника.

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

7.2. Атрибуты объекта метаданных типа ╚Справочник╩

Атрибут или Реквизит - это некое хран 323d39cd илище информации определенного типа. Каждый введенный нами реквизит позволит вводить в объект данного вида некоторые значения.

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

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

Атрибут Родитель определен для элементов или групп справочника подчиненных какой-либо группе справочника и возвращает ссылку на неё.. Доступ к значению родительской группы выбран 323d39cd ного элемента справочника осуществляет Метод ИспользоватьРодителя(<Группа >), устанавливающий выборку элементов по группе справочника.

Метод ПринадлежитГруппе(<Группа>) проверяет, принадлежит ли указанной группе текущий элемент справочника (независимо на каком нижележащем уровне он находится). Метод возвращает: 1 - если элемент принадлежит указанной группе , 0 - если нет.

Атрибут Владелец определен для элементов подчиненного справочника и возвращает ссылку на сопряженный элемент справочника владельца. Доступ к владельцу выбран 323d39cd ного элемента справочника в связанном справочнике осуществляет Метод ИспользоватьВладельца(<Элемент>). <Элемент> - это значение элемента связанного справочника, которому подчинен данный


62_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

справочник. Метод устанавливает выборку по элементу связанного справочника и возвращает значение текущего владельца для справочника (на момент до исполнения метода). В контексте Модуля формы списка справочника метод относится ко всему текущему справочнику.

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

Редактирование структуры справочника

Упражнение 5. Создадим два вида справочников: ╚Оборудование╩ и ╚Единицы╩, причем справочник ╚Единицы╩ сделаем подчиненным справочнику ╚Оборудование╩, Справочник ╚Оборудование╩ сделаем иерархическим, и определим в нем периодический реквизит элемента справочника, изменяемый документами ╚Цена╩, реквизит ╚График╩, тип реквизита ≈ Календарь╩, предназначенный для вычисления интервалов времени по различным графикам работы, и реквизит ╚КоэффАморт╩, тип реквизита ≈ Число, а также реквизит группы справочника ╚ГрЦена╩, тип реквизита ≈ Число.

В дереве метаданных выделим ветвь ╚Справочники╩, далее в главном меню выберем пункт ╚Действие╩ и в появившемся подменю пункт ╚Новый элемент╩.


VII Справочники__________ ______ ____ __________ ______ ____ 63

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

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


64_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

способами╩.

По умолчанию справочнику дается идентификатор ╚Новый1╩, изменим его на - ╚Оборудование╩, установим тип кода ≈ ╚Текстовый╩.

Создание нового реквизита

Создание нового реквизита справочника может осуществляться как из дерева метаданных, через контекстное меню конкретного справочника, так и из вышеописанной формы нажатием кнопки ╚Новый╩. При этом на экран 323d39cd е появляется окно палитры свойств - ╚Свойства реквизита╩. В верхней части закладки ╚Общие╩ следует ввести идентификатор нового реквизита. Идентификатор реквизита является некоторым уникальным словом, которое позволит отличить данный реквизит от других реквизитов данного объекта. При создании нового рекви-зита программа сама подставляет идентификатор ╚новый1╩. Целесообразно вводить идентифика-торы, отражающие назначение реквизита. Введем в справочник ╚Оборудование╩ реквизит ╚Цена╩ Тип вводимого реквизита указывается выбором из списка возможных типов в поле ╚Тип значения╩. Стандартными типами являются ╚Число╩, ╚Строка╩, ╚Дата╩. Они позволяют вводить, соответственно, числовое значение, произвольную строку символов или календарную дату. Установим тип значения реквизита ╚Число╩, который располагается вы-ше типа ╚Строка╩.

Для числовых реквизитов, кроме самого типа ╚Число╩, нужно также указать длину и точность (количество знаков после запятой). Обратите вни-мание, что длина числового реквизита указывается с учетом целой части, дробной и десятичной точки, на платформе 7.5 максимальная точность чисел - 5 знаков.


VII. Справочники__________ ______ ____ _____ _______ ______ _______________ 65

на платформе 7.7-9 знаков, максимальная длина чисел -19 знаков. На закладке ╚Дополнительные╩ можно задать разделение представления числа на триады -флажок ╚Разделять триады╩,- которое не влияет на формат хран 323d39cd ения чисел, то есть символ разделителя не включается в длину числа. Полностью данное свойство объекта метаданных можно именовать ╚Разделять триады цифр при показе числового значения объекта метаданных╩. Это свойство доступно для редактирования только для объектов метаданных с типом значения ╚число╩. Если это свойство включено, то при вводе и показе значения объекта метаданных будут автоматически вставляться разделители между тройками цифр, разделяя тысячи, миллионы, миллиарды и так далее. Здесь же можно установить флажок ╚Неотрицательный╩, который не позволит Вам интерактивно ввести отрицательное значение реквизита, причем при вводе отрицательного значения в ╚неотрицательный реквизит╩ система запишет положительное значение.

Укажем для реквизита ╚Цена╩ длину 10 и точность 2, это значит, что максимальное число, которое можно будет ввести в реквизит количество, составит 9999999.99, то есть, в целой части количества мы сможем вводить 10-2-1 = 7 разрядов. При выборе длины и точности нужно ориентироваться на текущие потребности, оценив, какие при-мерно максимальные значения цены и с какой точностью встре-чаются в хозяйственных операциях. В дальнейшем можно легко увеличить и длину, и точность для любого реквизита. Максимальная точность числового значения - 9 знаков.

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

На закладке ╚Дополнительные╩ свойств реквизита установим флажки ╚Неотрицательный╩, ╚Периодический╩, чтобы сохран 323d39cd ялись все значения реквизита с привязкой к дате изменения, и ╚Изменяется документами╩, чтобы


66_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

можно было отслеживать историю изменения значения по документам; флажок ╚Ручное изменение╩ устанавливается системой и служит для обеспечения возможности ручного ввода или изменения значений в истории реквизита.

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

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


V//. Справочники__________ ______ ____ _____ _______ ______ _______________ 67

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

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


68_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

Далее нажмем последовательно кнопки ╚Формы списка╩ и ╚Редактировать╩. Форм списка может быть несколько. Две из них можно определить для просмотра каталога и для подбора значений по умолчанию.



При нажатии на кнопку ╚Открыть╩ списка конструктор предложит нам ввести реквизиты Код, Наименование, ГрЦена, Цена и График. Не забудьте установить флажок ╚Вставить дерево групп╩. Нажмем кнопку ╚Вставить╩ и выбран 323d39cd ные реквизиты будут помещены в форму списка справочника ╚Оборудование╩.


VII. Справочники__________ ______ ____ _____ _______ ______ _______________ ═══ 69

Напомню, что форма включает в себя:

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

и информационных полей (создаем визуальное представление объекта для пользователя);

2. Модуль формы, в который мы помещаем те процедуры и функции, которые

выполняются в момент интерактивного открытия, заполнения, сохран 323d39cd ения и изменения объекта;

3. Табличный шаблон, в котором мы создаем, если это необходимо, шаблон

печатной формы данного объекта.

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

Чтобы можно было установить вручную нужную ширину колонок многострочной части, следует сначала отключить режим автоматического определения ширины колонок (в 7.7 этот режим по умолчанию отключен). Автоматическое определение ширины колонок отключается в палитре свойств многострочной части документа, для этого нужно дважды щелкнуть мышью в многострочную часть. В палитре свойств следует щелкнуть мышью флажок ╚Автоматическая настройка ширины колонок╩ и нажать кнопку ╚ОК╩, чтобы подтвердить произведенные изменения. После этого можно перетаскиванием вертикальных гран 323d39cd иц колонок табличной части установить для них желаемую Ширину. Для перетаскивания гран 323d39cd иц колонок необходимо поместить указатель Мыши над линией, разделяющей колонки в табличной части, чтобы курсор мыши принял соответствующую форму, затем нажать правую кнопу мыши и, не опуская ее, перетащить разделитель колонок в новое место.


70_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

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

Можно изменить порядок следования колонок, перетаскивая их в пределах табличной части. Для перетаскивания колонки её следует выделить, щелкнув мышью в ее заголовок, и переместить указатель мыши, при нажатой левой кнопке, в то место, где должна располагаться колонка, при этом выделенной, т.е. редактируемой, колонкой останется та же колонка по номеру позиции; например, была выделена 5-я колонка и перемещена в 3-ю позицию, но выделенной станет колонка в 5-ой позиции, то есть та, которая была 4-ой.

Упражнение 7. Создайте диалоговую Форму для элементов справочника ╚Оборудование╩.

Редактирование формы в основном выполняется мышью. Основным приемом работы является ╚перетаскивание╩. При перетаскивании щелкают левой кнопкой мыши в элемент, который нужно перетащить и, не отпуская левую кнопку, ведут указатель мыши к тому месту, куда перетаскивается элемент, а затем кнопка мыши отпускается. Все элементы диалога размещаются в пределах шаблона окна диалога. Также можно поместить элемент и вне шаблона, но тогда при работе с диалогом этот элемент будет невиден и недоступен. Сначала отодвинем вниз нижнюю гран 323d39cd ицу диалога. Щелкните мышью в пустое серое простран 323d39cd ство диалога (в любое место). При этом гран 323d39cd ица формы будет выделена пунктирной линией, на которой будут размещены маркеры. Эта линия показывает тот элемент диалога, над которым будут выполняться какие-либо действия. Для изменения вертикального размера диалога нужно перетащить мышью маркер на пунктирной линии обозначающей нижнюю гран 323d39cd ицу диалога. При этом в нижней части диалога образуется пустое место. Теперь нужно перетащить ближе к нижней гран 323d39cd ице две кнопки: ╚ОК╩ и ╚Закрыть╩. Кнопки можно перетащить по одной, а можно выделить их обе и перетащить две одновременно. Для выделения кнопок щелкните мышью од-ну кнопку, затем нажмите клавишу Shift и, не отпуская ее, щелкните мышью другую кнопку. Вокруг каждой кнопки будет нарисована синяя пунктирная линия с маркерами. Перетащить такую группу элементов можно, перетаскивая любой элемент. Выделять элементы диалога можно также, просто ╚обводя╩ их мышью - гран 323d39cd ицу выделяемой области будет показывать тонкая пунктирная линия. Но таким образом можно выделять только элементы, расположенные рядом. Выделенные элементы можно отформатировать по шаблону. Для выбора




VIl. Справочники__________ ______ ____ _____ _______ ______ _______________ 71

шаблона, нажав клавишу Ctrl, щелкните левой кнопкой мыши нужный элемент формы диалога.

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


72_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

Запишем выражение в поле ╚Формула╩ свойств текста, используя, оператор конкатенации строк:

Метод ?(<Логич_выраж>,<Выраж1>,<Выраж2>) возвращает значение первого выражения, если условие истинно, иначе - значение второго выражения.

Метод Выбран 323d39cd ( ) возвращает флаг выбора элемента справочника; 1 - если элемент справочника выбран 323d39cd , О - если не выбран 323d39cd .

Шрифт отредактирован на закладке ╚Шрифт╩ текстового реквизита.

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

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

В последнем случае во время работы в форме элемент ещё не записан, поэтому метод Уровень() вернет значение 0. Поэтому для определения принадлежности элемента группе справочника используем знакомый нам метод Выбран 323d39cd () для атрибута Родитель.


VII. Справочники__________ ______ ____ _____ _______ ______ _______________ 73_

Процедура ВводНового()

Если Родитель.Выбран 323d39cd ()=1 Тогда

Цена=Родитель.ГрЦена; КонецЕсли;

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

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

ВводНового(<ПризнКопирования>,<ОбъектКопирования>).

Параметры:<ПризнКопирования> - признак того, что объект введен копированием. Число: 1 - объект

введен копированием, 0 - просто новый объект. Данный признак может быть использован для анализа

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

был скопирован.

При копировании записей справочника копируются все реквизиты, кроме кода записи справочника. Отредактируем принудительно атрибут элемента ╚Наименование╩, используя параметры предопределенной процедуры ВводНового() и метод ВвестиСтроку().

Метод ВвестиСтроку(<Строка>,<Подсказка>,<ДлинаСтроки>,<Признак>,<Таймаут>) Вызывает окно

интерактивного диалога для ввода строки. Возвращает:

1 - если в диалоге нажата кнопка ОК;

О - если нажата кнопка Отмена;

-1 - если закончилось время ожидания ответа.

Параметры: <Строка> - имя переменной, объявленной в модуле для приема вводимого значения;

<Подсказка> - текст заголовка окна диалога ввода; <ДлинаСтроки> - длина вводимой строки;

<Признак> - если 0 или опущен - ввод одной строки, если 1 - ввод многострочного текста с

разделителями строк; <Таймаут> - число секунд времени ожидания ответа (если опущен или 0, то без

огран 323d39cd ичения).

Процедура ВводНового(признак,копируемый)

Если признак=1 Тогда

ВвестиСтроку(Наименование,■Введите наименование■,25);

КонецЕсли;

Если Родитель.Выбран 323d39cd ()=1 Тогда Цена=Родитель.ГрЦена;

КонецЕсли; КонецПроцедуры

Запишем аналогичный алгоритм в форме списка справочника. В этом контексте свой список предопределенных процедур. Для ввода цены по Умолчанию используем предопределенную процедуру ПриРедактированииНовойСтроки(). Проверить операцию копирования в форме списка мы не можем.

Процедура ПриРедактированииНовойСтроки () Если Родитель.Выбран 323d39cd ()=1 Тогда

Цена=Родитель.ГрЦена; КонецЕсли;

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



74_____ _______ ______ ________ 1С:Предприятив. Практика программирования на платформе V7

Упражнение 8. Создайте справочник ╚Единицы╩. В окне редактирования справочника ╚Единицы╩ установите подчинение (в поле ввода ╚Подчинен╩) справочнику ╚Оборудование╩ и создайте реквизит ╚Коэффициент╩, в который будут записываться значения коэффициентов пересчета соответствующие единицам измерений. В форме элемента и в форме списка справочника в текстовом реквизите формы покажите владельца элемента справочника.

Для вставки в табличную часть формы списка текстового реквизита щелкнем мышью кнопку с синей буквой ╚Т╩ в панели элементов диалога или соответствующую строку в меню ╚Вставить╩, установим его на табличную часть, курсор мыши при этом примет специальный вид, и ещё раз щелкнем левой кнопкой мыши. Появится дополнительная колонка без названия в самой правой позиции табличной части формы, чтобы её увидеть, как правило, надо прокрутить табличную часть стрелкой вправо. Для ввода формулы нужно активизировать свойства колонки. Сначала щелчком мыши в табличную часть мы должны активизировать табличную часть, а затем двойным щелчком в заголовок колонки активизировать свойства этой колонки. При этом появляется палитра свойств колонки. Зададим колонке название в поле ╚Заголовок╩, а в поле ╚Формула╩ напишем ≈ Владелец.

7.3. Использование подчиненных справочников

При создании конкретных конфигураций довольно часто возникают задачи, когда надо реализовать для каждого конкретного элемента справочника -список относящихся к нему объектов (отношение один-ко-многим). В нашем примере имеется справочник оборудования, и каждый элемент справочника может иметь произвольный список единиц измерения данного оборудования. Для того чтобы ввести новый или отредактировать существующий элемент справочника ╚Единицы╩, сначала откройте форму списка справочника владельца ╚Оборудование╩, выберите в нем курсором нужный элемент. Затем откройте форму списка подчиненного справочника ╚Единицы╩, он будет отображать список единиц измерения данного оборудования. Теперь можно добавлять, редактировать или удалять записи в справочнике ╚Единицы╩. Выбор элементов подчиненного справочника, в форме, при условии, что в форме существует элемент диалога, в котором выбран 323d39cd элемент справочника владельца, для которого производится выбор, реализуется в конфигурации при помощи указания в палитре свойств реквизита формы, предназначенного для выбора элемента подчиненного справочника, параметра ╚Связан с╩. В нем вводится имя идентификатора реквизита формы, который содержит элемент родительского справочника. В этом случае при выборе элемента подчиненного справочника автоматически будет производиться выбор из элементов, подчиненных выбран 323d39cd ному элементу справочника-родителя. Другим способом установки элемента справочника владельца, по значению которого должен выполняться выбор подчиненного справочника является вызов метода ИспользоватьВладельца(<?>) для объекта подчиненного


VII. Справочники__________ ______ ____ _____ _______ ______ _______________ 75

справочника. Это позволяет определить выбор подчиненного справочника даже в том случае, когда в форме нет элемента диалога имеющего тип справочника - владельца. Для выборки элементов подчиненного справочника по владельцу, после метода ИсполъзоватьВладельца(< ?>) надо вызвать метод ВыбратьЭлементы() и далее методы ПолучитьЭлемент() или НайтиЭлемент(< ?>), НайтиПоКоду(< ?>), НайтиПоНаименованию(< ?>).

Упражнение 9. (Необязательное) Создайте в форме элемента и форме списка справочника ╚Оборудование╩ алгоритм, позволяющий при создании нового элемента программно создавать подчиненный элемент в справочнике ╚Единицы╩ с Наименованием ╚шт. и Коэффициентом равным 1.

Опишем для этого предопределенные процедуры ПриЗакрытии() в модуле формы и в модуле формы списка справочника ╚Оборудование╩, потому что последовательность директив в кнопке ╚ОК╩ в форме следующая: #3аписать? Закрыть.

Метод ТекущийЭлемент() возвращает значение записанного в базу данных позиционированного текущего элемента справочника.

В модуле формы:

Перем ФлагНового;

Процедура ВводНового(признак,копируемый)

Если признак=1 Тогда

ВвестиСтроку(Наименование,"Введите наименование",25);

КонецЕсли;

Если Родитель.Выбран 323d39cd ()=1 Тогда

Цена=Родитель.ГрЦена;

КонецЕсли;

ФлагНового-1;

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

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

Если ФлагНового=1 Тогда

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

Ед.ИспользоватьВладельца(ТекущийЭлемент());

Ед.Новый();

Ед.Наименование="шт.";

Ед.Коэффициент=1;

Ед.Записать();

КонецЕсли;


76══ _____ _______ ______ _______ 1C:Предприятие. Практика программирования на платформе V7

КонецПроцедуры ФлагНового=0;

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

Метод РазмерСписка( ) возвращает число элементов в списке значений.

Метод ПолучитьЗначение(<Позиция>,<Строка>) позволяет получить значение из указанной

позиции списка. Возвращает значение из списка.

<Позиция> - номер позиции в списке, из которой возвращается значение (изменяется от 1 до

РазмерСписка); <Строка> - идентификатор переменной, в которой возвращается символьное

представление получаемого значения.

Метод НаЙтиПоКоду(<Код>,<ФлагПоиска>) позволяет найти элемент справочника по коду.

Возвращает: 1 - если действие выполнено;

О - если действие не выполнено (элемент не найден).

<Код> - выражение со значением искомого кода,

<флагПоиска> - флаг поиска (необязателен):

0 - поиск во всем справочнике вне зависимости от родителя;

1 - поиск внутри установленного подчинения (родителя);

2 - поиск по полному коду через разделитель.
Значение по умолчанию:

О - если код уникален во всем справочнике; 2 - если код уникален только'в группе. Его можно использовать только для объектов, созданных функцией СоздатьОбъект.

Перем СписокНовых;

Процедура ПриРедактированииНовойСтроки ()

Если Родитель.Выбран 323d39cd ()=1 Тогда

Цена=Родитель.ГрЦена;

КонецЕсли;

СписокНовых.ДобавитьЗначение(Код,Наименование);

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

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

Перем Стр;

Если СписокНовых.РазмерСписка()>0 Тогда

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

Для i=1 по═ СписокНовых.РазмерСписка() Цикл



Если Новый.НайтиПоКоду (СписокНовых.ПолучитьЗначение (i, Стр),0) =1 ═Тогда

Ед=СоздатьОбъект("Справочник.Единицы"); Ед.ИспользоватьВладельца(Новый.ТекущийЭлемент());

Ед.Новый();

Ед.Наименование="шт.";

Ед.Коэффициент = 1;

Ед.Записать();

КонецЕсли;


VII. Справочники__________ ______ ____ _____ _______ ______ _______________ 77

КонецЦикла;//

КонецЕсли;

КонецПроцедуры СписокНовых=Создать0бъект("СписокЗначений");

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

7.4.Использование периодических реквизитов справочников

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


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

записать значение. Установка даты использования периодических реквизитов
задается либо методом ИспользоватьДату ( [Дата] ) , либо методами
Получить([Дату])и Установить ([Дата] , [Значение]) (через точку
после самого реквизита). Одновременно использовать оба эти способа задания
даты для одного и того же объекта типа Справочник нельзя. Если метод
ИспользоватьДату! [Дата] ) не вызывался, то к периодическому реквизиту
справочника следует обращаться с помощью методов Получить ( [Дату] ) и
Установить═════════════════════ ( [Дата] , [Значение] ).════ Если════ метод

ИспользоватьДату ( [Дата] ) был вызван, то можно обращаться только непосредственно к значениям реквизитов.

На платформе 7.7 можно не указывать значение даты для метода Получить(), по умолчанию устанавливаются следующие значения: значение точки актуальности - если используется компонента "Оперативный учет", или Рабочая дата - если компонента "Оперативный учет"не используется.

Вызов метода ИспользоватьДату([Дата]) должен располагаться обязательно до позиционирования объекта на определенный элемент.

Примером, целесообразного использования метода ИспользоватьДату ( [Дата] ) может являться печать справочника с большим количеством периодических реквизитов. В этом случае, один раз вызвав в самом начале этот метод, Вы сможете получать значения всех реквизитов непосредственно, без вызова метода Получить ( [Дату] ).

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

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

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


VII. Справочники__________ ______ ____ __________ ______ ____ 79

включаемых в форму. Если некоторый периодически реквизит непосредственно в форму не включен, а изменяется из встроенного языка, то он не будет выдаваться в этом запросе и сохран 323d39cd яться. Для того, чтобы в реквизит участвовал в запросе о записи периодических реквизитов можно вставить его в форму, установив ему признак ╚Сделать невидимым╩. Периодические реквизиты содержат значения только начиная с даты первой записи истории значений реквизита, однако и в историю реквизита можно записать ╚пустое значение╩ на какую-либо дату. Например, если самая первая запись периодического реквизита ╚Цена╩ отмечена датой '02.12.94' со значением 48.00, а мы в программном модуле запросили значение этого реквизита на '30.11.94', то система вам вернет ╚пустое значение╩, т.е. ноль; если ╚пустое значение╩ установлено на дату '04.12.94', а следующее не пустое значение на '14.12.94', то с 04 по 13.12.94 система также вернет вам ╚пустое значение╩.

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

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

Если Словарь.НайтиЭлемент(Элемент)═ = 1═ Тогда

Периодич = СоздатьОбъект(╚Периодический╩);

Периодич.ИспользоватьОбъект(╚Цена╩, Словарь.ТекущийЭлемент());

Периодич.Значение= 2 5;

Периодич.ДатаЗнач = '17.05.00';

Периодич.Записать();

КонецЕсли;

Здесь ╚Элемент╩ - переменная или реквизит объекта с типом значения Справочник. Оборудование.

7.5. Работа со слоями и закладками

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

Упражнение 10. В форме справочника ╚Оборудование╩ разместите реквизиты формы справочника по слоям, создайте закладки и алгоритм управления формой.

═Разделим форму по слоям. Для этого (при активном окне формы диалога═ объекта) выберем пункт главного меню ╚Диалог╩, а в нём пункт ╚Слои╩. В

появившемся окне ╚Слои╩ мы увидим один слой ╚Основной╩, создаваемый

по умолчанию.

Нажмём кнопку ╚Изменить╩, в появившемся окне ╚Слой╩ изменим


80_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

идентификатор слоя на ╚А╩. Создадим новый слой, для этого нажмём кнопку ╚Новый╩ в окне ╚Слои╩ и зададим ему идентификатор ╚В╩.

Новый слой автоматически становится Видимым и Активным, слой ╚А╩ при этом станет только Видимым.

Нажмём кнопку ╚Закрыть╩, чтобы закончить редактирование слоев. Выделим реквизиты формы диалога,


VII. Справочники__________ ______ ____ __________ ______ ____ 81

в пункте главного меню ╚Диалог╩ выберем пункт ╚Поместить╩ и поместим выбран 323d39cd ные элементы диалога в слой ╚В╩.

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

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

Форма. ИспользоватьСлой(╚Имя_Слоя╩,<Режим>)

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

<Режим> - необязательный параметр. Числовое выражение:

0 - скрыть слой <ИмяСлоя> в форме;

1 - показать слой <ИмяСлоя> в форме;

2 - показать слой <ИмяСлоя> и скрыть все остальные.

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

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

Метод Заголовок(<Название>) устанавливает заголовок элемента диалога. Возвращает текущий заголовок элемента диалога. <Название> - строковое выражение - новый заголовок колонки многострочной части формы, кнопки, рамки группы, текста, флажка, переключателя. Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.

Чтобы к реквизиту формы можно было бы обратиться, его надо назвать, задать ему идентификатор. Зададим кнопке идентификатор - ╚Переключение╩ и Начальный заголовок ≈ ╚Только А╩. Создадим в модуле формы справочника процедуру Переключить()

//Вызов процедуры в кнопке -

Переключить(Форма.Переключение.Заголовок())


82_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

Процедура Переключить(ТекущийЗаголовок)

Если ТекущийЗаголовок="Только А" Тогда

Форма.ИспользоватьСлой("А",2) ;

Форма.Переключение.Заголовок("А и В");

Иначе

Форма.ИспользоватьСлой("А,В",2);

Форма.Переключение.Заголовок("Только А") ;

КонецЕсли;

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



В Предприятии слои будут переключаться по кнопке.

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

ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки):

<НомерЗакладки> - числовое значение √ номер выбран 323d39cd ной закладки формы.

<3начение3акладки> - значение выбран 323d39cd ной закладки формы.

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


VII. Справочники__________ ______ ____ __________ ______ ____ 83

Упражнение 11. В форме элемента справочника ╚Оборудование╩ создайте закладки и алгоритм управления слоями.

Напишем в модуле формы процедуры для управления Закладками и Слоями. Атрибут формы Закладки имеет тип ╚СписокЗначений╩, поэтому для него доступны все методы этого объекта. Мы будем использовать метод форма.Закладки.Добавить3начение(3начение3акладки, ╚НазваниеЗакладки╩).

// ** ** ** ** ** ** *

Процедура ПриВыбореЗакладки (НомерЗакладки,ЗначениеЗакладки)

Если НомерЗакладки =1 Тогда

Форма. Использовать Слой (╚А╩, 2);

ИначеЕсли НомерЗакладки =2 Тогда

Форма. Использовать Слой (╚В╩, 2);

Конецесли;

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

// ** ** ** ** ** ** *

Форма. ИспользоватьЗакладки (1);

Форма. Закладки. ДобавитьЗначение (╚╩, ╚А╩);

Форма. Закладки. ДобавитьЗначение (╚╩, ╚В╩);



Упражнение 12. (Необязательное) В форме элемента справочника ╚Оборудование╩ создайте закладку и Слой ╚Единицы╩, алгоритм переключения между слоями, реквизит формы ТаблицаЗначений с идентификатором ╚ТаблицаЕдиниц╩ на слое ╚Единицы╩ и алгоритм редактирования подчиненных элементов справочника Единицы из формы элемента справочника владельца.(Аналогичный алгоритм мы создали в Упражнении 3)


84_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

В поле Формула таблицы значений вызывается процедура Редактироовать(ТаблицаЕдиниц.ТекущаяСтрока()), в параметр которой передается номер выбран 323d39cd ной строки.

Метод ТекущаяСтрока(<Строка>) устанавливает или определяет текущую строку таблицы в элементе

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

диалога (до его изменения), или 0, если текущей строки нет. <Строка> - необязательный параметр.

Числовое выражение с задаваемым индексом строки для элемента диалога типа "ТаблицаЗначений", на

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

меняется."

Метод ПолучитьСтрокуПоНомеру(<Номер>) устанавливает в качестве текущей строки строку с

заданным номером.

Возвращает:

1 - если действие выполнено;

О - если действие не выполнено.

<Номер> - номер строки.

Метод Видимость(<Режим>) устанавливает режим отображения элемента диалога. Возвращает:

текущее числовое значение режима отображения элемента диалога (на момент до исполнения метода).

<Режим> - число: 1 - поле диалога отображается, 0 - поле диалога скрыто.

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

данного метода для колонки табличной части формы не может изменять видимость отдельно для

совмещенных и многострочных колонок."

Метод ВвестиСтроку(<Строка>,<Подсказка>,<ДлинаСтроки>,<Признак>,<Таймаут>) вызывает

диалог для ввода строки.

Возвращает:

1 - если в диалоге нажата кнопка ОК;

0 - если нажата кнопка Отмена;

-1 - если закончилось время ожидания ответа.

<Строка> - имя переменной, объявленной в модуле для приема вводимого значения; <Подсказка> -

текст заголовка окна диалога ввода; <ДлинаСтроки> - длина вводимой строки;<Признак> - если 0 или

опущен - ввод одной строки, если 1 - ввод многострочного текста с разделителями строк; <Таймаут> -

число секунд времени ожидания ответа (если опущен или 0, то без огран 323d39cd ичения).

Метод ВвестиЧисло(<Число>,<Подсказка>,<Длина>,<Точность>,<Таймаут>) вызывает диалог для

ввода числа.

Возвращает:

1═════════════ - если в диалоге нажата кнопка 'ОК';
О - если нажата кнопка 'Отмена';

-1 - если закончилось время ожидания ответа.

<Число> - имя переменной, объявленной в модуле для приема вводимого значения;<Подсказка> - текст

заголовка окна диалога ввода;<Длина> - длина вводимого числа;<Точность> - число знаков после

десятичной точки;<Таймаут> - число секунд времени ожидания ответа (если опущен или 0, то без

огран 323d39cd ичения).

Предложенный ниже алгоритм можно перенести в модуль формы справочника ╚Оборудование╩ соблюдая структуру модуля. Методы реквизитов формы, в частности метод Видимость(), в предопределенной процедуре ПриВыбореЗакладки(,) работают иногда стран 323d39cd но. Процедуру ИзменитьЕд(ЗначениеЕдиницы) предлагается написать самостоятельно.

Перем ФлагНового, Ед;

Процедура ЗагрузкаТаблицыЕдиниц()

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

ТаблицаЕдиниц.УдалитьСтроки();

Если ФлагНового=1 Тогда

Записать();


VII. Справочники__________ ______ ____ __________ ______ ____ 85_

КонецЕсли;

Ед.ИспользоватьВладельца(ТекущийЭлемент());

Ед.ВыбратьЭлементы();

Пока Ед.ПолучитьЭлемент()=1 Цикл

ТаблицаЕдиниц.НоваяСтрока();

ТаблицаЕдиниц.Наим=Ед.ТекущийЭлемент();

ТаблицаЕдиниц.К=Ед.Коэффициент;

КонецЦикла;

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

Процедура УдалитьЕд(ЗначениеЕдиницы)

ТаблицаЕдиниц.ПолучитьСтрокуПоНомеру(ЗначениеЕдиницы);

Ед.НайтиЭлемент(ТаблицаЕдиниц.Наим);

Ед.Удалить();

ЗагрузкаТаблицыЕдиниц();

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

Процедура ДобавитьЕд()

Перем Стр,К;

Ед . Новый ( ) ;

ВвестиСтроку(Стр,"Введите наименование",25);

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

ВвестиЧисло(К,"Введите коэффициент",7,0);

Ед. Коэффициент= К;

Ед.Записать();

ЗагрузкаТаблицыЕдиниц();

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

//В поле Формула таблицы значений вызывается процедура

//Редактировать(ТаблицаЕдиниц.ТекущаяСтрока())

Процедура Редактировать(НомерСтрокиТаблицыЗначений)

Перем Зн,Поз;

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

СпЗн.ДобавитьЗначение("","Удалить");

СпЗн.ДобавитьЗначение("","Добавить");

СпЗн.ДобавитьЗначение("","Изменить");

СпЗн.ВыбратьЗначение(Зн,"Выберите действие",Поз,,1);


86_____ _______ ______ ________ 1С:Предприятие. Практика программирования на платформе V7

Если Поз=1 Тогда

УдалитьЕд(НомерСтрокиТаблицыЗначений);

КначеЕсли Поз = 2 Тогда

ДобавитьЕд();

Иначе

ИзменитьЕд(НомерСтрокиТаблицыЗначений);

КонецЕсли;

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

Процедура ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки)

Если НомерЗакладки=1 Тогда

Форма.ИспользоватьСлой("А,В",2);

Иначе

Форма.ИспользоватьСлой("А,Единицы",2);

ТаблицаЕдиниц.Очистить();

ТаблицаЕдиниц.НоваяКолонка("Наим",,,,"Единица",10,,);

ТаблицаЕдиниц.НоваяКолонка("К",,,,"Коэф.",10,,);

ЗагрузкаТаблицыЕдиниц{);

КонецЕсли;

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

//__________ ______ ____ _____________═════

Форма.ИспользоватьЗакладки(1);

Форма. Закладки. ДобавитьЗначение ("", "Реквизиты");

Форма. Закладки. ДобавитьЗначение ("", "Единицы");

Форма.ИспользоватьСлой("А,В",2);

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

ФлагНового=0;

Режим выборки групп в форме списка справочника.

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

Методы определения префиксов авто нумерации

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

префиксов aвто нумерации. Метод ПрефиксАвтоНумерации (<ИмяВида>, <Префикс>)


\/II Справочники__________ ______ ____ __________ ______ ____ 87

располагают, как правило, в глобальном модуле. Он позволяет установить префикс для автоматического создания новых номеров.Параметры: <ИмяВида> - строковое выражение с полным названием справочника или документа конфигурации. Для установки префикса сразу всем документам или справочникам используется символ "*" вместо идентификатора вида документа/справочника; <Префикс> - строковое выражение, задающее префикс номеров документов или кодов элементов справочника.

Методы описанные ниже вызывают обычно в предопределенных процедурах ВводНового() в модуле формы и ПриРедактированииНовойСтроки() в модуле формы списка справочника.

Метод ПрефиксКода(<Префикс>) позволяет установить текущий префикс кода для справочника. Возвращает строковое значение текущего префикса кодов элементов справочника (на момент до исполнения метода).

Метод УстановитьНовыйКод(<Префикс>) позволяет установить новый код элемента справочника с заданным префиксом. <Префикс> - строка с префиксом кода элемента справочника.

Вопросы для самоконтроля

Как задается область определения реквизитов справочников?

Для каких справочников определены атрибуты Владелец и Родитель?

Какое основное отличие в использовании и обращении к подчиненным и обычным справочникам?

Какие формы можно создать для интерактивного редактирования справочников?

В чем отличие конфигурирования периодических реквизитов справочников от конфигурирования периодических констант?

В чем отличие реквизитов формы и реквизитов объекта, как формата хран 323d39cd ения данных?

Можно ли редактировать данные объекта, не открывая его интерактивную форму?

Можно ли управлять слоями в форме, не используя предопределенную процедуру ПриВыбореЗакладки()?