|
Ошибка в расчете остатков при перепроведении документа | ☑ | ||
---|---|---|---|---|
0
Meskon
01.09.11
✎
14:45
|
Платформа 8.2.11.236
Конфигурация Комплексная автоматизация, редакция 1.1 (1.1.1.1) Есть проведенное Перемещение товаров, которое списывает некий товар из резерва и перемещает его на другой склад. Если в проведенном документе нажать ОК или провести, то при расчете резервов считает что резервы уже списаны. Получаем что то вроде КСнятиюСРезерва=100, Врезерве=0 и перемещение не проводится. Если проводить непроведенный документ, никаких проблем не возникает. Расчет происходит в общем модуле контроля остатков. Вопрос.. Это косяк релиза? И как лучше исправить подобную ситуацию? Переписывать модуль контроля остатков не очень бы хотелось. Аналогичные проблемы возникают в реализации из резерва и еще некоторых документах. |
|||
1
Рэйв
01.09.11
✎
14:49
|
В модуль контроля остатков скорее всего передается параметром момент или дата на которую идет проверка. Скорее всего док включает свои движения. Сделай чтобы передавалась граница из момента времени дока с видом "Исключая"
|
|||
2
Meskon
01.09.11
✎
15:08
|
В сам модуль передается структура, в которой есть дата. Но в самом условии в запросе даты нет. Привожу текст запроса:
ВЫБРАТЬ // Запрос, контролирующий остатки на складах Док.Номенклатура КАК Номенклатура, Док.Номенклатура.Представление КАК НоменклатураПредставление, Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление, Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ПРЕДСТАВЛЕНИЕ(Док.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатурыПредставление, &ПустаяСерия КАК СерияНоменклатуры, ПРЕДСТАВЛЕНИЕ(&ПустаяСерия) КАК СерияНоменклатурыПредставление, Док.ДокументРезерва КАК ДокументРезерва, Сумма(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) КАК ДокументКоличество, &Склад КАК Склад, ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) КАК РезервыКоличество ИЗ Документ.ПеремещениеТоваров.Товары КАК Док ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(,Склад = &Склад И ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) И (Номенклатура, ДокументРезерва) В ( ВЫБРАТЬ Док.Номенклатура КАК Номенклатура, Док.ДокументРезерва КАК ДокументРезерва ИЗ Документ.ПеремещениеТоваров.Товары КАК Док ГДЕ Док.Ссылка = &ДокументСсылка И НЕ Док.Номенклатура.Комплект И Док.ДокументРезерва НЕ в (&МассивПустыхСсылок) И (Док.ДокументРезерва ССЫЛКА Документ.ЗаказПокупателя ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ВнутреннийЗаказ ИЛИ Док.ДокументРезерва ССЫЛКА Документ.МаршрутныйЛист ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ЗаказНаПроизводство ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары) )) КАК Резервы ПО Резервы.Номенклатура = Док.Номенклатура И Резервы.ДокументРезерва = Док.ДокументРезерва //СОЕДИНЕНИЕ_Характеристика_Остатки// И Резервы.ХарактеристикаНоменклатуры = Док.ХарактеристикаНоменклатуры //СОЕДИНЕНИЕ_Серия_Остатки// И (Резервы.СерияНоменклатуры = Док.СерияНоменклатуры ИЛИ (НЕ ЕстьNull(ВЫРАЗИТЬ(Док.ДокументРезерва КАК Документ.ЗаказПокупателя).ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей,ложь))) ГДЕ Не Док.Номенклатура.Комплект И Док.Ссылка = &ДокументСсылка И Док.ДокументРезерва НЕ в (&МассивПустыхСсылок) И (Док.ДокументРезерва ССЫЛКА Документ.ЗаказПокупателя ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ВнутреннийЗаказ ИЛИ Док.ДокументРезерва ССЫЛКА Документ.МаршрутныйЛист ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ЗаказНаПроизводство ИЛИ Док.ДокументРезерва ССЫЛКА Документ.ПриходныйОрдерНаТовары) СГРУППИРОВАТЬ ПО Док.Номенклатура, Док.ХарактеристикаНоменклатуры, &ПустаяСерия, //Сгруппировать_Серия Док.ДокументРезерва ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) < Сумма(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3))) ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы |
|||
3
catena
01.09.11
✎
15:12
|
Остатки берутся на текущую дату. А у документа, видимо, не стоит "удалять движения"
|
|||
4
Рэйв
01.09.11
✎
15:12
|
ууу...
Только оперативная проверка остатков. В сове время я на долго плевался в УПП. Пришлось выинуть на помойку всю эту проверку и прикрутить сбоку свою. Если работаете задним числом - советую сделать так же. |
|||
5
Meskon
01.09.11
✎
15:38
|
>Остатки берутся на текущую дату. А у документа, видимо, не стоит "удалять движения"
Именно так >ууу... Только оперативная проверка остатков. В сове время я на долго плевался в УПП. Пришлось выинуть на помойку всю эту проверку и прикрутить сбоку свою. Если работаете задним числом - советую сделать так же. Можете свою привести в пример? |
|||
6
Рэйв
01.09.11
✎
15:49
|
(5)я б с удовольствием, но под рукой нету.
принцип могу рассказать. 1.Снимаешь два остатка. На момент документа и на тек. дату 2. Берешь минимальный из них. 3. По этому минимальному проверяешь хватает ли остатков для списания. при такой схеме никогда в минус не уйдешь и все будет четко и правильно работать |
|||
7
Meskon
01.09.11
✎
15:51
|
Спасибо, попробую
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |