Примеры кода для 1С 8.x. Часть 3. Справочники
Как обойти все элементы справочника запросом 1с 8.3:
&НаСервере
Процедура ВыборкаЭлементовСправочникаЗапросом()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| ЭтоГруппа = ЛОЖЬ
|УПОРЯДОЧИТЬ ПО
| Наименование";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Ссылка);
КонецЦикла;
КонецПроцедуры
Как обойти элементы с помощью менеджера справочника 1с 8.3:
//метод: Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
СпрКонтрагентыМенеджер = Справочники.Контрагенты; //получим менеджер справочника
СпрКонтрагентыМенеджер = Справочники["Контрагенты"]; //второй вариант получения менеджера
Выборка = СпрКонтрагентыМенеджер.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
Создание и запись нового элемента справочника 1с 8.3:
//метод: СоздатьЭлемент()
НовыйОбъектКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйОбъектКонтрагент.Наименование = "ООО Ладога";
НовыйОбъектКонтрагент.Записать();
Создание и запись новой группы справочника (для иерархического справочника) 1с 8.3
//метод:СоздатьГруппу();
НовыйОбъектКонтрагент = Справочники.Контрагенты.СоздатьГруппу();
НовыйОбъектКонтрагент.Наименование = "Поставщики";
НовыйОбъектКонтрагент.Записать();
Поиск элемента справочника запросом:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Наименование", "ООО Ладога");
ТекстЗапроса = "ВЫБРАТЬ
| Клиенты.Ссылка
|ИЗ
| Справочник.Клиенты КАК Клиенты
|ГДЕ
| Клиенты.Наименование = &Наименование";
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Ссылка);
КонецЦикла;
Поиск элемента через менеджер справочника 1с 8.3:
//Если элемент найден, возвращается ссылка, иначе пустая ссылка. Если реквизит Код\Наименование в справочнике не используется, возвращается Неопределено.
//методы: НайтиПоКоду(), НайтиПоНаименованию(), НайтиПоРеквизиту();
СпрКонтрагенты = Справочники.Контрагенты;
КонтрагентСсылка = СпрКонтрагенты.НайтиПоКоду("0000000001");
Если Не ЗначениеЗаполнено(КонтрагентСсылка) Тогда
Сообщить("Найден по коду: "+КонтрагентСсылка);
Иначе
Сообщить("Не найдено!");
КонецЕсли;
КонтрагентСсылка = СпрКонтрагенты.НайтиПоНаименованию("ООО Ладога");
Если Не ЗначениеЗаполнено(КонтрагентСсылка) Тогда
Сообщить("Найден по наименованию: "+КонтрагентСсылка);
Иначе
Сообщить("Не найдено!");
КонецЕсли;
КонтрагентСсылка = СпрКонтрагенты.НайтиПоРеквизиту("ИНН","12000000001");
Если Не КонтрагентСсылка.Пустая() Тогда
Сообщить("Найден по ИНН: "+КонтрагентСсылка);
Иначе
Сообщить("Не найдено!");
КонецЕсли;
Удаление элемента\группы справочника 1с 8.3:
КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель");
КонтрагентОбъект = КонтрагентСсылка.ПолучитьОбъект();
//пометка удаления, элемент остается в базе:
КонтрагентОбъект.УстановитьПометкуУдаления(Истина);
//непосредственное удаление, элемент исчезает:
КонтрагентОбъект.Удалить();
Выборка элементов подчиненного справочника 1с 8.3:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Контрагент", СсылкаКонтрагент);
ТекстЗапроса = "ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.Владелец = &Контрагент";
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Ссылка);
КонецЦикла;
Перенести элемент в другую группу 1с 8.3:
КонтрагентОбъект = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель").ПолучитьОбъект();
КонтрагентОбъект.Родитель = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели");
КонтрагентОбъект.Записать();
Как получить и проверить пустую ссылку справочника 1с 8.3
ПустаяСсылка = Справочники.Контрагенты.ПустаяСсылка();
Если ПустаяСсылка.Пустая() Тогда
Сообщить("Это пустая ссылка!");
КонецЕсли;
Если Не ЗначениеЗаполнено(ПустаяСсылка) Тогда
Сообщить("Это пустая ссылка или неопределено!");
КонецЕсли;
Как узнать принадлежность элемента справочника группе 1с 8.3:
КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель");
Если КонтрагентСсылка.Родитель = ГруппаКонтрагентов Тогда
Сообщить("Элемент находится в "+ГруппаКонтрагентов);
КонецЕсли;
//с учетом иерархии (вложенности)
Если КонтрагентСсылка.ПринадлежитЭлементу(ГруппаКонтрагентов) Тогда
Сообщить("Элемент находится в "+ГруппаКонтрагентов);
КонецЕсли;
Как скопировать существующий элемент справочника 1с 8.3
КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель");
КонтрагентОбъектКопия = КонтрагентСсылка.Скопировать();
КонтрагентОбъектКопия.Наименование = КонтрагентОбъектКопия.Наименование + "##копия##";
КонтрагентОбъектКопия.Записать();
Как выяснить уровень вложенности элемента справочника 1с 8.3
КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель");
Сообщить(КонтрагентСсылка.Уровень());
Как заблокировать элемент справочника перед изменениями 1с 8.3
КонтрагентОбъект = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель").ПолучитьОбъект();
Если КонтрагентОбъект.Заблокирован() Тогда
Сообщить("Элемент кем то заблокирован!");
Иначе
КонтрагентОбъект.Заблокировать();
//изменяем реквизиты
//....
КонтрагентОбъект.Записать();
КонтрагентОбъект.Разблокировать();
КонецЕсли;
Как заполнить новый элемент справочника на основании 1с 8.3
СтруктураДанных = Новый Структура("Наименование,ИНН", "ООО Пороро", "100000001");
КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
КонтрагентОбъект.Заполнить(СтруктураДанных);
КонтрагентОбъект.Записать();
//в "модуле объекта" создаем процедуру "обработка заполнения"
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения,"Наименование,ИНН")
КонецЕсли;
КонецПроцедуры
Как открыть форму существующего элемента справочника, имея ссылку на него 1с 8.3
&НаКлиенте
Процедура ОткрытьФормуСуществующегоЭлементаСправочника()
КонтрагентСсылка = ПолучитьСсылкуНаКонтрагента("ООО Пороро");
//Вариант 1
ПараметрыФормы = Новый Структура("Ключ", КонтрагентСсылка);
ОткрытьФорму(
"Справочник.Контрагенты.ФормаОбъекта", // имя формы
ПараметрыФормы // параметры для формы
);
//Вариант 2 разрешены модальные окна
ОткрытьЗначение(КонтрагентСсылка);
//Вариант 3
ПоказатьЗначение(, КонтрагентСсылка);
КонецПроцедуры
Как открыть форму существующей группы справочника, имея ссылку на нее 1с 8.3
&НаКлиенте
Процедура ОткрытьФормуСуществующейГруппыСправочника()
КонтрагентСсылка = ПолучитьСсылкуНаКонтрагента("Поставщики");
ПараметрыФормы = Новый Структура("Ключ", КонтрагентСсылка);
ОткрытьФорму(
"Справочник.Контрагенты.ФормаГруппы", // имя формы
ПараметрыФормы // параметры для формы
);
КонецПроцедуры
Как открыть форму выбора элемента справочника и отследить её закрытие 1с 8.3
&НаКлиенте
Процедура ОткрытьФормуВыбораЭлементаСправочника(Команда)
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораЭлемента", ЭтотОбъект);
ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора",,,,,,ОповещениеОЗакрытии);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораЭлемента(Результат, Параметры) Экспорт
Если Результат <> Неопределено Тогда
Сообщить("Был выбран элемент " + Результат);
КонецЕсли;
КонецПроцедуры
Как открыть форму списка справочника и установить отбор по реквизиту 1с 8.3
&НаКлиенте
Процедура ОткрытьФормуСпискаСправочникаСОтбором(Команда)
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ИНН", "100000001"));
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
ОткрытьФорму(
"Справочник.Контрагенты.ФормаСписка",
ПараметрыФормы
);
КонецПроцедуры
Как открыть форму списка справочника с нужным отображением 1с 8.3
&НаКлиенте
Процедура ОткрытьФормуСпискаСправочникаСНужнымОтображением(Команда)
// откроем список контрагентов с отображением "Список"
ФормаСписка = ПолучитьФорму("Справочник.Контрагенты.ФормаСписка");
ФормаСписка.Открыть();
ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
КонецПроцедуры
Как открыть форму только что созданного, но ещё не записанного элемента справочника в 1с 8.3
&НаКлиенте
Процедура ОткрытьФормуНовогоНеЗаписанногоСправочника(Команда)
// получаем форму нового справочника
ФормаНовогоСправочника = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта",,, Истина);
// делаем копию её данных (так как напрямую их менять
// нельзя)
КопияДанныхФормы = ФормаНовогоСправочника.Объект;
// заполняем эти данные на сервере
ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы);
// копируем заполненные данные в исходную форму
КопироватьДанныеФормы(КопияДанныхФормы,
ФормаНовогоСправочника.Объект);
// показываем форму нового заполненного
// элемента справочника пользователю
ФормаНовогоСправочника.Открыть();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы)
// преобразуем данные формы в объект
КонтрагентОбъект = ДанныеФормыВЗначение(ДанныеФормы, Тип("СправочникОбъект.Контрагенты"));
КонтрагентОбъект.Наименование = "ООО Виннипух";
КонтрагентОбъект.ИНН = "10000001";
// преобразуем объект обратно в данные формы
ЗначениеВДанныеФормы(КонтрагентОбъект, ДанныеФормы);
КонецПроцедуры