1С 8.3 Справочники - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Справочники

Данные > Примеры кода 1С > 1С 8.3 Справочники
Справочники в 1С 8.3 это списки схожих по принадлежности к учету данных. Служат для хранения условно-постоянной информации, поддержки внутрифирменных или общих классификаторов, формирования списков возможных значений субконто, то есть для организации аналитического учета.

Каждый из справочников обладает своими свойствами и функциями, установленными разработчиками. Используются практически во всех объектах учета как разрез учета или справочная информация.
Работа со Справочниками в 1С 8.3 (&НаСервере):
    // Создаём новый элемент справочника Страны с наименованием "Россия"
   
СтранаРоссия = Справочники.Страны.СоздатьЭлемент();
   
СтранаРоссия.Наименование = "Россия";
   
СтранаРоссия.Записать();

   
// Создаём новую группу справочника "Страны у океана"
   
ГруппаСтраныУОкеана = Справочники.Страны.СоздатьГруппу();
   
ГруппаСтраныУОкеана.Наименование = "Страны у океана";
   
ГруппаСтраныУОкеана.Записать();

   
// Переносим элемент справочника Россия в другую группу "Страны у океана"
   
СтранаРоссия.Родитель = ГруппаСтраныУОкеана.Ссылка;
   
СтранаРоссия.Записать();

   
// Меняем элемент справочника по ссылке "Испания"
   
ИспанияСсылка = Справочники.Страны.НайтиПоНаименованию("Испания");
    Если Не
ИспанияСсылка.Пустая() Тогда
       
// Изменим и запишем численность жителей в стране
       
СтранаИспания = ИспанияСсылка.ПолучитьОбъект();
       
СтранаИспания.ЧисленностьНаселения = 46600000;
       
СтранаИспания.Записать();
    КонецЕсли;

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

   
// Узнаём принадлежность элемента справочника группе (с учетом уровней иерархии)
   
БеларусьСсылка = Справочники.Страны.НайтиПоНаименованию("Беларусь");
   
ГруппаСтраныУОкеанаСсылка = Справочники.Страны.НайтиПоНаименованию("Страны у океана");

   
// Проверяем принадлежит ли город Беларусь группе "Страны у океана"
   
Если БеларусьСсылка.ПринадлежитЭлементу(ГруппаСтраныУОкеанаСсылка) Тогда// Булево Истина
       
Сообщить("Элемент Беларусь находится в группе Страны у океана.");
    Иначе
//Ложь
       
Сообщить("Элемент Беларусь не находится в группе Страны у океана.");
    КонецЕсли;

   
// Копируем существующий элемент справочника "Беларусь"
   
КопияБеларуси = БеларусьСсылка.Скопировать();
   
КопияБеларуси.Наименование = КопияБеларуси.Наименование + " КОПИЯ";
   
КопияБеларуси.УстановитьНовыйКод();
   
КопияБеларуси.Записать();

   
// Выясняем уровень вложенности элемента справочника
   
Сообщить(КопияБеларуси.Уровень()); // Возвращает уровень = 1

    // Блокируем элемент справочника перед изменениями (от изменения другими пользователями или режимами)
   
СтранаБеларусь = БеларусьСсылка.ПолучитьОбъект();
    Если Не
СтранаБеларусь.Заблокирован() Тогда
       
СтранаБеларусь.Заблокировать();
       
// Меняем заблокированный элемент "Беларусь"
       
СтранаБеларусь.ЧисленностьНаселения = 10000000;
       
СтранаБеларусь.Записать();
       
// Не забываем разблокировать для других режимов и пользователей
       
СтранаБеларусь.Разблокировать();
    КонецЕсли;

   
// Заполняем новый элемент справочника на основании
    // Примечание: в модуле справочника Страны определена процедура ОбработкаЗаполнения
   
СтранаКазахстан = Справочники.Страны.СоздатьЭлемент();
   
СтранаКазахстан.Заполнить(Справочники.Страны.НайтиПоНаименованию("Италия"));
   
СтранаКазахстан.Наименование = "Казахстан";
   
СтранаКазахстан.Записать();

   
// Помечаем на удаление элемент справочника "Казахстан"
   
СтранаКазахстан.УстановитьПометкуУдаления(Истина,Ложь);// пометка удаления
    // Примечание: включая подчиненные (если речь о группе справочника)
Перебор всех элементов справочника в 1С 8.3 (&НаСервере):
&НаСервере
Процедура ПереборВсехЭлементовСправочникаНаСервере() // Запросом

   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
    |   Наименование
    |ИЗ
    |   Справочник.Страны КАК Страны
    |ГДЕ
    |   ЭтоГруппа = ЛОЖЬ
    |УПОРЯДОЧИТЬ ПО
    |   Наименование";

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

КонецПроцедуры

&НаСервере
Процедура ПереборВсехЭлементовСправочникаЦикломНаСервере() // Перебор циклом

   СпрСтраны = Справочники.Страны.Выбрать();
   // вместо метода Выбрать() можно использовать метод ВыбратьИерархически() - тогда сначала в выборке будет показан элемент,
   // затем все подчиненные ему элементы и только потом следующий элемент
   Пока СпрСтраны.Следующий() Цикл

       //Если Не СпрСтраны.Ссылка.Пустая() Тогда                                                 //=> доп.проверка ссылки на пустоту
       //Если СпрСтраны.ЭтоГруппа = Ложь Тогда                                                    //=> проверка на элемент
       //Если СпрСтраны.ПометкаУдаления = Ложь Тогда                                       //=> проверка, что не помечен
       //Если СокрЛП(СпрСтраны.Наименование) = СокрЛП("Беларусь") Тогда   //=> проверка на нужное нам наименование

       ЭлементСсылка = СпрСтраны.Ссылка;
       ЭлементИмя = СпрСтраны.Наименование;
       ЭлементОбъект = СпрСтраны.ПолучитьОбъект(); // Если нужно менять реквизиты, то используется объект!

                                                                                          // Пример:
                                                                                          // ЭлементОбъект.Регион = Перечисления.Регион.ВосточнаяЕвропа;
                                                                                          // ЭлементОбъект.Записать();
                                                                                          // Сообщить("Записан регион "+Перечисления.Регион.ВосточнаяЕвропа);

   КонецЦикла;

КонецПроцедуры

Перебор всех групп справочника в 1С 8.3 (&НаСервере):
&НаСервере
Процедура ПереборВсехГруппСправочникаНаСервере()

   
Запрос = Новый Запрос;
   
Запрос.Текст =
       
"ВЫБРАТЬ
        |   Наименование
        |ИЗ
        |   Справочник.Страны КАК Страны
        |ГДЕ
        |   ЭтоГруппа = ИСТИНА
        |УПОРЯДОЧИТЬ ПО
        |   Наименование"
;

   
РезультатЗапроса = Запрос.Выполнить();
   
ВыборкаСтран = РезультатЗапроса.Выбрать();

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

КонецПроцедуры
Перебор всех групп вместе с элементами справочника (иерархически) в 1С 8.3 (&НаСервере):
&НаСервере
Процедура ПереборВсехГруппВместеСЭлементамиСправочника()

   
Запрос = Новый Запрос;
   
Запрос.Текст =
       
"ВЫБРАТЬ
        |   Наименование
        |ИЗ
        |   Справочник.Страны КАК Страны
        |УПОРЯДОЧИТЬ ПО
        |   Наименование Иерархия"
;

   
РезультатЗапроса = Запрос.Выполнить();
   
ВыборкаСтран = РезультатЗапроса.Выбрать();

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

КонецПроцедуры
Отбор элементов справочника по родителю (перечислим все элементы группы) в 1С 8.3 (&НаСервере):
&НаСервере
Процедура ОтборЭлементовСправочникаПоРодителюНаСервере()

   
// Найдём группу "Европа" по её имени
   
СсылкаНаРодителя = Справочники.Страны.НайтиПоНаименованию("Европа");

   
// Перечислим только те элементы справочника, что входят в группу "Европа"
   
Запрос = Новый Запрос;
   
Запрос.Текст =
       
"ВЫБРАТЬ
        |   Наименование
        |ИЗ
        |   Справочник.Страны КАК Страны
        |ГДЕ
        |   Страны.Родитель = &Родитель"
;

   
Запрос.УстановитьПараметр("Родитель", СсылкаНаРодителя);

   
РезультатЗапроса = Запрос.Выполнить();
   
ВыборкаСтран = РезультатЗапроса.Выбрать();

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

КонецПроцедуры
Отбор элементов справочника по владельцу (перечислим все города контрагента) в 1С 8.3 (&НаСервере):
&НаСервере
Процедура ОтборЭлементовСправочникаПоВладельцуНаСервере()

   
// Найдём страну по коду 1 (это Беларусь, у неё 35 городов)
   
СсылкаНаСтрану = Справочники.Страны.НайтиПоКоду("000000001");

   
Запрос = Новый Запрос;
   
Запрос.Текст =
       
"ВЫБРАТЬ
        |   Наименование
        |ИЗ
        |   Справочник.Города КАК Города
        |ГДЕ
        |   Города.Владелец = &Владелец"
;

   
Запрос.УстановитьПараметр("Владелец", СсылкаНаСтрану);

   
РезультатЗапроса = Запрос.Выполнить();
   
ВыборкаГородов = РезультатЗапроса.Выбрать();

    Пока
ВыборкаГородов.Следующий() Цикл// будет перечислен каждыый из 35 городов Беларуси
       
Сообщить(ВыборкаГородов.Наименование);
    КонецЦикла;

КонецПроцедуры
Отбор элементов справочника по коду, наименованию, и другим реквизитам в 1С 8.3 (&НаСервере):
&НаСервере
Процедура ОтборЭлементовСправочникаПоРеквизитамНаСервере()

   
// Отбор элементов справочника Городов у которых реквизит Область = "Минская" и Район = "Столбцовский"
    // При отборе можно также использовать Код, Наименование или любой другой реквизит справочника
   
Запрос = Новый Запрос;
   
Запрос.Текст =
       
"ВЫБРАТЬ
        |   Наименование,
        |   Область,
        |   Район
        |ИЗ
        |   Справочник.Города КАК Города
        |ГДЕ
        |   Города.ЭтоГруппа = ЛОЖЬ И
        |   Города.Область = &Область И
        |   Города.Район = &Район"
;

   
Запрос.УстановитьПараметр("Область", Перечисления.Область.Минская);
   
Запрос.УстановитьПараметр("Район",Справочники.Районы.НайтиПоНаименованию("Столбцовский"));

   
РезультатЗапроса = Запрос.Выполнить();
   
ВыборкаГородов = РезультатЗапроса.Выбрать();

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

КонецПроцедуры

💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Справочники:
📰 Актуальные новости с тегом #Справочники:
  • В версии 8.3.27 увеличено количество записей в табличных частях. В более ранних версиях можно было хранить до 99 999 записей. В ОбъектМетаданныхТабличнаяЧасть добавлено новое свойство – ДлинаНомераСтроки. Свойство может принимать целочисленное значение в диапазоне от 5 до 9 включительно, что позволяет хранить в табличной части до 999 999 999 записей.
  • В версии 8.3.26 в менеджер объектов добавлен метод ВыбратьПоСсылкам.
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 01.03.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому