КД2 Перенос остатков с регистра Хозрасчетный

1. NatalkaBal 28 11.09.19 12:19 Сейчас в теме
Добрый день! Есть задача перенести остатки с регистра бухгалтерии Хозрасчетный в Приемник в виде документов Отприходование товаров. Учет ведется по нескольким организациям, кучу подразделений и складов. Создаю ПКО с пустым Источником в ПВД описываю алгоритм ПереОбработкой
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ДатаОстатков", Новый Граница(ДатаВыгрузки, ВидГраницы.Включая));
Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);
Запрос.Текст = 
"ВЫБРАТЬ
|	ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
|	ХозрасчетныйОстатки.Субконто2 КАК Склад,
|	ХозрасчетныйОстатки.Организация КАК Организация,
|	ХозрасчетныйОстатки.Подразделение КАК Подразделение,
|	ХозрасчетныйОстатки.СуммаОстаток КАК Сумма,
|	ХозрасчетныйОстатки.КоличествоОстаток КАК Количество
|ИЗ
|	РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОстатков, Счет В (&СписокСчетов), , ) КАК ХозрасчетныйОстатки";
Показать


Вопрос: как создать в Приемнике столько документов Оприходования товаров сколько остатков в разрезе Организации, Подразделения и Склад
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 11.09.19 12:25 Сейчас в теме +1 $m
Выгружать отдельно с помощью ВыгрузитьПоПравилу() по каждой комбинации.

Сделайте Итоги по Организации + подразделению + Складу и обходите выборку по группировкам.
ВыборкаПоОрганизации = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаПоОрганизации.Следующий() Цикл

ВыборкаПоПодразделениям = ВыборкаПоОрганизации.Выбрать(ОбходРезульататЗапроса.ПоГруппировкам);

Пока ВыборкаПоПодразделениям.Следующий() Цикл

ВыборкаПоСкладам = ВыборкаПоПодразделениям.Выбрать();

Пока ВыборкаПоСкладам.Следующий() Цикл
ВыгрузитьПоПравилу()
КонецЦикла;
КонецЦикла;
КонецЦикла;
Показать
Valerianich; +1 Ответить
3. NatalkaBal 28 11.09.19 14:44 Сейчас в теме
(2)А чтобы выгружались только элементы справочников попадающие в запрос необходимо для каждого справочника также сделать ПВД с произвольным алгоритмом?
4. nomad_irk 72 11.09.19 14:50 Сейчас в теме
(3) На сколько понял вопрос: нет. ПВД для элементов справочников делать нет необходимости. Нужны ПКО/ПКС для этих справочников, ВыгрузитьПоПравилу() использует именно ПКО/ПКС для выгрузки самих значений.
ПВД нужно только в том случае, если вы собираетесь отдельно выгрузить элементы какого-то конкретного справочника путем выбора его в настройках УниверсальногоОбмена перед выгрузкой данных.
5. NatalkaBal 28 11.09.19 15:25 Сейчас в теме
ДатаВыгрузки = КонецДня(Параметры.ДатаОкончания);

ИсходящиеДанные = Новый Структура; 

СписокСчетов = Новый СписокЗначений;
СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.05.1"));

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ДатаОстатков", Новый Граница(ДатаВыгрузки, ВидГраницы.Включая));
Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);
Запрос.Текст = 
"ВЫБРАТЬ
|	ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
|	ХозрасчетныйОстатки.Субконто2 КАК Склад,
|	ХозрасчетныйОстатки.Организация КАК Организация,
|	ХозрасчетныйОстатки.Подразделение КАК Подразделение,
|	ХозрасчетныйОстатки.СуммаОстаток КАК Сумма,
|	ХозрасчетныйОстатки.КоличествоОстаток КАК Количество,
|	ХозрасчетныйОстатки.СуммаОстаток/ХозрасчетныйОстатки.КоличествоОстаток КАК Цена
|ИЗ
|	РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОстатков, Счет В (&СписокСчетов), , ) КАК ХозрасчетныйОстатки
|ИТОГИ ПО
|	Организация,
|	Подразделение,
|	Склад";

ОстаткиТоваров = Новый ТаблицаЗначений;
ОстаткиТоваров.Колонки.Добавить("Количество");
ОстаткиТоваров.Колонки.Добавить("Номенклатура");
ОстаткиТоваров.Колонки.Добавить("Сумма");
ОстаткиТоваров.Колонки.Добавить("Цена");

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

Пока ВыборкаПоОрганизации.Следующий() Цикл
	
	ВыборкаПоПодразделению = ВыборкаПоОрганизации.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Пока ВыборкаПоПодразделению.Следующий() Цикл
		
		ВыборкаПоСкладам = ВыборкаПоПодразделению.Выбрать();
		Пока ВыборкаПоСкладам.Следующий() Цикл
			
			Строка = ОстаткиТоваров.Добавить();
			Строка.Номенклатура = ВыборкаПоСкладам.Номенклатура;
			Строка.Количество   = ВыборкаПоСкладам.Количество;
			Строка.Сумма        = ВыборкаПоСкладам.Сумма;
			Строка.Цена         = ВыборкаПоСкладам.Цена;
			
			ИсходящиеДанные.Вставить("Склад",         ВыборкаПоСкладам.Склад);
		КонецЦикла;
			
		ИсходящиеДанные.Вставить("Дата",          ДатаВыгрузки);
		ИсходящиеДанные.Вставить("Организация",   ВыборкаПоОрганизации.Организация);
		ИсходящиеДанные.Вставить("Подразделение", ВыборкаПоПодразделению.Подразделение);
		ИсходящиеДанные.Вставить("Комментарий",   "Перенос остатков товаров из Бухгалтерии на " + Строка(ДатаВыгрузки));
		ИсходящиеДанные.Вставить("Товары",        ОстаткиТоваров); 
		
		ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "ВводНачальныхОстатков");	
	КонецЦикла;
	
КонецЦикла;


Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот