Файл: СправочникиМенеджер доступ к определенным в конфигурации справочникам.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.10.2023
Просмотров: 29
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
#T9. Программная работа с объектами конфигурации
6 апреля 2023 г.
13:15
Объекты встроенного языка для работы со справочниками
Менеджеры - управляющий тип.
СправочникиМенеджер - доступ к определенным в конфигурации справочникам.
СправочникМенеджер.<Имя справочника> - управление конкретным справочником, как объектом конфигурации. С помощью этого объекта осуществляется поиск элементов, создание новых элементов и групп, работа с формами и макетами справочника.
СправочникСсылка.<Имя справочника> - Используется для указания ссылки на элемент справочника в реквизитах других объектов и переменных встроенного языка.
Справочник Объект.<Имя справочника> - чтения, изменение и удаление конкретного элемента справочника.
Программная работа со Справочниками
Создание элемента и группы справочника
Важно!
Если мы попытаемся программно создать элемент справочника, и заполнить реквизит справочника у которого свойствах указано Использование для групп, то получим ошибку.
&НаСервере
Процедура СоздатьЭлементНаСервере()
//сначала пытаемся найти элемент
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоНаименованию("Тестовый товар");
Если НЕ СсылкаНаТовар.Пустая() Тогда
Сообщить("такой элемент уже есть");
Возврат;
КонецЕсли;
НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
НовыйТовар.Наименование = "Тестовый товар";
НовыйТовар.Артикул = "А-101";
НовыйТовар.НаименованиеПолное = "Тестовый товар";
НовыйТовар.Записать();
КонецПроцедуры
&НаСервере
Процедура СоздатьГруппуНаСервере()
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
НоваяГруппа.Наименование = "Тостеры";
НоваяГруппа.ВыгружатьНаСайт = Истина;
НоваяГруппа.Записать();
КонецПроцедуры
&НаСервере
Процедура СоздатьЭлементВГруппеНаСервере()
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
НоваяГруппа.Наименование = "Тостеры";
НоваяГруппа.Записать();
НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
НовыйТовар.Наименование = "Тостер Philips HD2581/00";
НовыйТовар.Артикул = "фыаыфаф";
НовыйТовар.НаименованиеПолное = "Тостер Philips HD2581/00";
НовыйТовар.Родитель = НоваяГруппа.Ссылка;
НовыйТовар.Записать();
КонецПроцедуры
Найти элемент справочника
&НаСервере
Процедура ПоискЭлементаНаСервере()
//1. Поиск во всем справочнике
//поиск по наименованию
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоНаименованию("Холодильник ATLANT ХМ 4208-000", Истина);
Если НайденнаяСсылка.Пустая() Тогда
Сообщить("Товар не найден");
Иначе
Сообщить("Найден товар по наименованию: " + НайденнаяСсылка);
КонецЕсли;
//поиск по коду
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоКоду("000000011");
Если НайденнаяСсылка.Пустая() Тогда
Сообщить("Товар не найден");
Иначе
Сообщить("Найден товар по коду: " + НайденнаяСсылка);
КонецЕсли;
//поиск по реквизиту
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "ХМ 4208-00");
Если НайденнаяСсылка.Пустая() Тогда
Сообщить("Товар не найден");
Иначе
Сообщить("Найден товар по артикулу: " + НайденнаяСсылка);
КонецЕсли;
//2. Поиск внутри группы "Смартфон POCO X3"
ГруппаСмартфоны = Справочники.Номенклатура.НайтиПоНаименованию("Смартфоны", Истина);
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоНаименованию("Смартфон POCO X3", Истина, ГруппаСмартфоны);
Если НайденнаяСсылка.Пустая() Тогда
Сообщить("Товар не найден");
Иначе
Сообщить("Найден товар в группе Смартфоны: " + НайденнаяСсылка);
КонецЕсли;
//3. Поиск в подчиненном справочнике
Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000001");
НайденныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("Номер", "1",,Контрагент);
Если НайденныйДоговор.Пустая() Тогда
Сообщить("Договор с номером 1 не найден");
Иначе
Сообщить("Найден договор: " + НайденныйДоговор + "(" + НайденныйДоговор.Владелец + ")");
КонецЕсли;
КонецПроцедуры
Изменение элемента справочника
&НаСервере
Процедура ИзменитьЭлементНаСервере()
//1. найти элемент, который нужно изменить
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоНаименованию("Холодильник ATLANT ХМ 4209-000", Истина);
//2. изменить элемент и сохранить эти изменения (записать)
Если НЕ СсылкаНаТовар.Пустая() Тогда
ТоварОбъект = СсылкаНаТовар.ПолучитьОбъект();
ТоварОбъект.Артикул = СтрЗаменить(ТоварОбъект.Артикул, "8", "9");
ТоварОбъект.Записать();
Сообщить("Артикул изменен");
Иначе
Сообщить("Товар не найден");
КонецЕсли;
КонецПроцедуры
Типичная ошибка при программном изменении/удалении
Возникает при попытки получить объект по пустой ссылке (например если у нас нет проверки на пустоту ссылки).
Удаление элемента справочника
&НаСервере
Процедура УдалитьЭлементНаСервере()
//ПОМЕТКА НА УДАЛЕНИЕ
//1. найти элемент, который нужно удалить
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоНаименованию("Тестовый товар", Истина);
//2. пометить элемент на удаление
Если НЕ СсылкаНаТовар.Пустая() Тогда
ТоварОбъект = СсылкаНаТовар.ПолучитьОбъект();
ТоварОбъект.УстановитьПометкуУдаления(Истина);
Сообщить("Товар помечен на удаление");
Иначе
Сообщить("Товар не найден");
КонецЕсли;
//УДАЛИТЬ НЕПОСРЕДСТВЕННО
//1. найти элемент, который нужно удалить
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоНаименованию("Тестовый товар", Истина);
//2. пометить элемент на удаление
Если НЕ СсылкаНаТовар.Пустая() Тогда
ТоварОбъект = СсылкаНаТовар.ПолучитьОбъект();
ТоварОбъект.Удалить();
Сообщить("Товар помечен на удаление");
Иначе
Сообщить("Товар не найден");
КонецЕсли;
КонецПроцедуры
Методы глобального контекста для поиска помеченных на удаление объектов
НайтиПомеченныеНаУдаление - найти помеченные на удаление объекты (возвращает массив ссылок на объекты)
НайтиПоСсылкам - ищет ссылки на объекты из массива ссылок (возвращает таблицу значений)
Выбор элементов справочника
&НаСервере
Процедура ВыбратьЭлементыНаСервере()
//1. Выбрать все элементы справочника
Выборка = Справочники.Номенклатура.Выбрать();
//Сообщить("Все товары:");
//Пока Выборка.Следующий() Цикл
// Сообщить(Выборка.Наименование);
//КонецЦикла;
//2. Выбрать все элементы из группы "Смартфоны"
ГруппаСмартфоны = Справочники.Номенклатура.НайтиПоНаименованию("Смартфоны");
//ВыборкаСмартфоны = Справочники.Номенклатура.Выбрать(ГруппаСмартфоны);
//Пока ВыборкаСмартфоны.Следующий() Цикл
// Сообщить(ВыборкаСмартфоны.Наименование + " " + ВыборкаСмартфоны.Артикул);
//КонецЦикла;
//3. Выбрать все элементы с видом номенклатуры "Холодильники"
СсылкаНаВид = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Холодильники");
СтруктураПоиска = Новый Структура("ВидНоменклатуры", СсылкаНаВид);
ВыборкаХолодильники = Справочники.Номенклатура.Выбрать(,,СтруктураПоиска);
//Сообщить("Все холодильники:");
//Пока ВыборкаХолодильники.Следующий() Цикл
// Сообщить(ВыборкаХолодильники.Наименование);
//КонецЦикла;
//4. Выборка иерархическая
ВыборкаПоИерархии = Справочники.Номенклатура.ВыбратьИерархически();
Сообщить("Выборка по иерархии:");
Пока ВыборкаПоИерархии.Следующий() Цикл
Если ВыборкаПоИерархии.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Сообщить(ВыборкаПоИерархии.Наименование + ВыборкаПоИерархии.Артикул);
КонецЦикла;
КонецПроцедуры
Программная работа с ПВХ
&НаСервере
Процедура СоздатьЭлементНаСервере()
//НовыйДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизиты.СоздатьЭлемент();
//НовыйДопРеквизит.Наименование = "Код ИМНС";
//НовыйДопРеквизит.ТипЗначения = Новый ОписаниеТипов("Строка");
//НовыйДопРеквизит.Записать();
НовыйДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизиты.СоздатьЭлемент();
НовыйДопРеквизит.Наименование = "Код ИМНС";
НовыйДопРеквизит.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
НовыйДопРеквизит.Записать();
КонецПроцедуры
Типичная ошибка
ТипЗначения создаваемого элемента ПВХ не соотвествует настройкам типа значения ПВХ.
&НаСервере
Процедура СоздатьГруппуНаСервере()
НоваяГруппа = ПланыВидовХарактеристик.ДополнительныеРеквизиты.СоздатьГруппу();
НоваяГруппа.Наименование = "Справочник ""Контактные лица""";
НоваяГруппа.Записать();
КонецПроцедуры
Программная работа с регистром сведений
&НаСервере
Процедура СозданиеЗаписейНаСервере()
//1. создание одной записи
ВалютаUSD = Справочники.Валюты.НайтиПоКоду("840");
Если НЕ ВалютаUSD.Пустая() Тогда
НоваяЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = ТекущаяДата(); //обязательно если регистр периодический
НоваяЗапись.Валюта = ВалютаUSD;
НоваяЗапись.Курс = 75.76;
НоваяЗапись.Кратность = 1;