У меня получилось где-то так
:
Процедура ОбработкаПроведения()
ФлагОтказа = 0;
ТабЗначИтоги = СоздатьОбъект("ТаблицаЗначений");
ТЗТабЧасть = СоздатьОбъект("ТаблицаЗначений");
ТабЗначИтогиСвернуто = СоздатьОбъект("ТаблицаЗначений");
спТовары=СоздатьОбъект("СписокЗначений");
ВыгрузитьТабличнуюЧасть(спТовары,"Товар");
Рег=СоздатьОбъект("Регистр.ТоварыНаСкладе");
Рег.УстановитьЗначениеФильтра("Товар",спТовары,2);
Рег.ВременныйРасчет();
РассчитатьРегистрыНа(ТекущийДокумент());
Рег.ВыгрузитьИтоги(ТабЗначИтоги,1,1);
ТабЗначИтоги.Сортировать("Товар*");
ВыгрузитьТабличнуюЧасть(ТЗТабЧасть);
ТЗТабЧасть.Свернуть("Товар", "Количество, Сумма");
ТабЗначИтоги.Выгрузить(ТабЗначИтогиСвернуто,,,"Товар, Количество, Сумма");
ТабЗначИтогиСвернуто.Свернуть("Товар", "Количество, Сумма");
ТЗТабЧасть.ВыбратьСтроки();
Пока ТЗТабЧасть.ПолучитьСтроку()=1 Цикл
ВсегоСписать = ТЗТабЧасть.Количество;
ОсталосьСписать = ВсегоСписать;
НС=0;
НК=0;
Если ТабЗначИтогиСвернуто.НайтиЗначение(ТЗТабЧасть.Товар, НС, НК)=1 Тогда
ТабЗначИтогиСвернуто.ПолучитьСтрокуПоНомеру(НС);
Если ТабЗначИтогиСвернуто.Количество < ТЗТабЧасть.Количество Тогда
НеХватает = ТЗТабЧасть.Количество - ТабЗначИтогиСвернуто.Количество;
Сообщить("Не хватает товара "+ТЗТабЧасть.Товар+" в количествое "+НеХватает, "!");
ФлагОтказа = 1;
КонецЕсли;
Иначе
Сообщить("По товару "+ТЗТабЧасть.Товар+" остаток = 0", "!");
ФлагОтказа = 1;
КонецЕсли;
Если ФлагОтказа <> 1 Тогда
НС=0;
Если ТабЗначИтоги.НайтиЗначение(ТЗТабЧасть.Товар,НС,"Товар")=1 Тогда
ТабЗначИтоги.ПолучитьСтрокуПоНомеру(НС);
КонецЕсли;
а = 1;
Пока ТабЗначИтоги.Товар = ТЗТабЧасть.Товар Цикл
ОстатокТовара = ТабЗначИтоги.Количество;
СписываемыйОстатокТовара = Мин(ОсталосьСписать, ОстатокТовара);
Регистр.ТоварыНаСкладе.ПривязыватьСтроку(а);
Регистр.ТоварыНаСкладе.Товар = ТабЗначИтоги.Товар;
Регистр.ТоварыНаСкладе.Партия = ТабЗначИтоги.Партия;
Регистр.ТоварыНаСкладе.Количество = СписываемыйОстатокТовара;
Регистр.ТоварыНаСкладе.Сумма = ТабЗначИтоги.Сумма / ТабЗначИтоги.Количество * СписываемыйОстатокТовара;
Регистр.ТоварыНаСкладе.ДвижениеРасходВыполнить();
ОсталосьСписать = ОсталосьСписать - СписываемыйОстатокТовара;
Если ОсталосьСписать = 0 Тогда
Прервать;
КонецЕсли;
НС = НС+1;
ТабЗначИтоги.ПолучитьСтрокуПоНомеру(НС);
а = а+1;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ФлагОтказа = 1 Тогда
Сообщить("Документ не проведён!", "!!!");
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры