Подскажите пожалуйста я правильно обработку проведения в документе реализация организовал? (извините что так, не нашел как файл прикреплять)
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Продажи.Очистить();
Движения.Продажи.Записывать = Истина;
Движения.ОстаткиНоменклатуры.Очистить();
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиНоменклатуры.Записать();
КонецЕсли;
Блокировка = Новый БлокировкаДанных; //Накладываем блокировку
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; //источник фильтра блокировки
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); // сопосталяем данные между измерением регистра и колонкой таб части
Блокировка.Заблокировать();
МетодСписания = РегистрыСведений.МетодСписания.ПолучитьПоследнее(рабочаядата)["МетодСписания"];
Если МетодСписания = Перечисления.УчетнаяПолитика.ФИФО Тогда
Убыв = "";
Иначе
Убыв = "УБЫВ";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| МАКСИМУМ(РасходнаяНакладнаяСписокНоменклатуры.НомерСтроки) КАК НомерСтроки,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
|ПОМЕСТИТЬ ТоварыКСписанию
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТоварыКСписанию.Номенклатура КАК Номенклатура,
| ТоварыКСписанию.Количество КАК КоличествоКСписанию,
| ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток,
| ОстаткиНоменклатурыОстатки.Партия КАК Партия,
| ТоварыКСписанию.НомерСтроки КАК НомерСтроки,
| ТоварыКСписанию.Сумма КАК СуммаКСписанию
|ИЗ
| ТоварыКСписанию КАК ТоварыКСписанию
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(&Период, ) КАК ОстаткиНоменклатурыОстатки
| ПО ТоварыКСписанию.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Партия "+Убыв+"
|ИТОГИ
| МАКСИМУМ(КоличествоКСписанию),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток),
| МАКСИМУМ(НомерСтроки),
| МАКСИМУМ(СуммаКСписанию)
|ПО
| Номенклатура";
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Запрос.УстановитьПараметр("Период",МоментВремени());
Результат = Запрос.Выполнить();
ВыборкаПоНоменклатуре = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Номенклатура"); // обходим по номенклатуре
Пока ВыборкаПоНоменклатуре.Следующий() Цикл
Если ВыборкаПоНоменклатуре.КоличествоКСписанию > ВыборкаПоНоменклатуре.КоличествоОстаток Тогда //проверяем есть ли вообще нужное количество
Сообщение = Новый СообщениеПользователю;
Сообщение.Поле = "СписокНоменклатуры["+(ВыборкаПоНоменклатуре.НомерСтроки-1)+"].Количество";
Сообщение.Текст = "На складе: "+ВыборкаПоНоменклатуре.КоличествоОстаток+" нехватает: " + (ВыборкаПоНоменклатуре.КоличествоКСписанию-ВыборкаПоНоменклатуре.КоличествоОстаток);
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
Иначе //Если нужное количество есть
Если Отказ Тогда // Если хоть одной номенклатуры нехватает проводить остальные смысла нет
Продолжить; // Передаём управление в начало цикла чтобы продолжить проверку остальной номенклатуры
КонецЕсли;
НужноСписать = ВыборкаПоНоменклатуре.КоличествоКСписанию;
Партии = ВыборкаПоНоменклатуре.Выбрать(); // проваливаемся в группировку и начинаем цикл по партиям
Пока Партии.Следующий() и НужноСписать > 0 Цикл
Списываем = МИН(НужноСписать,Партии.КоличествоОстаток);
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Активность = Истина;
Движение.Регистратор = Ссылка;
Движение.Период = Дата;
Движение.Партия = Партии.Партия;
Движение.Количество = Списываем;
Движение.Номенклатура= Партии.Номенклатура;
Движение.Сумма = Партии.СуммаОстаток*Списываем/Партии.КоличествоОстаток;
НужноСписать = НужноСписать - Списываем;
КонецЦикла;
//Добавим движения по Регистру продажи
ДвижениеПродажи = Движения.Продажи.Добавить();
ДвижениеПродажи.Активность = Истина;
ДвижениеПродажи.Регистратор = Ссылка;
ДвижениеПродажи.Период = Дата;
ДвижениеПродажи.Номенклатура = ВыборкаПоНоменклатуре.Номенклатура;
ДвижениеПродажи.Количество = ВыборкаПоНоменклатуре.КоличествоКСписанию;
ДвижениеПродажи.Сумма = ВыборкаПоНоменклатуре.СуммаКСписанию;
КонецЕсли;
КонецЦикла;
КонецПроцедуры