| 
    
            
         
         | 
    
  | 
Вопрос по списанию. | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        Про дату хорошо что напомнили!Спасибо!     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |