Как записать программно значение в реквизит элемента справочника? |
Я |
03.09.09 — 09:08
В табличной части обработки есть колонки ГруппаМатериалов и СтавкаНДС.
Группу материалов я получаю запросом кнопки «Выполнить», там выводятся группы спр Материалы. Ставки НДС в обработке проставляются пользователем вручную всей группе и по кнопке «Назначить» должны записаться всем элементам этой группы.
Вот обработка кнопки «Назначить»:
Процедура НазначитьНажатие1(Элемент)
Запрос = Новый Запрос();
Запрос.Текст = «ВЫБРАТЬ
| Материалы.Ссылка КАК Материал
|ИЗ
| Справочник.Материалы КАК Материалы
|ГДЕ
| Материалы.Наименование = &группа
| И Материалы.ЭтоГруппа = ЛОЖЬ»;
Для каждого СтрГруппа ИЗ СписокГрупп Цикл
Запрос.УстановитьПараметр(«Группа»,СтрГруппа.Наименование);
РезультатЗапроса=Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Справочники.Материалы.НайтиПоНаименованию(Выборка.Материал).СтавкаНДС = СтрГруппа.СтавкаНДС;
КонецЦИкла;
КонецЦИкла;
КонецПроцедуры
__
Почему значение реквизита СТавкаНДС не записывается в элементы группы?
1 — 03.09.09 — 09:08
2 — 03.09.09 — 09:10
Чем ссылка от объекта отличается знаешь?
3 — 03.09.09 — 09:12
Пока Выборка.Следующий() Цикл
СпрОбъект = Выборка.Материал.ПолучитьОбъект();
СпрОбъект.СтавкаНДС = СтрГруппа.СтавкаНДС;
Попытка
СпрОбъект.Записать();
Исключение
Сообщить (ОписаниеОшибки);
КонецПопытки
КонецЦИкла;
4 — 03.09.09 — 09:15
(3)не работает.. и ошибку не выдает и в справочник не записывает..
5 — 03.09.09 — 09:19
Процедура НазначитьНажатие1(Элемент)
Запрос = Новый Запрос();
Запрос.Текст = «ВЫБРАТЬ
| Материалы.Ссылка КАК Материал
|ИЗ
| Справочник.Материалы КАК Материалы
|ГДЕ
| Материалы.Наименование = &группа
| И Материалы.ЭтоГруппа = ЛОЖЬ»;
Для каждого СтрГруппа ИЗ СписокГрупп Цикл
Запрос.УстановитьПараметр(«Группа»,СтрГруппа.Наименование);
РезультатЗапроса=Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СпрОбъект = Выборка.Материал.ПолучитьОбъект();
СпрОбъект.СтавкаНДС = СтрГруппа.СтавкаНДС;
Попытка
СпрОбъект.Записать();
Исключение
Сообщить (ОписаниеОшибки());
КонецПопытки
КонецЦИкла;
КонецЦИкла;
__
не записывает((
6 — 03.09.09 — 09:24
хелп
7 — 03.09.09 — 09:29
Отладчик показывает, что не выполняется цикл
Пока Выборка.Следующий() Цикл
почему это может быть?
8 — 03.09.09 — 09:31
Может быть что запрос пустой.
9 — 03.09.09 — 09:32
потому что неправильно написан запрос
10 — 03.09.09 — 09:32
(7) потому что ставить условие в запросе как в (0) = уродство.
11 — 03.09.09 — 09:33
(9)я вот тоже понимаю, что неправильно. Но в консоли запросов он выдает номенклатуру группы..
12 — 03.09.09 — 09:39
(10) а ты как предлагаешь?
13 — 03.09.09 — 09:46
Запрос.УстановитьПараметр(«Группа»,СокрЛП(СтрГруппа.Наименование));
так заработало) всем спс
14 — 03.09.09 — 09:47
Процедура НазначитьНажатие1(Элемент)
Запрос = Новый Запрос();
Запрос.Текст = «ВЫБРАТЬ
| Материалы.Ссылка КАК Материал
|ИЗ
| Справочник.Материалы КАК Материалы
|ГДЕ
| Материалы.Ссылка В ИЕРАРХИИ (&группа)
| И Материалы.ЭтоГруппа = ЛОЖЬ»;
Для каждого СтрГруппа ИЗ СписокГрупп Цикл
Запрос.УстановитьПараметр(«Группа»,СтрГруппа.Ссылка);
РезультатЗапроса=Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СпрОбъект = Выборка.Материал.ПолучитьОбъект();
СпрОбъект.СтавкаНДС = СтрГруппа.СтавкаНДС;
Попытка
СпрОбъект.Записать();
Исключение
Сообщить (ОписаниеОшибки());
КонецПопытки
КонецЦИкла;
КонецЦИкла;
15 — 03.09.09 — 09:47
(13) учись правильно писать условия в запросе
16 — 03.09.09 — 09:47
|ГДЕ
| Материалы.Ссылка В (&группа)
| И Материалы.ЭтоГруппа = ЛОЖЬ»;
17 — 03.09.09 — 09:48
(16)* пардон, иерархию забыл написать…
18 — 03.09.09 — 09:52
(14){Обработка.ОбработкаСправочников.Форма.Форма(66)}: Поле объекта не обнаружено (Ссылка)
Запрос.УстановитьПараметр(«Группа»,СтрГруппа.Ссылка);
19 — 03.09.09 — 09:58
(18) какого типа у тебя СтрГруппа ?
20 — 03.09.09 — 09:58
(18)Что у тебя СписокГрупп?
21 — 03.09.09 — 10:00
(16) а разве нельзя условие так прописать
|ГДЕ
| Материалы.Родитель =&группа
| И Материалы.ЭтоГруппа = ЛОЖЬ»;
22 — 03.09.09 — 10:02
(21)Нельзя.
Кстати, не совсем понятно что автор хотел получить своим запросом…
23 — 03.09.09 — 10:09
(22) похоже на то, что из некоего «СписокГрупп» идет выборка групп справочника материалов и потом элементам родителя этих групп впихивается ставка НДС.
Вот только автор со понятием ссылок не знаком и он не ответил на (20)
24 — 03.09.09 — 10:10
(20) СПисокГрупп это табличная часть обработки. Вот код кнопки «Выполнить»:
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
Запрос = Новый Запрос();
Запрос.Текст = «ВЫБРАТЬ
| Материалы.Ссылка КАК Материал
|ИЗ
| Справочник.Материалы КАК Материалы
|ГДЕ
| Материалы.ЭтоГруппа = ИСТИНА
|УПОРЯДОЧИТЬ ПО
| Наименование
|АВТОУПОРЯДОЧИВАНИЕ»;
РезультатЗапроса=Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
СписокГрупп.Очистить();
Пока Выборка.Следующий() Цикл
НоваяСтрока = СписокГрупп.Добавить();
НоваяСТрока.Наименование = Выборка.МАтериал;
КОнецЦикла;
КонецПроцедуры
25 — 03.09.09 — 10:12
Запрос.УстановитьПараметр(«Группа»,СтрГруппа.Ссылка);
на
Запрос.УстановитьПараметр(«Группа»,СтрГруппа.Материал);
26 — 03.09.09 — 10:14
если у тебя в ТЧ список элементов, то на кой запрос???
27 — 03.09.09 — 10:15
(26) в ТЧ список Групп элементов справочника. (ГДЕ
| Материалы.ЭтоГруппа = ИСТИНА)
28 — 03.09.09 — 10:18
Запрос.Текст = «ВЫБРАТЬ
| Материалы.Ссылка КАК Материал
|ИЗ
| Справочник.Материалы КАК Материалы
|ГДЕ
| Материалы.Наименование = &группа
| И Материалы.ЭтоГруппа = ЛОЖЬ»;
Ты в запросе указываешь что найти элементы с наименованием таким же как у группы, но чтобы это была не группа?
29 — 03.09.09 — 10:19
(25) теперь робит. Спс, оставлю твой вариант
30 — 03.09.09 — 10:19
(28) да, виноват
31 — 03.09.09 — 10:20
(30) следующий раз задавая вопрос описывай всю ситуацию, пиши что ты хочешь сделать
32 — 03.09.09 — 10:21
(27)примерно так
//—получим все группы в справочнике
Запрос1= Новый Запрос;
Запрос1.Текст =
«ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА»;
ТЗГрупп=Запрос1.Выполнить().Выгрузить();
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ
| И Номенклатура.Родитель = &Родитель»;
Для каждого СтрГруппа ИЗ ТЗГруппН Цикл
Запрос.УстановитьПараметр(«Родитель»,СтрГруппа.Номенклатура);
Сообщить(«Группа:»+СтрГруппа.Номенклатура);
РезультатЗапроса=Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
сч=0;
Пока Выборка.Следующий() Цикл
сч=сч+1;
СпрОбъект = Выборка.Номенклатура.ПолучитьОбъект();
Сообщить(» — Товар=»+СпрОбъект.Наименование+» Ставка НДС=»+СпрОбъект.СтавкаНДС);
СпрОбъект.СтавкаНДС = СтрГруппа.СтавкаНДС;
Попытка
СпрОбъект.Записать();
Исключение
Сообщить (ОписаниеОшибки());
КонецПопытки
КонецЦИкла;
КонецЦИкла;
только в номенклатуру на материалы поменять надо
33 — 03.09.09 — 10:24
спс!
34 — 03.09.09 — 10:31
Можно так…
|ГДЕ
|(НЕ Номенклатура.ЭтоГруппа)
35 — 03.09.09 — 10:32
«Номенклатура.Родитель = &Родитель» — абсолютно неверное условие если в справочнике больше 2х уровней.
36 — 03.09.09 — 10:45
(35)а бывает элемент у которого больше одного родителя?
37 — 03.09.09 — 10:51
(36) Бывает, когда надо выбрать все вложенные, в том числе и для вложенных групп
nv24
38 — 03.09.09 — 10:56
(35)и(37) не путайте тёплое с мягким — родителя и вложенность групп.
На чтение 6 мин Просмотров 11.1к. Опубликовано 26.04.2017
Справочники в 1С — это объекты конфигурации, предназначенные для хранения данных, имеющих одинаковую структуру и носящие списочный характер. Например, в справочниках может храниться: перечень номенклатуры, контрагентов, сотрудников, банковских счетов и т.д. В статье рассматриваются базовые принципы работы с этим объектом метаданных.
- Создание элемента справочника
- Поиск элементов справочника
- Изменение элементов справочника
- Удаление элементов справочника
- Обход элементов справочника
- Выбор элементов справочника запросом
- Открытие форм справочника
Содержание
- Создание элемента справочника
- Поиск элементов справочника
- Изменение элементов справочника
- Удаление элементов справочника
- Обход элементов справочника
- Выбор элементов справочника запросом
- Открытие форм справочника
Создание элемента справочника
Создание новых элементов и групп справочника производится с помощью программного объекта СправочникМенеджер.<Имя справочника>. Данный объект доступен только на сервере.
Создание нового элемента или группы справочника состоит из следующих этапов:
- Создание элемента или группы;
- Заполнение владельца (если справочник подчиненный);
- Заполнение родителя (если справочник иерархический);
- Заполнение наименования и реквизитов (если не задана автоматическая нумерация, то и кода);
- Заполнение табличных частей;
- Запись элемента.
Создание новой группы:
НоваяГруппа = Справочники.Контрагенты.СоздатьГруппу(); // Создание группы
НоваяГруппа.Наименование = "Покупатели"; // Заполнение наименования
НоваяГруппа.Записать(); // Запись группы
Создание нового элемента:
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент(); // Создание элемента
НовыйЭлемент.Родитель = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели"); // Заполнение родителя
НовыйЭлемент.Наименование = "Ромашка ООО"; // Заполнение наименования
НовыйЭлемент.ИНН = "123456789"; // Заполнение реквизита
// Добавление новой строки табличной части
НоваяСтрока = НовыйЭлемент.КонтактнаяИнформация.Добавить();
НоваяСтрока.Тип = "Адрес";
НоваяСтрока.Представление = "Москва";
НовыйЭлемент.Записать(); // Запись элемента
Поиск элементов справочника
Для поиска элементов справочников в языке программирования 1С предусмотрено несколько методов:
- НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>)
- НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)
- НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>)
Во всех методах если поиск успешный, то будет возвращена ссылка на найденный элемент.
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("123"); // Поиск контрагента с кодом "123"
НайденныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("1", , , НайденныйКонтрагент); // Поиск подчиненного найденному контрагенту договора с номером "1"
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели"); // Поиск элемента с наименованием "Покупатели"
НайденныйКонтрагент1 = Справочники.Контрагенты.НайтиПоНаименованию("Ромашка ООО", , НайденныйКонтрагент); // Поиск элемента с наименованием "Ромашка ООО" в группе "Покупатели"
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "123456789"); // Поиск контрагента с ИНН "123456789"
Изменение элементов справочника
Для изменения реквизитов справочника необходимо выполнить следующие действия:
- Получить объект элемента справочника (метод ПолучитьОбъект(), возвращает тип СправочникОбъект.<Имя справочника>);
- Присвоить новые значения реквизитам объекта;
- Записать объект элемента справочника.
Программное изменение справочника возможно только на стороне сервера.
Например, на форму обработки выведен реквизит Номенклатура типа СправочникСсылка.Номенклатура. Вот пример кода, изменяющего наименование выбранной пользователем номенклатуры:
НоменклатураОбъект = Номенклатура.ПолучитьОбъект();
НоменклатураОбъект.Наименование = "Новое наименование";
НоменклатураОбъект.Записать();
Удаление элементов справочника
Элементы справочника могут быть помечены на удаление и удалены из базы непосредственно.
Непосредственное удаление – операция необратимая, в то время как пометку на удаление можно отменить. Пометка на удаление хранится в предопределенном реквизите ПометкаУдаления. В пользовательском режиме помеченные на удаление элементы и группы справочника помечаются красным крестиком.
Пометку на удаление можно установить/снять двумя разными способами:
// Способ 1. Использование метода УстановитьПометкуУдаления()
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("123");
КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект();
КонтрагентОбъект.УстановитьПометкуУдаления(Истина);
// Способ 2. Изменение свойства ПометкаУдаления
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("123");
КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект();
КонтрагентОбъект.ПометкаУдаления = Истина;
КонтрагентОбъект.Записать();
Пример непосредственного удаления элемента справочника:
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("123");
КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект();
КонтрагентОбъект.Удалить();
Обход элементов справочника
Для обхода элементов справочника в языке программирования 1С предусмотрено два метода:
- Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
- ВыбратьИерархически(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
Методы отличаются порядком следования отобранных элементов: при иерархической выборке для каждого элемента сначала выбираются элементы, для которых он является родителем, а затем уже выбираются элементы следующего уровня.
Рассмотрим примеры обхода элементов справочника:
// Обход всех элементов справочника Контрагенты
Выборка = Справочники.Контрагенты.Выбрать(); // Получение выборки всех элементов справочника
Пока Выборка.Следующий() Цикл
//действия с очередным элементом
Сообщить(Выборка.Наименование);
КонецЦикла;
// Обход контрагентов из группы "Покупатели"
ГруппаПокупатели = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели");
Выборка = Справочники.Контрагенты.Выбрать(ГруппаПокупатели);
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
// Обход договоров контрагента "Ромашка ООО"
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоНаименованию("Ромашка ООО");
Выборка = Справочники.ДоговорыКонтрагентов.Выбрать(, НайденныйКонтрагент);
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
// Обход контрагентов с пустым ИНН
// Реквизит ИНН должен быть проиндексирован!
Отбор = Новый Структура("ИНН", ""); // Структура может содержать только один элемент
Выборка = Справочники.Контрагенты.Выбрать(, , Отбор);
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
Выбор элементов справочника запросом
Поиск данных в базе 1С предпочтительнее выполнять при помощи запросов. Запрос позволяет описать практически любые условия для отбора, в отличие от методов Выбрать() и ВыбратьИерархически(), на которые накладываются существенные ограничения. К тому же, в большинстве случаев работа с использованием запросов быстрее, чем работа с использованием программного кода.
Простой пример поиска и вывода товаров со стоимостью больше 1000:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Наименование
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Стоимость > 1000";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
Открытие форм справочника
Для открытия любых форм справочников рекомендуется использовать метод
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)
Для открытия формы элемента или группы справочника также возможно использовать более простой метод
ПоказатьЗначение(<ОписаниеОповещенияОЗавершении>, <Значение>)
Кроме методов ОткрытьФорму() и ПоказатьЗначение() есть и другие (ОткрытьФормуМодально, ОткрытьЗначение, ПолучитьФорму), но их использование не рекомендуется, т.к. часть этих методов использует режим модального открытия, часть противоречит свежим рекомендациям фирмы 1С.
Приведем примеры программного открытия форм справочника:
// Открыть форму списка
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка");
// Открыть форму элемента
// Контрагент – реквизит формы, заполняемый пользователем интерактивно
ПоказатьЗначение(, Контрагент);
// Еще один способ открытия формы элемента
ПараметрыОткрытия = Новый Структура("Ключ", Контрагент);
ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаЭлемента", ПараметрыОткрытия);
// Открыть форму группы
// ГруппаКонтрагентов– реквизит формы, заполняемый пользователем интерактивно
ПоказатьЗначение(, ГруппаКонтрагентов);
// Еще один способ открытия формы группы
ПараметрыОткрытия = Новый Структура("Ключ", ГруппаКонтрагентов);
ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаГруппы", ПараметрыОткрытия);
Внимание!
Следует понимать, что интерактивная работа (в том числе открытие форм) в 1С возможна только на стороне клиента. В то же время поиск и изменение данных возможны только на стороне сервера.
&НаСервере Процедура СозданиеИИзменениеЭлементовИГруппСправочникаНаСервере() /// Как создать новый элемент справочника в 1с 8.3, 8.2 // создадим новый элемент справочника Города // с именем Владивосток Владивосток = Справочники.Города.СоздатьЭлемент(); Владивосток.Наименование = "Владивосток"; Владивосток.Записать(); /// Как создать новую группу справочника в 1с 8.3, 8.2 // создадим новую группу справочника Города ГородаУМоря = Справочники.Города.СоздатьГруппу(); ГородаУМоря.Наименование = "Города у моря"; ГородаУМоря.Записать(); /// Как перенести элемент справочника в другую группу в 1с 8.3, 8.2 // перенесём созданный Владивосток в группу "Города у моря" Владивосток.Родитель = ГородаУМоря.Ссылка; Владивосток.Записать(); /// Как внести изменения в элемент справочника по ссылке /// в 1с 8.3, 8.2 // найдём город Калькутта КалькуттаСсылка = Справочники.Города.НайтиПоНаименованию("Калькутта"); Если Не КалькуттаСсылка.Пустая() Тогда // изменим и запишем численность жителей в городе Калькутта = КалькуттаСсылка.ПолучитьОбъект(); Калькутта.Численность = 1000000; Калькутта.Записать(); КонецЕсли; /// Как получить и проверить пустую ссылку типа справочник в 1с 8.3, 8.2 ПустаяСсылка = Справочники.Города.ПустаяСсылка(); Если ПустаяСсылка.Пустая() Тогда Сообщить("Ссылка действительно пустая."); КонецЕсли; /// Как узнать принадлежность элемента справочника группе /// с учетом уровней иерархии в 1с 8.3, 8.2 ПермьСсылка = Справочники.Города.НайтиПоНаименованию("Пермь"); РоссияСсылка = Справочники.Города.НайтиПоНаименованию("Россия"); // проверим принадлежит ли город Пермь группе Россия Если ПермьСсылка.ПринадлежитЭлементу(РоссияСсылка) Тогда Сообщить("Элемент Пермь находится в группе Россия."); КонецЕсли; /// Как скопировать существующий элемент справочника в 1с 8.3, 8.2 // скопируем элемент Пермь КопияПерми = ПермьСсылка.Скопировать(); КопияПерми.Наименование = КопияПерми.Наименование + " КОПИЯ"; КопияПерми.УстановитьНовыйКод(); КопияПерми.Записать(); /// Как выяснить уровень вложенности элемента справочника /// в 1с 8.3, 8.2 Сообщить(КопияПерми.Уровень()); // 1 /// Как заблокировать элемент справочника перед изменениями /// в 1с 8.3, 8.2 // выполним блокировку элемента справочника // от изменения другими режимами или пользователями Пермь = ПермьСсылка.ПолучитьОбъект(); Если Не Пермь.Заблокирован() Тогда Пермь.Заблокировать(); // тут идёт какой-то долгий алгоритм // в результате которого мы меняем // заблокированный элемент Пермь.Численность = 5000; Пермь.Записать(); // и только потом освобождаем его // для других режимов и пользователей Пермь.Разблокировать(); КонецЕсли; /// Как заполнить новый элемент справочника на основании /// в 1с 8.3, 8.2 // в модуле справочника Города я определил процедуру // ОбработкаЗаполнения, которая обрабатывает ситуации // когда мы заполняем один элемент на основании // данных другого (см. в базе для скачивания) Хабаровск = Справочники.Города.СоздатьЭлемент(); Хабаровск.Заполнить( Справочники.Города.НайтиПоНаименованию("Рио-де-Жанейро") ); Хабаровск.Наименование = "Хабаровск"; Хабаровск.Записать(); /// Как пометить на удаление элемент справочника в 1с 8.3, 8.2 // пометим на удаление только что созданный Хабаровск Хабаровск.УстановитьПометкуУдаления( Истина, // пометка удаления Ложь // включая подчиненные (если речь о группе справочника) ); // метод Записать вызывать не нужно КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьКлиентаПоИмени(Имя) Возврат Справочники.Клиенты.НайтиПоНаименованию(Имя); КонецФункции /// Как открыть форму существующего элемента справочника /// по ссылке в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСуществующегоЭлементаСправочника(Команда) СсылкаНаЭлемент = ПолучитьКлиентаПоИмени("Андрей"); ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент); ОткрытьФорму( "Справочник.Клиенты.ФормаОбъекта", // имя формы ПараметрыФормы // параметры для формы ); КонецПроцедуры /// Как открыть форму существующей группы справочника /// по ссылке в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСуществующейГруппыСправочника(Команда) СсылкаНаГруппу = ПолучитьКлиентаПоИмени("Vip"); ПараметрыФормы = Новый Структура("Ключ", СсылкаНаГруппу); ОткрытьФорму( "Справочник.Клиенты.ФормаГруппы", // имя формы ПараметрыФормы // параметры для формы ); КонецПроцедуры /// Как открыть форму выбора элемента справочника и /// отследить её закрытие в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуВыбораЭлементаСправочника(Команда) ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораЭлемента", ЭтотОбъект); ОткрытьФорму( "Справочник.Клиенты.ФормаВыбора",,,,,,ОповещениеОЗакрытии ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораЭлемента(Результат, Параметры) Экспорт Если Результат <> Неопределено Тогда Сообщить("Был выбран элемент " + Результат); КонецЕсли; КонецПроцедуры /// Как открыть форму выбора группы справочника и /// отследить её закрытие в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуВыбораГруппыСправочника(Команда) ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораГруппы", ЭтотОбъект); ОткрытьФорму( "Справочник.Клиенты.ФормаВыбораГруппы",,,,,,ОповещениеОЗакрытии ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораГруппы(Результат, Параметры) Экспорт Если Результат <> Неопределено Тогда Сообщить("Была выбрана группа " + Результат); КонецЕсли; КонецПроцедуры /// Как открыть форму списка справочника и /// установить отбор по реквизиту в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормаСпискаСправочникаСОтбором(Команда) // откроем список клиентов, оставив // только мужчин ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Пол", ПолучитьПеречислениеМужской()); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора); ОткрытьФорму( "Справочник.Клиенты.ФормаСписка", ПараметрыФормы ); КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьПеречислениеМужской() Возврат Перечисления.Пол.Мужской; КонецФункции /// Как открыть форму списка справочника с нужным отображением /// в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСпискаСправочникаСНужнымОтображением(Команда) // откроем список клиентов с отображением "Список" ФормаСписка = ПолучитьФорму("Справочник.Клиенты.ФормаСписка"); ФормаСписка.Открыть(); ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список; КонецПроцедуры /// Как открыть форму только что созданного, но ещё /// не записанного элемента справочника в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуНовогоНеЗаписанногоСправочника(Команда) // получаем форму нового справочника ФормаНовогоСправочника = ПолучитьФорму( "Справочник.Еда.ФормаОбъекта",,, Истина); // делаем копию её данных (так как напрямую их менять // нельзя) КопияДанныхФормы = ФормаНовогоСправочника.Объект; // заполняем эти данные на сервере ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы); // копируем заполненные данные в исходную форму КопироватьДанныеФормы(КопияДанныхФормы, ФормаНовогоСправочника.Объект); // показываем форму нового заполненного // элемента справочника пользователю ФормаНовогоСправочника.Открыть(); КонецПроцедуры &НаСервере Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы) // преобразуем данные формы в документ Еда = ДанныеФормыВЗначение(ДанныеФормы, Тип("СправочникОбъект.Еда")); Еда.Наименование = "Груша"; Еда.Калорийность = 500; // преобразуем документа обратно в данные формы ЗначениеВДанныеФормы(Еда, ДанныеФормы); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
0
Присваивание значений реквизитам по их идентификатору
Казалось бы, что может быть проще — пишем через точку идентификатор реквизита и присваиваем.
Что-то вроде вот этого:
Код 1C v 8.х
СправочникОбъект.Наименование = "Новое наименование";
Но бывают случаи, когда идентификатор реквизита формируется динамически и какой именно реквизит сейчас надо обработать неизвестно. Что тогда делать?
В 1С 7.7 существовали такие методы объектов, как Справочник.УстановитьАтрибут() и Справочник.ПолучитьАтрибут(), которые позволяли установить значение атрибута объекта по его идентификатору.
А в 1С 8.1 таких методов нет! Что же делать?!
Можно, конечно, написать кучу условий, что-то типа:
Код 1C v 8.х
Если ИмяРеквизита="Наименование" тогда
СправочникОбъект.Наименование = ЗначениеРеквизита;
ИначеЕсли ИмяРеквизита="Код" тогда
СправочникОбъект.Код = ЗначениеРеквизита;
ИначеЕсли
.....
КонецЕсли;
Выглядит совершенно прямолинейно, но работать будет. Вот только если реквизитов будет с полсотни — замучаетесь условия писать.
А на самом деле все просто. Можно использовать вот такую конструкцию:
Код 1C v 8.х
СправочникОбъект[ИмяРеквизита] = ЗначениеРеквизита;
где : ИмяРеквизита — строка идентификатора реквизита справочника (например, «Наименование»)
И вся наша куча условий сводится всего к одной строке кода….
Автор: Николай Николаев
//функция устанавливает новое значение реквизита документа или справочника и задаёт вопрос, если новое значение не соответствует предыдущему
Функция гЗначение(Ко,Атрибут,Значение) Экспорт
Знач1=Ко.ПолучитьАтрибут(Атрибут);
Знач2=Значение;
//проверка
Если Не(ТипЗначенияСтр(Знач1)=ТипЗначенияСтр(Знач2)) Тогда
//несоответствие типов
Возврат(0);
ИначеЕсли Не(ТипЗначенияСтр(Знач2)="Число") И (ПустоеЗначение(Знач2)=1) Тогда
//пустое новое значение
Возврат(0);
КонецЕсли;
//реквизит
Если Метаданные.Документ(Ко.Вид()).Выбран()=1 Тогда
//документ
Если Метаданные.Документ(Ко.Вид()).РеквизитШапки(Атрибут).Выбран()=1 Тогда
Ж=Метаданные.Документ(Ко.Вид()).РеквизитШапки(Атрибут);
Имя=Ж.Представление();
ИначеЕсли Метаданные.Документ(Ко.Вид()).РеквизитТабличнойЧасти(Атрибут).Выбран()=1 Тогда
Ж=Метаданные.Документ(Ко.Вид()).РеквизитТабличнойЧасти(Атрибут);
Имя=Ж.Представление()+" (строка "+Ко.НомерСтроки+")";
Иначе
Ж=Метаданные.ОбщийРеквизитДокумента(Атрибут);
Имя=Ж.Представление();
КонецЕсли;
ИначеЕсли Метаданные.Справочник(Ко.Вид()).Выбран()=1 Тогда
//справочник
Ж=Метаданные.Справочник(Ко.Вид()).Реквизит(Атрибут);
Имя=Ж.Представление();
Если ПустаяСтрока(Имя)=1 Тогда
Имя=Атрибут;
КонецЕсли;
КонецЕсли;
//форматирование
Если ТипЗначенияСтр(Знач2)="Строка" Тогда
Знач1=СокрЛП(Знач1);
Знач2=СокрЛП(Знач2);
ИначеЕсли ТипЗначенияСтр(Знач2)="Число" Тогда
Знач2=Окр(Знач2,Ж.Точность);
КонецЕсли;
//проверка
Если Знач1=Знач2 Тогда
Возврат(0);
КонецЕсли;
//установка значения
Если ПустоеЗначение(Знач1)=0 Тогда
Текст=
"Атрибут: "+Имя+"
|
|Старое значение: "+СимволТабуляции+Знач1+"
|Новое значение: "+СимволТабуляции+Знач2+"
|
|Установить новое значение?";
Если Вопрос(Текст,"Да+Нет")="Нет" Тогда
Возврат(0)
КонецЕсли;
КонецЕсли;
//значение
Ко.УстановитьАтрибут(Атрибут,Знач2);
Возврат(1);
КонецФункции
Хотите узнать больше по этому вопросу?
Подпишитесь на нашу рассылку новостей
Подписаться
Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:
Предложить статью
0 / 0 / 0 Регистрация: 19.12.2015 Сообщений: 5 |
|
1 |
|
Как присвоить реквизиту ТЧ документа значение реквизита справочника?30.01.2018, 08:54. Показов 4593. Ответов 4
Есть справочник «Номенклатура» в нем реквизит РозничнаяЦена, Документ «ПриходнаяНакладная» с табличной частью «ТабличнаяЧасть» в ней реквизиты «РозничнаяЦена» «Номенклатура» и тд. Как присвоить реквизиту ТЧ значение реквизита справочника при заполнении приходной накладной?
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
30.01.2018, 08:57 |
2 |
Hovel, форма управляемая?
0 |
0 / 0 / 0 Регистрация: 19.12.2015 Сообщений: 5 |
|
30.01.2018, 08:58 [ТС] |
3 |
Знаю что «ПриИзменении» в модуле формы Строка = Элементы.ТабличнаяЧасть.ТекущиеДанные Строка.РозничнаяЦена = ……. И не знаю как указать на значение реквизита. Добавлено через 40 секунд
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
30.01.2018, 09:08 |
4 |
|||
Сообщение было отмечено Hovel как решение РешениеHovel,
Замените ТабличнаяЧастьИмя на имя вашей ТЧ документа
2 |
0 / 0 / 0 Регистрация: 19.12.2015 Сообщений: 5 |
|
30.01.2018, 09:13 [ТС] |
5 |
Спасибо ! Добавлено через 45 секунд
0 |
Справочники в системе «1С:Предприятие» версии 7.7 являются агрегатным типом данных, средством для работы со списками однородных элементов данных. При помощи справочников организуется ввод стандартной информации в документы, а также её просмотр и, если необходимо, корректировка.
Рассмотрим основные моменты работы со справочниками:
- Контекст работы со справочниками
- Атрибуты справочников
- Методы периодических реквизитов справочников
- Методы справочников
- Методы контекста Модуля формы элемента справочника
- Методы контекста Модуля формы списка справочника
- Предопределённые процедуры Модулей форм элемента и группы справочника
- Предопределённые процедуры Модуля формы списка справочника
- Предопределённые процедуры Глобального модуля
Контекст работы со справочниками
В синтаксисе языка 1C обращение к атрибутам, а также вызов методов справочников зависит от контекста выполнения конкретного программного модуля.
Если конкретный элемент или группа справочника согласно локальному контексту входит в набор непосредственно доступных модулю значений агрегатных типов данных, то обращение к атрибуту, вызов метода для этого элемента или группы справочника — просто имя этого атрибута или метода с указанием необходимых параметров. Например, в форме элемента справочника "
Сотрудники"
мы имеем непосредственный доступ к текущему элементу (сотруднику) справочника. Значит, чтобы изменить имя текущего сотрудника, просто укажем:
Наименование = "Сидоров Иван Иванович";
А если значение элемента или группы справочника получено из других источников, например как реквизит какого-либо документа? Тогда, чтобы получить доступ к атрибуту, вызвать метод такой переменной со значением типа "
Справочник"
, имя этого атрибута, метода (с указанием необходимых параметров) необходимо записать через точку после имени реквизита. Например, если в документе значение реквизита «Сотрудник» имеет тип "
Справочник.Сотрудники"
, имя сотрудника можно узнать следующим образом:
ИмяСотр = Док.Сотрудник.Наименование;
В других случаях доступ к атрибутам, вызов методов конкретного элемента или группы справочника происходит при помощи переменной со ссылкой на объект типа "
Справочник"
, созданный с помощью функции СоздатьОбъект()
. Чтобы вызвать атрибут или метод объекта, имя этого атрибута, метода (с указанием необходимых параметров) пишется через точку после имени этой переменной.
При создании переменной со ссылкой на объект типа "
Справочник"
в качестве параметра функции СоздатьОбъект()
передаётся полное имя справочника, состоящее из идентификатора справочника, записанного через точку после ключевого слова «Справочник» (англоязычный синоним — «Reference»). Например:
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
Допускается также создавать объекты неопределённого вида справочника. В этом случае название конкретного вида справочника в параметре вызова функции СоздатьОбъект()
опускается. Далее для работы с таким объектом ему надо установить вид справочника при помощи метода Вид()
:
Спр = СоздатьОбъект("Справочник"); Спр.Вид("Сотрудники");
Примечание: Объект, созданный при помощи функции СоздатьОбъект()
, изначально не спозиционирован, то есть не указывает на конкретный элемент справочника. Для того чтобы обратиться к конкретному элементу справочника и к его атрибутам, необходимо предварительно выполнить позиционирование при помощи методов НайтиЭлемент()
, НайтиПоКоду()
, ПолучитьЭлемент()
и т.п.
После того, как элемент найден, мы можем обращаться к его атрибутам, указывая имя атрибута через точку после имени переменной, хранящей ссылку на объект, созданный при помощи функции СоздатьОбъект()
. Ссылку же на сам найденный элемент можно получить с помощью метода ТекущийЭлемент()
:
Сотр = СпрСотр.ТекущийЭлемент();
Позиционирование происходит также и при создании нового элемента справочника с помощью метода Новый()
:
Спр = СоздатьОбъект("Справочник.Товары"); Спр.Новый(); Спр.Наименование = "Плёнка ПВХ"; Спр.Код = 1032; Спр.Размер = 10000; Спр.Записать();
Атрибуты справочников
Получить доступ к значению обязательного реквизита «Код» выбранного элемента справочника позволяет атрибут Код
(англоязычный синоним — Code
).
Пример использования:
Спр = СоздатьОбъект("Справочник.Подразделения"); Спр.НайтиПоКоду("29"); КодПодразделения = Спр.Код;
Получить доступ к значению обязательного реквизита «Наименование» выбранного элемента справочника позволяет атрибут Наименование
(англоязычный синоним — Description
).
Пример использования:
Спр = СоздатьОбъект("Справочник.Подразделения"); Спр.НайтиПоКоду("29"); Подразделение = Спр.Наименование;
Получить доступ к значению любого другого реквизита выбранного элемента справочника позволяет атрибут <ИмяРеквизита>. В тексте программного модуля в качестве названия атрибута подставляется идентификатор конкретного реквизита справочника, созданного в Конфигураторе.
В нижеприведённом примере справочник «Сотрудники» имеет реквизит «Оклад»:
Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.НайтиПоКоду("111"); ОкладСотр = Спр.Оклад; Спр.Оклад = ОкладСотр * 1.5;
Получить доступ к значению родительской группы выбранного элемента справочника позволяет атрибут Родитель
(англоязычный синоним — Parent
). Замечу, что данный атрибут может быть изменён только для объектов, созданных функцией СоздатьОбъект()
.
Пример использования:
Функция ДатьРодителя(Элем) Спр = СоздатьОбъект("Справочник.Товары"); Спр.НайтиЭлемент(Элем); Если Спр.Уровень() > 1 Тогда Спр.НайтиЭлемент(Спр.Родитель); Возврат "Этот товар принадлежит группе " + Спр.Наименование; Иначе Возврат "Это товар первого уровня - нет родителя!"; КонецЕсли; КонецФункции
Получить доступ к значению элемента сопряжённого справочника, которому подчинён выбранный элемент текущего справочника, позволяет атрибут Владелец
(англоязычный синоним — Owner
). Замечу, что данный атрибут может быть изменён только для объектов, созданных функцией СоздатьОбъект()
.
Пример использования:
Функция ДатьВладельца(Элем) СпрТов = СоздатьОбъект("Справочник.Товары"); СпрЕдИзм = СоздатьОбъект("Справочник.ЕдиницыИзмерений"); СпрЕдИзм.НайтиЭлемент(Элем); СпрТов.НайтиЭлемент(СпрЕдИзм.Владелец); Возврат "Это единица измерения товара " + СпрТов.Наименование; КонецФункции
Методы периодических реквизитов
Получить значение периодического реквизита справочника на определённую дату или позицию документа позволяет метод Получить()
(англоязычный синоним — GetValue()
). Данный метод разрешено использовать только для периодических реквизитов справочников, если для справочника не установлена дата при помощи метода ИспользоватьДату()
.
Синтаксис:
Получить(<Дата>)
где <Дата> — выражение со значением требуемой даты или значение типа «Документ» (в этом случае возвращается значение на дату и время документа). Параметр является необязательным. Значение по умолчанию — ТА.
Пример:
ОкладСотр = Сотрудники.Оклад.Получить(ДатаДок);
Примечание: Если к объекту типа "
Справочник"
однажды применён метод ИспользоватьДату()
, то в дальнейшем, чтобы выбирать значения периодических реквизитов справочника, нельзя применять к этому же объекту метод Получить()
, так как в такой последовательности эти два метода несовместимы.
Установить значение периодического реквизита справочника на определённую дату позволяет метод Получить()
(англоязычный синоним — SetValue()
). Замечу, что метод Установить()
может использоваться только для объектов, созданных с помощью функции СоздатьОбъект()
. К тому же, его разрешено использовать только для периодических реквизитов справочников, если для справочника не установлена дата при помощи метода ИспользоватьДату()
.
Синтаксис:
Установить(<Дата>, <3начение>)
где
- <Дата> — выражение со значением требуемой даты;
- <3начение> — выражение, содержащее устанавливаемое значение периодического реквизита справочника.
Пример:
ОкладСотр = Сотрудники.Оклад.Установить(ДатаДок, МаксОклад);
Примечание: Если к объекту типа "
Справочник"
однажды применён метод ИспользоватьДату()
, то в дальнейшем, чтобы записать новые значения периодических реквизитов справочника, нельзя применять к этому же объекту метод Установить()
, так как в такой последовательности эти два метода несовместимы.
Методы справочников
Общие методы
Получить текущее название вида справочника или установить вид для объектов типа "
Справочник"
неопределённого вида позволяет метод Вид()
(англоязычный синоним — Kind()
). В тексте программы данный метод можно использовать и как процедуру, и как функцию. Если при вызове метода задан параметр, то вид справочника устанавливается в соответствии с этим параметром. Возвращаемым значением метода является строка, содержащая текущий (на момент до исполнения метода) идентификатор справочника, как он задан в Конфигураторе.
Синтаксис:
Вид(<Название>)
где <Название> — строковое выражение с названием вида справочника. Параметр является необязательным.
Примечание: Устанавливать новое значение вида справочника допускается только для объектов типа "
Справочник"
неопределённого вида, созданных при помощи функции СоздатьОбъект()
.
Пример использования:
Спр = СоздатьОбъект("Справочник"); Спр.Вид("Сотрудники"); Состояние(Спр.Вид());
Получить представление вида справочника, как он задан в Конфигураторе, позволяет метод ПредставлениеВида()
(англоязычный синоним — KindPresent()
). Параметры у метода отсутствуют. Возвращаемым значением метода является строковое значение, содержащее пользовательское представление вида справочника (синоним справочника или, если он не указан, то идентификатор).
Пример использования:
Спр = СоздатьОбъект("Справочник.Товары"); Состояние(Спр.ПредставлениеВида());
Методы редактирования справочника
Инициализировать создание нового элемента справочника позволяет метод Новый()
(англоязычный синоним — New()
). Параметры у метода отсутствуют. После инициализации создания нового элемента справочника, как правило, следом производится заполнение его реквизитов с последующим вызовом метода Записать()
. Метод Новый()
может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект()
.
Пример использования:
Процедура ВводСотрудника() Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.Новый(); Спр.Наименование = ФИО; Спр.Код = ТН; Спр.Оклад = Оклад; Спр.Аванс = Аванс; . . . Спр.Записать(); КонецПроцедуры
Инициализировать создание пустой записи новой группы в справочнике позволяет метод НоваяГруппа()
(англоязычный синоним — NewGroup()
). Параметры у метода отсутствуют. Метод может использоваться только для объектов, созданных функцией СоздатьОбъект()
.
Пример использования:
Процедура ВводГруппыСотрудников() Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.НоваяГруппа(); Спр.Наименование = "Расчетчик 3"; Спр.Код = 3; Спр.Записать(); КонецПроцедуры
Записать элемент справочника позволяет метод Записать()
(англоязычный синоним — Write()
). Параметры у метода отсутствуют. Пример использования метода приведён выше.
Примечание: Если этот метод применяется в Модуле формы элемента справочника непосредственно к элементу справочника локального контекста, то данный метод отрабатывает те же действия, как и интерактивное нажатие пользователем кнопки с формулой «#Записать».
Удалить или пометить на удаление текущий элемент или группу справочника позволяет метод Удалить()
(англоязычный синоним — Delete()
). Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект()
.
Синтаксис метода:
Удалить(<Режим>)
где <Режим> — числовое выражение. Возможные значения: 1 – непосредственное удаление; 0 – пометка на удаление. Параметр является необязательным. Значение по умолчанию — 1.
Пример записи метода:
Спр.Удалить(0);
Примечание: Непосредственное удаление объекта следует применять очень аккуратно, так как это действие может нарушить ссылочную целостность информации. Данный режим не рекомендуется использовать, если на данный объект могут быть ссылки в других объектах, например, в реквизитах существующих документов.
Снять пометку удаления с текущего элемента справочника позволяет метод СнятьПометкуУдаления()
(англоязычный синоним — ClearDeleteMark()
). Параметры у метода отсутствуют. Метод может использоваться только для объектов, созданных функцией СоздатьОбъект()
.
Пример использования:
Процедура ВосстановлениеУдаленныхСотр(Сотр) Спр = СоздатьОбъект("Справочник.Сотрудники"); Если Сотр.Выбран() > 0 Тогда Спр.НайтиЭлемент(Сотр); Если Спр.Выбран() > 0 Тогда Если Спр.ПометкаУдаления() = 1 Тогда Спр.СнятьПометкуУдаления(); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры
Установить новый префикс для автоматического создания кодов элементов справочника позволяет метод ПрефиксКода()
(англоязычный синоним — CodePrefix()
). Возвращаемым значением метода является строковое значение текущего префикса кодов элементов справочника на момент до исполнения метода.
Синтаксис:
ПрефиксКода(<Префикс>)
где <Префикс> — строковое выражение, задающее новый префикс кодов элементов справочника. Параметр является необязательным.
Пример записи метода:
ПрефиксКода("01-");
Установить новый код элемента справочника с указанным префиксом позволяет метод УстановитьНовыйКод()
(англоязычный синоним — SetNewCode()
).
Синтаксис метода:
УстановитьНовыйКод(<Префикс>)
где <Префикс> — строковое выражение, задающее префикс кода элемента справочника.
Пример записи метода:
УстановитьНовыйКод("01-");
Методы для выбора конкретного элемента справочника
Выполнить поиск элемента справочника по значению, заданному параметром, и позиционировать объект "
Справочник"
на этом элементе позволяет метод НайтиЭлемент()
(англоязычный синоним — FindItem()
). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Метод может использоваться только для объектов, созданных функцией СоздатьОбъект()
.
Синтаксис:
НайтиЭлемент(<НаименованиеЭлемента>)
где <НаименованиеЭлемента> — выражение со значением элемента справочника.
Пример использования:
СпрБнк = СоздатьОбъект("Справочник.Банки"); СпрБнк.ИспользоватьДату(ДатаДок); СпрБнк.НайтиЭлемент(Док.НашБанк); Процент = СпрБнк.Процент; НазваниеБанка = СпрБнк.Наименование;
Выполнить поиск элемента справочника по наименованию, указанному в параметре метода, и позиционировать объект "
Справочник"
на этом элементе позволяет метод НайтиПоНаименованию()
(англоязычный синоним — FindByDescr()
). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Использоваться данный метод можно только для объектов, созданных с помощью функции СоздатьОбъект()
.
Синтаксис:
НайтиПоНаименованию(<Наименование>, <Режим>, <ФлагПоиска>)
где
- <Наименование> — строковое выражение, содержащее наименование искомого элемента справочника;
- <Режим> — числовое выражение, задающее режим поиска: 1 — поиск внутри установленного подчинения (родителя); 0 — поиск во всём правочнике вне зависимости от родителя. Параметр является необязательным. Значение по умолчанию — 1;
- <ФлагПоиска> — числовое выражение — флаг поиска: 1 — найти точное соответствие наименования; 0 — найти наименование по первым символам. Параметр является необязательным. Значение по умолчанию — 0.
Пример использования:
Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.ИспользоватьДату(ДатаДок); Если Спр.НайтиПоНаименованию("Иванов", 1) > 0 Тогда Оклад = Спр.Оклад; Подразделение = Спр.Подразделение; Иначе Предупреждение("Нет у нас Ивановых!"); КонецЕсли;
Выполнить поиск элемента справочника по коду, указанному в параметре метода, и позиционировать объект "
Справочник"
на этом элементе позволяет метод НайтиПоКоду()
(англоязычный синоним — FindByCode()
). Если справочник многоуровневый и нумерация в пределах каждой группы своя, то полный код выбираемого элемента можно задавать, разделяя коды уровней символом «/» (косая черта). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Метод может использоваться только для объектов, созданных функцией СоздатьОбъект()
.
Синтаксис:
НайтиПоКоду(<КодЭлемента>, <Режим>)
где
- <КодЭлемента> — выражение со значением искомого кода;
- <Режим> — числовое выражение, устанавливающее режим поиска: 0 — поиск во всем справочнике вне зависимости от родителя; 1 — поиск внутри установленного подчинения (родителя); 2 — поиск по полному коду. Параметр является необязательным. Значение по умолчанию: 0 — для справочников, у которых код уникален во всем справочнике; 2 — для справочников, у которых код уникален в группе.
Пример использования:
Пдр = СоздатьОбъект("Справочник.Подразделения"); Если Пдр.НайтиПоКоду("125") > 0 Тогда Сообщить("Есть такое подразделение !") Иначе Сообщить("Нет такого подразделения!") КонецЕсли;
Выполнить поиск первого элемента с указанным значением заданного реквизита и позиционировать объект "
Справочник"
на этом элементе позволяет метод НайтиПоРеквизиту()
(англоязычный синоним — FindByAttribute()
). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект()
.
Синтаксис:
НайтиПоРеквизиту(<ИмяРеквизита>, <3начение>, <ФлагГлобальногоПоиска>)
где
- <ИмяРеквизита> — строковое выражение с наименованием (идентификатором) реквизита;
- <3начение> — значение реквизита для поиска;
- <ФлагГлобальногоПоиска> — числовое выражение. Если 0, то поиск должен выполняться в пределах подчинения справочника, если 1, то поиск должен выполняться по всему справочнику.
Пример использования:
Спр = СоздатьОбъект("Справочник.Сотрудники"); Если Спр.НайтиПоРеквизиту("СерияПаспорта", "XXVII-OP", 1) > 0 Тогда ФИО = Спр.Наименование; Иначе Предупреждение("Не найден сотрудник с таким паспортом!"); КонецЕсли;
Примечание: Метод НайтиПоРеквизиту()
может использоваться только в том случае, если в Конфигураторе при описании данного реквизита установлен признак «Сортировка» (посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).
Вызвать диалоговое окно для выбора элемента (см. рис. ниже) и позиционировать объект "
Справочник"
на выбранном элементе позволяет метод Выбрать()
(англоязычный синоним — Choose()
). Возвращаемым значением метода является число: 1 — если элемент выбран, 0 — если действие не выполнено (элемент не выбран). Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект()
.
Синтаксис:
Выбрать(<Подсказка>, <ФормаСписка>)
где
- <Подсказка> — текст заголовка окна диалога выбора. Может использоваться в качестве подсказки конечному пользователю;
- <ФормаСписка> — строковое выражение, содержащее идентификатор той формы списка справочника, которая должна использоваться для выбора. Если это значение пустое, то используется форма списка по умолчанию.
Пример использования:
Процедура УстФирмы() Фрм = СоздатьОбъект("Справочник.Фирмы"); Фрм.ИспользоватьДату(ДатаДок); Если Фрм.Выбрать("Выберите фирму", "") > 0 Тогда Фирма = Фрм.ТекущийЭлемент(); КонецЕсли; КонецПроцедуры
В результате работы данного кода на экран будет выведено окно:
Проверить факт выбора элемента справочника позволяет метод Выбран()
(англоязычный синоним — Selected()
). Параметры у этого метода отсутствуют. Метод возвращает число со значением 1, если элемент справочника выбран, или 0, если элемент справочника не выбран.
Пример использования:
Если ВыбСклад.Выбран() = 0 Тогда Заг1 = "По всем складам."; Иначе Заг1 = "Отчет по складу "+ ВыбСклад.Наименование; КонецЕсли;
Методы для циклической обработки элементов справочника
Открыть выборку элементов справочника позволяет метод ВыбратьЭлементы()
(англоязычный синоним — SelectItems()
). Дальнейшая выборка элементов будет происходить при помощи метода ПолучитьЭлемент()
среди элементов текущего справочника в порядке, установленном заранее при помощи соответствующих методов (ПорядокКодов()
, ПорядокНаименований()
, ВключатьПодчиненные()
и др.) Использовать метод ВыбратьЭлементы()
можно только для объектов, созданных функцией СоздатьОбъект()
. Возвращаемым значением метода будет число 1, если действие выполнено и в выборке есть хотя бы один элемент, или 0, если действие не выполнено или в выборке нет ни одного элемента.
Синтаксис метода:
ВыбратьЭлементы(<Режим>)
где <Режим> — числовое выражение. Если равно 1, то элементы будут выбираться с учётом иерархии; если равно 0, то элементы будут выбираться без учета иерархии. Параметр является необязательным. Значение по умолчанию — 1.
Пример использования:
Таб = СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("ШапкаОтчета"); Акц = СоздатьОбъект("Справочник.Акционеры"); Акц.ПорядокНаименований(); Акц.ВыбратьЭлементы(); Пока Акц.ПолучитьЭлемент() > 0 Цикл Если Акц.ЭтоГруппа() = 1 Тогда Таб.ВывестиСекцию("Группа"); Иначе Таб.ВывестиСекцию("Акционер"); КонецЕсли; КонецЦикла;
Открыть выборку элементов справочника по реквизиту позволяет метод ВыбратьЭлементыПоРеквизиту()
(англоязычный синоним — SelectItemsByAttribute()
). Дальнейшая выборка элементов справочника будет происходить при помощи метода ПолучитьЭлемент()
среди элементов текущего справочника, имеющих указанное значение реквизита, в порядке, установленном параметрами метода, а также согласно установкам, сделанным заранее при помощи методов ПорядокКодов()
, ПорядокНаименований()
, ВключатьПодчиненные()
, ИспользоватьРодителя()
, ИспользоватьВладельца()
и ИспользоватьДату()
. Возвращаемым значением метода ВыбратьЭлементыПоРеквизиту()
будет число 1, если действие выполнено и в выборке есть хотя бы один элемент, или 0, если действие не выполнено или в выборке нет ни одного элемента.
Синтаксис метода:
ВыбратьЭлементыПоРеквизиту(<ИмяРеквизита>, <3начение>, <РежимИерархии>, <РежимГрупп>)
где
- <ИмяРеквизита> — строковое выражение, содержащее имя реквизита справочника, который задаёт порядок обхода элементов справочника;
- <3начение> — значение реквизита для выборки;
- <РежимИерархии> — числовое выражение. Если равно 1, то элементы будут выбираться с учётом иерархии; если равно 0, то элементы будут выбираться без учета иерархии. Параметр является необязательным. Значение по умолчанию — 1;
- <РежимГрупп> — числовое выражение. Если равно 1, то выбор будет происходить среди групп справочника; если равно 0, то выбор будет происходить среди элементов справочника.
Пример использования:
Акц = СоздатьОбъект("Справочник.Акционеры"); Акц.ПорядокНаименований(); Акц.ВыбратьЭлементыПоРеквизиту("Отдел", НомерОтдела, 1, 0); Пока Акц.ПолучитьЭлемент() > 0 Цикл . . . КонецЦикла;
Примечание: Метод ВыбратьЭлементыПоРеквизиту
может использоваться только для объектов, созданных при помощи функции СоздатьОбъект()
, и только для реквизитов, у которых в Конфигураторе установлен признак «Сортировка»
(посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).
Выбрать следующий элемент справочника в выборке, открытой предварительно при помощи методов ВыбратьЭлементы()
или ВыбратьЭлементыПоРеквизиту()
позволяет метод ПолучитьЭлемент()
(англоязычный синоним — GetItem()
). Метод может применяться только для объектов, созданных при помощи функции СоздатьОбъект()
, и используется для организации цикла поиска по справочнику. Возвращаемым значением метода будет число 1, если элемент выбран, или 0, если элемент не выбран (достигнут конец выборки).
Синтаксис метода:
ПолучитьЭлемент(<Режим>)
где <Режим> — числовое выражение. Если равно 1, то будут включаться в выборку все подчинённые элементы, если 0, то подчинённые элементы не будут включаться в выборку. Параметр является необязательным. Значение по умолчанию — 1.
Пример использования:
Спр = СоздатьОбъект("Справочник.ОсновныеСредства"); Спр.ПорядокКодов(); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() > 0 Цикл Сообщить("===" + Спр.Наименование); КонецЦикла;
Получить значение текущего элемента справочника в целом (как объекта) позволяет метод ТекущийЭлемент()
(англоязычный синоним — CurrentItem()
). Параметры у этого метода отсутствуют. Данный метод применяется, например, если нужно элемент справочника передать как параметр в вызове какого-либо метода или присвоить какому-либо реквизиту.
Пример использования:
Спр = СоздатьОбъект("Справочник.ОсновныеСредства"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() > 0 Цикл ОС = Спр.ТекущийЭлемент(); . . . КонецЦикла;
Ещё пример:
Процедура УстКомп() Комп = СоздатьОбъект("Справочник.Компании"); Если Комп.Выбрать("Выберите компанию", "") > 0 Тогда Компания = Комп.ТекущийЭлемент(); КонецЕсли; КонецПроцедуры
Методы управления выбором справочников и элементов справочников
Установить выбираемые виды для объекта-справочника неопределённого вида позволяет метод ВидыДляВыбора()
(англоязычный синоним — KindsForChoise()
). Данный метод обычно используется до начала интерактивного позиционирования элемента справочника, например, при помощи метода Выбрать()
. Возвращаемым значением метода является строковое значение, содержащее текущий список видов выбираемых справочников, разделённых запятыми (на момент до исполнения метода).
Данный метод может использоваться только для объектов-справочников неопределённого вида, созданных функцией СоздатьОбъект()
или определённых в Конфигураторе как реквизиты диалога или другого объекта. Если метод ВидыДляВыбора()
применен к реквизиту диалога типа «справочник неопределённого вида», то интерактивный выбор элемента справочника будет производиться только среди установленных видов справочников.
Синтаксис метода:
ВидыДляВыбора(<СписокВидов>)
где <СписокВидов> — строковое выражение, содержащее список видов выбираемых справочников, разделённых запятыми. Параметр является необязательным и не используется в случае, когда метод требуется для получения текущего значения установленных видов.
Пример использования:
Процедура УстФирмы() Фрм = СоздатьОбъект("Справочник"); Фрм.ВидыДляВыбора("Фирмы"); Фрм.ИспользоватьДату(ДатаДок); Если Фрм.Выбрать("Выберите фирму", "") > 0 Тогда Фирма = Фрм.ТекущийЭлемент(); КонецЕсли; КонецПроцедуры
Установить режим выборки элементов справочника в порядке возрастания кодов позволяет метод ПорядокКодов()
(англоязычный синоним — OrderByCode()
). Параметры у метода отсутствуют.
Данный метод может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект()
, и обычно используется до вызова метода ВыбратьЭлементы()
, который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент()
будет происходить среди элементов текущего справочника в порядке возрастания кодов элементов.
Примечание: По умолчанию выборка элементов справочника производится в порядке основного представления справочника, которое задаётся в Конфигураторе. Поэтому реально имеет смысл применять данный метод только в том случае, если основное представление справочника — наименование, а надо получить элементы в порядке кодов.
Пример использования:
Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.ПорядокКодов(); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() > 0 Цикл Состояние(Спр.Наименование); . . . КонецЦикла;
Установить режим выборки элементов справочника в порядке возрастания наименования элементов позволяет метод ПорядокНаименований()
(англоязычный синоним — OrderByDescr()
). Параметры у метода отсутствуют.
Данный метод может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект()
, и обычно используется до вызова метода ВыбратьЭлементы()
, который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент()
будет происходить среди элементов текущего справочника в порядке возрастания наименования элементов.
Примечание: По умолчанию выборка элементов справочника производится в порядке основного представления справочника, которое задаётся в Конфигураторе. Поэтому реально имеет смысл применять данный метод только в том случае, если основное представление справочника — код, а надо получить элементы в порядке наименований.
Пример использования:
Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.ПорядокНаименований(); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() > 0 Цикл Состояние(Спр.Наименование); . . . КонецЦикла;
Установить режим выборки элементов справочника в порядке возрастания значения указанного реквизита позволяет метод ПорядокРеквизита()
(англоязычный синоним — OrderByAttribute()
). Метод может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект()
, и обычно используется до вызова метода ВыбратьЭлементы()
, который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент()
будет происходить среди элементов текущего справочника в порядке возрастания значения реквизита.
Синтаксис:
ПорядокРеквизита(<ИмяРеквизита>)
где <ИмяРеквизита> — строковое выражение с именем реквизита справочника, который задаёт порядок обхода элементов справочника.
Пример использования:
Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.ПорядокРеквизита("Оклад"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() > 0 Цикл Состояние(Спр.Наименование + " - " + Спр.Оклад); . . . КонецЦикла;
Примечание: Метод ПорядокРеквизита()
может использоваться только в том случае, если в Конфигураторе при описании данного реквизита установлен признак «Сортировка» (посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).
Установить режим выбора групп позволяет метод ВыборГруппы()
(англоязычный синоним — SelectGroup()
). Данный метод может применяться как для позиционируемых объектов, созданных функцией СоздатьОбъект()
, так и для полей типа «Справочник» диалоговых форм. Возвращаемым значением метода является текущее числовое значение режима выбора групп на момент до исполнения метода.
Примечание: По умолчанию, выборка элементов справочников для полей в формах документов, журналов и справочников установлена без выбора групп, а в форме отчёта с выбором групп. Поэтому реально имеет смысл применять данный метод только в том случае, если надо изменить режим выбора групп.
Синтаксис метода:
ВыборГруппы(<Режим>)
где <Режим> — числовое выражение. Возможные значения: 1 — выбирать группы; 0 — не выбирать группы. Параметр является необязательным и не используется в случае, когда метод применяется для получения текущего значения режима выбора групп.
Пример использования:
Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.ВыборГруппы(0); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() > 0 Цикл Состояние(Спр.Наименование); . . . КонецЦикла;
Задать параметры выборки для подчинённого справочника позволяет метод ИспользоватьВладельца()
(англоязычный синоним — UseOwner()
). Возвращаемым значением метода является значение элемента справочника-владельца для текущего подчинённого справочника на момент до исполнения метода.
Данный метод может применяться к объектам типа "
Справочник"
в двух случаях:
- для объектов, созданных функцией
СоздатьОбъект()
, методИспользоватьВладельца()
устанавливает элемент справочника-владельца в качестве параметра выборки. Метод используется до вызова методаВыбратьЭлементы()
, который фактически открывает выборку. Дальнейшая выборка при помощи методаПолучитьЭлемент()
будет происходить только среди тех элементов текущего подчинённого справочника, для которых владельцем является заданное значение элемента справочника-владельца. При записи нового элемента текущего справочника данный метод также задаёт владельца для нового элемента. - для объектов типа
"
Справочник"
, которые являются реквизитами формы (например, в форме документа — реквизит документа типа «Справочник») или реквизитами диалога (например, в форме отчёта — реквизит диалога типа «Справочник») методИспользоватьВладельца()
позволяет программно установить некоторое значение справочника-владельца в качестве владельца, который будет использован при интерактивном выборе значения данного реквизита.
Синтаксис метода:
ИспользоватьВладельца(<Владелец>, <ФлагИзменения> )
где
- <Владелец> — выражение со значением элемента справочника-владельца. Параметр является необязательным и не используется, когда метод применяется для получения текущего значения элемента справочника-владельца;
- <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения владельца. Возможные значения: 1 — пользователь может изменить владельца интерактивно; 0 — пользователь не может интерактивно изменить владельца. Параметр имеет смысл только в случае использования данного метода для объектов типа «Справочник», которые являются реквизитами формы или реквизитами диалога.
Пример использования:
Процедура ВыводСпискаДетей(Сотр) СпрД = СоздатьОбъект("Справочник.Дети"); СпрД.ИспользоватьВладельца(Сотр); Сообщить("Дети сотрудника " + Сотр.Наименование); СпрД.ВыбратьЭлементы(); Пока СпрД.ПолучитьЭлемент() > 0 Цикл Сообщить(СпрД.Наименование); КонецЦикла; КонецПроцедуры
Другой пример:
ЕдиницаИзм.ИспользоватьВладельца(ТекущийЭлемент());
Установить группу текущего справочника в качестве параметра выборки позволяет метод ИспользоватьРодителя()
(англоязычный синоним — UseParent()
). Возвращаемым значением метода является значение текущей группы для справочника на момент до исполнения метода.
Данный метод может использоваться только для объектов, созданных при помощи системной функции СоздатьОбъект()
, и используется до вызова метода ВыбратьЭлементы()
, который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент()
будет происходить только среди элементов текущего справочника, принадлежащих указанной группе. При добавлении нового элемента текущего справочника данная установка также будет являться свойством нового элемента.
Синтаксис метода:
ИспользоватьРодителя(<Группа>)
где <Группа> — выражение со значением группы справочника. Параметр является необязательным и не используется, когда метод применяется для получения текущего значения группы.
Пример использования:
Процедура ВыводСпискаСотрудников() Таб = СоздатьОбъект("Таблица"); Спр = СоздатьОбъект("Справочник.Сотрудники"); Спр.ИспользоватьДату(ДатаОтчета); Если ВыбСотр.Выбран() = 0 Тогда Заг = "По всем сотрудникам"; ИначеЕсли ВыбСотр.ЭтоГруппа() = 1 Тогда Спр.ИспользоватьРодителя(ВыбСотр); Заг = "По сотрудникам группы " + ВыбСотр.Наименование; Иначе Спр.НайтиЭлемент(ВыбСотр); Заг = "По сотруднику " + ВыбСотр.Наименование; Таб.ВывестиСекцию("Отчет"); Таб.ВывестиСекцию("Сотрудник"); Перейти ~MET; КонецЕсли; ЧислоСтрок = 0; Таб.ВывестиСекцию("Отчет"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() > 0 Цикл ЧислоСтрок = ЧислоСтрок + 1; Если Спр.ЭтоГруппа() = 1 Тогда Таб.ВывестиСекцию("Группа"); Иначе Таб.ВывестиСекцию("Сотрудник"); КонецЕсли; Состояние("В отчет выведено " + ЧислоСтрок + " строк." ); КонецЦикла; ~MET: Таб.ТолькоПросмотр(1); Таб.Опции(0, 0, 4, 0); Таб.Показать("Список сотрудников", ""); ВыбСотр = 0; КонецПроцедуры
Установить флаг выборки всех подчинённых элементов позволяет метод ВключатьПодчиненные()
(англоязычный синоним — IncludeChildren()
). Возвращаемым значением метода является текущее числовое значение режима выборки подчинённых элементов справочника на момент до исполнения метода.
Данный метод может использоваться только для объектов, созданных системной функцией СоздатьОбъект()
, и используется до вызова метода ВыбратьЭлементы()
, который фактически и открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент()
будет происходить среди элементов текущего справочника в соответствии с установленным режимом выборки. По умолчанию в выборку всегда включаются подчинённые элементы, поэтому реально имеет смысл применять данный метод только в том случае, если надо отменить включение подчиненных.
Синтаксис метода:
ВключатьПодчиненные(<Режим>)
где <Режим> — числовое выражение. Возможные значения: 1 — надо включать в выборку все подчинённые элементы; 0 — не надо включать подчинённые элементы. Параметр является необязательным.
Пример использования:
Процедура ВыводСпискаТоваров(Режим) Таб = СоздатьОбъект("Таблица"); Тов = СоздатьОбъект("Справочник.Товары"); Тов.ИспользоватьДату(ДатаОтчета); Если ВыбТовар.Выбран() = 0 Тогда Заг = "По всем товарам."; ИначеЕсли ВыбТовар.ЭтоГруппа() = 1 Тогда Тов.ИспользоватьРодителя(ВыбТовар); Заг = "По товарам группы " + ВыбТовар.Наименование; Тов.ВключатьПодчиненные(Режим); Иначе Тов.НайтиЭлемент(ВыбТовар); Заг = "По товару " + ВыбТовар.Наименование; Таб.ВывестиСекцию("Отчет"); Таб.ВывестиСекцию("Товар"); Перейти ~MET; КонецЕсли; ЧислоСтрок = 0; Таб.ВывестиСекцию("Отчет"); Тов.ВыбратьЭлементы(); Пока Тов.ПолучитьЭлемент() > 0 Цикл ЧислоСтрок = ЧислоСтрок + 1; Если Тов.ЭтоГруппа() = 1 Тогда Таб.ВывестиСекцию("Группа"); Иначе Таб.ВывестиСекцию("Товар"); КонецЕсли; Состояние("В отчет выведено " + ЧислоСтрок + " строк." ); КонецЦикла; ~MET: Таб.ТолькоПросмотр(1); Таб.Опции(0, 0, 4, 0); Таб.Показать("Список товаров по каталогу", ""); КонецПроцедуры
Установить порядок выборки элементов справочника позволяет метод ОбратныйПорядок()
(англоязычный синоним — BackwardOrder()
). Возвращаемым значением метода является текущее значение порядка выборки элементов справочника на момент до исполнения метода.
Данный метод может использоваться только для объектов, созданных системной функцией СоздатьОбъект()
, и обычно используется до вызова методов ВыбратьЭлементыПоРеквизиту()
или ВыбратьЭлементы()
, которые фактически и открывают выборку. По умолчанию, выборка элементов справочника выполняется в прямом порядке. Поэтому реально имеет смысл применять метод ОбратныйПорядок()
только в том случае, если надо получить обратный порядок выборки.
Синтаксис метода:
ОбратныйПорядок(<Режим>)
где <Режим> — числовое выражение. Возможные значения: 1 — выбирать элементы справочника в обратном порядке; 0 — выбирать элементы справочника в прямом порядке. Параметр является необязательным. Значение по умолчанию — 1.
Пример использования:
Акц = СоздатьОбъект("Справочник.Акционеры"); Акц.ИспользоватьДату(РабочаяДата()); Акц.ПорядокКодов(); Акц.ОбратныйПорядок(1); Акц.ВыбратьЭлементы(); Пока Акц.ПолучитьЭлемент() > 0 Цикл . . . КонецЦикла;
Методы для получения информации об элементе справочника
Получить полный код выбранного элемента справочника (с кодами групп всех вышестоящих уровней, разделёнными символом «/») позволяет метод ПолныйКод()
(англоязычный синоним — FullCode()
). Параметры у метода отсутствуют. Возвращаемым значением метода является строка.
Пример использования:
ПолнКод = Спр.Подразделения.ПолныйКод();
Получить полное наименование выбранного элемента справочника (с наименованиями групп всех вышестоящих уровней, разделёнными символом «/») позволяет метод ПолноеНаименование()
(англоязычный синоним — FullDescr()
). Параметры у метода отсутствуют. Возвращаемым значением метода является строка.
Пример использования:
ПолнНаим = Спр.Подразделения.ПолноеНаименование();
Узнать, является ли выбранный элемент справочника группой позволяет метод ЭтоГруппа()
(англоязычный синоним — IsGroup()
). Метод возвращает числовое значение 1, если выбранный элемент справочника является группой, или 0, если он является обычным элементом. Параметры у метода отсутствуют.
Пример использования:
Таб = СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Отчет"); Сотр = СоздатьОбъект("Справочник.Сотрудники"); Сотр.ВыбратьЭлементы(); Пока Сотр.ПолучитьЭлемент() > 0 Цикл Если Сотр.ЭтоГруппа() = 1 Тогда Таб.ВывестиСекцию("Группа"); Иначе Таб.ВывестиСекцию("Сотрудник"); КонецЕсли; КонецЦикла;
Проверить, принадлежит ли указанной группе текущий элемент справочника (не важно, на каком нижестоящем уровне) позволяет метод ПринадлежитГруппе()
(англоязычный синоним — BelongsToGroup()
). Возвращаемым значением метода является число 1, если элемент принадлежит указанной группе, или 0, если нет.
Синтаксис метода:
ПринадлежитГруппе(<Группа>)
где <Группа> — выражение со значением группы справочника.
Пример использования:
Процедура ВывестиНаПечать() . . . Возврат; КонецПроцедуры . . . Спр = СоздатьОбъект("Справочник.Подразделения"); Спр.ПорядокКодов(); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если Спр.ПринадлежитГруппе(ВыбГруппа) = 1 Тогда ВывестиНаПечать(); КонецЕсли; КонецЦикла;
Получить номер уровня текущего элемента в структуре дерева многоуровневого справочника позволяет метод Уровень()
(англоязычный синоним — Level()
). Параметры у метода отсутствуют.
Пример использования:
Спр = СоздатьОбъект("Справочник.Подразделения"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() > 0 Цикл Сообщить(Строка(Спр.Наименование + Спр.Код + Спр.Уровень())); КонецЦикла;
Прочитать значение пометки удаления текущего элемента справочника позволяет метод ПометкаУдаления()
(англоязычный синоним — DeleteMark()
). Параметры у метода отсутствуют. Возвращаемым значением метода является числовое значение: 1 — если на элементе справочника стоит пометка удаления; 0 — если нет пометки удаления.
Пример использования:
Процедура ВосстановлениеУдаленныхСотр(Сотр) Спр = СоздатьОбъект("Справочник.Сотрудники"); Если Сотр.Выбран() > 0 Тогда Спр.НайтиЭлемент(Сотр); Если Спр.Выбран() > 0 Тогда Если Спр.ПометкаУдаления() = 1 Тогда Спр.СнятьПометкуУдаления(); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры
Методы для работы с реквизитами справочников
Назначить тип для реквизита, которому в Конфигураторе назначен тип «Неопределенный» позволяет метод НазначитьТип()
(англоязычный синоним — SetType()
).
Синтаксис метода:
НазначитьТип(<ИмяРеквизита>, <ИмяТипа>, <Длина>, <Точность>)
где
- <ИмяРеквизита> — строковое выражение – название реквизита неопределённого типа, как он назван в Конфигураторе;
- <ИмяТипа> — строковое выражение – название типа данных (или вид субконто), который назначается реквизиту справочника, например,
"
Строка"
,"
Дата"
,"
Число"
,"
Справочник.Товары"
,"
Документ.РасходнаяНакладная"
и т.п.; - <Длина> — числовое выражение — длина поля представления данных. Параметр является необязательным и имеет смысл только при задании числового или строкового типа;
- <Точность> — числовое выражение — число знаков после десятичной точки. Параметр является необязательным и имеет смысл только при задании числового типа.
Пример использования:
Номенклатура.НазначитьТип("ТМЦ", "Справочник.Товары");
Кстати, для установки конкретного вида значениям типа «Документ неопределённого вида», «Справочник неопределённого вида», «Счёт неопределённого вида» предназначена системная (встроенная) процедура НазначитьВид()
(англ. синоним — SetKind()
). Обычно эта процедура используется для реквизитов форм, причём, в сочетании с методом элемента формы НеИзменятьВид()
. Это позволяет регулировать программно собственно вид, а само значение предоставить выбирать пользователю интерактивно.
Синтаксис данной процедуры:
НазначитьВид(<3начение>, <Вид>)
где
- <3начение> — значение типа «документ/справочник/счёт неопределённого вида» — обычно реквизит документа, справочника или диалога формы;
- <Вид> — строковое значение. Вид может быть задан строкой, содержащей идентификатор конкретного справочника, документа или плана счетов. Вид также может быть задан видом субконто, который имеет тип соответственно конкретного справочника, документа или счёта.
Пример использования процедуры:
Процедура ВводНаОсновании(ДокОсн) Если ДокОсн.Вид() = "Счет" Тогда НазначитьВид(Контрагент, "Организации"); Иначе НазначитьВид(Контрагент, "Сотрудники"); КонецЕсли; Форма.Контрагент.НеИзменятьВид(1); КонецПроцедуры
Получить значение реквизита по его идентификатору позволяет метод ПолучитьАтрибут()
(англоязычный синоним — GetAttrib()
).
Синтаксис метода:
ПолучитьАтрибут(<ИмяРеквизита>)
где <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе.
Пример использования:
ЦенаТов = Тов.ПолучитьАтрибут("ЦенаРозничная");
Установить значение реквизита по его идентификатору позволяет метод УстановитьАтрибут()
(англоязычный синоним — SetAttrib()
).
Синтаксис метода:
УстановитьАтрибут(<ИмяРеквизита>, <3начение>)
где
- <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе;
- <3начение> — выражение, содержащее устанавливаемое значение реквизита.
Пример использования:
Тов.УстановитьАтрибут("ЦенаРозничная", ЦенаТов);
Установить для объекта типа "
Справочник"
дату, на которую будут в дальнейшем выбираться (или записываться) значения периодических реквизитов справочника, позволяет метод ИспользоватьДату()
(англоязычный синоним — UseDate()
). Возвращаемым значением метода является текущее значение используемой даты на момент до исполнения метода.
Синтаксис метода:
ИспользоватьДату(<Дата>, <УстСразу>)
где
- <Дата> — выражение со значением типа
"
Дата"
. Параметр является необязательным; - <УстСразу> — число. Если значение равно 1, то дата, переданная в качестве параметра, будет установлена уже в текущей выборке; если 0 — то дата, переданная в качестве параметра будет установлена при следующей выборке. Параметр является необязательным. Значение по умолчанию — 0.
Понять работу второго параметра можно из следующего примера:
Спр.ИспользоватьДату(Д1, 1); Спр.ВыбратьЭлементы(); . . . А = Спр.Цена; Спр.ИспользоватьДату(Д2, 1); Б = Спр.Цена; Спр.ИспользоватьДату(Д1); Спр.ВыбратьЭлементы(); . . . А = Спр.Цена; Спр.ИспользоватьДату(Д2); Б = Спр.Цена; Спр.ВыбратьЭлементы(); . . . В = Спр.Цена;
Примечание 1: Если к объекту типа "
Справочник"
был применён метод ИспользоватьДату()
, то в дальнейшем, чтобы выбирать значения периодических реквизитов справочника, нельзя применять к этому же объекту методы Получить()
и Установить()
, так как в такой последовательности эти методы несовместимы.
Примечание 2: Данный метод нельзя использовать «через две точки». Например, если в документе с именем ДокНакл
есть реквизит Фирма
типа "
Справочник"
, у которого есть периодический реквизит НДС
, то для получения значения этого НДС следующий оператор использовать не следует:
ДокНакл.Фирма.ИспользоватьДату(РабочаяДата());
В этом случае необходимо просто использовать промежуточную (дополнительную) переменную, например:
ФирДок = ДокНакл.Фирма; ФирДок.ИспользоватьДату(РабочаяДата()); НДСДок = ФирДок.НДС;
Методы контекста Модуля формы элемента справочника
Описанные в данном разделе методы доступны только в контексте Модуля формы элемента справочника.
Проверить форму элемента справочника на предмет изменения её реквизитов позволяет метод Модифицированность()
(англоязычный синоним — Modify()
). Метод возвращает 1, если реквизиты текущей формы элемента справочника были изменены, или 0, если реквизиты не изменялись. Параметры у данного метода отсутствуют.
Пример использования метода:
Процедура ПриЗакрытии() Если Модифицированность() > 0 Тогда . . . КонецЕсли; КонецПроцедуры
Установить для элемента справочника дату, на которую будут записаны периодические реквизиты, позволяет метод ИспользоватьДату()
(англоязычный синоним — UseDate()
). Возвращаемым значением метода является значение используемой даты на момент до исполнения метода. Без использования данного метода значения выбранных периодических реквизитов справочника будут записываться на текущую рабочую дату.
Синтаксис:
ИспользоватьДату(<Дата>, <Обновить>)
где
- <Дата> — выражение со значением типа
"
Дата"
; - <Обновить> — число. Возможные значения: 1 — обновить периодические реквизиты формы на заданную дату; 0 — не обновлять периодические реквизиты формы. Параметр является необязательным. Значение по умолчанию — 0.
Пример использования метода:
Если Число(ВыбДата) <> 0 Тогда ИспользоватьДату(ВыбДата); КонецЕсли;
Управлять режимом автоматического определения списка изменённых периодических реквизитов и показом диалога для выбора записываемых периодических реквизитов (см. рис. ниже) позволяет метод СохранениеПериодическихРеквизитов()
(англоязычный синоним — РеriodicAttributesSaving()
).
Примечание: При отсутствии данного метода в Модуле формы элемента справочника при записи элемента справочника диалог отображается со всеми периодическими реквизитами.
Синтаксис метода:
СохранениеПериодическихРеквизитов(<ВариантВызова>, <Список>)
где
- <ВариантВызова> — число, определяющее вариант вызова метода. Возможные значения:
- 1 — включить автоматический режим определения списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
- 2 — включить автоматический режим определения списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
- 3 — выполнить определение списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
- 4 — выполнить определение списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
- 5 — выдать/установить список сохраняемых периодических реквизитов. Метод возвращает установленный список периодических реквизитов, которые будут записываться на момент до вызова метода. Если параметр <Список> указан, то устанавливается список периодических реквизитов, которые должны быть записаны.
- <Список> — строковое выражение, в котором через запятую перечислены имена периодических реквизитов справочника, которые должны выводится в диалоге (если диалог показывается), или по которым будет записан элемент истории (если диалог не показывается). Если указан символ «*», то считается, что в список включены все периодические реквизиты справочника. Параметр является необязательным. По умолчанию предполагается, что в списке все периодические реквизиты справочника.
Пример использования метода:
СохранениеПериодическихРеквизитов(1, "ЦенаРозн, ЦенаОптов");
Установить список реквизитов, для которых допускается просмотр истории, позволяет метод ПросмотрИстории()
(англоязычный синоним — ViewHistory()
). Возвращаемым значением метода является текущий (на момент до вызова метода) список реквизитов, просмотр истории которых допускается.
Синтаксис метода:
ПросмотрИстории(<СписокРеквизитов>)
где <СписокРеквизитов> — строка со списком идентификаторов (через запятую) тех реквизитов, просмотр истории которых допускается.
Пример использования:
Процедура ПриОткрытии() ПросмотрИстории("Оклад, Тариф, Подразделение"); КонецПроцедуры
Методы контекста Модуля формы списка справочника
Описанные в данном разделе методы доступны только в контексте Модуля формы списка справочника.
Установить для формы списка справочника дату, на которую будут в дальнейшем выбираться (или записываться) значения периодических реквизитов справочника, позволяет метод ИспользоватьДату()
(англоязычный синоним — UseDate()
). Возвращаемым значением метода является значение даты выборки периодических реквизитов формы списка справочника.
Синтаксис:
ИспользоватьДату(<Дата>)
где <Дата> — выражение со значением типа "
Дата"
.
Пример использования метода:
ИспользоватьДату(ДатаДок);
Установить элемент связанного справочника в качестве владельца для формы списка подчинённого справочника позволяет метод ИспользоватьВладельца()
(англоязычный синоним — UseOwner()
). При добавлении нового элемента текущего справочника данный параметр будет являться свойством нового элемента. Возвращаемым значением метода является значение владельца (до применения метода) для формы списка подчиненного справочника.
Синтаксис метода:
ИспользоватьВладельца(<Владелец>, <ФлагИзменения> )
где
- <Владелец> — выражение со значением элемента справочника-владельца. Параметр является необязательным. Если параметр не задан, то значение владельца не меняется;
- <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения владельца. Возможные значения: 1 — пользователь может изменить владельца интерактивно; 0 — пользователь не может интерактивно изменить владельца. Если параметр не задан, то значение флага не меняется.
Пример использования:
ИспользоватьВладельца(Сотр, 0);
Установить группу справочника в качестве родителя для формы списка справочника позволяет метод ИспользоватьРодителя()
(англоязычный синоним — UseParent()
). При добавлении нового элемента текущего справочника данный параметр также будет являться свойством нового элемента. Возвращаемым значением метода является значение родителя для формы списка справочника до момента применения метода.
Синтаксис метода:
ИспользоватьРодителя(<Родитель>, <ФлагИзменения> )
где
- <Родитель> — выражение со значением группы справочника — нового родителя. Параметр является необязательным. Если параметр не задан, то значение родителя не меняется;
- <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения родителя. Возможные значения: 1 — пользователь может изменить родителя интерактивно; 0 — пользователь не может интерактивно изменить родителя. Если параметр не задан, то значение флага не меняется.
Пример использования:
ИспользоватьРодителя(ВыбГруппаСотр, 1);
Установить режим иерархического списка справочника позволяет метод ИерархическийСписок()
(англоязычный синоним — HierarchicalList()
). Возвращаемым значением метода является значение флага иерархического списка для формы списка справочника до момента применения метода.
Синтаксис метода:
ИерархическийСписок(<ФлагИерархСписка> , <ФлагИзменения>)
где
- <ФлагИерархСписка> — флаг иерархического списка. Возможные значения: 1 — иерархический список; 0 — неиерархический список;
- <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения флага иерархического списка. Возможные значения: 1 — пользователь может изменить иерархичность интерактивно; 0 — пользователь не может интерактивно изменить иерархичность. Если параметр не задан, то значение флага не меняется.
Пример использования:
ИерархическийСписок(1, 1);
Установить режим выбора групп для формы списка справочника, которая открыта в режиме выбора или подбора элемента, позволяет метод ВыборГруппы()
(англоязычный синоним — SelectGroup()
). Возвращаемым значением метода является текущее числовое значение режима выбора групп (на момент до исполнения метода).
Примечание: По умолчанию, выборка элементов справочников для полей в формах документов, журналов и справочников установлена без выбора групп, а в форме отчёта с выбором групп. Поэтому реально имеет смысл применять данный метод только в том случае, если надо изменить режим выбора групп.
Синтаксис метода:
ВыборГруппы(<Режим>)
где <Режим> — числовое выражение. Возможные значения: 1 — выбирать группы; 0 — не выбирать группы. Параметр является необязательным. Если параметр не задан, то значение флага не меняется.
Пример использования:
ВыборГруппы(0);
Установить способ редактирования элементов справочника позволяет метод РедактироватьВДиалоге()
(англоязычный синоним — EditInForm()
). Возвращаемым значением метода является значение установленного на данный момент (до применения метода) способа редактирования элементов справочника.
Синтаксис метода:
РедактироватьВДиалоге(<Способ>, <Разрешение>)
где
- <Способ> — способ редактирования элемента справочника. Возможные значения: 1 — в диалоге; 0 — в строке. Параметр является необязательным;
- <Разрешение> — флаг разрешения пользователю менять способ редактирования. Возможные значения: 1 — разрешить; 0 — запретить. Параметр является необязательным.
Пример использования:
ТекСп = РедактироватьВДиалоге(); РедактироватьВДиалоге(1); РедактироватьВДиалоге(1, 0);
Управлять режимом автоматического определения списка изменённых периодических реквизитов и показом диалога для выбора записываемых периодических реквизитов (см. рис. ниже) позволяет метод СохранениеПериодическихРеквизитов()
(англоязычный синоним — РеriodicAttributesSaving()
).
Примечание: При отсутствии данного метода в Модуле формы списка справочника при записи элемента справочника диалог отображается со всеми периодическими реквизитами.
Синтаксис метода:
СохранениеПериодическихРеквизитов(<ВариантВызова>, <Список>)
где
- <ВариантВызова> — число, определяющее вариант вызова метода. Возможные значения:
- 1 — включить автоматический режим определения списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
- 2 — включить автоматический режим определения списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
- 3 — выполнить определение списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
- 4 — выполнить определение списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
- 5 — выдать/установить список сохраняемых периодических реквизитов. Метод возвращает установленный список периодических реквизитов, которые будут записываться на момент до вызова метода. Если параметр <Список> указан, то устанавливается список периодических реквизитов, которые должны быть записаны.
- <Список> — строковое выражение, в котором через запятую перечислены имена периодических реквизитов справочника, которые должны выводится в диалоге (если диалог показывается), или по которым будет записан элемент истории (если диалог не показывается). Если указан символ «*», то считается, что в список включены все периодические реквизиты справочника. Параметр является необязательным. По умолчанию предполагается, что в списке все периодические реквизиты справочника.
Пример использования метода:
СохранениеПериодическихРеквизитов(1, "ЦенаРозн, ЦенаОптов");
Принудительно установить отбор для списка справочника позволяет метод УстановитьОтбор()
(англоязычный синоним — SetSelection()
).
Синтаксис метода:
УстановитьОтбор(<ИмяОтбора>, <3начение0тбора>)
где
- <ИмяОтбора> — строковое выражение — строка с именем реквизита справочника, по которому установлен отбор (у реквизита в Конфигураторе должен быть установлен флажок «Отбор по реквизиту»). Если это значение пустое, то отбор отключается;
- <3начение0тбора> — значение отбора. Параметр является необязательным.
Пример использования:
Процедура ПриОткрытии() Перем Тип; Перем Знач; БылОтбор = ПолучитьОтбор(Тип, Знач); Если .... Тогда УстановаитьОтбор("Имя", "Коля"); ИначеЕсли БылОтбор = 1 Тогда УстановитьОтбор(Тип, Знач); КонецЕсли; КонецПроцедуры
Проверить, был ли ранее установлен отбор позволяет метод ПолучитьОтбор()
(англоязычный синоним — GetSelection()
). Метод возвращает число 1, если отбор есть, или 0, если отбора нет. В параметры же метода возвращается текущее значение установленного отбора.
Синтаксис метода:
ПолучитьОтбор(<ИмяОтбора>, <3начение0тбора>)
где
- <ИмяОтбора> — имя переменной, куда вернётся строковое значение имени отбора;
- <3начение0тбора> — имя переменной, куда вернётся значение отбора.
Пример использования метода был приведён выше.
Установить доступные виды отборов списка справочника для вызова их в интерактивном режиме (см. рис. ниже) позволяет метод ВидыОтбора()
(англоязычный синоним — KindsOfSelection()
). Возвращаемым значением метода является строковое значение, содержащее текущий список имён отборов (на момент до исполнения метода), разделённых запятыми.
Синтаксис метода:
ВидыОтбора(<СписокИменОтборов>)
где <СписокИменОтборов> — строка со списком (через запятую) имён тех реквизитов, отбор по которым допускается, или символ «*» — для всех видов отборов.
Пример использования:
Процедура ПриОткрытии() ВидыОтбора("ТипСклада, ТипЦен"); КонецПроцедуры
Результат:
Установить в форме списка справочника закладки для интерактивного осуществления отбора позволяет метод ЗакладкиОтбора()
(англоязычный синоним — TabCtrlSelection()
).
Синтаксис метода:
ЗакладкиОтбора(<ИмяОтбора>, <3начение0тбора>)
где
- <ИмяОтбора> — строковое выражение, содержащее имя отбора;
- <3начение0тбора> — значение отбора, который будет установлен первоначально.
Пример использования:
ЗакладкиОтбора("Имя", "Коля");
Реализовать фильтрацию (установить нединамический фильтр) элементов справочника позволяет метод ИспользоватьСписокЭлементов()
(англоязычный синоним — UseItemList()
). Метод рекомендуется применять в предопределённых процедурах ПриСменеРодителя()
, ПриОткрытии()
, ПриСменеИерархии()
. При этом формируется список «разрешённых» элементов, который передаётся форме списка справочника при помощи данного метода. Данный список должен являться подмножеством тех элементов, которые обычно отображаются в форме списка без применения фильтра.
Примечание: После вызова метода ИспользоватьСписокЭлементов()
форма списка справочника не позволяет вводить новый элемент, копировать и т.п.
Синтаксис метода:
ИспользоватьСписокЭлементов(<СписокЗначений>)
где <СписокЗначений> — необязательный параметр. Значение типа "
СписокЗначений"
. Должен представлять собой список элементов справочника, выбранных для просмотра. Если это значение пустое, то фильтр отключается.
Пример использования:
Процедура УстановитьФильтр(ВыбПризнак) Список = СоздатьОбъект("СписокЗначений"); Буфер = СоздатьОбъект("Справочник.Главный"); Буфер.ИспользоватьРодителя(ИспользоватьРодителя()); Буфер.ВключатьПодчиненные(0); Буфер.ВыбратьЭлементы(); Пока Буфер.ПолучитьЭлемент() = 1 Цикл Если (Буфер.Признак = ВыбПризнак) Тогда Список.ДобавитьЗначение(Буфер.ТекущийЭлемент()); КонецЕсли; КонецЦикла; ИспользоватьСписокЭлементов(Список); КонецПроцедуры
Установить способ сортировки элементов справочника позволяет метод Сортировка()
(англоязычный синоним — SortOrder()
). Возвращаемым значением метода является текущее значение установленного на данный момент (до применения метода) способа сортировки элементов справочника.
Синтаксис метода:
Сортировка(<Способ>, <Разрешение>)
где
- <Способ> — строка с именем устанавливаемой сортировки. Возможные значения: «Код» («Code»), «Наименование» («Description») или имя реквизита по которому устанавливается сортировка;
- <Разрешение> — флаг разрешения пользователю менять способ сортировки. Возможные значения: 1 — разрешить; 0 — запретить. Параметр является необязательным.
Пример использования:
Сортировка("Наименование", 0); СтСорт = Сортировка("Оклад");
Установить список реквизитов, для которых допускается просмотр истории, позволяет метод ПросмотрИстории()
(англоязычный синоним — ViewHistory()
). Возвращаемым значением метода является текущий (на момент до вызова метода) список реквизитов, просмотр истории которых допускается.
Синтаксис метода:
ПросмотрИстории(<СписокРеквизитов>)
где <СписокРеквизитов> — строка со списком идентификаторов (через запятую) тех реквизитов, просмотр истории которых допускается.
Пример использования:
Процедура ПриОткрытии() ПросмотрИстории("Оклад, Тариф, Подразделение"); КонецПроцедуры
Предопределённые процедуры Модуля формы справочника
Описанные в данном разделе системные предопределённые процедуры должны располагаться только в Модулях форм справочника. К ним относятся программные модули: Модуль формы элемента справочника, Модуль формы группы справочника.
Системные предопределённые процедуры не является встроенными процедурами языка. Для них зарезервированы только название и синтаксис. Тело процедур должно быть написано самим разработчиком в соответствующих программных модулях. Вызов предопределённых процедур на исполнение производится в системе «1С:Предприятие» неявно при возникновении соответствующего события.
В основном данные процедуры предназначены для расширения возможности программного управления правами доступа к системе.
Предопределённая процедура ВводНового()
(англоязычный синоним — InputNew()
) вызывается в системе «1С:Предприятие» неявно в момент выбора пункта меню «Действия -> Новый» при работе со справочниками. Данная процедура может использоваться, например, для установки начальных значений (по умолчанию) реквизитов нового элемента справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя вводить новые элементы), ввода нового элемента и открытие его формы не будет выполнено.
Синтаксис процедуры:
Процедура ВводНового(<ПризнКопирования>, <ОбъектКопирования>) . . . КонецПроцедуры
где
- <ПризнКопирования> — признак того, что объект введён копированием. Число: 1 — объект введён копированием, 0 — просто новый объект. Данный признак может быть использован для анализа необходимости инициализации реквизитов нового объекта;
- <ОбъектКопирования> — объект, который был скопирован.
Предопределённая процедура ПриЗаписи()
(англоязычный синоним — OnWrite()
) вызывается в системе «1С:Предприятие» при интерактивной записи элемента справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять некоторые элементы справочника), то запись элемента справочника не будет выполнена.
Синтаксис процедуры:
Процедура ПриЗаписи(<СписокПериодРекв>) . . . КонецПроцедуры
где <СписокПериодРекв> — строковое значение — список разделённых запятыми изменяемых периодических реквизитов справочника. В данный параметр система «1С:Предприятие» передаёт перечень периодических реквизитов, которые были интерактивно выбраны пользователем для обновления в окне диалога выбора. В теле процедуры значение данного параметра может быть изменено, что позволяет в данной процедуре непосредственно управлять списком записываемых значений периодических реквизитов.
Пример использования:
Процедура ПриЗаписи(СписокРекв) Если НазваниеНабораПрав() = "Продавец" Тогда Если ТекущийЭлемент() = Константа.НашаФирма Тогда Предупреждение("У вас нет права менять реквизиты!", 2); СтатусВозврата(0); КонецЕсли; КонецЕсли; КонецПроцедуры
Предопределённые процедуры Модуля формы списка справочника
Описанные в данном разделе системные предопределённые процедуры должны располагаться только в Модулях формы списка справочника.
Системные предопределённые процедуры не является встроенными процедурами языка. Для них зарезервированы только название и синтаксис. Тело процедур должно быть написано самим разработчиком в соответствующих программных модулях. Вызов предопределённых процедур на исполнение производится в системе «1С:Предприятие» неявно при возникновении соответствующего события.
В основном данные процедуры предназначены для расширения возможности программного управления правами доступа к системе.
Предопределённая процедура ПриВводеСтроки()
(англоязычный синоним — OnNewLine()
) вызывается в системе «1С:Предприятие» при интерактивном вводе новой строки (до начала ввода) в форме списка справочника. Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя вводить новые строки списка справочника), то новая строка списка справочника не будет инициирована.
Пример использования:
Процедура ПриВводеСтроки() Если НазваниеНабораПрав() = "Продавец" Тогда Предупреждение("У вас нет права добавлять строки!", 2); СтатусВозврата(0); КонецЕсли; КонецПроцедуры
Предопределённая процедура ПриРедактированииНовойСтроки()
(англоязычный синоним — OnEditNewLine()
) вызывается в системе «1С:Предприятие» в момент начала интерактивного редактирования новой строки списка справочника (после того, как новая строка уже заведена). Параметры у процедуры отсутствуют. Данная процедура может использоваться, например, для установки начальных значений (по умолчанию) реквизитов нового элемента справочника. В данной предопределённой процедуре установка статуса возврата не имеет смысла, так как отказаться от ввода новой строки в этот момент уже невозможно.
Пример использования:
Процедура ПриРедактированииНовойСтроки() Оклад = 100000; Пдр = СоздатьОбъект("Справочник.Подразделения"); Пдр.НайтиПоКоду(1); Подразделение = Пдр.ТекущийЭлемент(); Город = Константа.НашГород; КонецПроцедуры
Предопределённая процедура ПриНачалеРедактированияСтроки()
(англоязычный синоним — OnStartEditLine()
) вызывается в системе «1С:Предприятие» в момент начала интерактивного редактирования существующей строки списка справочника (кроме новой). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять значения реквизитов справочника), запись не будет изменена.
Пример использования:
Процедура ПриНачалеРедактированияСтроки() Если НазваниеНабораПрав() = "Продавец" Тогда Предупреждение("У вас нет права изменять строки!", 2); СтатусВозврата(0); КонецЕсли; КонецПроцедуры
Предопределённая процедура ПриЗаписи()
(англоязычный синоним — OnWrite()
) вызывается в системе «1С:Предприятие» при интерактивной записи строки списка справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять некоторые элементы справочника), то запись строки списка справочника не будет выполнена.
Синтаксис процедуры:
Процедура ПриЗаписи(<СписокПериодРекв>) . . . КонецПроцедуры
где <СписокПериодРекв> — строковое значение — список разделённых запятыми изменяемых периодических реквизитов справочника. В данный параметр система «1С:Предприятие» передаёт перечень периодических реквизитов, которые были интерактивно выбраны пользователем для обновления в окне диалога выбора. В теле процедуры значение данного параметра может быть изменено, что позволяет в данной процедуре непосредственно управлять списком записываемых значений периодических реквизитов.
Пример использования:
Процедура ПриЗаписи(СписокРекв) Если НазваниеНабораПрав() = "Продавец" Тогда Если ТекущийЭлемент() = Константа.НашаФирма Тогда Предупреждение("У вас нет права менять реквизиты!", 2); СтатусВозврата(0); КонецЕсли; КонецЕсли; КонецПроцедуры
Предопределённая процедура ПриПереносеЭлементаВДругуюГруппу()
(англоязычный синоним — OnMoveIntoOtherGroup()
) вызывается в системе «1С:Предприятие» при интерактивном переносе элемента справочника в другую группу. Если в данной предопределённой процедуре установить статус возврата в 0, то перенос не будет произведён.
Синтаксис процедуры:
Процедура ПриПереносеЭлементаВДругуюГруппу(<Элемент>, <Группа>) . . . КонецПроцедуры
где
- <Элемент> — значение элемента справочника, который переносится;
- <Группа> — значение группы справочника, в которую переносится элемент справочника.
Предопределённая процедура ПриВыбореРодителя()
(англоязычный синоним — OnSetParent()
) вызывается в системе «1С:Предприятие» при интерактивной смене родительской группы справочника (выбор следующего или предыдущего уровня). Если в данной предопределённой процедуре установить статус возврата в 0, то выбор родительской группы не будет произведён.
Синтаксис процедуры:
Процедура ПриВыбореРодителя(<Элемент>) . . . КонецПроцедуры
где <Элемент> — значение элемента справочника, который интерактивно устанавливается в качестве родителя.
Пример использования:
Процедура ПриВыбореРодителя(Родитель) Если НазваниеНабораПрав() = "Продавец" Тогда Если Родитель = ЗапрещеннаяГруппа Тогда Предупреждение("Вам запрещено просматривать эту группу!", 2); СтатусВозврата(0); КонецЕсли; КонецЕсли; КонецПроцедуры
Предопределённая процедура ПриВыбореВладельца()
(англоязычный синоним — OnSetOwner()
) вызывается в системе «1С:Предприятие» при интерактивном выборе владельца подчинённого справочника (при интерактивной смене владельца, т.е. смене позиции в справочнике-владельце, которая приводит к смене отображаемых в подчинённом справочнике элементов). Если в данной предопределённой процедуре установить статус возврата в 0, то выбор владельца подчинённого справочника не будет произведён.
Синтаксис процедуры:
Процедура ПриВыбореВладельца(<Элемент>) . . . КонецПроцедуры
где <Элемент> — значение элемента справочника, который интерактивно устанавливается в качестве владельца подчинённого справочника.
Пример использования:
Процедура ПриВыбореВладельца(Владелец) Если НазваниеНабораПрав() = "Продавец" Тогда Если Владелец = ЗапрещенныйВладелец Тогда Предупреждение("Нельзя просматривать эти элементы!", 2); СтатусВозврата(0); КонецЕсли; КонецЕсли; КонецПроцедуры
Предопределённая процедура ПриСменеИерархии()
(англоязычный синоним — OnHierarchyChange()
) вызывается в системе «1С:Предприятие» при интерактивной смене режима отображения иерархии справочника (пункт меню «Иерархический список»). Если в данной предопределённой процедуре установить статус возврата в 0, то смена режима отображения иерархии справочника не будет произведена.
Синтаксис процедуры:
Процедура ПриСменеИерархии(<Способ>) . . . КонецПроцедуры
где <Способ> — значение устанавливаемого способа просмотра справочника: 1 — иерархических список; 0 — все элементы сразу.
Пример использования:
Процедура ПриСменеИерархии(ВыбСпособ) Если НазваниеНабораПрав() = "Продавец" Тогда Предупреждение("Нельзя менять режим просмотра!", 2); СтатусВозврата(0); КонецЕсли; КонецПроцедуры
Предопределённая процедура ПриУстановкеОтбора()
(англоязычный синоним — OnSetSelectInJournal()
) вызывается в системе «1С:Предприятие» при интерактивной установке отбора любым способом (отбор, быстрый отбор, отбор по значению, история отбора) и при отключении отбора. Если в данной предопределённой процедуре установить статус возврата в 0, то установка отбора справочника не будет произведена.
Синтаксис процедуры:
Процедура ПриУстановкеОтбора(<ТипОтбора>, <3начение0тбора>) . . . КонецПроцедуры
где
- <ТипОтбора> — строковое значение — тип устанавливаемого отбора (имя реквизита справочника, по которому устанавливается отбор);
- <3начение0тбора> — устанавливаемое значение отбора.
Пример использования:
Процедура ПриУстановкеОтбора(ТипОтбора, 3начение) Если НазваниеНабораПрав() = "Продавец" Тогда Предупреждение("Вам нельзя устанавливать отбор!", 2); СтатусВозврата(0); КонецЕсли; КонецПроцедуры
Предопределённые процедуры Глобального модуля
Вызов предопределённой процедуры ПриУдаленииЭлемента()
(англоязычный синоним — OnDeleteItem()
) неявно производится системой «1С:Предприятие» при интерактивном удалении элемента справочника и в случае отмены пометки на удаление.
Синтаксис процедуры:
Процедура ПриУдаленииЭлемента(<Элемент>, <Режим>) . . . КонецПроцедуры
где
- <Элемент> — ссылка на удаляемый элемент;
- <Режим> — выражение, значение которого соответствует флагу режима удаления: 1 — непосредственное удаление, 0 — пометка на удаление.
Обычно данная процедура используется для расширения возможности управления правами доступа пользователя к системе. Если в данной предопределённой процедуре статус возврата установить в 0, то установка пометки удаления элемента справочника или её снятие не будет выполнено. Определить же, что стало причиной вызова предопределённой процедуры — установка или снятие пометки удаления, — можно с помощью метода ПометкаУдаления()
:
Процедура ПриУдаленииЭлемента(Элем, Режим) Если НазваниеНабораПрав() = "Продавец" Тогда Если (Элем.ПометкаУдаления() = 1 Тогда Предупреждение("У вас нет права отменять удаление!", 3); Иначе Предупреждение("У вас нет права удалять элементы справочника!", 3); КонецЕсли; СтатусВозврата(0); КонецЕсли; КонецПроцедуры
Другие статьи по схожей тематике
- Работа с перечислениями
- Работа с журналами документов
- Объект «СписокЗначений»
- Объект «ТаблицаЗначений»
- Объект «Периодический»
- Работа с константами