наверх
Свободные IT публикации
быстро и доступно
логин:
пароль:

Работа со структурами в 1С 8.x


Как создать структуру?

СозданнаяСтруктура = Новый Структура; 
Оппонент = Новый Структура ("Фамилия, Имя, Отчество, Возраст", "Иванов", "Иван", "Иванович", 7);

Как добавить элементы в структуру?

Оппонент = Новый Структура ("Фамилия, Имя, Отчество, Возраст", "Иванов", "Иван", "Иванович", 7); 
Оппонент.Вставить("Обращение", "Господин"); 
Оппонент.Вставить("Возраст", 25);

Как обратиться к элементу структуры?

ТекущийВозраст = Оппонет.Возраст;

КлючСтруктуры = "Возраст"; 
ТекущийВозраст = Оппонет[КлючСтруктуры];

ТекущийВозраст = Неопределено; 

Оппонет.Свойство("Возраст", ТекущийВозраст);

Оппонет.Возраст = 32; 

Оппонет["Возраст"] = 32; 

Оппонент.Вставить("Возраст", 32);

Как перебрать элементы структуры?

Для Каждого Элемент из СтруктураПараметров Цикл 
	Сообщить(Элемент.Ключ + ": " + Элемент.Значение); 
КонецЦикла;

Как удалить элемент структуры?

СтруктураПараметров.Удалить("Номенклатура"); 

СтруктураПараметров. Очистить();

Как в структуре установить значение для элемента с определенным ключом?

Структура = Новый Структура; 

// Добавить новый элемент. 
Структура.Вставить("Цвет", WebЦвета.Белый); 

// Установить значение для элемента с ключом "Цвет". 
Структура.Вставить("Цвет", WebЦвета.Синий);

Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам?

СтруктураОтборов = Новый Структура; 
СтруктураПараметровОтбора = Новый Структура; 

Для Каждого ЭлементОтбора из ЖурналДокументовСписок.Отбор Цикл 
	Если ЭлементОтбора.Использование Тогда 
		СтруктураПараметровОтбора.Очистить(); 
		СтруктураПараметровОтбора.Вставить("Имя", ЭлементОтбора.Имя); 
		СтруктураПараметровОтбора.Вставить("ВидСравнения", ЭлементОтбора.ВидСравнения); 
		СтруктураПараметровОтбора.Вставить("Значение", ЭлементОтбора.Значение); 
		СтруктураПараметровОтбора.Вставить("ЗначениеПо", ЭлементОтбора.ЗначениеПо); 
		СтруктураПараметровОтбора.Вставить("ЗначениеС", ЭлементОтбора.ЗначениеС); 
		СтруктураПараметровОтбора.Вставить("Представление", ЭлементОтбора.Представление); 
		СтруктураПараметровОтбора.Вставить("ПутьКДанным", ЭлементОтбора.ПутьКДанным); 
		СтруктураПараметровОтбора.Вставить("ТипЗначения", ЭлементОтбора.ТипЗначения); 

		СтруктураОтборов.Вставить(ЭлементОтбора.Имя, СтруктураПараметровОтбора); 
	КонецЕсли; 
КонецЦикла;

Как определить, есть ли в структуре элемент с ключом "Контрагент", и если есть, но содержит пустое значение справочника или Неопределено - удалить это

Если Структура.Свойство("Контрагент", ЗначениеЭлемента) Тогда 
	Если ЗначениеЭлемента = Неопределено ИЛИ ЗначениеЭлемента.Пустая() Тогда 
		Структура.Удалить("Контрагент"); 
	КонецЕсли; 
КонецЕсли; 

Структура.Контрагент 

Структура["Контрагент"]

Как из табличной части "Товары" документа получить все строки, где значение реквизита "Цена" равно нулю, а значение реквизита "СтавкаНДС" равно значен

СтруктураДляПоиска = Новый Структура("Цена, СтавкаНДС", 0, Перечисления.СтавкиНДС.НДС18); 
МассивСтрок = Товары.НайтиСтроки(СтруктураДляПоиска);

Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату?

// Подготовить отбор по измерению "Организация". 
СтруктураОтбора = Новый Структура("Организация", ЮрЛицо); 

// Получить данные, актуальные на указанную дату. 
СтруктураДанных = РегистрыСведений.УчетнаяПолитикаБухгалтерскийУчет.ПолучитьПоследнее(ДатаПолучения, СтруктураОтбора); 

// Прочитать данные из структуры данных. 
СпособОценкиМпзЮрЛица = СтруктураДанных.СпособОценкиМПЗ; 
ДиректКостингЮрЛица = СтруктураДанных.ДиректКостинг;

Как сформировать структуру названий реквизитов табличной части произвольного документа?

Функция СформироватьСтруктуруТабличнойЧастиДокумента(Документ, ИмяТабличнойЧасти) 

	СтруктураТабличнойЧастиДокумента = Новый Структура; 
	Для Каждого Реквизит из Документ.Метаданные().ТабличныеЧасти[ИмяТабличнойЧасти].Реквизиты Цикл 
		СтруктураТабличнойЧастиДокумента.Вставить(Реквизит.Имя, Реквизит.Имя); 
	КонецЦикла; 

	Возврат СтруктураТабличнойЧастиДокумента; 

КонецФункции

Как получить запросом данные табличной части документа, имея структуру названий реквизитов табличной части?

Функция СформироватьЗапросПоТабличнойЧасти(Документ, ИмяТабличнойЧасти, СтруктураПолей) Экспорт 

	ПоляРеквизитов = ""; 
	Для Каждого Реквизит Из СтруктураПолей Цикл 
		ПоляРеквизитов = ПоляРеквизитов + ", Док." + Реквизит.Значение + 
		?(ЗначениеНеЗаполнено(Реквизит.Ключ), "", " КАК " + СокрЛП(Реквизит.Ключ)); 
	КонецЦикла; 

	Запрос = Новый Запрос; 
	Запрос.Текст = "ВЫБРАТЬ 
		|	Док.НомерСтроки " + ПоляРеквизитов + " 
		|ИЗ 
		|	Документ." + Документ.Метаданные().Имя + "." + СокрЛП(ИмяТабличнойЧасти) + " КАК Док 
		|ГДЕ 
		|	Док.Ссылка = &ДокументСсылка"; 

	// Установить параметры запроса. 
	Запрос.УстановитьПараметр("ДокументСсылка", Документ.Ссылка); 

	Возврат Запрос.Выполнить(); 

КонецФункции