Убавить количество в строке тч и добавить строку

1. Raideres 8 08.07.21 19:30 Сейчас в теме
Добрый вечер делаю небольшую доработку в тч документ СборкаЗапасов
А точнее добавляю замену аналогами материалов
вроде бы все данные получил

получил сколько нужно списать основного материала
сколько есть в свободном остатке
сколько есть в резерве

Получил сколько есть аналогов и остатков по ним

а вот теперь как убавить я чет тормознул
например
нужно списать 10 штук из них уже 2 в резерве и 1 в свободном остатке
Аналога 1 есть 3 штуки свободного
Аналога 2 есть 4 штуки свободного

нужно чтоб основной в тч убавился
1.строка основной 3 шт резерв 2
2.строка аналог 1 3 шт резерв 0
2.строка аналог 2 4 шт резерв 0

задача вроде простая но что то у меня не то выходит




&НаСервере

    Организация = Константы.УчетПоКомпании.Компания(Объект.Организация);
    
    Для каждого СтрокаТабличнойЧасти Из Объект.Запасы Цикл
            
        ////1. Проверить хватает или нет + не забыть резерв если хватает продолжить и добавить резерв
          СтруктураОстатков = СвободныйОстатокПоСтруктурнойЕдинице(СтрокаТабличнойЧасти.СтруктурнаяЕдиница, СтрокаТабличнойЧасти.Номенклатура
                                        , СтрокаТабличнойЧасти.Характеристика, СтрокаТабличнойЧасти.Партия, СтрокаТабличнойЧасти.ЕдиницаИзмерения);
        
                                
        ТребуетсяСписать= СтрокаТабличнойЧасти.Количество;
        ОстатокПоФакту = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв;
        
        //СтрокаТабличнойЧасти.Резерв
        //СтруктураОстатков.КоличествоРезерв
        //СтруктураОстатков.КоличествоСвободно
         Если ТребуетсяСписать> ОстатокПоФакту Тогда

        
 ////2. Проверить есть ли аналоги + свободные остатки по данным аналогам и отсортировать по приоритету
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    АМ_АналогиНоменклатуры.Номенклатура КАК Номенклатура,
        |    АМ_АналогиНоменклатуры.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |    АМ_АналогиНоменклатуры.Аналог КАК Аналог,
        |    АМ_АналогиНоменклатуры.ХарактеристикаАналога КАК ХарактеристикаАналога,
        |    АМ_АналогиНоменклатуры.Количество КАК Количество,
        |    АМ_АналогиНоменклатуры.КоличествоАналога КАК КоличествоАналога,
        |    АМ_АналогиНоменклатуры.Приоритет КАК Приоритет
        |ПОМЕСТИТЬ ВТ_Аналог
        |ИЗ
        |    РегистрСведений.АМ_АналогиНоменклатуры КАК АМ_АналогиНоменклатуры
        |ГДЕ
        |    АМ_АналогиНоменклатуры.Номенклатура = &Номенклатура
        |    И АМ_АналогиНоменклатуры.ХарактеристикаНоменклатуры = &Характеристика
        |;
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |    СУММА(ЗапасыОстаткиСвободные.КоличествоОстаток) КАК КоличествоСвободно,
        |    ЗапасыОстаткиСвободные.Номенклатура КАК Номенклатура,
        |    ЗапасыОстаткиСвободные.Характеристика КАК Характеристика
        |ПОМЕСТИТЬ ВТОстатокАналогов
        |ИЗ
        |    РегистрНакопления.Запасы.Остатки(
        |            ,
        |            Номенклатура В
        |                    (ВЫБРАТЬ
        |                        Вт_аналог.Аналог КАК номенклатура
        |                    ИЗ
        |                        Вт_аналог)
        |                И ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
        |                И Организация = &Организация
        |                И Характеристика = &Характеристика
        |                И СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ЗапасыОстаткиСвободные
        |
        |СГРУППИРОВАТЬ ПО
        |    ЗапасыОстаткиСвободные.Номенклатура,
        |    ЗапасыОстаткиСвободные.Характеристика
        |;
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |    ВТ_Аналог.Номенклатура КАК Номенклатура,
        |    ВТ_Аналог.ХарактеристикаНоменклатуры КАК Характеристика,
        |    ВТ_Аналог.Аналог КАК Аналог,
        |    ВТ_Аналог.ХарактеристикаАналога КАК ХарактеристикаАналога,
        |    ВТ_Аналог.Количество КАК Количество,
        |    ВТ_Аналог.КоличествоАналога КАК КоличествоАналога,
        |    ВТ_Аналог.Приоритет КАК Приоритет,
        |    ВТОстатокАналогов.КоличествоСвободно КАК КоличествоСвободно
        |ИЗ
        |    ВТ_Аналог КАК ВТ_Аналог
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТОстатокАналогов КАК ВТОстатокАналогов
        |        ПО ВТ_Аналог.Аналог = ВТОстатокАналогов.Номенклатура
        |            И ВТ_Аналог.ХарактеристикаАналога = ВТОстатокАналогов.Характеристика
        |
        |УПОРЯДОЧИТЬ ПО
        |    Приоритет,
        |    КоличествоСвободно";
        Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтрокаТабличнойЧасти.СтруктурнаяЕдиница);
        Запрос.УстановитьПараметр("Номенклатура",СтрокаТабличнойЧасти.Номенклатура);
        Запрос.УстановитьПараметр("Характеристика",СтрокаТабличнойЧасти.Характеристика);
        Запрос.УстановитьПараметр("Организация",Организация);
        Выборка = Запрос.Выполнить().Выбрать();
        ////ЕСЛИ ЕСТЬ АНАЛОГИ С ОСТАТКОВ
        Пока Выборка.Следующий() Цикл 

//ТЕПЕРЬ ВОТ ТУТ Я ПОТЕРЯЛСЯ МНЕ НУЖНО УБАВИТЬ ОСТАТКИ ПО ОСНОВНОМУ МАТЕРИАЛУ И ЕСЛИ ЕСТЬ РЕЗЕРВ ДОБАВИТЬ
////ОСТАТКИ ПО ОСНОВНОМУ МАТЕРИАЛУ        
////СтруктураОстатков.КоличествоРезерв +////СтруктураОстатков.КоличествоСвободно
               
 //РЕЗЕР ОСНОВНОГО В СтрокаТабличнойЧасти.Резерв=СтруктураОстатков.КоличествоРезерв;
//И ПОТОМ ДОБАВИТЬ ОСТАТКИ ПО АНАЛОГАМ


            //ТребуетсяСписать= СтрокаТабличнойЧасти.Количество;
            //ОстатокПоФакту = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв;
            //
            ////СтрокаТабличнойЧасти.Резерв
            ////СтруктураОстатков.КоличествоРезерв
            //СтруктураОстатков.КоличествоСвободно

            
                        НоваяСтрока=Объект.Запасы.Вставить(СтрокаТабличнойЧасти.индекс);
            
             ////3. Добавить аналоги  и уменьшить количество в документе но перед этим проверим сколько есть для списания основного материала
        КонецЦикла;
                
        
             
        Иначе  //количества хватает но надо заполнить резерв
         СтрокаТабличнойЧасти.Резерв=СтруктураОстатков.КоличествоРезерв;
        КонецЕсли; 
        
    КонецЦикла;

Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Raideres 8 08.07.21 19:50 Сейчас в теме
Как то так что ли
    ////3. Добавить аналоги  и уменьшить количество в документе но перед этим проверим сколько есть для списания основного материала
        Нехватает = ТребуетсяСписать-(СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв);
        СтрокаТабличнойЧасти.Количество = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв;
        СтрокаТабличнойЧасти.Резерв     = СтруктураОстатков.КоличествоРезерв;
        Пока Выборка.Следующий()и  Нехватает >0 Цикл
            
            Списываем = Мин(Выборка.Количество, Нехватает);
            НоваяСтрока=Объект.Запасы.Вставить(СтрокаТабличнойЧасти.НомерСтроки);
            ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка);
            НоваяСтрока.Количество = Списываем;
            
            Нехватает = Нехватает - Списываем;
             
             
            //ТребуетсяСписать= СтрокаТабличнойЧасти.Количество;
            //ОстатокПоФакту = СтруктураОстатков.КоличествоСвободно+СтруктураОстатков.КоличествоРезерв;
            //
            ////СтрокаТабличнойЧасти.Резерв
            ////СтруктураОстатков.КоличествоРезерв
            //СтруктураОстатков.КоличествоСвободно

            
                                    
             
        КонецЦикла

Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот