1. NatalkaBal 26 11.09.19 12:19 Сейчас в теме

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 130 000 руб.
Полный день


Программисты 1С УТ / БУЗ/ЗУП / БИТ ФИНАНС
Москва
зарплата от 100 000 руб. до 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 150 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству