МЕТОДЫ И ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ СПРАВОЧНИКОВ
Управление справочником осуществляется через его методы, которые можно разделить на 4 группы:
1. Методы Получить и Установить периодических реквизитов справочника.
2. Общие методы справочника; они могут быть вызваны как в модулях его форм, так и в модулях, где создан объект типа Справочник, например сСотр_2. В первом случае методы вызываются без префикса, например Записать( ), во втором - им предваряются, например сСотр_2.3аписать( ). Не все методы этой группы будут, однако, работать в форме элемента или списка справочника. Так, метод Выбрать-Элементы, будучи вставленным в модуль формы элемента справочника и использованным для текущего справочника (записывается без префикса), синтаксический контроль пройдет, но при вызове возникнет ошибка, сопровождаемая сообщением
ВыбратьЭлементы();
Объект не может быть перепозиционирован!
Но мы уже знаем: для того, чтобы эту ошибку преодолеть, нужно создать объект типа Справочник, например сСотр_2, соответствующей разновидности и употребить с ним этот метод:
сСотр_2.ВыбратьЭлементы();
3. Методы, используемые только в форме элемента, группы или списка справочника, например ПросмотрИстории. Их действие распространяется или на текущий элемент, если метод вызван в форме элемента, или на текущий справочник.
4. Методы, используемые только в форме списка справочника, например Сортировка. Их действие распространяется на текущий справочник.
5.12.1. МЕТОДЫ ПЕРИОДИЧЕСКИХ РЕКВИЗИТОВ
Метод Получить имеет следующий синтаксис:
значение = <спрЭлем>.<пРекв>.Получить([<датаПРекв>]);
Возвращает значение периодического реквизита пРекв для элемента справочника спрЭлем на заданный параметром датаПРекв момент времени. Если параметр дата-ПРекв опущен, то по умолчанию вместо него используется либо точка актуальности (ТА), если используется компонент Оперативный учет, либо рабочая дата - в противном случае.
Пояснение. Понятие ТА вводится в 1С для объектов типа Регистры. Такие объекты накапливают данные, например остатки или обороты ресурсов. Для первой цели применяются регистры остатков, для второй - оборотные регистры. Так вот, ТА - это момент времени, на который зафиксированы значения всех регистров остатков.
Метод Получить может быть использован как в модулях форм элемента и списка справочника, так и с объектами типа Справочник, возвращаемыми, например, функцией СоздатьОбъект или определенными в качестве реквизитов других объектов, например документов.
Пример. Методом Получить возвращаются на рабочую дату оклады сотрудников из справочника Сотрудники_2.
процедура Выполнить() // Связана с кнопкой Пуск обработки Проба
перем сСотр_2, рабДат, окл;
ОчистшъОкноСообщенийО;
// Создаем объект сСотр_1
сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2"); рабДат = РабочаяДата(); сСотр_2.ВыбратъЭлементы(); пока сСотр_2.ПолучитъЭлемент() = 1 цикл если сСотр_2.ЭтоГруппа() = 1 тогда продолжитъ; конецЕсли;
окл = сСотр_2.0клад.Получить(рабДат);
//или
// окл = сСотр_2.ТекущийЭлемент( ).Оклад.Получить(рабДат); Сообщить(СокрП(сСотр_2.Наименование) + Символ Табуляции + окл); конецЦикла; // пока конецПроцедуры // Выполнить
Фрагмент возможного результата:
Горюнова Ульяна Валерьевна |
2700 |
Костина Ольга Владимировна |
2900 |
Куприкова Людмила Сергеевна |
2100 |
Замечание. Метод Получитъ (Установитъ) нельзя одновременно употреблять с методом ИспользоватьДату для одного и того же объекта типа Справочник.
Метод Установить имеет следующий синтаксис: <спрЭлем>.<пРекв>.Установить(<датаПРекв>, <значПРекв>);
Устанавливает значение периодического реквизита пРекв элемента справочника спрЭлем, равное величине, возвращаемой выражением значПРекв, на дату, заданную параметром датаПРекв. Используется только с объектами, созданными функцией СоздатьОбъект.
Пример. Сотрудникам из справочника Сотрудники_2, ставка которых меньше 2900 руб., начиная с текущей даты повышается оклад на 500 руб.
процедура Выполнить() // Связана с кнопкой Пуск обработки Проба
перем сСотр_2, текДат, окл, новОкл;
ОчиститьОкноСообщений();
сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2"); текДат = ТекущаяДата( ); с Сотр_2. ВыбратьЭлементы(); пока сСотр_2.ПолучитьЭлемент() = 1 цикл окл = сСотр_2.0клад.Получшъ(текДат); если (сСотр_2.ЭтоГруппа( ) = 1) или (окл >= 2900) тогда
продолжить; // Пропускаем группы
конецЕсли; // и сотрудников с "большим" окладом
// Повышение оклада
сСотр_2.0клад.Установить(текДат, окл + 500); новОкл = сСотр_2.0клад.Получить(текДат);
Сообщить(СокрП(сСотр_2. Наименование) + СимволТабуляции + новОкл); конецЦикла; // пока конецПроцедуры // Выполнить
Фрагмент результата:
Горюнова Ульяна Валерьевна 3200
Куприкова Людмила Сергеевна 2600
Замечания:
1. Метод Установить меняет значение периодического реквизита справочника без последующего применения метода Записать.
2. Для метода Установить недопустим вызов типа сСотр_2.ТекущийЭлемент( ).Оклад.Установить(текДат, новОкл); // Это ошибка хотя подобный вызов вполне применим с методом Получить: сСотр_2.ТекущийЭлемент().Оклад.Получить(рабДат);
3. Повышение оклада выполнено в обход документа Приказ об изменении оклада. Это зафиксировано и в истории периодического реквизита Оклад, например для Горюновой У. В. (рис. 5.59).
 |
Рис. 5.59. История изменения периодического реквизита Оклад |
Обратим внимание, что факт отсутствия документа фиксируется в первом столбце таблицы с историей иконкой На практике, однако, такие неформальные манипуляции с окладами (и многими иными реквизитами) нежелательны и их лучше осуществлять на основе соответствующих документов. При этом взамен метода Установить в модуле документа следует использовать метод УстановитьРекви-зитСправочника, записывающий значение периодического реквизита справочника с привязкой к документу.
5.12.2. ОБЩИЕ МЕТОДЫ СПРАВОЧНИКОВ
Приведем их в табл. 5.8. После таблицы расположим примеры, эти методы иллюстрирующие. Напомним, что методы-функции могут быть вызваны и как процедуры, то есть в виде отдельных операторов.
Метод |
Описание |
видСпрІ = спр.Вид([видСпр2]); |
Возвращает вид справочника. Также может быть употреблен для задания вида видСпр2 объекта типа Справочник неопределенного вида, то есть созданного так: спр = СоздатьОбьект("Справочник"); |
предВида =
спр. ПредставлениеВида(); |
Возвращает представление вида справочника спр, то есть либо синоним справочника (рис. 5.5), либо его идентификатор, если синоним не задан |
ур = спр.Уровень(); |
Возвращает номер уровня текущего элемента справочника спр |
спр.УстановитьАтрибут(рекв, знач); |
Устанавливает значение непериодического реквизита рекв равным величине знач (напомним, реквизиты являются атрибутами справочника). Для сохранения изменений нужно вызвать метод Записать |
знач = спр.ПолучитьАтрибут(рекв); |
Возвращает значение реквизита рекв текущей записи справочника |
флаг = спр.ЭтоГруппа(); |
Вернет 1, если текущий элемент является группой, или 0 |
флаг = спр.ПринадпежигГруппе (группа); |
Вернет 1, если текущий элемент принадлежит к группе группа, или 0 -в противном случае |
флаг = спр.Выбран(); |
Возвращает 1, если справочник позиционирован на своей записи, или 0 -в противном случае |
*флаг - спр.Выбрать(заг, формаСписка); |
Открывает диалог с заголовком заг, использующий форму списка, заданную параметром формаСписка, для выбора элемента справочника. После закрытия диалога, если элемент выбран, вернет 1 и позиционирует справочник на этом элементе. Если элемент не выбран, метод вернет 0. Если формаСписка = "", то употребляется форма списка для выбора.
В открытом диалоге курсор позиционируется на текущем элементе справочника.
Диалог выбора элемента вызывается и для элементов диалога типа Справочник, расположенных в формах отчетов, справочников, журналов и документов |
Устанавливает для справочника спр, вид которого не определен, виды для выбора методом Выбрать и возвращает строку, содержащую ранее установленные виды для выбора. Может быть также употреблен и для реквизита типа Справочник неопределенного вида, являющегося компонентом иного объекта.

Новые виды для выбора задаются в виде строки, содержащей разделенные запятыми идентификаторы справочников, например видыНое = "Сотрудники_2, Образование_2";
Если видыНое содержит более одного идентификатора, то метод Выбрать активизирует диалог, предлагающий
Метод |
Описание |
|
выбрать один из справочников (рис. 5.59).
Если видыНов = "" или метод ВидыДляВыбора не употреблены вовсе, то метод Выбрать вызовет диалог, подобный изображенному на рис. 5.60, с полным списком справочников конфигурации |
выбТек = спр.ВыборГруппы ([выбНов]); |
Устанавливает режим выбора групп для метода
Выбрать и для элементов диалога типа Справочник. Группы можно выбирать в диалоге, если выбНов = 1, и нельзя - в противном случае. По умолчанию выбор групп разрешен для элемента диалога типа
Справочник в форме обработки (отчета) и запрещен, если диалог выбора активизируется методом Выбрать и если элемент диалога типа Справочник размещен в формах документов, журналов или справочников.
Метод возвращает существовавший до его вызова режим выбора групп. Если параметр выбНов опущен, то режим выбора групп не меняется |
элем = спр.ТекущийЭлемент(); |
Возвращает значение текущего элемента справочника. Возвращаемая величина имеет тип Справочник с разновидностью, возвращаемой методом Вид |
полнКод = спр.ПолныйКод(); |
Возвращает строку, содержащую полный код текущего элемента справочника |
полнИмя =
спр.ПолноеНаименование(); |
Возвращает строку, содержащую полное наименование текущего элемента справочника |
*флаг = спр.НайтиЭлемент(спрЭлем); |
Ищет элемент спрЭлем справочника и позиционирует справочник на элементе и возвращает 1, если поиск удачен, или не меняет позицию справочника и возвращает 0 в противном случае. Элемент спрЭлем должен иметь тип Справочник |
*флаг = спр.НайтиПоКоду(код), [режим]); |
Вернет 1 и переместит позицию справочника на элемент с кодом (или полным кодом) код, если такой элемент найден; в противном случае вернет 0, позиция справочника сохранится.
Поиск выполняется, если режим равен:
• 0, во всем справочнике;
• 1, в пределах родителя, заданного методом ИспользоватьРодителя, либо среди элементов уровня 1, если родитель явно не задан;
• 2, по полному коду.
Полный код - это строка, в которой коды уровней разделены символом /, например "1/12/121"; возвращается методом ПолныйКод.
Значение параметра режим по умолчанию есть:
• 0, для справочника, код в котором уникален в пределах всего справочника;
• 2, для справочника, код в котором уникален в пределах группы |
*флаг = спр.НайтиПоНаименованию (наим, [режим], [соотв]);
Вернет 1 и переместит позицию справочника на элемент с наименованием наим, если такой элемент найден; в противном случае вернет 0, позиция справочника сохранится.
Параметр режим принимает значения 0 или 1 и оказывает то же действие, что и одноименный параметр метода НайтиПоКоду. По умолчанию режим = 1.
Если соотв = 0, то поиск считается успешным, если наим и начальные символы реквизита Наименования совпадают, например если наим = "Еп", а фамилия сотрудника, хранимая реквизитом Наименование, Епифанов. Если соотв = 1, то для успешного поиска необходимо полное совпадение наим и Наименования.
По умолчанию соотв = 0.
Регистр задания значения параметра наим несущественным. Так, сотрудник Епифанов будет найден, если соотв = 0 и наим равен "Еп", или "еп", или "еП", или "ЕП". Если же в справочнике есть также сотрудник Епанов, то для наим = "Еп" будет найден он, поскольку поиск осуществляется среди наименований, расположенных по возрастанию их значений, а "Епанов" < "Епифанов"
*флаг -
спр. НайтиПо Реквизиту (рекв, знач, режим);
Ищет реквизит рекв, значение которого равно знач.
Если поиск успешен, что бывает, когда знач полностью совпадает со значением реквизита рекв, вернет 1, или 0 -в противн заданной методом ИспользоватьРодителя, если режим = 0, и во всем справочнике, если режим = 1. Метод может быть применен только для реквизитов, имеющих свойство Сортировка (см. разд. 5.6 и 5.7)
*флаг = спр.ВыбратьЭлементы ([режим]);
Открывает выборку элементов из справочника и возвращает 1, если можно выбрать хотя бы один элемент, или 0 - в противном случае. Элементы выбираются без учета иерархии, если режим = 0, и с учетом, если режим = 1. По умолчанию режим = 1. После вызова справочник позиционируется на первом элементе выборки. Выбор элементов осуществляется методом ПолучитьЭлемент
*флаг - спр.ВыбратьЭлементыПо Реквизиту(рекв, знач, [иерарх], [груп ]);
Открывает выборку элементов справочника, реквизит рекв которых равен знач. Собственно выборка осуществляется методом ПолучитьЭлемент. Такая выборка возможна только в том случае, если для реквизита рекв задано свойство Сортировка (см. рис. 5.29, б). Выборка осуществляется с учетом иерархии, если иерарх = 1, и без учета, если иерарх = 0. Параметр груп принимает те же значения, что и параметр иерарх. Метод вернет 0, если в выборке нет элементов, или 1 - в противном случае. Пример см. в разд. 5.7
Метод |
Описание |
*порТек = спр.ОбратныйПорядок ([порНов]); |
Если параметр порНов = 1, то выборка элементов, открываемая методами ВыбратьЭлементы или Выбрать-ЭлементыПоРеквизиту и осуществляемая методом По-лучитьЭлемент, выполняется в обратном порядке, и та же выборка выполняется в прямом порядке, если порНов = 0. Возвращает порядок выборки, существовавший до вызова метода. По умолчанию задан прямой порядок выборки. Если параметр порНов опущен, то метод только вернет текущий порядок выборки, не произведя никаких изменений. Пример см. в разд. 5.7 |
*флаг = спр.ПолучитьЭлемент ([режим]); |
Возвращает 1, если удалось выбрать элемент выборки, открытой методом ВыбратьЭлементы, или 0 -в противном случае (в выборке нет элементов или выборка исчерпана). После успешного выбора метод ПолучитьЭлемент перемещает справочник на следующую позицию выборки или за ее пределы, если все элементы выбраны. Выбранный элемент возвращается методом ТекущийЭлемент. Выбор очередной позиции осуществляется с учетом порядка, установленного методами:
• ВключатьПодчиненные;
• ИспользоватьВладельца;
• ИспользоватьДату;
• ИспользоватьРодителя;
• ОбратныйПорядок;
• ПорядокКодов;
• ПорядокНаименований;
• ПорядокРеквизита |
**датаТек = спр.ИспользоватьДату ([датаНов], [сразу]); |
Устанавливает параметром датаНов, имеющим тип Дата, дату выборки или записи периодических реквизитов справочника или объекта типа Справочник, являющегося компонентом иного объекта, например Документа. Возвращает ранее установленную для периодических реквизитов дату. Если параметр сразу = 1, то заданная методом дата используется в текущей выборке, если сразу = 0, то -в последующей. По умолчанию сразу = 0. Не может быть использован вместе с методами Получить и Установить. •
Не может иметь двойного префикса (см. пример для метода), например такого:
док. Сотрудник.ИспользоватьДату(ТекущаяДата());.
Если параметр датаНов опущен, то метод только вернет ранее установленную для периодических реквизитов дату |
Метод |
Описание |
**владТек =
спр.ИспользоватьВладельца ([владелец], [флагИзм]); |
Задает параметром владелец, имеющим тип Справочник с разновидностью справочника-владельца, элемент-владелец. После задания владельца методы Вы-братьЭлементы (ВыбратьЭлементыПоРеквизиту) и ПолучитьЭлемент, вызванные для подчиненного справочника, смогут выбрать только элементы, подчиненные элементу-владельцу. Также задает элемент-владелец для элемента, добавляемого в подчиненный справочник.
Если флагИзм = 1, то элемент-владелец может быть изменен интерактивно либо при выборе значения элемента диалога типа Справочник, либо при вызове метода Выбрать. Элемент-владелец не может быть изменен при интерактивном выборе элементов, если флагИзм = 0. По умолчанию флагИзм = 1.
Метод возвращает ранее установленный элемент-владелец. Причем если параметр владелец опущен, то метод только вернет существующего владельца, не производя иных действий. Пример употребления метода дан в разд. 5.10.3 и 5.10.5 |
**родТек =
спр.ИспользоватьРодителя ([родитель], [флагИзм]); |
Задает группу справочника, в которой методами справочника будет осуществляться выбор, поиск или добавление данных. Также употребляется для задания родителя с элементами диалога типа Справочник.
Группа задается параметром родитель, имеющим тип Справочник и содержащим значение группы справочника.
Параметр флагИзм имеет тот же смысл, что и одноименный параметр метода ИспользоватьВла-дельца.
Метод возвращает ранее установленного родителя. Причем, если параметр родитель опущен, то метод только вернет существующего родителя |
*вклТек = спр.ВключатьПодчиненные ([включать]); |
Если параметр включать = 1, то в выборку включаются подчиненные элементы, если включать = 0, то в выборку попадут только имена групп первого уровня.
По умолчанию подчиненные элементы включаются в выборку.
Возвращает текущее значения режима включения подчиненных. Если параметр включать опущен, то единственное назначение метода - это вернуть существующее значение режима включения подчиненных |
*спр.ПорядокКодов(); |
Если метод вызван, то выборка методом Получить Элемент будет осуществляться в порядке возрастания их кодов. Замечание. По умолчанию выборка выполняется в порядке возрастания основного представления справочника (рис 5.5), то есть Наименования или Кода |
Метод |
Описание |
*спр. ПорядокНаименований(); |
Если метод вызван, то выборка методом Получить Элемент будет осуществляться в порядке возрастания их наименований (см. также замечание к методу ПорядокКодов) |
*спр.ПорядокРеквизита(рекв); |
Если метод вызван, то выборка методом Получить Элемент будет осуществляться в порядке возрастания значения реквизита рекв. Метод может быть применен только с реквизитом, для которого задано свойство Сортировка (см. рис. 5.29, б). Если это условие не выполнено или реквизит задан неверно, то возникнет завершающая ошибка исполнения |
*спр.Новый( ); |
Создает пустую запись. Для ее добавления в справочник определяются соответствующие реквизиты и вызывается метод Записать. Пример см. в разд. 5.5.3.1 |
*спр.НоваяГруппа(); |
Создает пустую запись новой группы. Для ее добавления в справочник определяются реквизиты группы, например Код и Наименование, и вызывается метод Записать. Пример см. в разд. 5.5.3.1 |
префТек = спр.ПрефиксКода ([префНов]); |
Устанавливает префикс, употребляемый при автоматическом вычислении значения атрибута Код. Параметр префНов, содержащий значение префикса, имеет символьный тип. Возвращает префикс, заданный предыдущим вызовом метода. Если код имеет числовой тип, то префикс игнорируется |
спр.УстановитьНовыйКод(преф); |
Добавляет к коду элемента справочника префикс, заданный параметром преф |
спр.НазначитьТип
(рекв, тип, [длина], [точность]); |
Назначает тип или разновидность типа, заданную параметром тип, реквизиту рекв неопределенного типа. Символьный параметр тип может принимать значение базового типа ("Число", "Строка", "Дата"), любой определенной в конфигурации разновидности типа, например "Справочник.Дети" или "Доку-мент.ИзменениеОклада", или значение вида субконто |
спр.3аписать(); |
Обновляет текущий элемент справочника. Метод, в отличие от команды диалога #3аписать, не вызывает предопределенную процедуру ПриЗаписи |
*спр.Удалить(способ); |
Если способ = 1, то проставляет DBF-пометку удаления текущей записи. Такую запись средствами 1С вое-становить нельзя. Если способ = 0, то проставляет 1С-пометку удаления текущей записи (см. разд. 5.5.2).
По умолчанию способ = 1. Если удаляется запись справочника-владельца, то будут удалены (помечены для удаления) и все подчиненные ей записи |
флаг = спр.ПометкаУдаления(); |
Возвращает 1, если текущая запись имеет 1 С-пометку удаления, или 0 -в противном случае |
Метод |
Описание |
*спр.СнятьИометкуУдаленияО; |
Снимает 1С-пометку удаления текущего элемента справочника. Если запись, с которой снимается 1С-пометка удаления, имеет подчиненные записи в другом справочнике и они также имеют 1С-пометку удаления, то 1С-пометка удаления будет снята только с записи-владельца . |
флаг = спр.Блокировка([блк]); |
Возвращает/устанавливает режим блокировки записи. Если блк = 1, то блокировка устанавливается, и блокировка отключается, если блк = 0. Возвращает 1 если есть блокировка, или 0 -в противном случае |
Замечания: |
|
1. Имя спр переменной типа Справочник, употребленное в табл. 5.8 перед названи« ми методов, может быть произвольным. |
2. В форме элемента, группы или списка справочника методы, если они применяютс для текущего справочника, вызываются без префикса.
3. Методы, отмеченные в табл. 5.8 звездочкой, можно использовать только с объек тами, созданными функцией СоздатОбъект. То есть их нельзя употреблять для текущего справочника в форме его элемента, группы или списка.
4. Методы, отмеченные в табл. 5.8 двумя звездочками, можно использовать как с объектами, созданными функцией СоздатОбъект, так и для реквизитов тип Справочник, которые являются компонентами иных объектов, например докумен тов или справочников другого вида.
5. Имя реквизита рекв, используемое в методах, является символьным выражением возвращающим строку с именем реквизита, например строку "Оклад".
6. В методах УстановитьАтрибут и ПолучитьАтрибут при неверном значении пар з метра рекв возникнет завершающая ошибка, сопровождаемая сообщением "Неверное имя атрибута".
7. Параметры методов, если это не оговаривается особо, являются входными.
8. При изменении значений реквизитов методами Установить, УстановитьАтрибута УстановитьНовыйКод, Записать предопределенная процедура ПриЗаписи модуля формы элемента (группы) или списка не вызывается.
Примеры. Расположим их в процедуре Выполнить модуля обработки Проба Смысл фрагментов поясняется пользователю в окне, вызываемом встроенной процедурой Предупреждение.
процедура Выполните( ) // Связана с кнопкой Пуск обработки Проба
перем сСотр_2, сОбр_2, спр, флаг, гр, обр; перем видыТек, видыНов, род, дети;
ОчиститьОкноСообщенийО;
сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2");
// Пример для метода Вид
Предупреждение(''Создаем справочник неопределенного вида.");
// спр - объект типа Справочник неопределенного вида спр = СоздатьОбъект("Справочник");
спр.Вид("Образование_2"); // Задаем разновидность типа объекта спр
Сообщить(спр.Вид( )); // Напечатает Образование_2
// Пример для методов НайтиПоНаименованию, НайтиПоКоду,
// УстановитьАтрибут, Записать и ПолучитьАтрибут
Предупреждение("Меняем реквизит Образование у сотрудника с кодом 302.");
// Ищем по части наименования
флаг = спр.НайтиПоНаименованию("Нач", 0);
если флаг = 1 тогда
// Ищем во всем справочнике
флаг = сСотр_2.НайтиПоКоду(302, 0);
если флаг = 1 тогда // Сотрудник найден
сСотр_2.УстановитьАтрибут("Образование", спр.ТекущийЭлемент()); сСотр_2.3аписать();
// Те же изменения вызовут два следующих оператора:
// сСотр_2.0бразование = спр.ТекущийЭлемент();
// сСотр_2.3аписать();
Сообщить(сСотр_2.ПолучитьАтрибут("Образование"));
// То же сообщение выведет оператор // Сообщить(сСотр_2.Образование));
// Просмотр результата
сСотр_2.Выбрать("Просмотр результата", "ФормаСписка"); иначе
Предупреждение("Сотрудник с кодом 302 не найден."); конецЕсли; иначе
Предупреждение("В справочнике Образование_2 нет |элемента с наименованием Начальное."); конецЕсли;
// Пример для методов ТекущийЭлемент. ЭтоГруппа. ПринадлежитГруппе.
// ВыбратьЭлементы, ПолучитьЭлемент и Выбран
Предупреждение("Выводится список сотрудников цеха 1." + РазделительСтрок +
"Имена подразделений цеха не печатаются."); флаг = сСотр_2.НайтиПоНаименованию("01 Цех"); если флаг = 1 тогда
если сСотр_2.ЭтоГруппа() = 1 тогда // Запоминаем найденную группу гр = сСотр_2.ТекущийЭлемент(); сСотр_2.ВыбратьЭлементы(); пока сСотр_2.ПолучитьЭлемент() = 1 цикл
// Не выводим имена подразделений первого цеха
если (сСотр_2.ПринадлежитГруппе(гр) = 1) и (сСотр_2.ЭтоГруппа() = 0) тогда Сообщить(сСотр_2.Наименование); конецЕсли; конецЦикла; // пока
// После такого цикла метод Выбран вернет 0
если сСотр_2.Выбран() = 0 тогда
Сообщшъ("После цикла Пока элемент справочника не выбран."); конецЕсли; иначе
Предупреждение("Найденный элемент не группа."); конецЕсли; иначе
Предупреждение("Имя 01 Цех не найдено."); конецЕсли;
// Пример для методов ВидыДляВыбора, ВыборГруппы и Выбран.
// а также для методов ПолныйКод и ПолноеНаименование спр = 0;
// спр - справочник неопределенного вида спр = Создать0бъект("Справочник"); видыНов = "Сотрудники_2, Образование_2";
Предупреждение("Если выберете вид Сотрудники, то получите полные код | и наименование выбранного вслед элемента справочника."); видыТек = спр.ВидыДляВыбора(видыНов);
// Разрешаем выбор групп в диалоге выбора. По умолчанию выбор групп запрещен
спр.ВыборГруппы(0);
флаг = спр.Выбрать(, "ФормаСписка");
если флаг = 1 тогда
если спр.Вид( ) = "Сотрудники_2" тогда
Сообщить("Выбран сотрудник: " + спр.Наименование);
// Следующий вызов напечатает, например, 1/12/121 Сообщить(спр.ПолныйКод());
// Напечатает, например, 01 Цех / 01/2 / Волосков Михаил Андреевич Сообщить(спр.ПолноеНаименование()); иначе
Сообщить("Выбрано образование:" + спр.Наименование); конецЕсли; иначе
Предупреждение("Сотрудник не выбран."); конецЕсли;
// Пример для метопа НайтиЭлемент: справочник Сотрудники_2 // позиционируется на родителе выбранного элемента Предупреждение("После выбора сотрудника откроется форма,
| в которой выбран родитель сотрудника."); сСотр_2.ВыборГруппы(0); // Запрещаем выбор групп
// Открываем диалог формы для выбора
флаг = сСотр_2.Выбрать("Выберите сотрудника", "ФормаСписка"); если флаг = 1 тогда
сСотр_2.НайтиЭлемент(сСотр_2.Родитель);
сСотр_2.ВыборГруппы(1); // Разрешаем выбор групп
сСотр_2.Выбрать("Курсор размещен на родителе ранее выбранного элемента", "ФормаСписка");
иначе
Предупреждение("Элемент не выбран."); конецЕсли;
// Пример для методов НайтиПоРеквизиту и ИспользоватьРодителя Предупреждение("После выбора вида образования и подразделения | откроется форма справочника Сотрудники_2, в которой | выбран сотрудник, имеющий выбранный вид образования.");
// Предварительно выбираются вид образования обр и подразделение (группа)
// Затем выполняется поиск сотрудника, имеющего образование обр // и работающего в выбранном подразделении сСотр_2 = 0;
сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2"); сОбр_2 = СоздатьОбъект("Справочник.Образование_2");
// Выбираем вид образования обр
флаг = сОбр_2.Выбрать("Выберите вид образования",""); если флаг = 1 тогда
обр = сОбр_2.ТекущийЭлемент();
// Выбираем подразделение подр
// Разрешаем выбор групп в диалоге выбора. По умолчанию выбор групп запрещен сСотр_2.ВыборГруппы(1); флаг = сСотр_2.Выбрать("Выберите цех", ""); если сСотр_2.ЭтоГруппа() = 1 тогда // Поиск обр в группе сСотр_2 род = сСотр_2.ТекущийЭлемент(); сСотр_2.ИспользоватьРодителя(род);
флаг = сСотр_2.НайтиПоРеквизиту("Образование", обр, 0); если флаг = 1 тогда
// Покажем результат в форме списка для выбора сСотр_2.Выбрать("Курсор размещен на найденном сотруднике", ""); иначе
Предупреждение("В подразделении " + род.Наименование + " нет сотрудника |с образованием " + обр.Наименование); конецЕсли; иначе
Предупреждение("Цех не выбран."); конецЕсли; иначе
Предупреждение("Вид образования не выбран."); конецЕсли;
// Пример для методов ИспользоватьРодителя и Выбрать
// В качестве родителя задается второй цех. Затем используется метод Выбрать // Первый раз родитель может быть сменен при интерактивном выборе, второй раз - нет флаг = сСотр_2.НайтиПоКоду(2,0); // 2 - код второго цеха
если флаг = 1 тогда
Предупреждение("В первой форме родителя менять можно, а во второй - нельзя"); род = сСотр_2.ТекущийЭлемент(); сСотр_2.ИспользоватьРодителя(род, 1);
// Можно выбирать сотрудников из любой группы сСотр_2.Выбрать("Можно менять родителя", "ФормаСписка");
// Сотрудников можно выбрать только из второго цеха сСотр_2.ИспользоватьРодителя(род, 0);
сСотр_2.Выбрать("Родителя сменить не удается", "ФормаСписка"); иначе
Предупреждение("Цех с кодом 2 не найден."); конецЕсли;
// Пример для метода ИспользоватьДату
// Создается объект типа Документ с разновидностью ПриказОПриеме,
// имеющий, как известно, реквизит Сотрудник, устанавливающий связь документа // с порожденной им записью в справочнике Сотрудники_2. Используя этот реквизит,
// определим нынешний оклад сотрудника Горюновой У. В.,
// принятой на работу по приказу № 1
док = СоздатьОбъект("Документ.ПриказОПриеме");
флаг = док. НайтиПоНомеру( 1, Дата(0));
если флаг = 1 тогда
Предупреждение("В окне сообщений выведем оклады Горюнова Ульяны | по приказу и на рабочую дату.");
// Нельзя устанавливать дату периодического реквизита следующим образом:
// док. Сотрудник. ИспользоватьДату(Т екущаяДата());
// Это нужно делать так:
// Определяем объект с разновидностью типа Справочник.Сотрудники_2 сотр = док.Сотрудник;
// Устанавливаем для этого объекта дату периодических реквизитов сотр. ИспользоватьДату(док.ДатаПриема);
// Оклад на дату зачисления на работу; должен быть равен док.Оклад; оклСтар = сотр.Оклад;
// Меняем дату чтения периодического реквизита Оклад сотр. ИспользоватьДату(Т екущаяДата()); оклСегодня = сотр.Оклад;
Сообщить("Оклад по приказу: " + оклСтар); // Оклад по приказу: 2500
Сообщить("Оклад сегодня: " + оклСегодня); // Оклад сегодня: 3200
иначе
Предупреждение("Приказ № 1 не найден."); конецЕсли;
// Пример для методов Удалить, ПометкаУдаления и СнятьПометкуУдаления // Ставится пометка удаления на запись с кодом 302. Это вызывает простановку // пометок удаления и на записи в справочнике Дети, подчиненные записи-владельцу сСотр_2 - 0;
сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2"); флаг = сСотр_2.НайтиПоКоду(302, 0); если флаг = 1 тогда
если Вопрос("Удалить запись с кодом 302?", "Да+Нет") = "Да" тогда Предупреждение("Ставим пометку удаления сотруднику с кодом 302 | в справочнике Сотрудники_2 и в подчиненном справочнике Дети.");
// Проставляем 1С-пометку удаления (Рис. 5.61.)
// Если дети сотрудника занесены в справочник Дети, то соответствующие // им записи также получат пометку удаления сСотр_2.Удалить(0);
Предупреждение("Просмотр результата.");
сСотр_2.Выбрать("Запись о сотруднике с кодом 302 помечена для удаления", ""); дети = СоздатьОбъект(" Справочник. Дети"); дети.ИспользоватьВладельца(сСотр_2);
дети.Выбрать("Удалены записи и в подчиненном справочнике", ""); дети = 0; конецЕсли;
иначе
Предупреждение("Сотрудник не найден."); конецЕсли;
// Снимаем пометку удаления с текущей записи
// Однако проставленная ранее пометка удаления в подчиненном
// справочнике сохранится
если сСотр_2.ПометкаУдаления( ) = 1 тогда
если Вопрос("Снять пометку удаления?", "Да+Нет") = "Да" тогда
Предупреждение("Пометка удаления снимается только" + РазделительСтрок +
"в справочнике Сотрудники_2."); сСотр_2.СнятьПометкуУдаления();
Предупреждение("Просмотр результата.");
сСотр_2.Выбрать("С записи о сотруднике с кодом 302 снята пометка удаления", ""); дети = СоздатьОбъект("Справочник.Дети"); дети.ИспользоватьВладельца(сСотр_2);
дети.Выбрать("Дети по-прежнему имеют пометку удаления",""); конецЕсли; конецЕсли;
// Пример для метода ВключатьПодчиненные
Предупреждение("В окно сообщений благодаря методу ВключатьПодчиненные"
"выводятся только имена групп справочника Сотрудники_2."); сСотр_2.ВключатьПодчиненные(0); сСотр_2.ВыбратьЭлементы(); пока сСотр_2.ПолучитьЭлемент() = 1 цикл Сообщить(сСотр_2.Наименование) конецЦикла; // пока // Результат:
//01 Цех // 02 Цех // 03 Цех
конецПроцедуры // Выполнить
 |
Рис. 5.61. Удаление записи-владельца влечет удаление и подчиненных записей |
Замечание. Сразу после выбора нового вида справочника в результате вызова видыТек = спр.ВидыДляВыбора(видыНов); метод спр.Вид() вернет пустое значение.
5.12.3. МЕТОДЫ ФОРМЫ ЭЛЕМЕНТА СПРАВОЧНИКА
Могут быть использованы только в модуле элемента справочника. Вызываются без префикса. Приводятся в табл. 5.9.
Методы формы элемента справочника |
Метод |
Описание |
флаг = Модифицированное^); |
Вернет 1, если изменен хотя бы один элемент диалога формы элемента справочника, или 0, если элементы диалога не модифицировались.
Если изменения были, то в заголовке диалога появится символ * |
датаТек = ИспользоватьДату
([датаНов], [обновить]); |
Имеет то же назначение, что и одноименный метод табл. 5.8 |
списТек = СохранениеПериодических Реквизитов (вариант,
[список]); |
Задает режим отображения диалога Изменения периодических реквизитов (см. рис. 5.16). Если вариант равен 0 или 2, то диалог не отображается; и отображается, если вариант равен 1, 3, 4 или 5. Символьный параметр список содержит список анализируемых на предмет изменения периодических реквизитов, например "Оклад, Должность". Если список = "*", то в него включаются все периодические реквизиты справочника. Периодический реквизит считается измененным, если изменилась его дата, или значение, или и то и другое. Возвращает ранее установленный список периодических реквизитов |
списТек =
ПросмотрИстории([список]); |
Задает параметром список периодические реквизиты, для которых допускается просмотр
истории |
|
Замечание. Для работы с периодическими реквизитами в 1С, помимо приведенных в табл. 5.9, имеется широкий ассортимент возможностей: методы справочника Получить и Установить, метод модуля документа УстановитьРеквизитСпр а-вочника, а также методы объекта Периодический, рассматриваемые в гл. 6.
5.12.4. ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ МОДУЛЯ ФОРМЫ ЭЛЕМЕНТА И ГРУППЫ СПРАВОЧНИКА
В модуле любой формы можно задать ее предопределенные процедуры, такие, как ПриОткрытии, ПриПовторномОткрытии, ПриЗакрытии, ПриВыбореЗакладки, ПриНачалеВыбораЗначения, ОбработкаПодбора, ОбработкаВыбораЗначения, При-ВыбореСтроки. Некоторые из них нами уже употреблялись, иные будут рассмотрены позже.
Вдобавок к этим процедурам в форме элемента (группы) справочника можно написать код еще двух перечисленных в табл. 5.10 предопределенных процедур.
Предопределенные процедуры модуля формы элемента (группы) справочника |
Процедура |
Описание |
ВводНового
([копир],
[объект]) |
Вызывается, если ее код присутствует в модуле формы элемента (группы), при интерактивном вводе нового элемента справочника, например в результате выбора пункта Новый в колонке меню Действия. Необязательный формальный параметр копир, если он есть и равен единице, означает, что новая запись введена копированием (Действия - Копировать или клавиша F9) и, следовательно, значения ее реквизитов известны. Если параметр равен нулю, то значения реквизитов не определены и тогда имеет смысл задать их в теле рассматриваемой процедуры. Параметр объект, если присутствует, передает скопированный объект |
ПриЗаписи
([перРекв]) |
Вызывается, если ее код присутствует в модуле формы элемента (группы), при выполнении команды #3аписать. Необязательный формальный параметр перРекв, если он есть, передает список периодических реквизитов, выбранных для обновления в окне диалога изменения периодических реквизитов (см. рис. 5.16) |
|
Пример 1. В предопределенной процедуре ВводНового модуля формы элемента справочника Сотрудники_2 (разд. 5.3.4.2) выводятся переданные параметром объект реквизиты формы.
// Для ввода копированием используем F9 или нажмем на иконку ~‘+
на панели инстру
ментов // формы списка справочника, или выберем соответствующий пункт меню конки Действия процедура ВводНового(копир, объект)
если копир = 1 тогда // Если новый элемент вводится копированием
Сообщить(объект. Наименование);
Сообщить(объект.Оклад);
Сообщить(объект.Образование);
конецЕсли;
конецПроцедуры // ВводНового Замечания:
1. Предопределенная процедура ВводНового вызывается раньше предопределенной процедуры ПриОткрытии.
2. Параметром объект не передаются периодические реквизиты. Так, при вызове Сообщить(объект.Оклад);
1С напечатает НеизвестныйОбъект
Пример 2. В предопределенной процедуре ПриЗаписи модуля формы элемента справочника Сотрудники_2 (разд. 5.3.4.2) анализируется параметр процедуры перРекв, и если он содержит реквизит Оклад, то процедура завершается со статусом возврата О, что означает запрет записи данных.
// Предопределенная процедура ПриЗаписи вызывается после появления диалога // Изменения периодических реквизитов (рис. 5.16) процедура ПриЗаписи(перРекв)
// Если планируется обновить периодический реквизит Оклад если Найти(перРекв, "Оклад") = 1 тогда
Предупреждение("Оклад можно изменить только на основании приказа."); СтатусВозврата(0); // Запрещаем запись элемента
возврат; конецЕсли;
// Последующий код
конецПроцедуры // ПриЗаписи
5.12.5. МЕТОДЫ ФОРМЫ СПИСКА СПРАВОЧНИКА
Употребляются в модулях формы списка справочника без префикса. Приводятся в табл. 5.11.
Методы формы элемента справочника
Таблица 5.11 |
Метод |
Описание |
датаТек = ИспользоватьДату ([датаНов]); |
Имеет то же назначение, что и одноименный метод табл. 5.8 |
владТек = ИспользоватьВладельца ([владелец], [флагИзм]); |
Задает владельца для формы списка подчиненного справочника. Имеет то же описание, что и одноименный метод табл. 5.8. Пример см. в разд. 5.10.3. |
родТек = ИспользоватьРодителя ([родитель], [флагИзм]); |
Задает родителя для формы списка подчиненного справочника. Имеет то же описание, что и одноименный метод табл. 5.8 |
иерархТек = ИерархическийСписок ([иерарх], [флагИзм]); |
Если иерарх =1, то многоуровневый справочник будет отображаться по группам в виде иерархического списка (см., например, рис. 5.1); если иерарх = 0, то элементы в окне вывода следуют без учета иерархии, отсортированные, например, по коду (см. рис. 5.2). Если флагИзм = 1, то пользователь может интерактивно включать/отключать режим ввода списка справочника по группам, и не может, если флагИзм = 0. По умолчанию флагИзм = 1. Возвращает 1, если показ списка элементов осуществляется по группам, или 0 -в противном случае |
выбТек = ВыборГруппы([выбНов]); |
Имеет то же назначение, что и одноименный метод табл. 5.8 |
|
Метод |
Описание |
редактТек = РедактироватьВДиалоге ([редакт], [флагИзм]); |
Если редакт = 1, то редактирование элемента (группы) справочника будет осуществляться с использованием формы этого элемента (группы). Такие формы, конечно же, должны бытъ заготовлены заранее. Если редакт = 0, то элемент (группа) редактируется в строке формы списка справочника. Если флагИзм = 1, то полъзователъ может интерактивно менятъ режим редактирования справочника, и не может, если флагИзм = 0. По умолчанию флагИзм = 1. Возвращает 1, если редактирование на момент вызова метода осуществляется в диалоге, или 0 -в противном случае |
списТек = СохранениеПериодических Реквизитов(вариант, [список]); |
Имеет то же назначение, что и одноименный метод табл. 5.8 |
сортТек = Сортировка
{[сорт], [флагИзм]); |
Задает символьным параметром сорт способ сортировки данных в диалоге формы списка справочника. Всегда параметр сорт можно задать равным "Код" или "Наименование". Также в качестве сорт можно передать строку с именем реквизита, имеющего свойство Сортировка. Если флагИзм = 1, то пользователь может интерактивно менять способ упорядочения данных, и не может, если флагИзм = 0. По умолчанию флагИзм = 1. Возвращает 1, если редактирование на момент вызова метода осуществляется в диалоге, или 0 - в противном случае |
УстановитьОтборркв, знач); |
Ограничивает объем выводимых в диалоге формы списка справочника данных: отображаются только те элементы, реквизит рекв которых имеет значение знач. Параметр рекв - это строка со значением, совпадающим с именем реквизита. Для этого реквизита должно быть задано свойство Отбор по реквизиту (см. рис. 5.29, б). Если рекв - пустая строка, то отбор отключается. Тип (разновидность типа) параметра знач определяется типом реквизита, по которому устанавливается отбор |
флаг = ПолучитъОтбор(рекв, знач); |
Возвращает в параметры рекв и знач текущий отбор элементов справочника. Параметры имеют тот же смысл, что и одноименные параметры метода Уста-новитьОтбор. Возвращает 1, если отбор задан, или 0 -в противном случае |
видыТек = ВидыОтбора (списокРекв); |
Задает параметром списокРекв список реквизитов, по которым в интерактивном режиме можно устанавливать отбор. Параметр списокРекв - это строка, содержащая одно или несколько разделенных запятыми имен отбора, например "Образование" или "Имя,, ГодРождения" |
Метод |
Описание |
флаг = ЗакладкиОтбора(рекв, [знач]); |
Устанавливает закладки отбора по реквизиту рекв в диалоге формы списка справочника. Параметр знач, если он задан, определяет первоначально отображаемый отбор. Описание параметров то же, что и для метода УстановитьОтбор. Возвращает пустое значение. Пример использования см. в разд. 5.9.1.2 |
ИспользоватьСписокЭлементов
(сЗнач); |
Устанавливает фильтр, позволяющий отображать только те элементы справочника, значения которых содержатся в списке значений сЗнач. Если список пуст, то фильтр отключается. После вызова метода с непустым списком нельзя вводить, копировать и перемещать элементы справочника. Пример употребления см. в разд. 5.9.2 |
списТек = ПросмотрИстории([список]); |
Имеет то же назначение, что и одноименный метод табл. 5.8 |
Пример. В предопределенной процедуре ПриОткрытии модуля формы списка справочника Сотрудники_2 задаются способы представления данных.
процедура ПриОткрытии() перем обр;
// Вывод данных осуществляется в диалоге формы без учета иерархии;
// способ вывода изменению не подлежит // Сортировка производится по наименованию;
// способ сортировки может меняться интерактивно // Редактирование записи выполняется в диалоге или в документе,
// если реквизит ПриказПрием содержит ссылку на документ Приказ о приеме на работу // Кроме того, устанавливаем отбор по реквизиту Образование и выводим после // открытия список сотрудников с высшим образованием ИерархическийСписок(0, 0);
Сортировка("Наименование", 1);
// Режим редактирования можно менять интерактивно РедактироватьВДиалоге(1, 1);
обр = СоздатьОбъект("Справочник.Образование_2");
// Ищем высшее образование
если обр.НайтиПоНаименованию("В", 0) = 1 тогда
// Второй параметр метода УстановитьОтбор должен иметь разновидность типа // Справочник.Образование_2
УстановитьОтбор("Образование", обр.ТекущийЭлемент()); иначе
Предупреждение
("В справочнике Образование_2 нет записи, начинающейся с буквы В."); конецЕсли;
конецПроцедуры // ПриОткрытии
5.12.6. ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ МОДУЛЯ ФОРМЫ СПИСКА СПРАВОЧНИКА
Включаются программистом в модуль формы списка справочника по мере необходимости. Приводятся в табл. 5.12.
Предопределенные процедуры модуля формы списка справочника
Таблица5.12 |
Процедура |
Описание |
ПриВводеСтроки() |
Вызывается до начала ввода новой строки в форме списка справочника |
ПриРедактированииНовой
Строки() |
Вызывается в момент начала ввода данных в новую строку формы списка справочника |
ПриНачалеРедактирования
Строки() |
Вызывается в момент начала редактирования данных в существующей строке формы списка справочника |
ПриЗаписи([пер.Рекв]) |
Имеет то же назначение, что и одноименная предопределенная процедура модуля формы элемента (группы) справочника |
ПриПереносеЭлемента
ВДругуюГруппу
([элемент],
[группа]) |
Вызывается при интерактивном переносе элемента в другую группу справочника. Формальный параметр элемент содержит переносимый элемент, а группа - это группа, в которую элемент переносится |
ПриВыбореРодителя
([родитель]) |
Вызывается при выборе (двойном ударе мышью или нажатии на Enter) родителя (группы). Параметр родитель, если присутствует, имеет тип Справочник и содержит выбранный элемент-родитель |
ПриВыбореВладельца
([владелец]) |
Вызывается при интерактивном выборе владельца. Здесь выбор - это перемещение с одного элемента справочника-хозяина на другой. Параметр владелец, если присутствует, имеет тип Справочник и содержит выбранный элемент-владелец.
Пример см. в разд. 5.10.3 |
ПриСменеИерархии
([иерарх]) |
Вызывается при интерактивной смене способа представления списка элементов справочника (иерархический -неиерархический). Числовой параметр иерарх, если он присутствует, равен единице, если устанавливается иерархический способ, или нулю - в противном случае |
ПриУстановкеОтбора
([рекв], [знач]) |
Вызывается при интерактивной установке отбора (см. разд. 5.9). Параметр рекв - это строка, содержащая имя реквизита, по которому отбор установлен, например "Образование", знач -значение(критерий)отбора |
|
Пример. При переносе элемента в другую группу справочника Сотрудники_2 необходимо изменить его код, приведя в соответствие с правилами его автоматического назначения. Правила таковы: в качестве первых цифр кода элемента берется код родителя, если родитель расположен на втором уровне справочника Сотрудники_2, или код родителя, увеличенный в 10 раз, если родитель лежит на первом уровне (всего в справочнике Сотрудники_2 три уровня). Последующие цифры кода сотрудника образуют возрастающую последовательность целых положительность чисел. Эту схему реализ у-ет функция СоздатьКод. Ее алгоритм приведен в разд. 5.8.2.2. Правда, в нем вместо функции СоздатьКод использована одноименная процедура.
функция СоздатьКод(группа) далее
процедура ПриПереносеЭлеменгаВДругуюГруппу(алеменг, группа) новКод = СоздатьКод(группа);
// Новый код для переносимого в другую группу элемента УстановитьАтрибут("Код", новКод); конецПроцедуры // ПриПереносеЭлементаВДругуюГруппу
функция СоздатьКод(группа)
перем сСотр_2, максКод, двеЦифр, послЦифр; перем двеЦифрУмнНаК, к;
двеЦифр = ?(группа.Уровень() = 1, 10 * группа.Код, 1 * группа.Код);
// Найдем максКод - максимальный код сотрудника в пределах подразделения сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2"); сСотр_2. ИспользоватьРодителя(группа);
// Осуществим перебор в порядке возрастания кодов элементов
сСотр_2.ПорядокКодов();
сСотр_2.ВыбратьЭлементы();
максКод = 0;
пока сСотр_2.ПолучитьЭлемент() > 0 цикл максКод = 1 * сСотр_2.Код; конецЦикла; // пока
// Ищем последующие цифры максКод и затем последующие цифры кода
// нового сотрудника. Будем умножать двеЦифр на 10, пока не превысим максКод
к=1;
двеЦифрУмнНаК = двеЦифр;
пока двеЦифрУмнНаК < максКод цикл
двеЦифрУмнНаК = двеЦифрУмнНаК * 10; конецЦикла; // пока
// Последующие цифры кода нового сотрудника
послЦифр = ?(максКод = 0, 1, максКод - двеЦифрУмнНаК / 10 + 1);
// Итак, вернем код нового сотрудника возврат Число(Строка(двеЦифр) + Строка(послЦифр)); конецФункции // СоздатьКод
5.13. ЧТЕНИЕ ЗНАЧЕНИЯ РЕКВИЗИТА СПРАВОЧНИКА
Все рассматриваемые в текущем разделе способы доступа к реквизитам справочника уже нами употреблялись. Здесь же мы приведем некоторые обобщения.
Значение реквизита справочника можно получить, создав объект типа Справочник и применив вслед известные методы доступа к реквизитам объекта (см. табл. 5.8). Причем значение кода (или иного реквизита) атрибута Родитель (Владелец) можно п о-лучить следующим образом: сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2");
сСотр_2.НайтиПоКоду(301, 0); // Ищем во всем справочнике
Сообщить(сСотр_2.Родитель.Код); // Код атрибута Родитель
В формах элемента, группы и списка справочника его реквизиты доступны непосредственно и могут быть использованы в качестве элементов диалога или переменных модулей этих форм.
Функция ОткрытьФорму и метод модуля формы ОткрытьПодбор возвращают ко н-текст открытой формы. Поэтому, если открыт справочник, можно обратиться к его р е-квизиту через полученный контекст (см. разд. 5.4).
Если объект, например Сотрудник, имеет тип Справочник и является компонентом другого объекта, например документа ПриказОПриеме, то к реквизиту объекта-компонента можно обратиться, использовав, например, такой путь:
<Создаем объект док с разновидностью типа Документ.ПриказОПриеме>
<Находим нужный документ (приказ)>
// Читаем значение реквизита Образование в справочнике, на который указывает // реквизит Сотрудник найденного документа ПриказОПриеме обр = док.Сотрудник.Образование;
5.14. ПРОГРАММНАЯ ОБРАБОТКА УДАЛЯЕМЫХ
ЗАПИСЕЙ
Все записи информационной базы, обладающие 1С-пометкой удаления, можно разместить в списке значений, вызвав процедуру НайтиПомеченныеНаУдаление. Список найденных ей объектов можно просмотреть и передать его (весь или сокращенный) затем либо процедуре НайтиСсылки, либо процедуре УдалитьОбъекты.
процедура Выполнить() // Связана с кнопкой Пуск обработки Проба
// сЗнач - список значений, куда будут размещены записи об объектах,
// помеченных для удаления
// сЗнач2 - список объектов, передаваемых процедуре НайтиСсылки перем сЗнач, сЗнач2, тЗнач, ин, значен, пред;
ОчиститьОкноСообщений();
сЗнач = СоздатьОбъект("СписокЗначений");
НайтиПомеченныеНаУдаление(сЗнач); если сЗнач.РазмерСписка() > 0 тогда
// Диалог для проставления пометок в списке см. на рис. 5.62 сЗнач.ОтметитьЗначения(, "Выберите объекты для поиска ссылок");
// После проставления пометок в списке сЗнач перенесем // выбранные элементы в список сЗнач2 (рис. 5.63) сЗнач2 = СоздатьОбъект("СписокЗначений"); для ин = 1 по сЗнач.РазмерСписка() цикл // Если элемент списка не имеет пометки если сЗнач.Пометка(ин) = 1 тогда
значен = сЗнач.ПолучитьЗначение(ин, пред); сЗнач2.ДобавитьЗначение(значен, пред); конецЕсли; конецЦикла; // для
если сЗнач.РазмерСписка() > 0 тогда // Просмотр результата
сЗнач2.ВыбратьЗначение(, "Список для процедуры НайтиСсылки");
// тЗнач - таблица, в которую разместим ссылки на удаленные объекты тЗнач = СоздатьОбъектСТаблицаЗначений");
НайтиСсылки(сЗнач2, тЗнач);
// Просмотр результата. Возможный вариант приведен на рис. 5.64 тЗнач.ВыбратьСтроку(, "Таблица ссылок"); иначе
Сообщить("Список для процедуры НайтиСсылки пуст."); конецЕсли иначе
Сообщить("Нет записей с 1С-пометкой удаления."); конецЕсли;
конецПроцедуры // Выполнить
 |
Рис. 5.62. Объекты, отобранные в списке сЗнач для поиска ссылок |
 |
Рис. 5.63. Список сЗнач2 объектов для поиска ссылок |
 |
Рис. 5.64. Обнаружена ссылка на документ № 4 из справочника Сотрудники_2 |
Замечание. В процедуре НайтиСсылки в качестве первого параметра можно употребить не список значений, а значение одного объекта, ссылки на который нужно о б-наружить, например, так:
тЗнач = СоздатьОбъект("ТаблицаЗначений"); док = СоздатьОбъект("Документ.ИзменениеОклада"); док.НайтиПоНомеру(4); // Ищем документ
НайтиСсылки(док.ТекущийДокумент( ), тЗнач);
// Просмотр таблицы ссылок тЗнач.ВыбратьСтроку(, "Таблица ссылок");
Передаваемый процедуре объект может не иметь пометки удаления.
Процедура УдалитьОбъекты проставляет DBF-пометки удаления. Процедура, так же как и процедура НайтиСылки, может принимать в качестве первого параметра либо отдельный удаляемый объект, либо список объектов. Причем объекты могут в общем-то и не иметь 1С-пометок удаления. Процедура имеет следующий синтаксис:
УдалитьОбъекты(объект | список_объектов, [проверка], [таблица_ссылок]);
где первый параметр - это либо удаляемый объект, либо список объектов, возвращаемый, например, процедурой НайтиПомеченныеНаУдаление. Если параметр проверка = 1, то осуществляется поиск ссылок на объекты, заданные первым параметром процедуры. Найденные ссылки возвращаются выходным параметром таблица ссылок, имеющим тип ТаблицаЗначений. Причем объекты, ссылки на которые обнаружены, не удаляются. Если же проверка = 0, то ссылки и все объекты, заданные параметром 1, удаляются (разумеется, в том случае, если первый параметр задан без ошибок).
Удаленные объекты получают DBF-пометку удаления. Их физическое удаление выполняется в конфигураторе, открывающем подлежащие упаковке файлы в монопольном режиме (разд. 5.5.2).
Пример. Удаляется документ № 4 об изменении оклада.
процедура Выполнить() // Связана с кнопкой Пуск обработки Проба
перем тЗнач, док;
тЗнач = СоздатьОбъект("ТаблицаЗначений");
док = СоздатьОбъект("Документ.ИзменениеОклада");
// Ищем документ
если док.НайтиПоНомеру(4) = 0 тогда
Предупреждение("Документ под номером 4 не найден."); конецЕсли;
// Перед удалением проводим поиск ссылок на документ № 4 УдалигьОбъекты(док.ТекушийДокумент(), 1 ,тЗнач);
// Если есть ссылки, то прежде их просмотрим, а затем примем решение,
// удалять документ или нет если тЗнач.КоличествоСтрок() > 0 тогда // Просмотр таблицы ссылок тЗнач.ВыбратьСтроку(, "Таблица ссылок");
если Вопрос("Удалить документ, на который есть ссылки?", "Да+Нет") = "Да" тогда // Удаляем документ без поиска ссылок (проставляем DBF-пометку удаления) УдалшъОбъектыСдок.ТекущийДокументО); иначе'
Предупреждение("Документ не удален."); конецЕсли; иначе
Предупреждение("Документ № 4 удален."); конецЕсли;
конецПроцедуры // Выполнить
После удаления в окне сообщений возникнет следующий текст:
Удаленные записи:
Документ: ИзменениеОклада Номер: 4 Дата: 29.11.2001 Документ.ИзменениеОклада удалено объектов 1
Замечание. Удаление объектов, на которые есть ссылки, не приветствуется, поскольку приводит к нарушению целостности информационной базы данных системы.
5.15. ВЫВОДЫ
1. Справочник 1С - это в общем случае совокупность нескольких взаимосвязанных DBF-файлов.
2. Главная таблица справочника в общем случае, кроме элементов, включает и группы, к которым эти элементы принадлежат. Такая организация таблицы позволяет представлять справочник в виде иерархического списка.
3. Периодические реквизиты справочника хранятся в файле 1 SCONST.DBF.
4. Для добавления, редактирования и просмотра данных справочника можно использовать формы элемента, группы, списка и документы, а также соответствующие методы справочника.
5. Реквизиты, автоматически формируемые программой (например код) следует делать доступными только для чтения.
6. Атрибуты Родитель и Владелец имеют тип Справочник.
7. Удаление записей справочника выполняется в 3 этапа: на первом записи помечаются для удаления символом * в поле Ismark таблицы справочника, на втором -в специально выделенном поле DBF-файла таблицы, на третьем - выполняется упаковка помеченных для удаления данных; записи, удаление которых приведет к нарушению целостности базы данных, нельзя удалить в интерактивном режиме, зато это можно выполнить программно, употребив встроенную процедуру Уда-литьОбъекты.
8. При простановке пометки удаления на запись-владелец автоматически такие пометки проставляются и на подчиненные ей записи. Для интерактивного режима справедливо и обратное: снятие пометки удаления с записи-владельца приводит, если пользователь дал согласие, к снятию таких пометок и с подчиненных записей.
9. Предопределенную процедуру ПриЗаписи следует применять для контроля ввод и-мых данных.
10. Предопределенная процедура ВводНового употребляется для задания начальных значений вводимых реквизитов.
11. Отбор значений справочника возможен только по реквизитам, имеющим свойства Сортировка и Отбор по реквизиту.
12. В подчиненном справочнике отображаются только строки, связанные с записью, выбранной в справочнике-владельце.
13. Связь между подчиненным справочником и его владельцем осуществляется через атрибут Владелец подчиненного справочника. Связь между их элементами - через поля Parentext и Id DBF-таблиц этих файлов.
14. Длинный код по выбору данных следует заменять запросами.
15. Для быстрого отображения выборки, созданной в результате выполнения запроса, ее можно выгрузить в таблицу значений, а последнюю вывести на экран, употребив метод ВыбратьСтроку.
16. Перебор записей выборки запроса выполняется в цикле Пока, использующем метод Группировка. Причем для доступа к вложенной группе выборки прежде нужно выбрать запись группы более высокого уровня.
17. Методы ИспользоватьДату, ИспользоватьВладельца и ИспользоватьРодителя употребляются для объектов, имеющих тип Справочник, которые либо возвращаются функцией СоздатьОбъект, либо являются компонентами других объектов, например документов или других справочников, либо возвращаются параметром контекст функции ОткрытьФорму или метода ОткрытьПодбор.
6. ОБЪЕКТЫ ТИПА ПЕРИОДИЧЕСКИЙ
6.1. ПОРЯДОК ИСПОЛЬЗОВАНИЯ ОБЪЕКТА ПЕРИОДИЧЕСКИЙ
Объекты типа Периодический (далее - ОП) предоставляют дополнительные возможности по управлению периодическими реквизитами справочников и периодическими константами. ОП. подобно, например, спискам или таблицам значений, не входят в состав метаданных, а создаются на время исполнения программы функций Соз-датьОбъект, Например:
оп = СоздатьОбъект(''Периодический'');
После создания ОП прикрепляется к определенному периодическому объекту - реквизиту справочника или периодической константе. Это действие выполняется методом ИспользоватьОбъект. Метод не применяется, если выборка периодических объе к-тов осуществляется по документу. Далее употребляются методы или атрибуты ОП, п о-зиционирующие периодической объект и управляющие его значениями.
С каждым периодическим объектом связано в общем случае несколько записей, содержащих каждая значение периодического объекта, дату значения и, возможно, иные компоненты, например ссылку на документ, создавший запись.
Пример 1. Выводится список периодических констант, содержащий их идентификаторы, синонимы и значения на текущую дату.
// Процедура вывода списка определенных в конфигурации периодических констант процедура Выполнить() // Связана с кнопкой Пуск обработки Проба
перем всегоКонстант, дат; // Число констант в конфигурации
перем идеи, син, значен, пКонст;
ОчиститьОкноСообщений(); дат = ТекущаяДата();
// Создаем ОП
пКонст = СоздатьОбъект("Периодический"); всегоКонстант = Метаданные.Константа(); для ин = 1 по всегоКонстант цикл
если Метаданные.Константа(ин).Периодический = 0 тогда
продолжить; // Значения непериодических констант не выводятся
конецЕсли;
син = Метаданные.Константа(ин). Синоним;
// Выводим сообщения о константах, для которых задан синоним если ПустоеЗначение(син) = 0 тогда
идеи = Метаданные.Константа(ин). Идентификатор;
// Прикрепляем ОП к периодической константе, имеющей идентификатор иден пКонст. ИспользоватьОбъект(иден);
// Получаем значение периодической константы на дату дат значен = пКонст.ЗначениеНаДату(дат);
Сообщить(иден + " - " + син + " - " + значен); конецЕсли; конецЦикла; // для конецПроцедуры // Выполнить
Пример 2. Выводится история изменения константы МинимальнаяЗарплата.
процедура Выполнить( ) // Связана с кнопкой Пуск обработки Проба
перем значен, дат, пКонст;
ОчиститьОкно Сообшений();
// Создаем ОП
пКонст = СоздатьОбъект('Периодический"); попытка
// Прикрепляем ОП к периодической константе,
// имеющей идентификатор МинимальнаяЗарплата пКонст.ИспользоватьОбъектС'МинимальнаяЗарплата''); исключение
Предупреждение(ОписаниеОшибки());
возврат;
конецПопытки;
// Позиционируемся перед первой записью истории константы пКонст.ВыбратьЗначения();
Сообщить("История константы МинимальнаяЗарплата");
// Метод ПолучитьЗначение позиционирует ОП на следующей записи о константе пока пКонст.ПолучитьЗначение() = 1 цикл
значен = пКонст.Значение; // Значение и ДатаЗнач - атрибуты ОП
дат = пКонст.ДатаЗнач;
Сообщить("Минимальная заработная плата " + значен + " руб. введена с " + дат); конецЦикла // пока конецПроцедуры // Выполнить
Результат:
История константы МинимальнаяЗарплата.
Минимальная заработная плата 83.49 руб. введена с 01.01.98 Минимальная заработная плата 132 руб. введена с 01.07.00 Минимальная заработная плата 200 руб. введена с 01.01.01 Минимальная заработная плата 300 руб. введена с 01.07.01
Пример 3. Выводится история изменений оклада Горюновой У. В. с указанием документов, вызвавших эти изменения.
процедура Выполнить() // Связана с кнопкой Пуск обработки Проба
перем сСотр_2, оп, окл, дат, док, сооб;
ОчиститьОкноСообщений();
сСотр_2 = СоздатьОбъект("Справочник.Сотрудники_2");
// Ищем сотрудника во всем справочнике Сотрудники_2 если сСотр_2.НайтиПоНаименованию("Горюнова", 0) = 1 тогда // Создаем ОП
оп = СоздатьОбъект("Периодический");
// Прикрепляем ОП к периодическому реквизиту Оклад найденного сотрудника оп.ИспользоватьОбъект("Оклад", сСотр_2.ТекущийЭлемент());
// Или проще: оп.ИспользоватьОбъект("Оклад", сСотр_2);
// Позиционируемся перед первой записью истории окладов Горюновой У. В. оп.ВыбратьЗначения();
Сообщить("История окладов Горюновой Ульяны Валерьевны.");
// Метод ПолучитьЗначение позиционирует ОП на следующей записи // периодического реквизита Оклад пока оп.ПолучитьЗначение() = 1 цикл
окл = оп.Значение; // Значение и ДатаЗнач - атрибуты ОП
дат = оп.ДатаЗнач;
// Документ, вызвавший изменение оклада док = оп.ТекущийДокументО;
// Текст для сообщения о документе сооб = ?(док.Выбран() = 1,
" согласно документу " + оп.ТекущийДокументО,
" без оформления документа");
Сообщить("Оклад " + окл + " назначен с " + дат + сооб); конецЦикла; // пока иначе
Предупреждение(''Найти госпожу Горюнову У. В. не удалось."); конецЕсли;
конецПроцедуры // Выполнить Результат.
История окладов Горюновой Ульяны Валерьевны
Оклад 2500 назначен с 20.11.01 согласно документу Приказ о приеме на работу 2 Оклад 2700 назначен с 22.11.01 согласно документу ИзменениеОклада 2 Оклад 3200 назначен с 30.11.01 без оформления документа
6.2. АТРИБУТЫ ОБЪЕКТА ПЕРИОДИЧЕСКИЙ
Имеет два атрибута: Значение и ДатаЗнач, которые после создания ОП имеют пустые значения соответственно неопределенного типа и типа Дата. После прикрепления к периодическому реквизиту или периодической константе сохраняют пустые значения, но атрибут Значение приобретает тип, совпадающий с типом объекта, к которому ОП прикреплен. Атрибут ДатаЗнач тип сохраняет. И наконец, получают значения после позиционирования на записи, отвечающей объекту, к которому прикреплен ОП. Напомним, что данные о константах и периодических реквизитах справочников хранятся в файле 1SCONST.DBF.
Примеры чтения значений атрибутов ОП приведены в предшествующем разделе. Эти же атрибуты совместно с методом Записать используются и для изменения значений периодических реквизитов и констант.
Пример. Изменяется размер минимальной заработной платы, введеной с 01.07.01, с 300 на 350 руб.
процедура Выполнить( ) // Связана с кнопкой Пуск обработки Проба
перем значен, дат, пКонст;
ОчиститьОкноСообщенийО; дат = '01.07.2001';
// Создаем ОП
пКонст = СоздатьОбъект("Периодический");
попытка
// Прикрепляем ОП к периодической константе,
// имеющей идентификатор МинимальнаяЗарплата пКонст.ИспользоватьОбъект("МинимальнаяЗарплата"); исключение
Предупреждение(ОписаниеОшибки());
возврат;
конецПопытки;
если пКонст.НайтиЗначение(дат, 0) = 1 тогда
пКонст.Значение = 350; // Новое значение константы на дату дат
пКонст. Записать();
Сообщить("Теперь минимальная зарплата равна " +
Константа. МинимальнаяЗарплата.Получить(дат) + " руб.");
// Восстанавливаем значение нужной для работы константы
пКонст.Значение = 300; // Новое значение константы на дату дат
пКонст. Записать(); иначе
Предупреждение("Константы МинимальнаяЗарплата на дату " + дат + " нет."); конецЕсли;
конецПроцедуры // Выполнить
6.3. МЕТОДЫ ОБЪЕКТА ПЕРИОДИЧЕСКИЙ
Позволяют читать, перебирать, искать, изменять и удалять периодические реквизиты справочников и периодические константы. При удалении записи сразу проставляется DBF-пометка удаления. Удаленные записи восстановлению не подлежат. Нельзя методами ОП добавлять новые значения периодических констант или реквизитов справочников.
Кроме значения и даты периодического объекта, методы ОП устанавливают связь с документами, создавшими и впоследствии обновлявшими записи периодических объектов.
Методы перечислены в табл. 6.1.
Таблица 6.1
Методы объекта Периодический |
Метод |
Описание |
флаг = оп.Использовать Объект(перОб, [элемент]); |
Прикрепляет ОП к периодическому реквизиту справочника (периодической константе), идентификатор которого (которой) содержится в строке перОб. Параметр элемент имеет тип Справочник. Параметр задается, если перОб является периодическим реквизитом справочника, и содержит значение текущего элемента справочника.
Если перОб - это пустая строка и задан параметр элемент, то ОП доступны значения всех периодических реквизитов текущего элемента справочника, заданного параметром элемент. Метод возвращает 1, если действие завершилось успешно, или 0 -в противном случае. Пример употребления см. в разд. 6.1, 6.2 |
|
Метод |
Описание |
оп.НазначитьТип
(тип, длина, точность); |
Назначает тип периодическому объекту неопределенного типа. Параметр тип - это строка с именем базового типа, например "Число", или разновидностью агрегатного типа, например "Справочник. Образование_2" или "Доку-мент.ИзменениеОклада". Параметр длина задается для числового или символьного типа и означает размер отводимого под значение поля. Параметр точность применяется только с числовым типом и задает число знаков после десятичной точки. Понятно, что точность < длина |
значен = оп.ЗначениеНаДату (дата); |
Возвращает значение периодического объекта на дату, заданную параметром дата. При исполнении метода позиция периодического объекта сохраняется. Пример употребления см. в разд. 6.1 |
флаг = оп.НайтиЗначение (дата, [режим]); |
Осуществляет поиск значения периодического объекта на заданную параметром дата дату. Если значение не найдено и параметр режим = -1, то ищется значение на ближайшую меньшую дату, если режим = 1, то ищется значение на ближайшую большую дату, и если режим = 0, то возвращает 0. По умолчанию режим = -1. Возвращает 1 в случае успеха. Пример употребления см. в разд. 6.2 |
флаг = оп.ВыбратьЗначения ([датаНачала], [датаКонца]); |
Открывает выборку значений периодического объекта. Параметры датаНачала и датаКонца задают соответственно даты начала и конца периода выборки. Собственно выборка осуществляется методом ПолучитьЗначение. Если параметр датаНачала не задан, то значения периодического объекта выбираются начиная с меньшей даты. Если не задан параметр датаКонца, то периодические значения выбираются вплоть до самой большой даты. Возвращает 1, если в выборке есть хотя бы одно значение, или 0 -в противном случае. Пример использования см. в разд. 6.1 |
флаг - оп.ВыбратьПо
Документу(док); |
Открывает выборку значений периодических объектов, созданных документом док. Дальнейшая выборка осуществляется методом ПолучитьЗначение. Возвращает 1, если в выборке есть хотя б ы одно значение, или 0 - в противном случае |
флаг = оп.ПолучитьЗначение(); |
Перемещает позицию выборки значений периодического объекта на одну запись. По умолчанию перемещение выполняется вниз по выборке (прямой порядок), но может быть изменено методом Обратный порядок. Возвращает 1, если следующая запись выбрана, или 0, если выборка исчерпана. Ели запись выбрана, то ее значение и дата возвращаются атрибутами ОП Значение и ДатаЗнач. Документ, установивший выбранное значение, возвращается методом ТекущийДокумент; элемент справочника, которому принадлежит выбранный периодический реквизит, вернет метод ТекущийОбъект, а идентификатор текущего периодического реквизита или периодической константы вернет метод ТекущийРеквизит |
Метод |
Описание |
флаг = оп.ОбратныйПорядок ([порядок]); |
Задает порядок получения записей выборки. Если параметр порядок отличен от нуля или не задан вовсе, то выбор записей осуществляется в обратном порядке. Если параметр порядок равен нулю, выборка производится в прямом порядке. Вызывается до применения метода ВыбратьЗначения. Вернет 1 при успешном вызове или 0 -в противном случае |
док = оп.ТекущийДокумент(); |
Возвращает значение документа, установившего значение выбранной записи периодического объекта. Вернет пустое значение типа Документ, если ссылки на документ нет. Пример для метода приведен в разд. 6.1 |
элем = оп.ТекущийОбъект( ); |
Возвращает, если выбираются значения периодического реквизита, значение элемента справочника, которому периодический реквизит принадлежит. Вернет пустое значение неопределенного типа, если выбираются значения периодической константы |
рекв = оп.ТекущийРеквизитО; |
Возвращает идентификатор выбранного периодического реквизита или периодической константы. При выборке по документу в возвращаемом значении в качестве префикса присутствует имя справочника, в котором в результате проведения документа добавляется (изменяется) значение
периодического реквизита, например Сотрудники 2.Оклад |
номСтроки =
оп.НомерСтроки(); |
Должен вернуть номер строки документа, получаемого методом ТекущийДокумент |
флаг = оп.Записать(); |
Обновляет периодическое значение текущей записи. Возвращает 1, если обновление выполнено успешно, или 0 -в случае неудачи. Пример употребления см. в разд. 6.2 |
флаг = оп.Удалить(); |
Удаляет (проставляет DBF-пометку удаления) запись периодического объекта. Возвращает 1, если обновление выполнено успешно, или О-в случае неудачи |
Замечание. Имя on переменной типа Периодический, употребленное в табл. 6.1 перед названиями методов, может быть произвольным.
Пример. Выбираются значения периодического реквизита Оклад справочника С о-трудники_2, созданные документом ИзменениеОклада № 3.
процедура Выполнить() // Связана с кнопкой Пуск обработки Проба
перем жд, док;
ОчиститьОкноСообщенийО;
док = СоздатьОбъект("Документ.ИзменениеОклада"); флаг = док.НайтиПоНомеру(3, Дата(0)); если флаг = 1 тогда
оп = СоздатьОбъект("Периодический"); оп.ВыбратьПоДокументу(док.ТекущийДокумент()); пока оп.ПолучитьЗначение() = 1 цикл
окл = оп.Значение; // Значение и ДатаЗнач- атрибуты ОП
дат = оп.ДатаЗнач;
Сообщить(''Оклад " + окл + " сотрудника " +
оп.ТекущийОбъект( ).Наименование + " назначен с " + дат); конецЦикла; // пока иначе
Предупреждение(''Приказ № 3 об изменении оклада не найден"); конецЕсли;
конецПроцедуры // Выполнить Результат:
Оклад 3000 сотрудника Волосков Михаил Андреевич назначен с 22.11.01 Оклад 2700 сотрудника Горюнова Ульяна Валерьевна назначен с 22.11.01
Содержание раздела