В обработчиках "Перед обработкой" ПКГС "МПЗПриобретенные" и ПКГС "ДанныеПоСФ" ПКО "ВводНачальныхОстатковНаДату" добавить строки:
Если ВходящиеДанные.Свойство("НеОчищать") Тогда
НеОчищать = ВходящиеДанные.НеОчищать;
КонецЕсли;
В обработчике ПВД "Остатки_Товары" после строк:
ТаблицаДанных = РезультатЗапроса.СкопироватьКолонки();
ТаблицаДанныхНДС = РезультатЗапросаПоПартиямНДС.СкопироватьКолонки();
ТаблицаОрганизаций = РезультатЗапроса.Скопировать(,"Организация,СчетУчета");
ТаблицаОрганизаций.Свернуть("Организация,СчетУчета",);
Заменить весь код на:
Для Каждого СтрокаТаблицыОрганизаций ИЗ ТаблицаОрганизаций Цикл
ТекОрганизация = СтрокаТаблицыОрганизаций.Организация;
ТекСчетУчета = СтрокаТаблицыОрганизаций.СчетУчета;
ПрименениеУСН = НалоговыйУчетУСН.ПрименениеУСН(ТекОрганизация, ДатаНачала);
Предприниматель = ДоходыИРасходыПредпринимателя.Предприниматель(ТекОрганизация, ДатаНачала);
Если Предприниматель Тогда
УчетнаяПолитикаНеЗадана = Истина;
УчетнаяПолитика = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитики(ДатаНачала, УчетнаяПолитикаНеЗадана, ТекОрганизация);
Если УчетнаяПолитикаНеЗадана Тогда
ОсновнойХарактерДеятельности = Неопределено;
ОсновнаяНоменклатурнаяГруппа = Неопределено;
Иначе
ОсновнойХарактерДеятельности = УчетнаяПолитика.ОсновнойХарактерДеятельности;
ОсновнаяНоменклатурнаяГруппа = УчетнаяПолитика.ОсновнаяНоменклатурнаяГруппа;
КонецЕсли;
КонецЕсли;
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Организация", ТекОрганизация);
СтруктураОтбора.Вставить("СчетУчета", ТекСчетУчета);
МассивДанных = РезультатЗапроса.НайтиСтроки(СтруктураОтбора);
//Подсчитываем количество порций
Количество = МассивДанных.Количество();
РазмерПорции = 1000;
КоличествоПорций = Цел(Количество / РазмерПорции);
КоличествоПорцийЦел = КоличествоПорций * РазмерПорции;
Для СчетчикПорций = 1 По КоличествоПорций Цикл
//Очищаем таблицы данных для каждой порции
ТаблицаДанных.Очистить();
ТаблицаДанныхНДС.Очистить();
//Вычисляем начало и конец выгружаемого диапазона
Начало = РазмерПорции * (СчетчикПорций - 1) + 1;
Конец = РазмерПорции * СчетчикПорций;
Для Н = Начало По Конец Цикл
НоваяСтрока = ТаблицаДанных.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,МассивДанных.Получить(Н-1));
НоваяСтрока.Ключ = Н;
НоваяСтрока.НомерСтрокиТЧ = Н;
Если Предприниматель Тогда
Если НоваяСтрока.ХарактерДеятельности = Неопределено Тогда
НоваяСтрока.ХарактерДеятельности = ОсновнойХарактерДеятельности;
КонецЕсли;
Если НоваяСтрока.НоменклатурнаяГруппа = Неопределено Тогда
НоваяСтрока.НоменклатурнаяГруппа = ОсновнаяНоменклатурнаяГруппа;
КонецЕсли;
КонецЕсли;
//Формируем таблицу по партиям НДС
Если РезультатЗапросаПоПартиямНДС.Количество() <> 0 Тогда
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Организация", ТекОрганизация);
СтруктураОтбора.Вставить("СчетУчета", ТекСчетУчета);
СтруктураОтбора.Вставить("Номенклатура", НоваяСтрока.Номенклатура);
Если Параметры.ВестиСуммовойУчетПоСкладамБУ Тогда
СтруктураОтбора.Вставить("Склад", НоваяСтрока.Склад);
КонецЕсли;
СтруктураОтбора.Вставить("Партия", НоваяСтрока.Партия);
МассивДанныхНДС = РезультатЗапросаПоПартиямНДС.Скопировать(СтруктураОтбора);
Если МассивДанныхНДС.Количество() <> 0 Тогда
Если МассивДанныхНДС.Итог("Количество") = 0 Тогда
Коэфф = 1;
Иначе
Коэфф = НоваяСтрока.Количество/МассивДанныхНДС.Итог("Количество");
КонецЕсли;
Для НС=1 По МассивДанныхНДС.Количество() Цикл
НоваяСтрокаНДС = ТаблицаДанныхНДС.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаНДС,МассивДанныхНДС.Получить(НС-1));
НоваяСтрокаНДС.Ключ = НоваяСтрока.Ключ;
НоваяСтрокаНДС.НомерСтрокиТЧ = НС;
НоваяСтрокаНДС.Количество = НоваяСтрокаНДС.Количество*Коэфф;
НоваяСтрокаНДС.Стоимость = НоваяСтрокаНДС.Стоимость*Коэфф;
НоваяСтрокаНДС.НДС = НоваяСтрокаНДС.НДС*Коэфф;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТаблицаДанных.Количество() <> 0 Тогда
ВходящиеДанные = Новый Структура("НеОчищать, Комментарий, Организация, ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете, ОтражатьПоСпециальнымРегистрам, ПодразделениеОрганизации, РазделУчета, ОС, НМА, БухСправка, ДанныеПоСФ, ДанныеПоСФНДС, ДопРасходыИП, ДопРасходыУСН, МПЗОтгруженные, МПЗПриобретенные, МПЗРеализованныеИП, МПЗРеализованныеУСН, Обороты, ПрочиеРасходыИП, РасходыБудущихПериодов, РасчетыПоЗаработнойПлате, РасчетыПоНалогамИСборам, РасчетыСКонтрагентами, РасчетыСПодотчетнымиЛицами, УслугиУСН");
//Если выгружается первая порция, то очищаем ТЧ, иначе не очищаем
Если СчетчикПорций = 1 Тогда
ВходящиеДанные.НеОчищать = Ложь;
Иначе
ВходящиеДанные.НеОчищать = Истина;
КонецЕсли;
ВходящиеДанные.Организация = ТекОрганизация;
ВходящиеДанные.ОтражатьВБухгалтерскомУчете = Истина;
ВходящиеДанные.ОтражатьВНалоговомУчете = Истина;
ВходящиеДанные.ОтражатьПоСпециальнымРегистрам = Истина;
ВходящиеДанные.ПодразделениеОрганизации = Справочники.ПодразделенияОрганизаций.ПустаяСсылка();
ВходящиеДанные.РазделУчета = Перечисления.РазделыУчетаДляВводаОстатков[РазделУчета];
ВходящиеДанные.МПЗПриобретенные = ТаблицаДанных;
ВходящиеДанные.ДанныеПоСФ = ТаблицаДанныхНДС;
ВходящиеДанные.Комментарий = "#Счет учета: """ + Строка(ТекСчетУчета) + """# #Раздел учета """ + Строка(Перечисления.РазделыУчетаДляВводаОстатков[РазделУчета]) + """# #Перенесено из 1С:Бухгалтерии 8, ред. 1.6#";
//Дополнение входящих данных пустыми таблицами
ВходящиеДанные.ОС = Новый ТаблицаЗначений;
ВходящиеДанные.НМА = Новый ТаблицаЗначений;
ВходящиеДанные.РасчетыПоНалогамИСборам = Новый ТаблицаЗначений;
ВходящиеДанные.РасчетыСПодотчетнымиЛицами = Новый ТаблицаЗначений;
ВходящиеДанные.БухСправка = Новый ТаблицаЗначений;
ВходящиеДанные.РасчетыСКонтрагентами = Новый ТаблицаЗначений;
ВходящиеДанные.РасчетыПоЗаработнойПлате = Новый ТаблицаЗначений;
ВходящиеДанные.МПЗОтгруженные = Новый ТаблицаЗначений;
ВходящиеДанные.Обороты = Новый ТаблицаЗначений;
ВходящиеДанные.ДанныеПоСФНДС = Новый ТаблицаЗначений;
ВходящиеДанные.РасходыБудущихПериодов = Новый ТаблицаЗначений;
ВходящиеДанные.МПЗРеализованныеИП = Новый ТаблицаЗначений;
ВходящиеДанные.ДопРасходыИП = Новый ТаблицаЗначений;
ВходящиеДанные.ПрочиеРасходыИП = Новый ТаблицаЗначений;
ВходящиеДанные.МПЗРеализованныеУСН = Новый ТаблицаЗначений;
ВходящиеДанные.ДопРасходыУСН = Новый ТаблицаЗначений;
ВходящиеДанные.УслугиУСН = Новый ТаблицаЗначений;
//***
ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ВводНачальныхОстатковНаДату");
КонецЕсли;
КонецЦикла;
//Если осталась последняя неполная порция то выгружаем ее
Если КоличествоПорцийЦел < Количество Тогда
//Очищаем таблицы данных
ТаблицаДанных.Очистить();
ТаблицаДанныхНДС.Очистить();
//Вычисляем начало и конец выгружаемого диапазона
Начало = КоличествоПорций * РазмерПорции + 1;
Конец = Количество;
Для Н = Начало По Конец Цикл
НоваяСтрока = ТаблицаДанных.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,МассивДанных.Получить(Н-1));
НоваяСтрока.Ключ = Н;
НоваяСтрока.НомерСтрокиТЧ = Н;
Если Предприниматель Тогда
Если НоваяСтрока.ХарактерДеятельности = Неопределено Тогда
НоваяСтрока.ХарактерДеятельности = ОсновнойХарактерДеятельности;
КонецЕсли;
Если НоваяСтрока.НоменклатурнаяГруппа = Неопределено Тогда
НоваяСтрока.НоменклатурнаяГруппа = ОсновнаяНоменклатурнаяГруппа;
КонецЕсли;
КонецЕсли;
//Формируем таблицу по партиям НДС
Если РезультатЗапросаПоПартиямНДС.Количество() <> 0 Тогда
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Организация", ТекОрганизация);
СтруктураОтбора.Вставить("СчетУчета", ТекСчетУчета);
СтруктураОтбора.Вставить("Номенклатура", НоваяСтрока.Номенклатура);
Если Параметры.ВестиСуммовойУчетПоСкладамБУ Тогда
СтруктураОтбора.Вставить("Склад", НоваяСтрока.Склад);
КонецЕсли;
СтруктураОтбора.Вставить("Партия", НоваяСтрока.Партия);
МассивДанныхНДС = РезультатЗапросаПоПартиямНДС.Скопировать(СтруктураОтбора);
Если МассивДанныхНДС.Количество() <> 0 Тогда
Если МассивДанныхНДС.Итог("Количество") = 0 Тогда
Коэфф = 1;
Иначе
Коэфф = НоваяСтрока.Количество/МассивДанныхНДС.Итог("Количество");
КонецЕсли;
Для НС=1 По МассивДанныхНДС.Количество() Цикл
НоваяСтрокаНДС = ТаблицаДанныхНДС.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаНДС,МассивДанныхНДС.Получить(НС-1));
НоваяСтрокаНДС.Ключ = НоваяСтрока.Ключ;
НоваяСтрокаНДС.НомерСтрокиТЧ = НС;
НоваяСтрокаНДС.Количество = НоваяСтрокаНДС.Количество*Коэфф;
НоваяСтрокаНДС.Стоимость = НоваяСтрокаНДС.Стоимость*Коэфф;
НоваяСтрокаНДС.НДС = НоваяСтрокаНДС.НДС*Коэфф;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТаблицаДанных.Количество() <> 0 Тогда
ВходящиеДанные = Новый Структура("НеОчищать, Комментарий, Организация, ОтражатьВБухгалтерскомУчете, ОтражатьВНалоговомУчете, ОтражатьПоСпециальнымРегистрам, ПодразделениеОрганизации, РазделУчета, ОС, НМА, БухСправка, ДанныеПоСФ, ДанныеПоСФНДС, ДопРасходыИП, ДопРасходыУСН, МПЗОтгруженные, МПЗПриобретенные, МПЗРеализованныеИП, МПЗРеализованныеУСН, Обороты, ПрочиеРасходыИП, РасходыБудущихПериодов, РасчетыПоЗаработнойПлате, РасчетыПоНалогамИСборам, РасчетыСКонтрагентами, РасчетыСПодотчетнымиЛицами, УслугиУСН");
//Если выгружается первая порция, то очищаем ТЧ, иначе не очищаем
Если СчетчикПорций = 1 Тогда
ВходящиеДанные.НеОчищать = Ложь;
Иначе
ВходящиеДанные.НеОчищать = Истина;
КонецЕсли;
ВходящиеДанные.НеОчищать = Истина;
ВходящиеДанные.Организация = ТекОрганизация;
ВходящиеДанные.ОтражатьВБухгалтерскомУчете = Истина;
ВходящиеДанные.ОтражатьВНалоговомУчете = Истина;
ВходящиеДанные.ОтражатьПоСпециальнымРегистрам = Истина;
ВходящиеДанные.ПодразделениеОрганизации = Справочники.ПодразделенияОрганизаций.ПустаяСсылка();
ВходящиеДанные.РазделУчета = Перечисления.РазделыУчетаДляВводаОстатков[РазделУчета];
ВходящиеДанные.МПЗПриобретенные = ТаблицаДанных;
ВходящиеДанные.ДанныеПоСФ = ТаблицаДанныхНДС;
ВходящиеДанные.Комментарий = "#Счет учета: """ + Строка(ТекСчетУчета) + """# #Раздел учета """ + Строка(Перечисления.РазделыУчетаДляВводаОстатков[РазделУчета]) + """# #Перенесено из 1С:Бухгалтерии 8, ред. 1.6#";
//Дополнение входящих данных пустыми таблицами
ВходящиеДанные.ОС = Новый ТаблицаЗначений;
ВходящиеДанные.НМА = Новый ТаблицаЗначений;
ВходящиеДанные.РасчетыПоНалогамИСборам = Новый ТаблицаЗначений;
ВходящиеДанные.РасчетыСПодотчетнымиЛицами = Новый ТаблицаЗначений;
ВходящиеДанные.БухСправка = Новый ТаблицаЗначений;
ВходящиеДанные.РасчетыСКонтрагентами = Новый ТаблицаЗначений;
ВходящиеДанные.РасчетыПоЗаработнойПлате = Новый ТаблицаЗначений;
ВходящиеДанные.МПЗОтгруженные = Новый ТаблицаЗначений;
ВходящиеДанные.Обороты = Новый ТаблицаЗначений;
ВходящиеДанные.ДанныеПоСФНДС = Новый ТаблицаЗначений;
ВходящиеДанные.РасходыБудущихПериодов = Новый ТаблицаЗначений;
ВходящиеДанные.МПЗРеализованныеИП = Новый ТаблицаЗначений;
ВходящиеДанные.ДопРасходыИП = Новый ТаблицаЗначений;
ВходящиеДанные.ПрочиеРасходыИП = Новый ТаблицаЗначений;
ВходящиеДанные.МПЗРеализованныеУСН = Новый ТаблицаЗначений;
ВходящиеДанные.ДопРасходыУСН = Новый ТаблицаЗначений;
ВходящиеДанные.УслугиУСН = Новый ТаблицаЗначений;
//***
ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ВводНачальныхОстатковНаДату");
КонецЕсли;
КонецЕсли;
КонецЦикла;