Приемы работы с объектами конфигурации
Константы
Примеры использования объектов:
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); Движения = РегистрыНакопления.ОстаткиМатериалов.СоздатьНаборЗаписей(); Движения.Отбор.Регистратор.Значение = НужныйДокумент; Движения.Прочитать(); Для КаждогоОчередноеДвижение ИзДвижения Цикл // Алгоритм обработки движений … КонецЦикла;
Регистры бухгалтерии, Регистры расчета
Свойства и методы работы с объектами в большинстве своем аналогичны свойствам и методам для регистров накопления.