kris_1
04.08.2012, 19:47
Почему в результате выполнения запроса "ВыборкаНоменклатура.Колич� �ствоОстаток" становится равное нулюИИ хотя на самом деле это не такИИ Помогите разобраться, плииииз!!!!!
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиНоменклат� �ры.Записывать = Истина;
// ОБЕСПЕЧЕНИЕ НЕИЗМЕННОСТИ ДАННЫХ МЕЖДУ РАСЧЕТОМ И ОКОНЧАНИЕМ ПРОВЕДЕНИЯ
Блокировка=Новый БлокировкаДанных;
ЭлементБлокировки=Блокиро� �ка.Добавить("РегистрНакопления.Остатки� �оменклатуры");
ЭлементБлокировки.Режим=Ре жимБлокировкиДанных.Исклю� �ительный;
ЭлементБлокировки.Источни� �Данных=Товары.Выгрузить(,"Номенклатура");
ЭлементБлокировки.Использ� �ватьИзИсточникаДанных("Номенклатура","Номенклатура");
Блокировка.Заблокировать();
//УДАЛЕНИЕ СОБСТВЕННЫХ СТАРЫХ ДВИЖЕНИЙ ПО РЕГИСТРУ ОСТАТКИ НОМЕНКЛАТУРЫ
Движения.ОстаткиНоменклат� �ры.Записать();
//ПОЛУЧЕНИЕ ДАННЫХ ПО ТОВАРАМ
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| РасходнаяНакладнаяТовары.� �оменклатура КАК Номенклатура,
| СУММА(РасходнаяНакладнаяТ� �вары.Количество) КАК Количество
|ПОМЕСТИТЬ ТабДок
|ИЗ
| Документ.РасходнаяНакладн� �я.Товары КАК РасходнаяНакладнаяТовары
|ГДЕ
| РасходнаяНакладнаяТовары.� �сылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.� �оменклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТабДок.Номенклатура КАК Номенклатура,
| ТабДок.Количество КАК Количество,
| ЕСТЬNULL(ОстаткиНоменклатур� �Остатки.СуммаВрубляхОстат ок, 0) КАК СуммаВрубляхОстаток,
| ЕСТЬNULL(ОстаткиНоменклатур� �Остатки.СуммаВВалютеОстат ок, 0) КАК СуммаВВалютеОстаток,
| ЕСТЬNULL(ОстаткиНоменклатур� �Остатки.КоличествоОстаток , 0) КАК КоличествоОстаток
|ИЗ
| ТабДок КАК ТабДок
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки� �оменклатуры.Остатки(
| &Момент,
| Номенклатура В
| (ВЫБРАТЬ
| ТабДок.Номенклатура
| ИЗ
| ТабДок КАК ТабДок)) КАК ОстаткиНоменклатурыОстатк и
| ПО ТабДок.Номенклатура = ОстаткиНоменклатурыОстатк и.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура
|ИТОГИ
| МАКСИМУМ(Количество),
| СУММА(СуммаВрубляхОстаток) ,
| СУММА(СуммаВВалютеОстаток) ,
| СУММА(КоличествоОстаток)
|ПО
| Номенклатура";
Если Режим=РежимПроведенияДоку� �ента.Оперативный Тогда
Запрос.УстановитьПараметр("Момент", Неопределено);
Иначе
Запрос.УстановитьПараметр("Момент", МоментВремени());
КонецЕсли;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат=Запрос.Выполнить ();
ВыборкаНоменклатура=Резул� �тат.Выбрать(ОбходРезульта� �аЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следу� �щий() Цикл
//КОНТРОЛЬ ОТРИЦАТЕЛЬНЫХ ОСТАТКОВ СПИСЫВАЕМЫХ ТОВАРОВ
Если ВыборкаНоменклатура.Колич� �ство > ВыборкаНоменклатура.Колич� �ствоОстаток Тогда
Отказ=Истина;
Сообщение=Новый СообщениеПользователю;
Нехватка=ВыборкаНоменклат� �ра.Количество-ВыборкаНоменклатура.Колич� �ствоОстаток;
Сообщение.Текст="В документе №"+Номер+" от "+Дата+" не хватает "+Нехватка+" единиц товара "+ВыборкаНоменклатура.Номен клатура;
Сообщение.Сообщить();
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
...
т.е. получается, что остатки равны нулю, а это не так, и всегда будет выводиться сообщения, что не хватает товара...(((((( почемуИИИ?
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиНоменклат� �ры.Записывать = Истина;
// ОБЕСПЕЧЕНИЕ НЕИЗМЕННОСТИ ДАННЫХ МЕЖДУ РАСЧЕТОМ И ОКОНЧАНИЕМ ПРОВЕДЕНИЯ
Блокировка=Новый БлокировкаДанных;
ЭлементБлокировки=Блокиро� �ка.Добавить("РегистрНакопления.Остатки� �оменклатуры");
ЭлементБлокировки.Режим=Ре жимБлокировкиДанных.Исклю� �ительный;
ЭлементБлокировки.Источни� �Данных=Товары.Выгрузить(,"Номенклатура");
ЭлементБлокировки.Использ� �ватьИзИсточникаДанных("Номенклатура","Номенклатура");
Блокировка.Заблокировать();
//УДАЛЕНИЕ СОБСТВЕННЫХ СТАРЫХ ДВИЖЕНИЙ ПО РЕГИСТРУ ОСТАТКИ НОМЕНКЛАТУРЫ
Движения.ОстаткиНоменклат� �ры.Записать();
//ПОЛУЧЕНИЕ ДАННЫХ ПО ТОВАРАМ
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| РасходнаяНакладнаяТовары.� �оменклатура КАК Номенклатура,
| СУММА(РасходнаяНакладнаяТ� �вары.Количество) КАК Количество
|ПОМЕСТИТЬ ТабДок
|ИЗ
| Документ.РасходнаяНакладн� �я.Товары КАК РасходнаяНакладнаяТовары
|ГДЕ
| РасходнаяНакладнаяТовары.� �сылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.� �оменклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТабДок.Номенклатура КАК Номенклатура,
| ТабДок.Количество КАК Количество,
| ЕСТЬNULL(ОстаткиНоменклатур� �Остатки.СуммаВрубляхОстат ок, 0) КАК СуммаВрубляхОстаток,
| ЕСТЬNULL(ОстаткиНоменклатур� �Остатки.СуммаВВалютеОстат ок, 0) КАК СуммаВВалютеОстаток,
| ЕСТЬNULL(ОстаткиНоменклатур� �Остатки.КоличествоОстаток , 0) КАК КоличествоОстаток
|ИЗ
| ТабДок КАК ТабДок
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки� �оменклатуры.Остатки(
| &Момент,
| Номенклатура В
| (ВЫБРАТЬ
| ТабДок.Номенклатура
| ИЗ
| ТабДок КАК ТабДок)) КАК ОстаткиНоменклатурыОстатк и
| ПО ТабДок.Номенклатура = ОстаткиНоменклатурыОстатк и.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура
|ИТОГИ
| МАКСИМУМ(Количество),
| СУММА(СуммаВрубляхОстаток) ,
| СУММА(СуммаВВалютеОстаток) ,
| СУММА(КоличествоОстаток)
|ПО
| Номенклатура";
Если Режим=РежимПроведенияДоку� �ента.Оперативный Тогда
Запрос.УстановитьПараметр("Момент", Неопределено);
Иначе
Запрос.УстановитьПараметр("Момент", МоментВремени());
КонецЕсли;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат=Запрос.Выполнить ();
ВыборкаНоменклатура=Резул� �тат.Выбрать(ОбходРезульта� �аЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следу� �щий() Цикл
//КОНТРОЛЬ ОТРИЦАТЕЛЬНЫХ ОСТАТКОВ СПИСЫВАЕМЫХ ТОВАРОВ
Если ВыборкаНоменклатура.Колич� �ство > ВыборкаНоменклатура.Колич� �ствоОстаток Тогда
Отказ=Истина;
Сообщение=Новый СообщениеПользователю;
Нехватка=ВыборкаНоменклат� �ра.Количество-ВыборкаНоменклатура.Колич� �ствоОстаток;
Сообщение.Текст="В документе №"+Номер+" от "+Дата+" не хватает "+Нехватка+" единиц товара "+ВыборкаНоменклатура.Номен клатура;
Сообщение.Сообщить();
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
...
т.е. получается, что остатки равны нулю, а это не так, и всегда будет выводиться сообщения, что не хватает товара...(((((( почемуИИИ?