Файл: СправочникиМенеджер доступ к определенным в конфигурации справочникам.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;