d9e5a92d

ПЕРЕЧИСЛЕНИЕ СКИДКИ

4.2.1. СОЗДАЕМ ПЕРЕЧИСЛЕНИЕ СКИДКИ

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

Вызовем конфигуратор, откроем конфигурацию на закладке Метаданные, войдем в раздел Перечисления и в меню, всплывающем после нажатия на правую кнопку мыши, выберем пункт Новое Перечисление. В появившемся окне зададим приведенные на рис. 4.1 данные.



 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 4.1. Ввод перечисления Скидки
Каждое новое значение перечисления вводим после выбора кнопки Новый. В п о-являющемся окне определяем идентификатор и представление элемента перечисления (рис. 4.2).

Идентификатор (Стцока20Лрой

Комментарий.

Пред стае ленив [20

Рис. 4.2. Идентификатор и представление элемента перечисления

При обработке данных в качестве значения элемента перечисления используется его] представление, если оно задано, или его идентификатор - в противном случае. Значение перечисления возвращается методом ЗначениеПоНомеру или ЗначениеПоИдентифика-тору. Также оно содержится в полном имени идентификатора элемента перечисления. Количество значений в перечислении вернет функция КоличествоЗначений.

Пример 1. Выводятся представления (значения) и идентификаторы элементов перечисления Скидки.

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем ном, пер;

ОчиститьОкноСообщенийО;

// Выводим заголовок

Сообщить("Значение" + СимволТабуляции + "Идентификатор"); для ном = 1 по Перечисление.Скидки.КоличествоЗначенийО цикл // Переменная пер имеет тип Перечисление пер = Перечисление. Скидки.ЗначениеПоНомеру(ном);

// Пер.ИдентификаторО вернет идентификатор очередного элемента перечисления Сообщить(Строка(пер) + Символ Табуляции + пер.ИдентификаторО); конецЦикла; // для конецПроцедуры // Выполнить

Результат:
Значение Идентификатор
0 НетСкидки
20 Скидка20Проц
40 Скидка40Проц
100 Скидка 100Проц
Пример 2. Значения элементов перечисления Скидки выводятся по известным именам их идентификаторов.

процедура Выполнить() . , // Связана с кнопкой Пуск обработки Проба

перем ин, пер, иден[10];

ОчиститьОкноСообщенийО;

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

иден[1] = "НетСкидки"; иден[2] = "Скидка20Проц"; иден[3] = "Скидка40Проц"; иден[4] = "Скидка100Проц";

для ин = 1 по Перечисление.Скидки.КоличествоЗначений() цикл

// Значение (представление) перечисления (переменная пер) имеет тип Перечисление пер = Перечисление.Скидки.ЗначениеПоИдентификатору(иден[ин]); Сообщить(Строка(пер) + СимволТабуляции + иден[ин]); конецЦикла; // для конецПроцедуры // Выполнить

Результат тот же, что и в примере 1.

Пример 3. Значения элементов перечисления скидки выводятся по полным именам их идентификаторов.

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

ОчиститьОкноСообщений();

Сообщить(Перечисление. Скидки. НетСкидки);

Сообщить(Перечисление. Скидки. Скидка20Проц);

Сообщить(Перечисление. Скидки. Скидка40Проц); Сообщить(Перечисление.Скидки.Скидка100Проц); конецПроцедуры // Выполнить

Результат:

0

20

40

100

Если представление элемента перечисления не задано, то в качестве значения используется имя идентификатора элемента перечисления. Так, очистив представления для двух последних элементов перечисления, получим после запуска программы из примера 3 следующий результат:

0

20

Скидка40Проц

Скидка100Проц

Замечание. Вся информация о перечислениях сосредоточена в файле конфигурации 1CV7.MD.

4.2.2. МЕТОДЫ ПЕРЕЧИСЛЕНИЙ

Назовем их в табл. 4.1, приведя после нее ряд примеров, иллюстрирующих не опробованные в предшествующем разделе методы. В качестве объекта, к которому применяется метод, используем только что созданное перечисление Скидки.

Методы перечислений
Метод Описание
кол = Перечисление.Скидки.

КоличествоЗначений();
Возвращает число элементов в указанном перечислении. Первый элемент перечисления имеет номер 1, последний - кол
знач = Перечисление.Скидки.

ЗначениеПоНомеру(ном);
Возвращает значение элемента перечисления, расположенного в перечислении под номером ном.

Если номер ном больше числа элементов в перечислении, то возникнет завершающая ошибка
знач = Перечисление.Скидки.

ЗначениеПоИдентификатору

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

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

Примеры для методов ПорядковыйНомер, Вид, ПредставлениеВида и Выбран:

процедура Выполнить( ) // Связана с кнопкой Пуск обработки Проба

перем ном, пер;

ОчиститьОкноСообщений();

// Следующий метод установит в ном число 3

ном = Перечисление.Скидки.Скидка40Проц.ПорядковыйНомерО;

// Переменная пер имеет тип Перечисление пер = Перечисление.Скидки.ЗначениеПоНомеру(ном); Сообщить(ТипЗначенияСтр(пер)); // Напечатает Перечисление Сообщить(пер.Вид()); // Напечатает Скидки

Сообщить(пер.ПредставлениеВидаО); // Напечатает Льготы по оплате Сообщить(пер.Выбран( )); // Напечатает 1

конецПроцедуры // Выполнить

Те же результаты получим, употребив вызовы методов Вид, ПредставлениеВида и Выбран, в которых вместо переменной пер стоит полное имя элемента перечисления Скидка40Проц:

Сообщить(Перечисление. Скидки. Скидка40Проц.ВидО);

Сообщить(Перечисление.Скидки.Скидка40Проц.ПредставпениеВидаО);

Сообщигь(Перечисление.Скидки.Скидка40Проц.ВыбранО);

4.3. ВВОД ЗНАЧЕНИЙ ПЕРЕЧИСЛЕНИЯ

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

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 4.3. Диалог, открываемый функцией ВвестиПеречисление для перечисления Скидки
Функция имеет следующий синтаксис:

флаг = ВвестиПеречисление(значПер, заг, [задержка]);

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

значПер = Перечисление. Скидки. Скидка40Проц;

На выходе он также будет иметь тип Перечисление, но содержать уже выбранное значение.

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

значПер = "Скидки"; // Скидки - идентификатор перечисления

На выходе, однако, мы, как и в первом случае, получим значение типа Перечисл ение. Смысл параметров заг и задержка разъяснен в табл. 2.3

Функция вернет 1, если значение выбрано, вернет 0, если не выбрано, и -1, если время отображения диалога превысило величину, заданную параметром задержка.

Пример. Отображается диалог выбора значения перечисления Скидки:

процедура Выполнить( ) // Связана с кнопкой Пуск обработки Проба

перем флаг, значПер;

ОчиститьОкноСообщенийО;

значПер = Перечисление.Скидки.Скидка40Проц;

// или значПер = "Скидки";

флаг = ВвестиПеречисление(значПер, "Выберите значение и нажмите ОК");

// Если нажали OK, Enter или дважды ударили мышью по выбранному значению если флаг = 1 тогда

// Сообщаем значение выбранного перечисления Сообщить(значПер); иначе

Предупреждение("Ничего не выбрано."); конецЕсли;

конецПроцедуры // Выполнить

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

перем флаг, значПер;

флаг = ВвестиЗначение(значПер, "Выбор скидки", "Перечисление.Скидки");

4.4. ВЫВОДЫ

1. Перечисление состоит из элементов, каждый из которых имеет идентификатор и представление. Само же перечисление задается идентификатором; для представления перечисления используется его синоним или сам идентификатор перечисл е-ния, если синоним не задан.

2. Значением элемента перечисления является либо его представление, либо его идентификатор, если представление не задано.

3. Перечисления хранятся в файле 1CV7.MD, содержащем конфигурацию системы.

4. Интерактивный ввод значения перечисления осуществляется встроенной функцией ВвестиПеречисление.

5. СПРАВОЧНИКИ

5.1. УСТРОЙСТВО СПРАВОЧНИКА 1С

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

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

//Вывод справочников, подчиненных встроенному в 1С справочнику Сотрудники процедура Выполнить()

ОчиститьОкноСообщенийО;

для ин = 1 по Метаданные.Справочник( ) цикл

если СокрМетаданные.Справочник(ин).Владелец) • = "Сотрудники" тогда Сообщитъ(Метаданные. Справочник(ин). Идентификатор); конецЕсли; конецЦикла; // для конецПроцедуры //Выполнить

Результат:

Аттестация

ВнутренниеСовместители

Депонент

КадровыеДанные

Квалификация

НалоговыеЛьготы

Образование

Переподготовка

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

СоставСемьи

ТрудоваяДеятельность

Доходы7

Вычеты7

Итоги7

ИтогиПоГоду7

МатВыгода7

ДоходыПФР

В общем случае справочники 1С отображают иерархическую структуру данных за счет организации главной таблицы, представленной в табл. 5.1 (на примере нового справочника Сотрудники_2 для предприятия из двух цехов, причем первый цех имеет 3 подразделения).

Таблица 5.1

Принцип организации главной таблицы справочника Сотрудники_2
Группа СсылкаНа

Группу
Код Наименование Флаг Папки (1 или 2) Другие

поля
1 0 1 01 Цех
2 0 2 02 Цех
3 1 11 01/1
4 1 12 01/2
5 1 13 01/3
6 2 201 Абрамова Лариса Сергеевна 2
7 2 202 Куприкова Людмила Сергеевна 2
8 2 203 Митина Ольга Владимировна 2
9 3 111 Агальцов Юрий Алексеевич 2
10 3 112 Добрецов Борис Юрьевич 2
11 4 121 Волосков Михаил Андреевич 2
12 4 122 Кузьмина Раиса Николаевна 2
13 5 131 Васильева Елена Ивановна 2
15 5 132 Смирнова Нина Федоровна 2
16 5 133 Хохлов Евгений Николаевич 2
Замечание. В таблице данные упорядочены по выражению СсылкаНаГруппу + Наименование.

Такая организация главной таблицы позволяет отобразить состав справочника Со-трудники_2 по группам в виде иерархического списка (рис. 5.1), в качестве которых выступают имена цехов и их подразделений.

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.1. Вывод справочника Сотрудники_2 по группам Если отменить вывод справочника по группам, нажав на расположенную в окне вывода справочника иконку 1:'Ь', выполнить, обратившись к главному меню, сортировку по коду (Действия - Сортировка - По коду), то получим приведенное на рис. 5.2 представление справочника, отличающееся от табл. 5.1 порядком следования данных.
В Z] Сотруаники_2 Е ІІ 01 Цех LU 01 /1 CJ 01 /2 01/3 li 02 Цех

¦ j Сотрудники_2
Код Наименование Оклад
¦ШІ 01 Цех
-I 2 02 Цех
¦| 11 01 /1
12 01 /2
1 13 01 /3
и 111 Агальцов Юрий Алексеевич 1.500.00
И 112 Добрецов Борис Юрьевич 2.300 00
J 121 Волосков Михаил Андреевич 2.500.00
122 Кузьмина Раиса Николаевна 2.700.00
JJ 131 Васильева Елена Ивановна 1.850.00
и 132 Смирнова Нина Федоровна 1.900.00
и 133 Хохлов Евгений Николаевич 1.900.00
и 201 Абрамова Лариса Сергеевна 2.000.00
'1 202 Куприк.ова Людмила Сергеевна 2.100.00
3 203 Митина Ольга Владимировна 1.900.00
Рис. 5.2. Вывод справочника Сотрудники_2 в виде неиерархического списка

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

5.2. АТРИБУТЫ И КОНТЕКСТ СПРАВОЧНИКА

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

Совокупность атрибутов и методов справочника образует его контекст, который может быть передан в качестве фактического параметра процедуры или функции, например предопределенной процедуры ОбработкаПодбора.

Два реквизита (атрибута), Код и Наименование, присутствуют в любом справочнике. В случае справочника Сотрудники_2 реквизит Код может быть использован в качестве табельного номера сотрудника или кода группы, а Наименование - для задания фамилии, имени и отчества сотрудника или имени группы. Список иных реквизитов стандартного справочника Сотрудники и программу их получения см. в разд. 3.1. Свойства реквизита можно просмотреть или изменить в конфигурации системы (рис. 5.3).

Общие І| Дополнительные | Общие і Дополнительные і|
Идентификатор: (Оклад Разделять триады Р Использовать:
?иношм: |0клад сотрудника Неотрицательный W | Для элемента
Комментарий; (Меняется документом Изменение Периодический Р Р Изменяется Документами
Тип значения |<<Число>> Г Р Ручное изменение
Длина: |10 Г" Точность: [2-гІ г
а б
Рис. 5.3. Свойства периодического реквизита Оклад: а - общие; б - дополнительные

История периодического реквизита просматривается после позиционирования на поле со значением реквизита (например, в окне, приведенном на рис. 5.2) и выбора на панели инструментов формы списка справочника иконки или нажатия на кда-вишу F5.

Замечание. Проще обеспечить достоверность данных, если запретить ручное изменение периодических реквизитов справочников (рис. 5.3, б), а взамен создавать I и проводить для этих целей соответствующие документы.

Рассматриваемый нами справочник Сотрудники_2 имеет 3 уровня. Это означает, что элемент 3-го, самого низкого уровня входит в группу, которая находится на 2-м уровне справочника. Имя группы, в которую входит текущий (выбранный) элемент справочника, содержит атрибут Родитель. Понятно, что элементы 1-го j уровня родителей не имеют. Сообщить о номере уровня справочника позволяет метод Уровень.

Применим метод Уровень и определим атрибут Родитель для всех элементов справочника (табл. 5.1), употребив следующий код:

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем сСотр_2;

ОчиститьОкноСообщенийО;

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

сСотр_2.ВыбратьЭлементы(); // Перемещаемся на начало справочника

// Заголовок таблицы результатов

Сообщить("Наименование" + СимволТабуляции +"Уровень" +

СимволТабуляции + "Родитель");

// Метод ПолучитьЭлемент выбирает элемент справочника и перемещает справочник // на следующую позицию выборки или за ее пределы, если выборка исчерпана пока сСотр_2.ПолучшъЭлементО > 0 цикл

Сообщить(сСотр_2.Наименование + СимволТабуляции +

сСотр_2.Уровень() + СимволТабуляции + сСотр_2.Родитель);

конецЦикла // пока конецПроцедуры // Выполнить
Результат:
Наименование Уровень Родитель
01 Цех 1
01/1 2 01 Цех
Агальцов Юрий Алексеевич 3 01/1
Добрецов Борис Юрьевич 3 01/1
01/2 2 01 Цех
Волосков Михаил Андреевич 3 01/2
Кузьмина Раиса Николаевна 3 01/2
01/3 2 01 Цех
Васильева Елена Ивановна 3 01/3
Смирнова Нина Федоровна 3 01/3
Хохлов Евгений Николаевич 3 01/3
02 Цех 1
Абрамова Лариса Сергеевна 2 02 Цех
Куприкова Людмила Сергеевна 2 02 Цех
Замечание. Следует помнить, что атрибут Родитель имеет тип Справочник. Поэтому присваивание

сСотр_2.Родитель = "02 Цех";

не приведет к изменению родителя текущего элемента. На самом деле в правой части приведенного оператора присваивания должно стоять значение, возвращаемое методом ТекущийЭлемент. Механизм изменения родителя изложен в разд. 5.5.3.2.

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

Ряд реквизитов справочника целесообразно сделать периодическими, то есть хранить их историю. Таким, например, должен быть реквизит Оклад справочника Сотрудники_2, тогда мы сможем не только проследить динамику изменения оплаты сотрудника, но и учесть эти изменения при расчете заработной платы даже в том случае, если значение реквизита изменилось в пределах заданного расчетного периода (то есть в начале месяца вы имели один оклад, а где-то в середине -уже другой).

Замечание. Значения периодического атрибута Оклад заносятся, наряду с константами и другими периодическими реквизитами, в файл 1SCONST.DBF (поэтому не следует изумляться внушительным размерам этого файла). Если периодический реквизит ссылается на объект агрегатного типа данных, например на СправочникДолжности, то в файл 1SCONST.DBF заносится ссылка на соответствующий элемент объекта; значение этого элемента употребляется в качестве значения реквизита.

5.3. СОЗДАНИЕ СПРАВОЧНИКА 1С

5.3.1. ЭТАП 1. ДОБАВЛЕНИЕ СПРАВОЧНИКА В КОНФИГУРАЦИЮ

Сконструируем теперь, следуя нашим учебным целям, представленный в разд. 5.1 справочник Сотрудники_2. Войдем в конфигурацию, раскроем на закладке Метаданные пункт Справочники и, нажав на правую кнопку мыши, выберем в появившемся меню пункт Новый справочник. В окне Конструктор справочника в поле Идентификатор внесем текст Сотрудники_2 и проследуем далее. Пропустим окно, где предлагается создать новый вид субконто, и завершим первый этап создания справочника, указав на необходимость добавления команды вызов справочника в меню интерфейса Ученик (рис. 5.4).

 ПЕРЕЧИСЛЕНИЕ СКИДКИ


5.3.2. ЭТАП 2. ФОРМИРОВАНИЕ РЕКВИЗИТОВ СПРАВОЧНИКА

В конфигураторе в списке справочников появится имя объекта Сотрудники_2, ударив по которому дважды мышью мы перейдем ко второму этапу создания справочника - формированию его реквизитов (рис. 5.5).

I (не подчинено) ~Д

Подчатек

?»«»•*<

ИдентиФи<.вгор. |Сотрудники_2

|Ссгтрудмики

Размещать труты сверху Р Автоматическая нумерация Р Кодтро/ъ уникальности Р
Тип иода (• Числовой С Текстовый

Основное представлен*

С В виде кода

(• В виде наименования
 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Г Одна Форма для элемента и труты Редактировать' | Обоими способами ~Д

Описан* | Форма глемента | Форма группы | Фореы списка >

Рис. 5.5. Задание реквизитов справочника Сотрудники_2




Дл«в Ro^q



Серии кодов

Во всем слраеочнисе

<• В пределах падчкиетмя

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

Зададим пока один дополнительный периодический реквизит - Оклад, выбрав кнопку Новый и определив его свойства в соответствии с рис. 5.3.

Замечание. Главную таблицу созданного справочника Сотрудники_2 система разместит в DBF-файле, возможно с именем SC4194.DBF.

Второй этап завершен. На третьем этапе создадим формы для просмотра и редактирования элементов и групп справочника Сотрудники_2.

5.3.3. ЭТАП 3. СОЗДАНИЕ ДИАЛОГОВ ДЛЯ РЕДАКТИРОВАНИЯ ЭЛЕМЕНТОВ И ГРУПП

5.3.3.I. ФОРМЫ ЭЛЕМЕНТА И ГРУППЫ

По умолчанию для просмотра, ввода и редактирования данных справочника используется форма списка (рис. 5.1, 5.2), которая содержит все реквизиты справочника. Бесспорно, просматривать данные в такой форме удобно. Однако редактирование или добавление данных лучше осуществлять посредством специальных форм для элемен-

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

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.6. Задание способов редактирования справочника Сотрудники_2
Замечание. По умолчанию после выбора для свойства Редактировать пункта Обоими способами редактирование и добавление элементов и групп осуществляется в диалоге, то есть через их формы. В форме списка будет доступен только просмотр справочника. Для получения возможности редактирования в списке следует после запуска формы списка выполнить цепочку Действия - V Редактировать в диалоге либо употребить, например в предопределенной процедуре ПриОткрытии, при вызове формы списка справочника ее метод РедактироватьВДиалоге, установив в его первый параметр нуль. В то же время добавим, что для надежного контроля данных лучше использовать единственный источник их поступления - диалог элемента (группы) и отказаться от более простого на первый взгляд способа их редактирования в списке формы.

Чтобы создать Формы элементов и групп, нажмем, оставаясь в диалоге рис. 5.5, кнопку Форма элемента и воспользуемся окном (рис. 5.7) для размещения реквизитов справочника в диалоге формы элемента.

Размещение реквизитов Справочника

гакамигы

? Наименование ? Оклад

W Вставлять пня

W Разместить в диалоге автоматически

К Вызывать для новых Форм

Помощь

Отмена

Вставить

Рис. 5. 7. Помощник размещения реквизитов справочника в диалоге формы элемента

Приведем диалог к виду, представленному на рис. 5.8, сделав дополнительно поле Код недоступным для редактирования (это выполняется на закладке Общие окна свойств элемента Код).

3

Код (кед Сотрудник |наименоеамйё ОК

Оклад ІО г лад Закрытъ I

Рис. 5.8. Диалог формы редактирования элемента справочника Сотрудники_2

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

Замечание. Если для атрибута Код установить символьный тип, то, используя встроенную процедуру ПрефиксАвтонумерации, или методы ПрефиксКода (для справочника), или ПрефиксНомера (для документа), можно задать префикс, который будет использоваться при автоматическом назначении кода. Процедура ПрефиксАвтонуме-рации имеет следующий синтаксис:

ПрефиксАвтонумерации(разновидность, префикс);

где параметр разновидность - это символьное выражение, задающее разновидность типа справочника или документа, например "Справочник. Сотрудники" или "Доку-мент.ИзменениеОклада". Если нужно применить префикс ко всем справочникам (документам), то для задания значения параметра разновидность используется строка "Справочник.*" ("Документ.*"). Параметр префикс также имеет символьный тип и задает, как это следует из его названия, префикс.

Пример:

// Установим префикс номера для документа БольничныйЛист ПрефиксАвтонумерации("Документ.БольничныйЛист", "БЛ-");

Второй способ сделать атрибут Код доступным только для просмотра - это заменить редактируемое поле на элемент диалога Текст (рис. 5.9).

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.9. Диалог, в котором Код выводится с использованием элемента диалога Текст
Замена выполнена следующим образом. Во-первых, удаляется поле с идентификатором Код. Во-вторых, вставляется элемент диалога Текст с пустыми данными на закладке Общие, но с определенной на закладке Дополнительно формулой Код (рис. 5.10).

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.10. Задание формулы для элемента диалога Текст
Такие свойства позволят выводить в диалоге формы элемента справочника разный текст, а точнее - значение реквизита Код, изменяющееся при переходе от одного элемента к другому. Чтобы обеспечить единообразие с имеющимися элементами диалога, прижмем выводимый текст влево и отцентрируем его по вертикали.

Замечание. В любой момент в диалог можно добавить отсутствующий в нем реквизит справочника, выбрав на панели инструментов Элементы диалога иконку l-'S-.

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

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.11. Диалог формы редактирования группы справочника Сотрудники_2
Этот диалог создается после нажатия кнопки Форма группы приведенного на рис. 5.5 окна. При этом флаг Одна форма для элемента и группы, расположенный в этом окне, должен быть отключен.

5.3.3.2. ФОРМЫ СПИСКА

Формы списка изменяются после выбора на рис. 5.5 одноименной кнопки. Форм может быть несколько. Одну можно использовать как основную, открываемую по умолчанию из меню по команде СправочникСотрудники_2.Открыть, вторую - для использования методом ОткрытьПодбор. Так и поступим. При этом в первую форму списка мы вставим дерево групп (см. рис. 5.1), а во вторую - нет (рис. 5.12).

Код Наименование ?клад
_ _
Рис. 5.12. Форма списка справочника Сотрудники_2 без дерева групп

Кроме того, в первой форме мы сохраним запрет на выбор групп при вызове метода Выбрать (этот запрет в методе Выбрать задан по умолчанию), а во второй, применив в предопределенной процедуре ПриОткрытии метод ВыборГруппы(1), этот запрет снимем. (Описание методов справочника см. в разд. 5.12.2.)

Замечание. Заголовок столбца, например Наименование, можно при желании заменить на иной, например на ФИО (аббревиатура слов фамилия, имя, отчество). Для этого столбец выделяется и затем осуществляется вызов окна Свойства поля ввода (Наименование), в котором и реализуется намеченное мероприятие.

Создавая вторую форму, мы после выбора Формы списка - Редактировать должны нажать копку Новый и дать форме имя, например ФормаДляВыбора. Затем, выбирая имена форм и применяя кнопки Основная и Для выбора, разделить формы по назначению (рис. 5.13).

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.13. Разделение форм списков по назначению
Пока что ФормаДляВыбора не создана. Чтобы устранить этот недостаток, выберем на рис. 5.13 кнопку Изменить и в появившемся окне (рис. 5.14) сразу нажмем ОК.

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.14. Помощник создания формы списка
Теперь после запуска программы из разд. 5.4 отображаемая в результате применения метода

ОткрытьПодбор(''Справочник.Сотрудники_2''„ контПодбора);

форма будет иметь приведенную на рис. 5.12 структуру.

Тот же список откроется и при следующем вызове:

ОткрытьПодбор("Справочник.Сотрудники_2", "ФормаДляВыбора", контПодбора);

Впрочем, если метод ОткрытьПодбор вызвать так:

// Указываем явно имя основной формы списка для метода ОткрытьПодбор ОткрытьПодбор("Справочник.Сотрудники_2", "ФормаСписка", контПодбора);

то им будет использована основная, использующая дерево групп форма списка справочника Сотрудники_2.

5.3.4. ЭТАП 4. НАПИСАНИЕ МОДУЛЕЙ ФОРМ

5.З.4.1. ТРЕБОВАНИЯ К ПРОЦЕДУРАМ МОДУЛЕЙ

ФОРМ СПРАВОЧНИКА

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

кузьмина раиса николаевна

функция преобразует ФИО в надлежащий вид:

Кузьмина Раиса Николаевна

Чтобы исключить сокращения в ФИО, можно осуществить проверку на наличие в ФИО точки и при ее обнаружении запрещать запись введенных данных. Тогда не будет возможности ввести ФИО следующим образом:

Кузьмина Р. Н.

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

Функция, связанная с реквизитом Наименование в форме для группы, должна препятствовать созданию одноименных групп в пределах одного родителя. Тогда в пределах группы 01 Цех эта функция запретит создание двух одинаковых подразделений.

Напишем для примера в модуле формы элемента справочника Сотрудники_2 функцию КонтрольФИО, связав ее, как и планировалось, с элементом диалога Наименование (это выполняется на закладке Дополнительные в окне задания свойств элемента). В модуле формы группы разместим функцию Уникальность, также связанную с элементом диалога Наименование, но уже в форме группы.

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

#3аписать?3акрыть

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

Чтобы предварить запись элемента справочника вызовом функции КонтрольФИО (Уникальность), используем в обеих формах предопределенную процедуру ПриЗапи-си, разместив в ней вызов функции КонтрольФИО (Уникальность). Это нужно, поскольку функция КонтрольФИО (Уникальность) вызывается:

1) всегда, когда выбран реквизит диалога Наименование, значение реквизита изменено и нажата клавиша Enter;

2) только единожды, когда покидается реквизит диалога Наименование в результате нажатия на любую (кроме Enter) меняющую положение курсора клавишу, например на табуляцию, или в результате применения мыши. Если затем вновь выбрать поле Наименование, а вслед переместиться с него, не прибегая к Enter, на другой элемент диалога, связанная функция (формула) вызвана не будет.

А это означает, что если не вызывать КонтрольФИО (Уникальность) при нажатии на ОК, то мы можем осуществить запись неверного значения реквизита Наименование: с точками в случае формы элемента или дублирующего имя существующего подразделения в случае формы группы.

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

форма.ОКИден.Доступность(0); // ОКИден - идентификатор копки ОК

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

Третий, пожалуй, наиболее удачный вариант - это наложить запрет на перемещение с поля диалога, содержащего ошибочные данные. Но он в 1С неосуществим (метод модуля формы Активизировать, который можно было бы использовать для реализации предложенного запрета, нельзя употреблять в формулах элементов диалогов, кроме кнопок).

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

СтатусВозврата(0); // Запрещает запись ошибочных данных

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

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.15. Диалог после нажатия на кнопку Закрыть (при наличии изменений в данных)
Однако нам удастся избежать ввода неверных данных, если нажать Да, поскольку в этом случае сработает предопределенная процедура ПриЗаписи, выполняющая поиск ошибок.

Замечание. Команду #3акрыть, выполняемую при нажатии на кнопку Закрыть, можно заменить вызовом метода Форма.Закрыть(0). Равный нулю аргумент метода обеспечит закрытие формы без представленного на рис. 5.15 вопроса. Однако этот вопрос все равно будет появляться при попытке закрыть форму элемента или группы с измененными данными, нажимая на Esc, или используя крестик, или применяя Ctrl+F4.

Также в обоих модулях осуществим в предопределенной процедуре ПриОткрытии вызовы методов ПанельИнструментов и Заголовок. Первый поможет нам изъять из диалога ненужные вспомогательные иконки, а второй - задать заголовок диалога.

5.3.4.2. ПРОЦЕДУРЫ МОДУЛЯ ФОРМЫ ЭЛЕМЕНТА

Проверяют и корректируют ФИО по изложенным в предыдущем разделе правилам.

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

ОчистшъОкноСообщенийО;

форма.ПанельИнструментов(0); // Отключаем панель инструментов форма. Загаловок("Сотрудник предприятия"); конецПроцедуры // ПриОткрытии

функция КонтрольФИО(место = 1) далее процедура УбратьПробелыО далее процедура ВНРег() далее

// Проверяет, все ли данные введены и вызывает функцию КонтрольФИО

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

процедура ПриЗаписи()

если (ПустоеЗначение(Наименование) = 1) или (ПустоеЗначение(Оклад) = 1) или (ПустоеЗначение(Образование) = 1) тогда Предупреждение("В диалоге есть неопределенные реквизиты.");

СтатусВозврата(0); // Не записываем данные

// Функция КонтрольФИО вернет 0, если в ФИО есть точки иначеЕсли КонтрольФИО(2) = 0 тогда

СтатусВозврата(О); // Запрещает запись ошибочных данных

конецЕсли;

конецПроцедуры // ПриЗаписи функция КонтрольФИО(место = 1)

// Параметр место равен 1, если вызов осуществляется из формы, то есть // формула имеет вид КонтрольФИО() или КонтрольФИО(1),

// и равен 2, если КонтрольФИО вызывается из процедуры ПриЗаписи

// Если вызов осуществляется из процедуры ПриЗаписи, тогда нет необходимости вызывать

// процедуры УбратьПробелы и ВНРег, корректирующие при необходимости

// Наименование, поскольку все необходимые изменения Наименования функцией

// КонтрольФИО уже произведены (см. выше порядок вызова КонтрольФИО в диалоге)

если место = 1 тогда // Вызов осуществляется из диалога

УбратьПробелыО; // Удаляет избыточные пробелы между словами

// Процедура ВНРег преобразовывает ФИО так, что первые буквы каждого // составляющего ФИО слова - прописные, а остальные - строчные ВНРег(); конецЕсли;

если Найти(Наименование,".") о 0 тогда

Предупреждение("Точки в ФИО недопустимы."); возврат 0;

иначе // Точек в имени нет

возврат 1; конецЕсли; , конецФункции // КонтрольФИО

процедура УбратьПробелыО перем длина, поз, к;

// Удаляем возможные ведущие и завершающие пробелы Наименование = СокрЛП(Наименование);

поз = Найти(Наименование, " "); // Ищем 2 подряд идущих пробела

// Цикл продолжается, пока в строке есть хотя бы одна пара подряд идущих пробелов пока поз > 0 цикл

длина = стрДлина(Наименование); // Длина ФИО

к =1; // Число лишних пробелов

пока (поз < длина) и (Сред(Наименование, поз + к, 1) = " ") цикл к = к+ 1;

конецЦикла; // пока (поз < длина). ..

// Удаляем лишние пробелы и заменяем старое значение ФИО на новое Наименование = Лев(Наименование, поз) + Прав(Наименование, длина- поз - к + 1); поз = Найти(Наименование, " "); // Ищем 2 подряд идущих пробела

конецЦикла; // пока поз > О конецПроцедуры // УбратьПробелы

Замечание. В процедуре УбратьПробелы можно было бы избавиться от возможных точек в ФИО, добавив в ее начало код

// Заменяем точки на пробелы ФИО = СтрЗаменить(ФИО,"."," ");

однако тогда окажется возможным запись ФИО в виде Кузьмина Р Н

// Процедура ВНРег преобразовывает ФИО так, что первые буквы каждого // составляющего ФИО слова - прописные, а остальные - строчные процедура ВНРегО

перем к, длина;

// Обработаем каждое слово ФИО встроенными функциями Врег и Нрег // Теперь, когда слова разделены одним пробелом и в конце ФИО нет пробелов,

// выделение слов тривиально // Алгоритм:

// 1. Преобразовываем все символы наименования в нижний регистр

// 2. Находим первый символ каждого слова и преобразовываем его в верхний регистр.

// Чтобы иметь возможность употреблять функцию Найти для поиска // очередного пробела (после него следует первая буква слова), будем // заменять найденный пробел на символ % (таких символов в ФИО быть не должно), // а после выполнения всех преобразований заменим символы % на пробелы

длина = стрДлина(Наименование); если длина = 0 тогда //Длина ФИО
возврат;
конецЕсли;

Наименование = Нрег(Наименование);
// Первый шаг алгоритма
// Подготовка к выполнению второго шага алгоритма // Первая буква ФИО - прописная

Наименование = Врег(Лев(Наименование, 1)) + Прав(Наименование, длина- 1); // к - позиция пробела, или нуль, если пробел не найден к = Найти(Наимен(звание, " "); пока к > 0 цикл

// Найден пробел. Формируем заново Наименование, в котором,

// найденный пробел заменен на %, а первая буква очередного слова

// преобразована в прописную

Наименование = Лев(Наименование, к - 1) + "%" +

Врег(Сред(Наименование, к + 1, 1)) + Прав(Наименование, длина - к - 1); к = Найти(Наименование, " "); конецЦикла; // пока к < длина

// Заменяем символы % на пробелы Наименование = СтрЗаменить(Наименование, "%", " "); конецПроцедуры // ВНрег

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

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.16. Изменение периодического реквизита Оклад
Однако такой диалог отображается не всегда, что не позволяет редактировать периодический реквизит Оклад. Чтобы гарантированно иметь возможность изменять оклад сотрудников, в код модуля формы элемента, например в предопределенную процедуру ПриОткрытии, нужно добавить оператор

СохранениеПериодическихРеквизитов(к, " Оклад");

в котором к - это число, равное 2, 3, 4 или 5.

5.3.4.3. ПРОЦЕДУРЫ МОДУЛЯ ФОРМЫ ГРУППЫ

Проверяют на уникальность имя вновь вводимой или редактируемой группы. Для проверки (при вводе новой группы) мог бы подойти, например, следующий алгоритм:

1. Выполнить поиск группы по наименованию (функция НайтиПоНаименованию).

2. Если группа найдена, то запретить ввод записи (нарушена уникальность).

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

Чтобы это ограничение обойти, следует создать объект

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

с которым и употребить метод НайтиПоНаименованию:

// Второй параметр метода - 0, следовательно, выполняем поиск во всем справочнике флаг = сСотр_2.НайтиПоНаименованию(Наименование, 0);

где Наименование - имя вводимой или редактируемой группы.

процедура ПриОткрытии( ) // Подготовительные действия

ОчиститьОкноСообщений();

форма.ПанельИнструментов(0); // Отключаем панель инструментов

форма.Заголовок("Подразделение предприятия"); конецПроцедуры // ПриОткрытии

функция Уникальность( ) далее // Вызывает функцию Уникальность, и если она возвращает 1,

// то осуществляется запись группы справочника Сотрудники_2 процедура ПриЗаписи()

если (ПустоеЗначение(Наименование) = 1) тогда Предупреждение("Выберите подразделение.");

СтатусВозврата(0); // Не записываем данные

// Если нарушена уникальность имен подразделений иначеЕсли Уникальность() = 0 тогда

СтатусВозврата(0); // Запрещает запись ошибочных данных

конецЕсли;

конецПроцедуры // ПриЗаписи

функция Уникальность() перем сСотр_2, флаг;

// Выполняем поиск группы по ее имени // Вариант 1

// Группа не найдена, запись разрешена // Вариант 2

// Группа найдена и ее код равен коду редактируемой группы (при вводе новой группы // это невозможно, поскольку коды всех записей уникальны), запись разрешена // Вариант 3

// Группа найдена и ее код отличен от кода редактируемой // или новой группы, запись запрещена сСотр_2 = СоздатьОбъект(" Справочник. Сотрудники_2"); флаг = сСотр_2.НайтиПоНаименованию(Наименование, 0);

если флаг = 0 тогда // Вариант 1

возврат 1;

иначеЕсли (флаг = 1) и (сСотр_2.код = Код) тогда // Вариант 2

возврат 1;

иначеЕсли (флаг = 1) и (сСотр_2.код <> Код) тогда //Вариант 3

Предупреждение("Неуникальное имя подразделения."); возврат 0; конецЕсли;

// То же можно записать компактнее:

// если (флаг = 1) и (сСотр_2.код <> Код) тогда // Вариант 3

// Предупреждение("Неуникальное имя подразделения.");

// возврат 0;

// конецЕсли;

// возврат 1; // Варианты 1 и 2

конецфункции // Уникальность

Замечание. Такой простой способ контроля уникальности названия подразделения предприятия выбран потому, что в справочнике Сотрудники_2 не может быть записей с одинаковым кодом. При этом мы предполагаем, что названия подразделений и ФИО сотрудников совпадать не могут.

5.4. ПРОСМОТР И ВЫБОР ЭЛЕМЕНТОВ СПРАВОЧНИКА

Справочники можно открыть в диалоге следующими способами:

• обращаясь к меню системы;

• применяя метод справочника Выбрать;

• вызывая в модуле произвольной формы функции ОткрытьФорму или ОткрытьФормуМодально;

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

Дополнительно функция ОткрытьФорму и метод ОткрытьПодбор позволяют, используя контекст открытой формы (подбора), манипулировать открытой формой. В случае метода ОткрытьПодбор для этих целей применяется предопределенная процедура ОбработкаПодбора.

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

Замечание. Размеры диалога модально открытой формы в отличие от формы, открытой немодально, не могут быть изменены.

Пример 1. Форма списка основная справочника Сотрудники_2 открывается методом Выбрать. Если элемент выбран, в окне сообщений печатается ФИО сотрудника.

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем сСотр_2;

ОчиститьОкноСообщенийО;

сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2"); если сСотр_Выбрать("Выберите сотрудника", "ФормаСписка") = 1 тогда Сообщить(сСотр_2.Наименование);

иначе // Метод Выбрать вернул 0

Сообщить("Сотрудник не выбран."); конецЕсли;

конецПроцедуры // Выполнить

Форма, открываемая методом Выбрать, приведена на рис. 5.17; для выбора можно

употребить клавишу Enter, двойной удар мыши, а также иконку *

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.17. Форма, открываемая методом Выбрать
Замечание. Область интерактивного выбора элементов ограничивается методом ИспользоватьРодителя. Так, вызовы

сСотр_2.ИспользоватьРодителя(род, 0);

сСотр_2.Выбрать('Тодителя сменить нельзя", "ФормаСписка'');

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

Пример 2. Выбор сотрудников ограничивается подразделением 01/1 цеха 1.

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем сСотр_2, флаг, род;

ОчистшъОкноСообщенийО;

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

//11 - код подразделения 01/1 первого цеха

флаг = сСотр_2.НайтиПоКоду( 11,0); // Поиск во всем справочнике если флаг = 0 тогда

Предупреждение(''Подразделение с кодом 11 не найдено."); возврат; конецЕсли;

// Ограничиваем выбор сотрудников подразделение 01/1 // Будет после вызова метода Выбрать открыт приведенный на рис. 5.17 диалог род = сСотр_2.ТекущийЭлемент(); сСотр_2.ИспользоватьРодителя(род, 0);

// Вместо двух последних операторов можно употребить один:

// сСотр_2.ИспользоватьРодителя(сСотр_2, 0);

если сСотр_2.Выбрать("Родителя сменить нельзя", "ФормаСписка") = 1 тогда Сообщить(сСотр_2.Наименование);

иначе // Метод Выбрать вернул 0

Сообщить("Сотрудник не выбран."); конецЕсли;

конецПроцедуры // Выполнить

Пример 3. Форма списка основная справочника Сотрудники 2 открывается функцией ОткрытьФорму.

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем контПодбора; // Результат работы процедуры см. на рис. 5.

ОчиститьОкноСообщений();

ОткрытьФорму("Справочник.Сотрудники_2.ФормаСписка", контПодбора);

// По умолчанию открывается форма списка основная, поэтому следующий вызов // откроет ту же форму, что и предыдущий // ОткрытьФорму("Справочник.Сотрудники_2", контПодбора); Сообщить(контПодбора.Наименование); //Напечатает 01 Цех конецПроцедуры // Выполнить

Пример 4. Форма ввода нового сотрудника второго цеха в справочник Сотрудни-ки_2 открывается функцией ОткрытьФорму. Вслед открывается форма ввода новой группы первого меха.

процедура Выполнить^ ) // Связана с кнопкой Пуск обработки Проба

перем сСотр_2, конт1, конт2;

ОчиститьОкноСообщений();

сСотр_2 = СоздатьО6ъекг("Справочник.Сотрудники_2"); если сСотр_2.НайтиПоКоду(2, 0) = 1 тогда //2 - код второго цеха // Открываем форму ввода нового сотрудника второго цеха // Третий параметр функции задает родительскую группу

ОткрытьФорму('Элемет\Сотру,дники_2'', конті, сСотр_2.ТекущийЭлемент( ), 0); Сообщшъ(кот1 .Код); // Напечатает код нового сотрудника

иначе .

Предупреждение(''Цех 2 не найден."); возврат; конецЕсли;

еслисСотр_2.НайтиПоКоду(1, 0) = 1 тогда //1 - код первого цеха // Открываем форму ввода новой группы первого цеха

ОткрытьФорму(''Элемет\Сотрудники_2''. конт2, сСотр_2.ТекущийЭлемент(), 1); Сообщигъ(конг2.Код); // Напечатает код новой группы

иначе

Предупреждение(''Цех 1 не найден."); возврат; конецЕсли;

конецПроцедуры // Выполнить

Замечание. В примере 4 форма группы будет находиться поверх формы элемента. Это определяется порядком их вызова.

Пример 5. Открывается форма редактирования текущей записи справочника (группы или элементах.

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем сСотр_2, конт;

ОчиститьОкноСообщений();

сСотр_2 = СоздатьОбьект(''Справочник.Сотрудники_2'');

// Ищем по коду во всем справочнике если сСотр_2.НайтиПоКоду(201, 0) = 1 тогда

// При этом вызове параметр функции ОткрытьФорму имеет тип Справочник ОткрытьФорму(сСотр 2ТекущийЭлемент(), конт. 0); иначе

Предупреждение("Элемент не найден."); возврат; конецЕсли;

конецПроцедуры // Выполнить

Пример 6. Форма списка справочника Сотрудники_2 открывается методом ОткрытьПодбор. Предопределенная процедура ОбработкаПодбора запускается при выборе (двойном ударе мыши или нажатии на Enter) ячейки третьего уровня и выводит в окно сообщений атрибуты открытой формы.

процедура Выполнить( ) // Связана с кнопкой Пуск обработки Проба

перем контПодбора; // Результат работы процедуры см. на рис. 5.2

ОчиститьОкноСообщенийО;

// По умолчанию открывается форма списка для выбора ОткрытьПодбор(''Справочник.Сотрудники_2'',, контПодбора); конецПроцедуры // Выполнить // Запускается при выборе (двойном ударе мыши или нажатии на Enter) ячейки третьего уровня I // Принимает в качестве параметра контекст справочника процедура ОбработкаПодбора(конт)

Сообщить(конт. Наименование);

Сообщить(конт. Родитель);

// Дата для доступа к периодическому реквизиту Оклад конт.ИспользоватьДату(РабочаяДата());

Сообщить(конт. Оклад); конецПроцедуры // ОбработкаПодбора

Возможный вариант сообщений, поступающих из процедуры ОбработкаПодбора: Добрецов Борис Юрьевич

01/1

2300

5.5. ДОБАВЛЕНИЕ, РЕДАКТИРОВАНИЕ И УДАЛЕНИЕ ЗАПИСЕЙ

5.5.1. УПРАВЛЕНИЕ ЗАПИСЯМИ СРЕДСТВАМИ ИНТЕРФЕЙСА

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

 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.18. Панель инструментов формы списка справочника
Замечание. Положение панели инструментов формы списка изменяется в резуль тате выполнения цепочки Сервис - Панели инструментов - Дополнительные - Инструментальные панели окон (рис. 5.19).

Панели і*ютру^ентов | Модификация Допо/м/гельине |
 ПЕРЕЧИСЛЕНИЕ СКИДКИ
Рис. 5.19. Задание положения панели инструментов формы списка справочника


Содержание раздела