Приемы работы с объектами конфигурации

Примеры использования объектов:

1.  // Глобальный контекст
// Константы
// Пример: установить значение константы.

Константы.Бухгалтер.Установить("Сидоров Петр Иванович");


2.  // объект КонстантыМенеджер
// .<имя константы>
// [<имя константы>]
// Для Каждого … Из … Цикл … КонецЦикла;
// Пример: прочитать значение константы.

Результат = Константы.ПрефиксНумерации.Получить();
Сообщить("Значение константы ПрефиксНумерации = "+ Результат);

// Пример: установить значение константы ПрефиксНумерации равным ЦБ.

Константы["ПрефиксНумерации"].Установить("ЦБ");
Сообщить("Новое значение = " + Константы["ПрефиксНумерации"].Получить());

// Пример: очистить значения всех констант.

Для КаждогоОчереднаяКонстанта ИзКонстанты Цикл
    ОчереднаяКонстанта.Установить(Неопределено);
КонецЦикла;


3.  // объект КонстантыМенеджер
// СоздатьНабор()
// Пример: установить новые значения нескольких констант.

Набор = Константы.СоздатьНабор("Руководитель, Бухгалтер");
Набор.Руководитель = "Николаев Денис Павлович";
Набор.Бухгалтер = "Николаева Людмила Сергеевна";
Набор.Записать();


4.  // объект КонстантаМенеджер.<имя>
// СоздатьМенеджерЗначения()
// Пример: вывести значения всех констант, существующих в конфигурации.

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

Примеры использования объектов:

1.  // Глобальный контекст
// Справочники
// Пример: вывести все типы ссылок на элементы справочников, существующие в конфигурации.

Массив = Справочники.ТипВсеСсылки().Типы();
Для Каждого ОчереднойТип из Массив Цикл
    Сообщить(ОчереднойТип);
КонецЦикла;


2.  // объект СправочникиМенеджер
// .<имя справочника>
// [<имя справочника>]
// Для Каждого … Из … Цикл … КонецЦикла;
// Пример: создать новую группу справочника "Номенклатура".

НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
НоваяГруппа.Наименование = "Моя новая группа";
НоваяГруппа.Записать();

// Пример: получить ссылку на справочник "Номенклатура".

Справочники["Номенклатура"].ПолучитьСсылку();


3.   // объект СправочникМенеджер.<Имя справочника>
// НайтиПоКоду()
// НайтиПоНаименованию()
// НайтиПоРеквизиту()
// ПустаяСсылка()
// ПолучитьСсылку()
// .<имя предопределенного элемента справочника>
// Пример: проверить, помечен ли на удаление элемент справочника "Номенклатура" с кодом 13.

Если Справочники.Номенклатура.НайтиПоКоду(13).ПометкаУдаления Тогда
    Сообщить("Элемент с кодом 13 помечен на удаление");
КонецЕсли;

// Пример: является ли элемент справочника "Номенклатура" с наименованием "Услуги" группой.

Если Справочники.Номенклатура.НайтиПоНаименованию("Услуги", Истина).ЭтоГруппа Тогда
    Сообщить("Элемент Услуги является группой");
КонецЕсли;

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

ПустаяСсылкаПеречисления = Перечисления.ВидыНоменклатуры.ПустаяСсылка();
Если Не Справочники.Номенклатура.НайтиПоРеквизиту("ВидНоменклатуры", ПустаяСсылкаПеречисления).Пустая() Тогда 
    Сообщить("Есть элементы, для которых не задан вид номенклатуры");
КонецЕсли;

// Пример: передать пустую ссылку в параметр метода.

Выборка = Справочники.Номенклатура.Выбрать(Справочники.Номенклатура.ПустаяСсылка());


4.  // объект СправочникМенеджер.<Имя справочника>
// Выбрать()
// ВыбратьИерархически()
// Пример: вывести список элементов, расположенных в корне справочника.

Выборка = Справочники.Номенклатура.Выбрать(Справочники.Номенклатура.ПустаяСсылка());
Пока Выборка.Следующий() Цикл 
    Если Не Выборка.ЭтоГруппа тогда
        Сообщить(Выборка);
    КонецЕсли;
КонецЦикла;

// Пример: удалить все элементы иерархического справочника.

Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл 
    Выборка.Удалить();
КонецЦикла;


5.  // объект СправочникМенеджер.<Имя справочника>
// СоздатьГруппу()
// СоздатьЭлемент()
// Пример: создать новый элемент справочника "Сотрудники".

НовыйЭлемент = Справочники.Сотрудники.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Смирнов Андрей Анатольевич";

// Заполнить табличную часть "ТрудоваяДеятельность".

НоваяСтрокаТабличнойЧасти = НовыйЭлемент.ТрудоваяДеятельность.Добавить();
НоваяСтрокаТабличнойЧасти.Организация = "ООО НТЦ";
НоваяСтрокаТабличнойЧасти.НачалоРаботы = Дата(2013,02,01);
НоваяСтрокаТабличнойЧасти.ОкончаниеРаботы = Дата(2013,08,31);
НоваяСтрокаТабличнойЧасти.Должность = "Программист";
НовыйЭлемент.Записать();


6.  // объект СправочникОбъект.<Имя справочника>, СправочникСсылка.<Имя справочника>
// Владелец
// Родитель
// Ссылка
// Пример: запретить изменение подчиненных элементов, если у
// владельца установлено соответствующее свойство
// "ИзмененияЗапрещены" в модуле формы элемента справочника.

Процедура ПередЗаписью(Отказ)
    Если Владелец.ИзмененияЗапрещены Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры


7.  // объект СправочникСсылка.<Имя справочника>
// ПолучитьОбъект()
// СправочникОбъект.<Имя справочника>
// Скопировать()
// Пример: изменить наименование элемента справочника.

Элемент = Справочники.Номенклатура.НайтиПоКоду(10).ПолучитьОбъект();
Элемент.Наименование = "Мое новое наименование";
Элемент.Записать();

// Пример: заполнить справочник тестовыми данными.

Элемент = Справочники.Номенклатура.СоздатьЭлемент();
Элемент.Наименование = "Тестовый элемент";
Элемент.Записать();
Для ш = 1 по 1000 Цикл 
    НовыйЭлемент = Элемент.Скопировать();
    НовыйЭлемент.Записать();
КонецЦикла;


8.  // объект СправочникВыборка.<Имя справочника>
// Ссылка
// Пример: заполнить табличную часть документа
// "ПриходнаяНакладная" всеми элементами из указанной группы справочника "Номенклатура".

Выборка = Справочники.Номенклатура.ВыбратьИерархически(ПолеВвода1);
Пока Выборка.Следующий() Цикл 
    СсылкаНаНоменклатуру = Выборка.Ссылка;
    Если СсылкаНаНоменклатуру.ЭтоГруппа Тогда
        Продолжить; 
    КонецЕсли;
    НоваяСтрока = Материалы.Добавить();
    НоваяСтрока.Материал = СсылкаНаНоменклатуру;
КонецЦикла;


9.  // объект СправочникВыборка.<Имя справочника>
// ПолучитьОбъект() 
// Пример: пометить все элементы неиерархического справочника на удаление.

Выборка = Справочники.Клиенты.Выбрать();
Пока Выборка.Следующий() Цикл 
    Выборка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
КонецЦикла;

Примеры использования объектов:

1.  // Глобальный контекст
// Документы
// Пример: вывести все типы ссылок на элементы справочников, существующие в конфигурации.

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


2.  //объект ДокументыМенеджер
// .<имя документа>
// [<имя документа>]
// Для Каждого … Из … Цикл … КонецЦикла;
// Пример: получить макет для печати документа "Оказание услуги".

Макет = Документы["ОказаниеУслуги"].ПолучитьМакет("Печать");

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

Для КаждогоОчереднойДокумент ИзДокументы Цикл
    Ссылка = ОчереднойДокумент.ПолучитьСсылку();
    …
КонецЦикла;


3.   // объект ДокументМенеджер.<Имя документа>
// НайтиПоНомеру()
// НайтиПоРеквизиту()
// ПустаяСсылка()
// Пример: Проверить, проведен ли документ ПриходнаяНакладная с номером 3.

Если Документы.ПриходнаяНакладная.НайтиПоНомеру(3).Проведен Тогда
    Сообщить("Документ с номером 3 проведен");
КонецЕсли;

// Пример: Проверить, что во всех документах ПриходнаяНакладная заполнен реквизит Склад.

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


4.   // объект ДокументМенеджер.<Имя документа>
// Выбрать()
// Пример: Выбрать все документы ПриходнаяНакладная за текущий месяц.

Выборка = Документы.ПриходнаяНакладная.Выбрать(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
Пока Выборка.Следующий() Цикл 
    Сообщить(Выборка);
КонецЦикла;


5.   // объект ДокументМенеджер.<Имя документа>
// СоздатьДокумент()
// Пример: Создать новый документ ПриходнаяНакладная.

НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Склад = Справочники.Склады.Основной;

// Заполнить табличную часть Материалы

НоваяСтрокаТабличнойЧасти = НовыйДокумент.Материалы.Добавить();
НоваяСтрокаТабличнойЧасти.Материал = Справочники.Номенклатура.НайтиПоКоду(6);
НоваяСтрокаТабличнойЧасти.Количество = 10;
НоваяСтрокаТабличнойЧасти.Цена = 22.5;
НоваяСтрокаТабличнойЧасти.Сумма = 225;
НовыйДокумент.Записать();


6.   // объект ДокументОбъект.<Имя документа>, объект ДокументСсылка.<Имя документа>
// Ссылка
// Пример: в модуле объекта вызвать процедуру проверки заполнения реквизитов документа.

Если Не ПроверитьЗаполнениеРеквизитов(ЭтотОбъект.Ссылка) Тогда
    Сообщить("Реквизиты документа не заполнены!");
КонецЕсли;


7.   // объект ДокументСсылка.<Имя документа>, объект ДокументОбъект.<Имя документа>
// ПолучитьОбъект()
// Скопировать()
// Пример: пометить документ на удаление.

НенужныйДокумент = Документы.ОказаниеУслуги.НайтиПоНомеру(13).ПолучитьОбъект();
НенужныйДокумент.УстановитьПометкуУдаления(Истина);


8.   // объект ДокументВыборка.<Имя документа>
// Ссылка
// Сформировать список ссылок на все документы "ПриходнаяНакладная" за текущий месяц.

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


9.   // объект ДокументВыборка.<Имя документа>
// ПолучитьОбъект()
// Пример: удалить все документы "ПриходнаяНакладная".

Выборка = Документы.ПриходнаяНакладная.Выбрать();
Пока Выборка.Следующий() Цикл 
    Выборка.ПолучитьОбъект().Удалить();
КонецЦикла;

Примеры использования объектов:

1.  // Глобальный контекст
// Перечисления
// Пример: получить значение перечисления по индексу.

Перечисления.ВидыНоменклатуры.Получить(0);


2.  // объект ПеречисленияМенеджер
// .<имя перечисления>
// [<имя перечисления>]
// Для Каждого … Из … Цикл … КонецЦикла;
// Пример: получить количество значений перечисления
Перечисления.["ВидыНоменклатуры"].Количество();


3.   // объект ПеречислениеМенеджер.<Имя>
// .<имя значения перечисления>
// [<имя значения перечисления>]
// [<индекс элемента коллекции>]
// Для Каждого … Из … Цикл … КонецЦикла;
// ПустаяСсылка()
// Пример: получить пустую ссылку на значение перечисления.

…
ПустаяСсылкаПеречисления = Перечисления.ВидыНоменклатуры.ПустаяСсылка();
Если ТекущаяНоменклатура.ВидНоменклатуры = ПустаяСсылкаПеречисления Тогда
    // Предложить заполнение вида номенклатуры.
    …
КонецЕсли;
…

Свойства и методы во многом аналогичны работе со свойствами и методами при работе со справочниками.

Примеры использования объектов:

1.  // Глобальный контекст
// РегистрыСведений
// Пример: получить текущую цену из периодического регистра сведений "Цены".

Элемент = Справочники.Номенклатура.НайтиПоКоду(4);
Отбор = Новый Структура("Номенклатура", Элемент);
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(ТекущаяДата(), Отбор);
Цена = ЗначенияРесурсов.Цена;


2.  // объект РегистрыСведенийМенеджер
// .<имя регистра сведений>
// [<имя регистра сведений>]
// Для Каждого … Из … Цикл … КонецЦикла;
// Пример: Получить начальную цену из периодического регистра сведений Цены.

ИмяРегистра = "Цены";
Услуга = Справочники.Номенклатура.НайтиПоНаименованию("Диагностика");
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", Услуга );
Цена = РегистрыСведений[ИмяРегистра].ПолучитьПервое(ТекущаяДата(), Отбор).Цена;


3.  // объект РегистрСведенийМенеджер.<имя>
// СоздатьКлючЗаписи()
// Пример: активизировать требуемую строку списка регистра сведений.

СтруктураКлючевыхПолей = Новый Структура;
СтруктураКлючевыхПолей.Вставить("Период", Дата("20040331000000"));
СтруктураКлючевыхПолей.Вставить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("0000006"));
Элементы.Материалы.ТекущаяСтрока = РегистрыСведений.Цены.СоздатьКлючЗаписи(СтруктураКлючевыхПолей);


4.  // объект РегистрСведенийМенеджер.<имя>
// СоздатьНаборЗаписей()
// Пример: показать номенклатуру, цена на которую была установлена в заданную дату и время.

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


5.  // объект РегистрСведенийМенеджер.<имя>
// СоздатьМенеджерЗаписи()
// Пример: добавить новое значение цены в регистр "Цены".

Запись = РегистрыСведений.Цены.СоздатьМенеджерЗаписи();
Запись.Период = ТекущаяДата();
Запись.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0000005");
Запись.Цена = 568;
Запись.Записать();


6.  // объект РегистрСведенийНаборЗаписей.<имя>
// [<индекс элемента коллекции>]
// Для Каждого … Из … Цикл … КонецЦикла;
// Пример: показать номенклатуру, цена на которую была установлена в заданную дату и время.

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


7.  // объект РегистрСведенийВыборка.<имя>
// ПолучитьМенеджерЗаписи()
// Пример: удалить все записи регистра сведений за текущий месяц.

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


8.  // объект РегистрСведенийМенеджер.<имя>
// Выбрать()
// ВыбратьПоРегистратору()
// Пример: показать изменение цен на элемент номенклатуры в течение года.

Отбор = Новый Структура("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("0000005"));
Выборка = РегистрыСведений.Цены.Выбрать(НачалоГода(ТекущаяДата()), ТекущаяДата(), Отбор);
Пока Выборка.Следующий() цикл 
    Сообщить("Дата = " + Выборка.Период + ", цена = " + Выборка.Цена);
КонецЦикла;

Примеры использования объектов:

1.  // Глобальный контекст
// РегистрыНакопления
// Пример: выполнить полный пересчет итогов регистра "ОстаткиМатериалов".

РегистрыНакопления.ОстаткиМатериалов.ПересчитатьИтоги();


2.  // объект РегистрыНакопленияМенеджер
// .<имя регистра накопления>
// [<имя регистра накопления>]
// Для Каждого … Из … Цикл … КонецЦикла;
// Пример: рассчитать итоги регистра "ОстаткиМатериалов" на указанную дату.

ИмяРегистра = ОстаткиМатериалов;
РегистрыНакопления[ИмяРегистра].УстановитьПериодРассчитанныхИтогов(УказаннаяДата);


3.  // объект РегистрНакопленияМенеджер.<имя>
// СоздатьКлючЗаписи()
// Пример: активизировать требуемую строку списка регистра накопления.

СтруктураКлючевыхПолей = Новый Структура;
СтруктураКлючевыхПолей.Вставить("Регистратор", Документы.ПриходнаяНакладная.НайтиПоНомеру("0000002"));
СтруктураКлючевыхПолей.Вставить("НомерСтроки", 2);
Элементы.Материалы.ТекущаяСтрока = РегистрыНакопления.ОстаткиМатериалов.СоздатьКлючЗаписи(СтруктураКлючевыхПолей);


4.  // объект РегистрНакопленияМенеджер.<имя>
// СоздатьНаборЗаписей()
// Пример: получить движения документа.

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


5.  // объект РегистрНакопленияМенеджер.<имя>
// Выбрать()
// ВыбратьПоРегистратору()
// Пример: выбрать все записи регистра "ОстаткиМатериалов" за текущий месяц.

Выборка = РегистрыНакопления.ОстаткиМатериалов.Выбрать(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));


6.  // объект РегистрНакопленияНаборЗаписей.<имя>
// [<индекс элемента коллекции>]
// Для Каждого … Из … Цикл … КонецЦикла;
// Пример: получить движения документа.

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

Свойства и методы работы с объектами в большинстве своем аналогичны свойствам и методам для регистров накопления.