|
Двойное списание номенклатуры | ☑ | ||
---|---|---|---|---|
0
myr4ik07
10.09.14
✎
14:48
|
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина; Движения.СтоимостьМатериалов.Записывать = Истина; Движения.Продажи.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры, | СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе, | СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе, | ОказаниеУслугиПереченьНоменклатуры.НаборСвойств |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры |ГДЕ | ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры, | ОказаниеУслугиПереченьНоменклатуры.НаборСвойств"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВТ; Запрос2.Текст = "ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.ВидНоменклатуры, | НоменклатураДокумента.КоличествоВДокументе, | НоменклатураДокумента.СуммаВДокументе, | ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость, | ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество, | ОстаткиМатериаловОстатки.НаборСвойств |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки( | , | Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки | ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки( | , | Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки | ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал"; Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина; Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина; Движения.СтоимостьМатериалов.Записать(); Движения.ОстаткиМатериалов.Записать(); Результат = Запрос2.Выполнить(); ТЗ = Результат.Выгрузить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда СтоимостьМатериала = 0; Иначе СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество; КонецЕсли; Если ВыборкаДетальныеЗаписи.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = Склад; Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; Движение = Движения.СтоимостьМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * СтоимостьМатериала; КонецЕсли; Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Клиент = Клиент; Движение.Мастер = Мастер; Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе; Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе; Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ОстаткиМатериаловОстатки.Материал, | ОстаткиМатериаловОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки( | , | Материал В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента) | И Склад = &Склад) КАК ОстаткиМатериаловОстатки |ГДЕ | ОстаткиМатериаловОстатки.КоличествоОстаток < 0"; Запрос3.УстановитьПараметр("Склад", Склад); Результат = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала" + """" + ВыборкаДетальныеЗаписи. Материал + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла;; КонецЕсли; КонецПроцедуры почему при реализации товара списывается одна номенклатура два раза? |
|||
1
Wobland
10.09.14
✎
14:50
|
предлагаешь почувствовать себя в роли отладчика?
|
|||
2
myr4ik07
10.09.14
✎
14:52
|
та не могу разобраться (1)
|
|||
3
myr4ik07
10.09.14
✎
14:53
|
в регистр попадает два количества одной номенклатуры
|
|||
4
Wobland
10.09.14
✎
14:54
|
(2) тебе хорошо, у тебя всё под руками. а мне конфигурацию под это делать надо. так думать лениво
|
|||
5
myr4ik07
10.09.14
✎
14:55
|
ясно (4)
|
|||
6
Ёпрст
10.09.14
✎
15:11
|
(0) в регистре Номенклатура - не единственное измерение, тебе при левом соединении будет столько записей, сколько уникальных наборов по всем измерениям с данной номенклатурой... отсюда и задвоение, затроение..и т.д.
|
|||
7
Ёпрст
10.09.14
✎
15:12
|
+6 видать помимо номенклатуры и склада, есть еще измерения в
ОстаткиМатериалов, не так ли ? |
|||
8
myr4ik07
10.09.14
✎
15:25
|
капец, в запросе дело, во втором
нужно брать с | НоменклатураДокумента.НаборСвойств, а брал с | ОстаткиМатериаловОстатки.НаборСвойств |
|||
9
Ёпрст
10.09.14
✎
15:28
|
(8) не спасёт
|
|||
10
myr4ik07
10.09.14
✎
15:30
|
не знаю... , сейчас работает как надо(9)
|
|||
11
Ёпрст
10.09.14
✎
15:31
|
(10) в регистре сколько измерений ?
|
|||
12
Ёпрст
10.09.14
✎
15:31
|
в этом сколько ?
СтоимостьМатериалов и в этом сколько? ОстаткиМатериалов ? |
|||
13
myr4ik07
10.09.14
✎
15:32
|
стоимость - 1
остатки -3 |
|||
14
Ёпрст
10.09.14
✎
15:33
|
(13) вот из-за остатков - будет задвоение, затроение..
ибо в фильтре ты указываешь только 2 из 3-х.. |
|||
15
Ёпрст
10.09.14
✎
15:35
|
пример
в табличке у тебя валенки а в ОстаткиМатериалов валенки склад1 измерение3 валенки склад1 измерение1212 при фильтре на склад1 вернет тебе пару валенок.. |
|||
16
myr4ik07
10.09.14
✎
15:35
|
буду знать коль пойдет что то не так, благодарю (14)
|
|||
17
Ёпрст
10.09.14
✎
15:37
|
ну и раньше - ты фильтр даже по складу не устанавливаешь.. вообще - только по номенклатуре, тоже будет "подарок"
|
|||
18
sf
10.09.14
✎
16:33
|
(15) а вроде отец. до сих пор клюшками балуешься?
|
|||
19
Ёпрст
10.09.14
✎
16:34
|
(18) у нас есть всё
|
|||
20
sf
10.09.14
✎
17:14
|
(19) ну так чейто она две записи вернет? это ж 8ка. Таблица Остатки, она сама сгруппирует по полям выборки. т.е. если выбираешь только одно измерение, то и строка будет одна
|
|||
21
Ёпрст
10.09.14
✎
17:28
|
(20)ааа..
в клюшках надо спецом было указывать |
|||
22
myr4ik07
10.09.14
✎
18:26
|
вернулся назад )) действительно троиться запись, так где там что там поправить нужно?
|
|||
23
myr4ik07
10.09.14
✎
18:31
|
не могу понять, что подразумеваете под словом "фильтр"? (17)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |