Файл: СправочникиМенеджер доступ к определенным в конфигурации справочникам.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.10.2023
Просмотров: 113
Скачиваний: 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;
&НаСервереПроцедура СоздатьЭлементНаСервере() //сначала пытаемся найти элементСсылкаНаТовар = Справочники.Номенклатура.НайтиПоНаименованию("Тестовый товар");Если НЕ СсылкаНаТовар.Пустая() ТогдаСообщить("такой элемент уже есть");Возврат;КонецЕсли; НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();НовыйТовар.Наименование = "Тестовый товар";НовыйТовар.Артикул = "А-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;