Архив метки: отбор

1С: Удаление записи из регистра накопления по регистратору и измерению (отбор)

Задача: удалить записи из регистра накопления по регистратору +  условию.  Т.е. есть несколько записей с одним регистратором, но разными измерениями. Необходимо удалить только нужные. Казалось бы тривиальная задача..но.. «штатными » средставами это сделать не удалось.

Решение: 

  1. Сделаем отбор  по регистратору
  2. Переберем выборку,  отберем те записи, которые необходимо удалить
  3. Удалим их

Код примерно такой:

 НаборЗаписей = РегистрыНакопления.vscРасчетыСАбонентами.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);		
        НаборЗаписей.Прочитать();
		УдаляемыеЗаписи = Новый Массив;
		Для Каждого Запись Из НаборЗаписей Цикл
			если Запись.ЛицевойСчет=объект.ЛицевойСчет тогда
				УдаляемыеЗаписи.Добавить(Запись);
			конецесли;				
		конеццикла;	
	 	Для Каждого УдаляемаяЗапись Из УдаляемыеЗаписи Цикл
     		НаборЗаписей.Удалить(УдаляемаяЗапись);
		КонецЦикла;	
		НаборЗаписей.Записать();

UPDATE:

А можно и еще проще и быстрее:

НаборЗаписей = РегистрыСведений.vscРасчетыСАбонентами.СоздатьНаборЗаписей(); 
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
НаборЗаписей.Прочитать();

ТЗНабора=НаборЗаписей.Выгрузить();
ТЗНабора = ТЗНабора.Скопировать(Новый Структура("ЛицевойСчет", ЛицевойСчет));
НаборЗаписей.Загрузить(ТЗНабора);

 

Программный вызов отчета СКД с параметрами и отборами. Выгрузка в файл

Можно сделать примерно так:

таб1=новый ТабличныйДокумент();	   
	СКД=Отчеты.ОценкаВаловойПрибыли.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	Настройки=СКД.НастройкиПоУмолчанию;	
	ПераметрыСКД=Настройки.ПараметрыДанных.Элементы;	
	прскд=ПераметрыСКД.Найти("Период");	
		пер=Новый СтандартныйПериод;
		пер.ДатаНачала=НачалоМесяца(ТекущаяДата());
		пер.ДатаОкончания=КонецДня(ТекущаяДата());
	прскд=пер;
			ЭлементОтбора=Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
				ЭлементОтбора.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
				ЭлементОтбора.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Магазин");//поле отбора
				ЭлементОтбора.ПравоеЗначение=Справочники.Магазины.НайтиПоНаименованию("Вологда Торговля");
				ЭлементОтбора.Использование=Истина;
				ЭлементОтбора.ИдентификаторПользовательскойНастройки=Новый УникальныйИдентификатор();//добавляет отбор  в состав пользовательских настроек
	
	
	 	Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
		КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
		
	    //Передаем в макет компоновки схему, настройки и данные расшифровки
	    МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, Расшифровка);    
	    ВнешниеПараметры = Новый Структура;    		
		
	    //Выполним компоновку с помощью процессора компоновки
	    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры, Расшифровка);    
		
	    //Выводим результат в табличный документ
	    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	    ПроцессорВывода.УстановитьДокумент(таб1);    
	    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);    	 
		
		таб1.Записать("c:\temp\выловая_прибыль.xls",ТипФайлаТабличногоДокумента.XLS);