Имя: Пароль:
1C
 
Оптимизировать код
0 ZloyRafa
 
27.09.16
06:26
Всем привет, подскажите с более опытных глаз, как его оптимизировать.
Товар может продаваться в минус, если позволяет уч.политика,(расходная накладная), при поступлении нужно организовать логичное списание минуса по номенклатуре. Движения очень идентичны, что посоветуете срезать, и, возможно, ошибки какие заметите, но вроде проверил корректно все.
Процедура ОбработкаПроведения(Отказ, Режим)
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриходнаяНакладанаяТовары.Ссылка КАК Ссылка,
        |    ПриходнаяНакладанаяТовары.НомерСтроки КАК НомерСтроки,
        |    ПриходнаяНакладанаяТовары.Номенклатура КАК Номенклатура,
        |    ПриходнаяНакладанаяТовары.Количество КАК Количество,
        |    ПриходнаяНакладанаяТовары.Цена КАК Цена,
        |    ПриходнаяНакладанаяТовары.Сумма КАК Сумма,
        |    ПриходнаяНакладанаяТовары.СрокГодности КАК СрокГодности
        |ПОМЕСТИТЬ РасхНакл
        |ИЗ
        |    Документ.ПриходнаяНакладаная.Товары КАК ПриходнаяНакладанаяТовары
        |ГДЕ
        |    ПриходнаяНакладанаяТовары.Ссылка = &Ссылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    РасхНакл.Ссылка КАК Ссылка,
        |    РасхНакл.Номенклатура КАК Номенклатура,
        |    РасхНакл.Количество КАК Количество,
        |    ВЫБОР
        |        КОГДА ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0
        |            ТОГДА -ОстаткиНоменклатурыОстатки.КоличествоОстаток
        |        ИНАЧЕ 0
        |    КОНЕЦ КАК КоличествоОстаток,
        |    РасхНакл.Цена КАК Цена,
        |    РасхНакл.Сумма КАК Сумма,
        |    РасхНакл.СрокГодности КАК СрокГодности,
        |    РасхНакл.Ссылка.Дата КАК Дата
        |ИЗ
        |    РасхНакл КАК РасхНакл
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
        |                &МоментВремени,
        |                Номенклатура В
        |                    (ВЫБРАТЬ
        |                        РасхНакл.Номенклатура
        |                    ИЗ
        |                        РасхНакл КАК РасхНакл)) КАК ОстаткиНоменклатурыОстатки
        |        ПО РасхНакл.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
                //приход
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Выборка.Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Партия = Выборка.Ссылка;
        Движение.СрокГодности = Выборка.СрокГодности;
        Движение.Количество = Выборка.Количество;
        Движение.Сумма = Выборка.Сумма;
        //требуется ли списание по нулевой партии
        Если Выборка.КоличествоОстаток<>0 Тогда
        //
        Если Выборка.Количество<Выборка.КоличествоОстаток Тогда
        //нулевая партия
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Выборка.Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Выборка.Количество;
        //спсиание по нулевой
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Выборка.Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Партия = Выборка.Ссылка;
        Движение.СрокГодности = Выборка.СрокГодности;
        Движение.Количество = Выборка.Количество;
        Движение.Сумма = Выборка.Цена*Выборка.Количество;
    Иначе
        Приход=Выборка.КоличествоОстаток-Выборка.Количество;
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Выборка.Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Количество = Выборка.КоличествоОстаток;
        //спсиание по нулевой
        Движение = Движения.ОстаткиНоменклатуры.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Выборка.Дата;
        Движение.Номенклатура = Выборка.Номенклатура;
        Движение.Партия = Выборка.Ссылка;
        Движение.СрокГодности = Выборка.СрокГодности;
        Движение.Количество = Выборка.КоличествоОстаток;
        Движение.Сумма = Выборка.Цена*Выборка.КоличествоОстаток;
        КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // регистр ОстаткиНоменклатуры Приход
    
    
    

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
1 бомболюк
 
27.09.16
07:36
"ПриходнаяНакладаная" ну неужели трудно хотя бы объекты метаданных без ошибок называть...
2 aleks_default
 
27.09.16
09:54
Подумай зачем ты вычисляешь Приход=Выборка.КоличествоОстаток-Выборка.Количество если потом нигде не используешь.
Копипастить тоже нужно вдумчиво
3 eryomin
 
27.09.16
11:13
я бы за это голову срезал. сделать-то что хотел? что такое "логичное списание минуса по номенклатуре"? ты хочешь скорректировать отрицательные остатки по партиям? по каким? где они в выборке? скорректировать - это значит по старой, пересписанной партии расход уменьшить и перенести его на эту, вновь поступившую.
код вообще безобразный. почему "ПОМЕСТИТЬ РасхНакл", если "Документ.ПриходнаяНакладаная.Товары"? все плохо, нерабочий код.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.