Доброе утро!
Объясните пожалуйста почему не срабатывает контроль остатков...если попытаться списать больше чем есть на складе то при первом проведение документ проводится и ошибка не возникает, а если тот же документ провести повторно то все нормально отрабатывает...
Вот код:

Процедура ОбработкаПроведения(Отказ, Режим)

 // регистр ОстаткиМатериалов Расход
 Движения.ОстаткиМатериалов.Записывать = Истина;
 Для Каждого ТекСтрокаСтандартныеИзделия Из СтандартныеИзделия Цикл
  Движение = Движения.ОстаткиМатериалов.Добавить();
  Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
  Движение.Период = Дата;
  Движение.ПоступившыеМатериалы = ТекСтрокаСтандартныеИзделия.Комплектующая;
  Движение.Склад = Склад;
  Движение.ФактическоеКоличество = ТекСтрокаСтандартныеИзделия.Количество;
 КонецЦикла;

 //Внесения в регистр комплекта
  Движения.ОстаткиМатериалов.Записывать = Истина;
  Движение = Движения.ОстаткиМатериалов.Добавить();
  Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
  Движение.Период = Дата;
  Движение.ПоступившыеМатериалы = Наименование ;
  Движение.Склад = Склад;
  Движение.ФактическоеКоличество =Количество;

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

   РезультатЗапроса = Запрос.Выполнить();

     Если Не РезультатЗапроса.Пустой() Тогда
      Отказ = Истина;

      ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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