![]() |
|
Вопрос по списанию. | ☑ | ||
---|---|---|---|---|
0
tg30000
28.02.12
✎
07:47
|
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | Реализация_вариант_Счет_00_116_списаниеТЧ.Номенклатура КАК Номенклатура, | СУММА(Реализация_вариант_Счет_00_116_списаниеТЧ.Количество) КАК Количество, | Реализация_вариант_Счет_00_116_списаниеТЧ.Ссылка.Подразделение, | Реализация_вариант_Счет_00_116_списаниеТЧ.Ссылка.Мол |ПОМЕСТИТЬ ТабДок |ИЗ | Документ.Реализация_вариант_Счет_00_116_списание.ТЧ КАК Реализация_вариант_Счет_00_116_списаниеТЧ |ГДЕ | Реализация_вариант_Счет_00_116_списаниеТЧ.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | Реализация_вариант_Счет_00_116_списаниеТЧ.Номенклатура, | Реализация_вариант_Счет_00_116_списаниеТЧ.Ссылка.Подразделение, | Реализация_вариант_Счет_00_116_списаниеТЧ.Ссылка.Мол | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(Счет_00_116Остатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(Счет_00_116Остатки.СуммаОстаток, 0) КАК СуммаОстаток, | ТабДок.Номенклатура, | ТабДок.Количество, | ТабДок.Подразделение, | Счет_00_116Остатки.Подразделение КАК Подразделение1, | Счет_00_116Остатки.Мол |ИЗ | ТабДок КАК ТабДок | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Счет_00_116.Остатки КАК Счет_00_116Остатки | ПО ТабДок.Номенклатура = Счет_00_116Остатки.Номенткатура | И ТабДок.Подразделение = Счет_00_116Остатки.Подразделение | И ТабДок.Мол = Счет_00_116Остатки.Мол"; Запрос.УстановитьПараметр("Ссылка",Ссылка); Запрос.УстановитьПараметр("Подразделение1",Подразделение); Запрос.УстановитьПараметр("Мол",Мол); Результат=Запрос.Выполнить(); ВыборкаДетальныеЗаписи=Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Движение=Движения.Счет_00_116.Добавить(); Движение.ВидДвижения=ВидДвиженияНакопления.Расход; Движение.Период=Дата; Движение.Номенткатура=ВыборкаДетальныеЗаписи.Номенклатура; Движение.Подразделение=ВыборкаДетальныеЗаписи.Подразделение; Движение.Количество=ВыборкаДетальныеЗаписи.Количество; Движение.Мол=Мол; //Контроль отрицательных остатков товаров ! ! ! Если ВыборкаДетальныеЗаписи.КоличествоОстаток<ВыборкаДетальныеЗаписи.Количество Тогда Отказ=Истина; Сообщение = Новый СообщениеПользователю; Нехватка=ВыборкаДетальныеЗаписи.Количество-ВыборкаДетальныеЗаписи.КоличествоОстаток; Сообщение.Текст="НЕХВАТКА ТОВАРА!" + "в подразделении : "+ВыборкаДетальныеЗаписи.Подразделение+"У МОЛ: "+ВыборкаДетальныеЗаписи.Мол+" товара:"+ВыборкаДетальныеЗаписи.Номенклатура+" Находится в количестве: "+ВыборкаДетальныеЗаписи.КоличествоОстаток +" а Вы списываете " +ВыборкаДетальныеЗаписи.Количество; Сообщение.Сообщить(); ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоОстаток=ВыборкаДетальныеЗаписи.Количество Тогда Движение.Сумма=ВыборкаДетальныеЗаписи.СуммаОстаток; ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоОстаток>ВыборкаДетальныеЗаписи.Количество() Тогда Движение.Сумма=ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*ВыборкаДетальныеЗаписи.Количество; КонецЕсли; КонецЦикла; КонецПроцедуры Написана такая ОбработкаПроведения. В регистрах есть записи :например стол 3шт на сумму 300р. Стул 1шт на сумму 50р. Если списываю по одной строчке в табл части то все правильно списывает: 1 стол спишет по 100р. Но если списываю и стол и стул ,то если все списывается то выводит правильно, а если стол спишу 1 то он спишется без суммы, но второй строчкой стул 1 спишется правильно. в общем если списываю неслолько позиций и не все из них списываются полностью, то не считается сумма по этим позициям, хотя смотрю в отладчике и условие вроде выполняется (ИначеЕсли ВыборкаДетальныеЗаписи.КоличествоОстаток>ВыборкаДетальныеЗаписи.Количество() Тогда) и в правой части все числа есть (Движение.Сумма=ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*ВыборкаДетальныеЗаписи.Количество;) а лавая часть(Движение.Сумма) все равно равна нулю... Не пойму что не так.. |
|||
1
Wobland
28.02.12
✎
07:49
|
начнём, помолясь ;) остатки на какую дату берёшь?
|
|||
2
Wobland
28.02.12
✎
07:49
|
Запрос.УстановитьПараметр("Подразделение1",Подразделение);
Запрос.УстановитьПараметр("Мол",Мол); это тебе зачем? |
|||
3
Wobland
28.02.12
✎
07:51
|
Сумма=СуммаОстаток/КоличествоОстаток*Количество;
вот тут не понял |
|||
4
Wobland
28.02.12
✎
07:53
|
| ТабДок.Подразделение,
| Счет_00_116Остатки.Подразделение КАК Подразделение1, зачем два раза одно и то же? |
|||
5
tg30000
28.02.12
✎
07:53
|
(2) В регистры попадает информация по 20 подразделениям, и то какое выбрано в документе по тому и идет списание
(3) ВыборкаДетальныеЗаписи.СуммаОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток*ВыборкаДетальныеЗаписи.Количество; Ну по данным позициям получается информация и производятся арифм. действия. |
|||
6
Wobland
28.02.12
✎
07:53
|
| ЕСТЬNULL(Счет_00_116Остатки.СуммаОстаток, 0) КАК СуммаОстаток,
а у нас возможны NULLы при внутреннем соединении? |
|||
7
Wobland
28.02.12
✎
07:54
|
(5) параметры устанавливаешь, а не используешь
|
|||
8
tg30000
28.02.12
✎
07:54
|
(6) ну тут да неправильно..
|
|||
9
Wobland
28.02.12
✎
07:54
|
(5) смысл арифметики от меня скрыт
|
|||
10
tg30000
28.02.12
✎
07:55
|
Ну как можно списать из регистров тогда?
|
|||
11
tg30000
28.02.12
✎
07:56
|
если одна позиция ,то списывается же все правильно..
|
|||
12
Wobland
28.02.12
✎
07:58
|
(11) например стол 3шт на сумму 300р. Стул 1шт на сумму 50р.
давай спишем два стола и один стул. какой результат должен получиться? |
|||
13
Wobland
28.02.12
✎
07:59
|
согласно (3) столы будут списываться по 50?
|
|||
14
tg30000
28.02.12
✎
08:03
|
Ну есть на остатке 3 стола на 300р
и 1 стул на сумму 50р. 1)если списываем в документе только одну позицию то если спишем 2 стола то они спишутся (300/3)*2=200р. остаток 1шт на сумму 100р. 2) НО если более одной позиции списывается в одном документе то сумма по тем позициям которые не полностью списываются не ставится вообще.. |
|||
15
tg30000
28.02.12
✎
08:04
|
Что-то неправильно в списании у меня раз при наличии более одной строки не выполняются условия..
|
|||
16
Wobland
28.02.12
✎
08:07
|
(14) 1) ага, арифметику понял ;)
2) делай Движения.Добавить() только если действительно собираешься делать движение. 3) а вообще - перепиши с нуля. двойной запрос там явно лишний |
|||
17
tg30000
28.02.12
✎
08:09
|
(16) Спасибо, действительно проще снести что писалось и написать с нуля, а то еще больше можно запутаться..
Спасибо! |
|||
18
Wobland
28.02.12
✎
08:10
|
(17) про (1) не забудь
|
|||
19
tg30000
28.02.12
✎
08:12
|
Про дату хорошо что напомнили!Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |