Остатки На Произвольную Дату

Тема в разделе "1C и всё что с ней связано", создана пользователем Allexei, 13 фев 2012.

  1. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Здравствуйте.Вопрос такой. У меня есть документ заказа клиента. В ТЧ документа для каждого товара ставятся даты отгрузки. Вариант контроля остатков по складу - просто остатки, без резервов и графиков движений. Так вот вопрос как одним запросом(запрос в цикле не предлагать) получить срез остатков по товарам в ТЧ и датам их отгрузки?
     
  2. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Сомневаюсь.
     
  3. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну из разряда извращений - пожалуйста. Загоняем наш фильтр по товарам (или партиям) и датам отгрузки в временную таблицу (назовем её первая) - она будет нужна для кейсов в запросах. Берем виртуальную таблицу остатков и вычисляем начальные остатки на минимальную дату отгрузки по всем позициям из первой таблицы, помещяем результат в времянку под названием вторая. Берем виртуальную таблицу оборотов и вычисляем обороты по позициям из первой таблицы. Параметры начала / конца периода - минимальная/максимальная дата отгрузки соответственно, тут же можно добавить условие на дату в джойне, типа Первая.Номенклатура = Обороты.Номенклатура и Первая.Датаотгрузки >= Обороты.Период.
    также тут можно уже выдать приход как например Сумма(Сумма(Количествоприход) - Сумма(КоличествоРасход)) Как Полныйприход.

    Что получаем в итоге?
    нас интересуют две таблицы - в одной начальные остатки по нужным позициям, во второй - обороты за период с отсечкой по дате отгрузки для позиции по нужным позициям. Джойним или объединяем их, суммируем по номенклатуре и вуоля.

    апдейт - туплю, первую таблицу проще получить запросом из документа, чем с менеджером мучаться.
     
  4. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Извиняюсь за тупизм, но все же...

    -Берем виртуальную таблицу остатков и вычисляем начальные остатки на минимальную дату отгрузки по всем позициям из первой таблицы
    Минимальную дату передаем в запрос как параметр?

    Параметры начала / конца периода - минимальная/максимальная дата отгрузки
    максимальная дата отгрузки это есть максимальная дата по все таблице документа?

    А так идея понятна. Огромный плюс, и респект!
     
  5. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    зы
    Запрос получился такой:
    Код ( (Unknown Language)):
    ВЫБРАТЬ
    ЗаказКлиентаТовары.Склад,
    ЗаказКлиентаТовары.Номенклатура,
    ЗаказКлиентаТовары.ДатаОтгрузки
    ПОМЕСТИТЬ ТоварыПоЗаказу
    ИЗ
    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
    ГДЕ
    ЗаказКлиентаТовары.Ссылка = &ЗаказКлиента
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ТоварыПоЗаказу.Склад,
    ТоварыПоЗаказу.Номенклатура,
    ТоварыПоЗаказу.ДатаОтгрузки,
    СвободныеОстаткиОстатки.ВНаличииОстаток - СвободныеОстаткиОстатки.ВРезервеОстаток КАК СвободныйОстаток
    ПОМЕСТИТЬ ОстаткиНаНачалоПериода
    ИЗ
    ТоварыПоЗаказу КАК ТоварыПоЗаказу
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&ДатаДокумента, ) КАК СвободныеОстаткиОстатки
    ПО ТоварыПоЗаказу.Склад = СвободныеОстаткиОстатки.Склад
    И ТоварыПоЗаказу.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ТоварыПоЗаказу.Склад,
    ТоварыПоЗаказу.Номенклатура,
    СУММА(СвободныеОстаткиОбороты.ВНаличииОборот) - СУММА(СвободныеОстаткиОбороты.ВРезервеОборот) КАК ОборотТоваров
    ПОМЕСТИТЬ Оборот
    ИЗ
    ТоварыПоЗаказу КАК ТоварыПоЗаказу
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Обороты(&ДатаДокумента, , День, ) КАК СвободныеОстаткиОбороты
    ПО ТоварыПоЗаказу.Склад = СвободныеОстаткиОбороты.Склад
    И ТоварыПоЗаказу.Номенклатура = СвободныеОстаткиОбороты.Номенклатура
    И ТоварыПоЗаказу.ДатаОтгрузки >= СвободныеОстаткиОбороты.Период

    СГРУППИРОВАТЬ ПО
    ТоварыПоЗаказу.Склад,
    ТоварыПоЗаказу.Номенклатура
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ОстаткиНаНачалоПериода.Склад,
    ОстаткиНаНачалоПериода.Номенклатура,
    ЕСТЬNULL(ОстаткиНаНачалоПериода.СвободныйОстаток, 0) + ЕСТЬNULL(Оборот.ОборотТоваров, 0) КАК СвободныйОстаток
    ИЗ
    ОстаткиНаНачалоПериода КАК ОстаткиНаНачалоПериода
    ПОЛНОЕ СОЕДИНЕНИЕ Оборот КАК Оборот
    ПО ОстаткиНаНачалоПериода.Склад = Оборот.Склад
    И ОстаткиНаНачалоПериода.Номенклатура = Оборот.Номенклатура
     
  6. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Комрады, а не проще ли собрать текст запроса динамически, обходя циклом всю ТЧ? Т.е. пускаем цикл по ТЧ, в конструкторе собираем шапку запроса, а в теле цикла добавляем необходимы е нам поля ручками, попутно указывая параметр и значение параметра. Посе цикла весь полученый текст пихаем в текст запроса и выполняем.
     
  7. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Не, не не. "Шурик, это не наш метод". Задачка как раз и состоит в том что бы сделать это одним запросом ибо на СКД. А формировать в ручную для СКД текст запроса это долго и не интересно.
     
  8. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Классная формулировка...надо взять на вооружение :eek:fftop: а если серьезно.... тогда только вложенные запросы могут помочь, и соединять их с регистром остатков
     
  9. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Задачка решена.Запрос выложен выше.Все работает.Все счастливы.Спасибо всем :eek:fftop:
     
Загрузка...

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