Примеры кода для 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";
	
	// преобразуем объект обратно в данные формы
	ЗначениеВДанныеФормы(КонтрагентОбъект, ДанныеФормы);	
КонецПроцедуры

You have no rights to post comments