8.х Заполнить документ по остаткам по определенному условию (УПП 1.3.70.1) (8.3.7.1901)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем bluntschi, 11 фев 2016.

  1. TopicStarter Overlay
    bluntschi
    Offline

    bluntschi Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    422
    Симпатии:
    0
    Баллы:
    26
    Добрый день, подскажите, у меня есть свой созданный регистр накопления, с измерениями:

    Договор контрагента
    Заказ поставщику
    Заказ покупателя
    Номенклатура
    Продукция

    и ресурсами
    Количество
    Сумма


    Документ "Заказ поставщику" делает движение "Приход", в этот регистр, скажем вот такие строки
    Номенклатура |Продукция | Договор контрагента | Заказ поставщику | Заказ покупателя | Кол| Сумма
    Гайка 1 | Лебедка | Дог 1 | Заказ поставщику 1 | Заказ покупателя 1 | 100| 100
    Гайка 1 | Лебедка | Дог 1 | Заказ поставщику 1 | Заказ покупателя 2 | 100| 100

    То есть нужно заказать одну и ту же гайку, на разные заказы покупателя, сохранив эту информацию, куда какая гайка идет.

    Затем на основании Заказа Поставщику создается "Приходный ордер", который просто заполняется остками, в разрезе номенклатуры и заказа поставщику, таким образом в приходном ордере будет строчка: пришло 75 Гаек от поставщика


    Гайка 1 Заказ поставщику 1 75


    Затем на основании приходного ордера создается документ "Поступление товаров и услуг", и его нужно заполнить исходя из того, сколько пришло всего, распределив так, чтобы сначала остаток упал на более ранний Заказ покупателя, то есть таким образом

    Поступление товаров и услуг:

    Номенклатура |Продукция | Договор контрагента | Заказ поставщику | Заказ покупателя | Кол| Сумма
    Гайка 1 | Лебедка | Дог 1 | Заказ поставщику 1 | Заказ покупателя 1 | 75| 75


    так вот вопрос, как можно сделать так чтобы поступление заполнялось, анализируя какой заказ покупателя раньше, и кидая все что пришло на него, и если осталось от прихода, то кидать на следующий заказ покупателя ?
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну я не буду спрашивать зачем свой регистр брали когда все есть тот же регистр Товары в резерве на складах.

    Ну алгоритм то берете остаки по ващему регистру с отбором по заказу поставщика где остаток <>0 и сортируете по дата заказа покупателя,
    а потом ц икле распределяете остаток
  3. TopicStarter Overlay
    bluntschi
    Offline

    bluntschi Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    422
    Симпатии:
    0
    Баллы:
    26

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

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

    потом делаю

    Код:
    ВыборкаПоЗаказу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                Пока ВыборкаПоЗаказу.Следующий() Цикл
                    ВыборкаПоВедомости = ВыборкаПоЗаказу.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                    Пока ВыборкаПоВедомости.Следующий() Цикл
                        ВыборкаПоНоменклатуре = ВыборкаПоВедомости.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                        Пока ВыборкаПоНоменклатуре.Следующий() Цикл
                           
                           
                            Если ВыборкаПоНоменклатуре.Количество = КоличествоВСтроку и ВыборкаПоНоменклатуре.Номенклатура = РезультатЗапросПоДокументуОснованию.Номенклатура и КоличествоВСтроку <> 0 Тогда
                               
                                КоличествоВСтроку = КоличествоВСтроку - ВыборкаПоНоменклатуре.Количество;
                               
                               
                               
    
                   
                                СтрокаТабличнойЧасти                            = Источник.Товары.Добавить();
                                СтрокаТабличнойЧасти.Номенклатура               = ВыборкаПоНоменклатуре.Номенклатура;
                                СтрокаТабличнойЧасти.ЕдиницаИзмерения           = ВыборкаПоНоменклатуре.ЕдиницаИзмерения;
                                СтрокаТабличнойЧасти.Коэффициент                = ВыборкаПоНоменклатуре.Коэффициент;
                                СтрокаТабличнойЧасти.СтавкаНДС                  = ВыборкаПоНоменклатуре.СтавкаНДС;
    
                                СтрокаТабличнойЧасти.Заказ                      = ВыборкаПоНоменклатуре.Заказ;
                                СтрокаТабличнойЧасти.КомплектовочнаяВедомость   = ВыборкаПоНоменклатуре.КомплектовочнаяВедомость;
                                СтрокаТабличнойЧасти.Количество                 = ВыборкаПоНоменклатуре.Количество;
                                СтрокаТабличнойЧасти.ЗаказПоставщику            = ДанныеЗаполнения.ЗаказПоставщику;
                                СтрокаТабличнойЧасти.ПриходныйОрдер             = ДанныеЗаполнения.Ссылка;
                               
                               
                                СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = ВыборкаПоНоменклатуре.ХарактеристикаНоменклатуры;
    
    КонецЦикла;
                    КонецЦикла;
                КонецЦикла;    
               
     
            КонецЦикла;
    
    

    и встает в Документ КомплектовочнаяВедомость;, Номенклатура, ЗаказПоставщику, Заказ, а все остальное не встает, хотя в регисстре есть, это потому что нету цикла для их группировки?
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    НУ надо смотреть результат запроса и отладчиком - так затрудняюсь сказать

Поделиться этой страницей