1с обратиться к реквизиту справочника по имени

  Маркет42 - Место для твоих разработок  

Обращение к реквизиту по имени

Я
   ezmemo

17.07.09 — 10:06

Подскажите, пожалуйста, можно ли обратиться к реквизиту по имени?

Что-то типа

Документ1.РевизитПоИмени(«Имя_реквизита»):=»555″;

Понятно, что существует обращение типа

Документ1.Имя_реквизита:=»555″;

но нужно обращение к димамическому, заранее не известному имени.

Тот же вопрос и по табличным частям.

Заранее спасибо.

  

Партнерская программа EFSOL Oblako

   shuhard

1 — 17.07.09 — 10:07

(0) []

   Vitello

2 — 17.07.09 — 10:07

[] решает.

   ezmemo

3 — 17.07.09 — 10:29

т.е.

Документ1.[«Имя_реквизита»]:=»555″;

Документ1.ТабличнаяЧасть[«Имя_табчасти»]:=»555″;

так?

   Vitello

4 — 17.07.09 — 10:29

без точки

   Vitello

5 — 17.07.09 — 10:29

Документ1[«Имя_реквизита»]:=»555″;

   Irbis

6 — 17.07.09 — 10:33

Выполнить() тебе в руки

   hhhh

7 — 17.07.09 — 10:37

и без слова ТабличнаяЧасть. Просто

Документ1[«Имя_табчасти»][0][«Имя_реквизита»]=»555″;

   Господин ПЖ

8 — 17.07.09 — 10:38

обратись ко мне тихо по имени…

   ezmemo

10 — 17.07.09 — 11:47

Спасибо

   ezmemo

11 — 31.07.09 — 11:49

А наоборот как?
т.е.
1) Получить Количество Реквизитов у дока/таб.части
2) По номеру получить значение реквизита и его НАЗВАНИЕ

  

Vitello

12 — 31.07.09 — 14:31

Через метаданные.

Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан

Войти или зарегистрироваться

8.х Как обратится к реквизиту по имени

Тема в разделе «Конфигурирование на платформе «1С:Предприятие 8″», создана пользователем UnNone, 18 июн 2009.




0/5,
Голосов: 0
  1. TopicStarter Overlay

    UnNone

    Offline

    UnNone
    Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26

    Возникла необходимость в программном коде получить значение реквизита имея его имя в текстовой переменной. Возможно как-то так получить значение? Через метаданные получал объект метаданных, а значение соответственно не получается вытащить :(


    UnNone,
    18 июн 2009
    #1

  2. Stack_G

    Offline

    Stack_G
    Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    29

    Если я правильно понял может помочь оператор «Выполнить»:
    Выполнить (Execute)
    Синтаксис:
    Выполнить(<Строка>)
    Параметры:
    <Строка>
    Строка, содержащая текст исполняемого кода.
    Описание:
    Позволяет выполнить фрагмент кода, который передается ему в качестве строкового значения.

    т.е., если имеем: НаименованиеРеквизита = «Организация»

    Код:
    Выполнить("ОрганизацияДок = Ссылка."+НаименованиеРеквизита);
    
    

    Stack_G,
    18 июн 2009
    #2
  3. TopicStarter Overlay

    UnNone

    Offline

    UnNone
    Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26

    Спасибо огромное работает. :)


    UnNone,
    18 июн 2009
    #3

  4. e.kogan

    Offline

    e.kogan

    Регистрация:
    2 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1

    ВашОбъект.[НаименованиеРеквизита]
    Как и к любой коллекции.


    e.kogan,
    18 июн 2009
    #4

  5. Stack_G

    Offline

    Stack_G
    Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    29

    согласен, поправлю:

    Код:
    ВашОбъект[НаименованиеРеквизита]
    
    

    без точки


    Stack_G,
    19 июн 2009
    #5
  6. TopicStarter Overlay

    UnNone

    Offline

    UnNone
    Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26

    А я блин даже не подумал о таком варианте.
    Всем большое спасибо, кто помог :)


    UnNone,
    19 июн 2009
    #6

  7. e.kogan

    Offline

    e.kogan

    Регистрация:
    2 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1

    Да, конечно — задумалась что-то )


    e.kogan,
    24 июн 2009
    #7
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
Похожие темы

  1. †omynoker

    8.х
    Доступ к реквизиту справочника по имени, хранимому в переменной

    †omynoker,
    22 сен 2007
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    2
    Просмотров:
    2.221
    †omynoker
    23 сен 2007

  2. AleksP

    8.х
    Обратится к реквизиту через внешнюю обработку

    AleksP,
    18 июл 2012
    , в разделе: Общие вопросы «1С:Предприятие 8»
    Ответов:
    9
    Просмотров:
    1.440
    kotlovD
    19 июл 2012

  3. AlenkaInt

    8.х
    Обратится к документу.

    AlenkaInt,
    20 фев 2014
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    3
    Просмотров:
    809
    AlenkaInt
    20 фев 2014

  4. id3337668

    7.7
    Как обратится к реквизиту экранной формы в модуле документа?

    id3337668,
    17 авг 2016
    , в разделе: Установка платформы «1С:Предприятие 7.7»
    Ответов:
    2
    Просмотров:
    1.439
    id3337668
    17 авг 2016

  5. Raideres

    [РЕШЕНО]
    Поскажите как обратится в уф к макету

    Raideres,
    23 янв 2017
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    2
    Просмотров:
    1.947
    Raideres
    23 янв 2017

Загрузка…
Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

  Как получить доступ к реквизитам объекта?

Статья носит справочный характер. Предназначена для начинающих программистов.

Получить массив реквизитов объекта можно при помощи самого объекта:

                ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок);
                ДокОбъект = ДокСсылка.ПолучитьОбъект();
                МассивРеквизитовОбъекта = ДокОбъект.Метаданные().Реквизиты;

  Получив массив реквизитов, можно организовать Цикл для просмотра имен реквизитов:

 Для каждого Реквизит Из ДокОбъект.Метаданные().Реквизиты Цикл
                        Сообщить(Реквизит.Имя + " :" + Реквизит.Представление());
КонецЦикла;

Для того, чтобы получить значения реквизитов объекта вообще говоря надо обратиться с запросом к БД, типа:

 
Запрос = "ВЫБРАТЬ
                |       ИмяРеквизита,
                |ИЗ
                |       Объект.ТипОбъекта КАК ОбъектТипОбъекта
                |ГДЕ
                |       ОбъектТипОбъекта.Ссылка = &СсылкаНаОбъект
Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);

В запрос надо передать ссылку на объект и имя реквизита. Запрос вернет таблицу или выборку со значением реквизита.

Удобнее конечно для поиска значений реквизитов воспользоваться готовыми решениями, например фунцией ПолучитьЗначенияРеквизитов() общего модуля ОбщегоНазначения.

 
// Возвращает структуру, содержащую значения реквизитов прочитанные из информационной базы
// по ссылке на объект.
//
//  Если доступа к одному из реквизитов нет, возникнет исключение прав доступа.
//  Если необходимо зачитать реквизит независимо от прав текущего пользователя,
//  то следует использовать предварительный переход в привилегированный режим.
//
// Параметры:
//  Ссылка       - ссылка на объект, - элемент справочника, документ, ...
//  ИменаРеквизитов - Строка или Структура - Если Строка, то имена реквизитов,
//               перечисленные через запятую, в формате требований к свойствам структуры.
//               Например, "Код, Наименование, Родитель".
//               Если Структура, то в качестве ключа передается псевдоним поля для
//               возвращаемой структуры с результатом, а в качестве значения (опционально)
//               - фактическое имя поля в таблице.
//               Если значение не определено, то имя поля берется из ключа.
//
// Возвращаемое значение:
//  Структура    - содержит список свойств, как список имен в строке
//                 ИменаРеквизитов, со значениям реквизитов, прочитанных
//                 из информационной базы.
//
Функция ПолучитьЗначенияРеквизитов(Ссылка, ИменаРеквизитов) Экспорт
        Если ТипЗнч(ИменаРеквизитов) = Тип("Структура") Тогда
                СтруктураРеквизитов = ИменаРеквизитов;
        ИначеЕсли ТипЗнч(ИменаРеквизитов) = Тип("Строка") Тогда
                СтруктураРеквизитов = Новый Структура(ИменаРеквизитов);;
        Иначе
                ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                        НСтр("ru = 'Неверный тип второго параметра ИменаИлиСтруктураРеквизитов: %1'"),
                        Строка(ТипЗнч(ИменаРеквизитов)));
        КонецЕсли;
        ТекстПолей = "";
        Для каждого КлючИЗначение Из СтруктураРеквизитов Цикл
                ИмяПоля   = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Ключ));
                Псевдоним = СокрЛП(КлючИЗначение.Ключ);
                ТекстПолей  = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + "
                        |       " + ИмяПоля + " КАК " + Псевдоним;
        КонецЦикла;
        Запрос = Новый Запрос(
                "ВЫБРАТЬ
                |" + ТекстПолей + "
                |ИЗ
                |       " + Ссылка.Метаданные().ПолноеИмя() + " КАК ПсевдонимЗаданнойТаблицы
                |ГДЕ
                |       ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
                |");
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        Выборка = Запрос.Выполнить().Выбрать();
        Выборка.Следующий();
        Результат = Новый Структура;
        Для каждого КлючИЗначение Из СтруктураРеквизитов Цикл
                Результат.Вставить(КлючИЗначение.Ключ);
        КонецЦикла;
        ЗаполнитьЗначенияСвойств(Результат, Выборка);
        Возврат Результат;
КонецФункции

Значение реквизитов в этой функции получено через запрос к БД. Возвращаемое значение — структура (ключ-значение). Пример использования:

         ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок);
        СтруктураНастроек = Новый Структура;
         //инициируем структуру настроек именами реквизитов
        Для каждого Реквизит Из ДокОбъект.Метаданные().Реквизиты Цикл
                СтруктураНастроек.Вставить(Реквизит.Имя, Реквизит.Имя);
        КонецЦикла;      
                
        ЗначенияРеквизитов = ПолучитьЗначенияРеквизитов(ДокСсылка , СтруктураНастроек);
        СканПростойСтруктуры(ЗначенияРеквизитов); //вывести структуру для просмотра
 

Поскольку в функцию ПолучитьЗначенияРеквизитов() во второй параметр надо передать структуру, то мы создали структуру и организовали Цикл ее инициализации данными из массива имен реквизитов объекта. Возвращает функция так же структуру (ключ-значение), с которой удобно работать. Для просмотра этой структуры можно воспользоваться циклом, либо вызвать функцию СканПростойСтруктуры(), которой передать структуру для просмотра.

 
Функция СканПростойСтруктуры(Структура)
        Для каждого Элемент из Структура Цикл
                Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
        КонецЦикла;
КонецФункции

Если исследуемый объект использует так же еще и общие реквизиты, и их необходимо найти, то можно воспользоваться функцией МассивИменРеквизитовОбъекта(), которая находит не только реквизиты объекта но и общие и даже стандартные реквизиты, которые использует объект:

 
// Возвращает массив имен всех реквизитов переданного объекта
//
Функция МассивИменРеквизитовОбъекта(Объект) Экспорт
    МассивИменРеквизитов = Новый Массив;
    Если ТипЗнч(Объект) = Тип("ОбъектМетаданных") Тогда
        МетаданныеОбъекта = Объект;
    Иначе
        МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
        Если МетаданныеОбъекта = Неопределено Тогда
            Возврат МассивИменРеквизитов;
        КонецЕсли;
    КонецЕсли;
    Для индекс = 0 по 1 Цикл
//        КоллекцияРеквизитов = ?(индекс = 0, МетаданныеОбъекта.СтандартныеРеквизиты, МетаданныеОбъекта.Реквизиты);
        КоллекцияРеквизитов = МетаданныеОбъекта.Реквизиты;
        Для каждого Реквизит Из КоллекцияРеквизитов Цикл
            МассивИменРеквизитов.Добавить(Реквизит.Имя);
        КонецЦикла;
    КонецЦикла;
    Для каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл
        Если ИспользуетсяОбщийРеквизит(ОбщийРеквизит, МетаданныеОбъекта) Тогда
            МассивИменРеквизитов.Добавить(ОбщийРеквизит.Имя);
        КонецЕсли;
    КонецЦикла;
    Возврат МассивИменРеквизитов;
КонецФункции

Тогда программа будет выглядеть так:

 
                ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок);
                ДокОбъект = ДокСсылка.ПолучитьОбъект();
                                
                мМассивИмен =  МассивИменРеквизитовОбъекта(ДокОбъект);
                СтруктураНастроек = Новый Структура;
                Для каждого эл Из мМассивИмен Цикл
                        СтруктураНастроек.Вставить(эл, эл);
                КонецЦикла;
                ЗначенияРеквизитов = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ДокСсылка , СтруктураНастроек);
                СканПростойСтруктуры(ЗначенияРеквизитов);

Вспомогательная функция:

 
// Проверяет используется ли в Объекте указанный общий реквизит
//
Функция ИспользуетсяОбщийРеквизит(ОбщийРеквизит, Объект) Экспорт
    Если ТипЗнч(Объект) = Тип("ОбъектМетаданных") Тогда
        МетаданныеОбъекта = Объект;
    Иначе
        МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
        Если МетаданныеОбъекта = Неопределено Тогда
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
    Если ТипЗнч(ОбщийРеквизит) = Тип("ОбъектМетаданных") Тогда
        МетаданныеОбщегоРеквизита = ОбщийРеквизит;
    Иначе
        МетаданныеОбщегоРеквизита = Метаданные.ОбщиеРеквизиты.Найти(ОбщийРеквизит);
        Если МетаданныеОбщегоРеквизита = Неопределено Тогда
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
    ЭлементСостава = МетаданныеОбщегоРеквизита.Состав.Найти(МетаданныеОбъекта);
    Если ЭлементСостава = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    пИспользованиеОбщегоРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита;
    Если ЭлементСостава.Использование = пИспользованиеОбщегоРеквизита.Использовать Тогда
        Возврат Истина;
    ИначеЕсли ЭлементСостава.Использование = пИспользованиеОбщегоРеквизита.НеИспользовать Тогда
        Возврат Ложь;
    Иначе
        пАвтоИспользованиеОбщегоРеквизита = Метаданные.СвойстваОбъектов.АвтоИспользованиеОбщегоРеквизита;
        Если МетаданныеОбщегоРеквизита.АвтоИспользование = пАвтоИспользованиеОбщегоРеквизита.Использовать Тогда
            Возврат Истина;
        Иначе
            Возврат Ложь;
        КонецЕсли;
    КонецЕсли;
КонецФункции

Как получить значение отдельного реквизита объекта?

Иногда необязательно получать значения всего массива реквизитов. Программист как правило знает имя реквизита, значение которого необходимо получить. К отдельному реквизиту объекта можно обратиться просто по его имени:

Поставщик = ДокОбъект.Метаданные().Реквизиты.Поставщик;

Получить значение этого реквизита можно так же через запрос, написанный специально для этого реквизита. Но можно воспользоваться все той же функцией ПолучитьЗначенияРеквизитов(). Цикл для настройки структуры в этом случае не нужен, так как нам надо найти значение всего одного элемента:

 
                ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок);
                ДокОбъект = ДокСсылка.ПолучитьОбъект();
                                
                Организация = Строка(ДокОбъект.Метаданные().Реквизиты.Организация);
                СтруктураНастроек = Новый Структура;
                СтруктураНастроек.Вставить(Организация, Организация);
 
                ЗначенияРеквизитов = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ДокСсылка , СтруктураНастроек);
                СканПростойСтруктуры(ЗначенияРеквизитов);

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

Как найти имена реквизитов в таб части объекта?

Функция определяет есть ли реквизит в таб части документа:

// Позволяет определить есть ли среди реквизитов табличной части документа
// реквизит с переданным именем.
//
// Параметры:
//  ИмяРеквизита - строковое имя искомого реквизита,
//  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//  ИмяТабЧасти  - строковое имя табличной части документа, среди реквизитов которого производится поиск
//
// Возвращаемое значение:
//  Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
 
Функция ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти) Экспорт
    ТабЧасть = МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти);
    Если ТабЧасть = Неопределено Тогда // Нет такой таб. части в документе
        Возврат Ложь;
    Иначе
        Возврат НЕ (ТабЧасть.Реквизиты.Найти(ИмяРеквизита) = Неопределено);
    КонецЕсли;
КонецФункции

Пример использования:

 

        ИмяРеквизита = "Номенклатура";
        МетаданныеДокумента = ДокОбъект.Метаданные();
        ИмяТабЧасти = "Товары";
        
         Если ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти) Тогда
            Сообщить("Реквизит есть!");
         Иначе
            Сообщить("Реквизита нет");
         КонецЕсли;
 

Сообщить имя реквизитов таб части:

 
Для каждого Реквизит Из ДокОбъект.Метаданные().ТабличныеЧасти.Найти("Товары").Реквизиты Цикл
        Собщить(Реквизит.Имя);
КонецЦикла; 

Как найти значение всех реквизитов всех таб частей документа через запрос

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

ПолучитьЗначенияРеквизитовТабЧасти().

Функция ПолучитьЗначенияРеквизитовТабчасти(Ссылка, ИменаРеквизитов, ИмяТабЧасти) Экспорт
        
        ИмяТЧ = ИмяТабЧасти;
        ПолноеИмя = Ссылка.Метаданные().ПолноеИмя();
           
        Если ТипЗнч(ИменаРеквизитов) = Тип("Структура") Тогда
                СтруктураРеквизитов = ИменаРеквизитов;
        ИначеЕсли ТипЗнч(ИменаРеквизитов) = Тип("Строка") Тогда
                СтруктураРеквизитов = Новый Структура(ИменаРеквизитов);;
        Иначе
                ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                        НСтр("ru = 'Неверный тип второго параметра ИменаИлиСтруктураРеквизитов: %1'"), 
                        Строка(ТипЗнч(ИменаРеквизитов)));
        КонецЕсли;
        ТекстПолей = "";
        Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
                ИмяПоля   = ?(ЗначениеЗаполнено(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Значение), СокрЛП(КлючИЗначение.Ключ));
                Псевдоним = СокрЛП(КлючИЗначение.Ключ);
                ТекстПолей  = ТекстПолей + ?(ПустаяСтрока(ТекстПолей), "", ",") + "
                        |       " + ИмяПоля + " КАК " + Псевдоним;
        КонецЦикла;
        Запрос = Новый Запрос(
                "ВЫБРАТЬ
                |" + ТекстПолей + "
                |ИЗ
                |       " + ПолноеИмя + "." + ИмяТЧ + " КАК ПсевдонимЗаданнойТаблицы
                |ГДЕ
                |       ПсевдонимЗаданнойТаблицы.Ссылка = &Ссылка
                |");
                                
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        Результат = Запрос.Выполнить().Выгрузить();
                
        Возврат Результат;
КонецФункции

 Пример использования:

 
        ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок);
        ДокОбъект = ДокСсылка.ПолучитьОбъект();
                                
        
        МассивТабЧастей = Новый Массив;
        Для каждого ТабЧасть Из ДокОбъект.Метаданные().ТабличныеЧасти Цикл
                МассивТабЧастей.Добавить(ТабЧасть.Имя);                 
        КонецЦикла;                                             
                
        Для Каждого ТабЧасть Из МассивТабЧастей Цикл
                        
                СтруктураНастроек = Новый Структура;
                Для каждого Реквизит Из ДокОбъект.Метаданные().ТабличныеЧасти.Найти(ТабЧасть).Реквизиты Цикл
                        СтруктураНастроек.Вставить(Реквизит.Имя, Реквизит.Имя);
                КонецЦикла;                                             
                        
                Сообщить("Имя таб части: " + ТабЧасть);
                ТабЗнач = ПолучитьЗначенияРеквизитовТабЧасти(ДокСсылка , СтруктураНастроек, ТабЧасть);
                                
                ПоказатьТаблицу(ТабЗнач);
                                
        КонецЦикла;
 

Вспомогательная функция:

 
функция ПоказатьТаблицу(Табл)
        
        Сообщить("///Функция ПоказатьТаблицу///");
        
        Количество = Табл.Колонки.Количество();
        
        Для каждого Строка из Табл Цикл
                Для Индекс = 0 По Количество-1 Цикл 
                        Сообщить(СокрЛП(Индекс)+" "+СокрЛП(Табл.Колонки[Индекс].Имя)+ ": " + Строка[СокрЛП(Табл.Колонки[Индекс].Имя)]);
                КонецЦикла;
        КонецЦикла;
        Сообщить("///Конец Функция ПоказатьТаблицу///");
КонецФункции  

Результат для документа «Реализация товаров услуг»:

Имя таб части: Товары
///Функция ПоказатьТаблицу///
0 ЕдиницаИзмерения: шт
1 ЕдиницаИзмеренияМест:
2 Качество: Новый
3 Количество: 1
4 КоличествоМест: 0
5 Коэффициент: 1
6 Номенклатура: Вентилятор настольный
7 ПроцентСкидкиНаценки: 0
8 СерияНоменклатуры: Н-908, С-890 от 01.01.2003
9 СпособСписанияОстаткаТоваров: Со склада
10 СтавкаНДС: Без НДС
11 Сумма: 445,5
12 СуммаНДС: 0
13 ХарактеристикаНоменклатуры:
14 Цена: 450
15 Склад: Магазин «Бытовая техника»
16 ПроцентАвтоматическихСкидок: 1
17 УсловиеАвтоматическойСкидки: По виду дисконтных карт
18 ЗначениеУсловияАвтоматическойСкидки: Серебряная карта
19 КлючСтроки: 3
20 КлючСвязи: 0
21 ЗаказПокупателя: Заказ покупателя ТД000000001 от 08.06.2008 12:00:00
0 ЕдиницаИзмерения: шт
1 ЕдиницаИзмеренияМест:
2 Качество: Новый
3 Количество: 1
4 КоличествоМест: 0
5 Коэффициент: 1
6 Номенклатура: Набор вентиляторов
7 ПроцентСкидкиНаценки: 0
8 СерияНоменклатуры:
9 СпособСписанияОстаткаТоваров: Со склада
10 СтавкаНДС: Без НДС
11 Сумма: 1948,32
12 СуммаНДС: 0
13 ХарактеристикаНоменклатуры:
14 Цена: 1968
15 Склад: Магазин «Бытовая техника»
16 ПроцентАвтоматическихСкидок: 1
17 УсловиеАвтоматическойСкидки: По виду дисконтных карт
18 ЗначениеУсловияАвтоматическойСкидки: Серебряная карта
19 КлючСтроки: 4
20 КлючСвязи: 0
21 ЗаказПокупателя: Заказ покупателя ТД000000001 от 08.06.2008 12:00:00
///Конец Функция ПоказатьТаблицу///

Имя таб части: ВозвратнаяТара
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Имя таб части: Услуги
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Имя таб части: СоставНабора
///Функция ПоказатьТаблицу///
0 Номенклатура: Вентилятор BINATONE ALPINE 160вт, напольный ,
1 ХарактеристикаНоменклатуры:
2 СерияНоменклатуры: 01234/11020/7654321, БОЛГАРИЯ
3 Количество: 1
4 ЕдиницаИзмерения: шт
5 Склад: Магазин «Бытовая техника»
6 Качество: Новый
7 СпособСписанияОстаткаТоваров: Со склада
8 КлючСтроки: 4
9 Цена: 1068
10 КлючСвязи: 0
0 Номенклатура: Вентилятор JIPONIC (Тайв.),
1 ХарактеристикаНоменклатуры:
2 СерияНоменклатуры: 11234/11020/7654321, ТАЙВАНЬ (КИТАЙ)
3 Количество: 1
4 ЕдиницаИзмерения: шт
5 Склад: Магазин «Бытовая техника»
6 Качество: Новый
7 СпособСписанияОстаткаТоваров: Со склада
8 КлючСтроки: 4
9 Цена: 900
10 КлючСвязи: 0
///Конец Функция ПоказатьТаблицу///

Имя таб части: СерийныеНомера

///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Имя таб части: СерийныеНомераСоставНабора

///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Имя таб части: ДокументыРасчетовСКонтрагентом

 ///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Доброго времени суток. Не смог найти хорошего решения такой задачи: Есть имя справочника: СпрИмя Есть имя реквизита этого справочника в переменной: РекИмя Как получить, например, значение реквизита РекИмя для элемента справочника с кодом «0001»? Видел в инете одно решение, но очень не удобное — через создание табличного документа.

Справочники[СпрИмя].НайтиПоКоду(МойКод)[РекИмя]

получить — запросом. например так: Выбрать тСпрИмя.РекИмя Из Справочник.СпрИмя Как тСпрИмя Где тСпрИмя.Код = &Код

Справочники[СпрИмя].НайтиПоКоду(«0001»)[ИмяРеквизита] только не вздумай действительно так писать, это быдлокод

DrShad,vde69 Это было бы очень красиво и просто, но «получение элемента по индексу для значения не определено»

guitar_player буду пробовать запросом

предположу, что по коду не нашлось.

все, спасибо. разобрался. действительно можно получить через [ИмяРеквизита]

конечно можно. это объектная техника. Реализация запросом примерно такая: только полюбому эту задачу можно решить совсем по другому

Тэги: 1С 8

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

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

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


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

В нашем случае, для того чтобы получить ссылку на поставщика, нужно будет выполнить следующий код:

ПоставщикДокумента = Объект.Поставщик; 

Vzonder
04.10.2017 21:29 Прочитано: 3967

Предположим имеется КакойТоСправочник.

В нем реквизиты:

Реквизит1

Реквизит2

Реквизит3

Реквизит4

И т.д.

Реквизит99

В документе имеется реквизит:

СправочникСсылка. КакойТоСправочник

И соответственно – куда проще получить значение реквизита:

РеквизитПриемник = КакойТоСправочник .Реквизит1;

И так 99 раз, и тысяча условий…((((

Уважаемые знатоки, как назначить имя реквизиту переменно?

Типа:

ПеременнаяРеквизита = » Реквизит1″;

РеквизитПриемник = КакойТоСправочник .ПеременнаяРеквизита;

Пробовал через поиск:

РеквизитПриемник = КакойТоСправочник.Метаданные().Реквизиты.Найти(ПеременнаяРеквизита);

Явно не то(((

Научите, пожалуйста.

Yandex
Возможно, вас также заинтересует

Реклама на портале

Vzonder
05.10.2017 01:13 Ответ № 1

Сам нашел:

Выполнить(«РеквизитПриемник = СправочникСсылка.» + ПеременнаяРеквизита);

Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.

Справочники в системе «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);
   КонецЕсли;
КонецПроцедуры

Другие статьи по схожей тематике

  • Работа с перечислениями
  • Работа с журналами документов
  • Объект «СписокЗначений»
  • Объект «ТаблицаЗначений»
  • Объект «Периодический»
  • Работа с константами

Понравилась статья? Поделить с друзьями:
  • 1с обращение к реквизиту справочника в запросе
  • 1с общие реквизиты использование автоматически
  • 1с основной реквизит формы динамический список
  • 1с отбор в отчете по дополнительному реквизиту
  • 1с отбор в списке по дополнительному реквизиту