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