|
Помогите пожалуйста разобраться с контролем остатков. | ☑ | ||
---|---|---|---|---|
0
MihaSerb
24.03.13
✎
17:35
|
Доброе время суток, подксажите пожалуйста новечку сделать контроль остатков,при создании документа расходная накладная берем товар со склада где имеется товар и со склада где нет товара документ проходит, а если создать два документа то со складом где нехватает товара выдается ошибка, подскажите пожалуйста а то уже запутался голова кругом)))
Процедура ОбработкаПроведения(Отказ, Режим) Движения.ТоварыНаСкладе.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; // Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК Сумма, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество, | РасходнаяНакладнаяТовары.Склад, | РасходнаяНакладная.Ссылка |ПОМЕСТИТЬ ДокТЧ |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная | ПО РасходнаяНакладнаяТовары.Ссылка = РасходнаяНакладная.Ссылка |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад, | РасходнаяНакладная.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ДокТЧ.Номенклатура, | ДокТЧ.Склад, | ДокТЧ.Сумма, | ДокТЧ.Количество |ИЗ | ДокТЧ КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ТоварыНаСкладе.Остатки( | , | (Номенклатура, Склад) В | (ВЫБРАТЬ | ДокТЧ.Номенклатура, ДокТЧ.Склад | ИЗ | ДокТЧ КАК ДокТЧ)) КАК ТоварыНаСкладеОстатки | | ПО ТоварыНаСкладеОстатки.Номенклатура = ДокТЧ.Номенклатура"; // открой и сохрани запрос конструктором Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.Количество > ВыборкаДетальныеЗаписи.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + ВыборкаДетальныеЗаписи.Номенклатура + " из " + ВыборкаДетальныеЗаписи.Количество + " есть только "+ ВыборкаДетальныеЗаписи.КоличествоОстаток; Сообщение.Сообщить(); отказ = истина; КонецЕсли; Если отказ = Истина Тогда Продолжить; КонецЕсли; Движение = Движения.ТоварыНаСкладе.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*ВыборкаДетальныеЗаписи.Количество; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; КонецПроцедуры |
|||
1
GANR
24.03.13
✎
18:21
|
(0) во 2-м запросе пакета замени условие левого соединения
ПО ТоварыНаСкладеОстатки.Номенклатура = ДокТЧ.Номенклатура на такое ПО ТоварыНаСкладеОстатки.Номенклатура = ДокТЧ.Номенклатура И ТоварыНаСкладеОстатки.Склад = ДокТЧ.Склад и ещё: выкинь из 1-го запроса присоединяемую таблицу Документ.РасходнаяНакладная - её данные нигде не используются |
|||
2
Cthulhu
24.03.13
✎
18:25
|
(1): "её данные" используются в третьем "СГРУППИРОВАТЬ ПО ... РасходнаяНакладная.Ссылка" первого запроса. Т.е. ещё и внем заменить на "СГРУППИРОВАТЬ ПО ... РасходнаяНакладнаяТовары.Ссылка"
|
|||
3
GANR
24.03.13
✎
18:31
|
(2) группировку по Ссылка вообще выкинуть
|
|||
4
GANR
24.03.13
✎
18:37
|
(0) все понятно?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |