Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отсечь в запросе повторные перемещения указанной партии на тот же склад
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Вся 1С
Vladal
Всем привет!

Производство продуктов.
Есть отчет, основанный на движениях партий товаров. Общий принцип складских перемещений таков:
1. Вначале любой помещается на промежуточный склад "Карантин".
2. Далее с этого склада товар перемещается на склад продаж.
3. Со склада продаж этот товар отгружается покупателю. Туда же он и возвращался при возвратах от покупателя.

До этого момента отчет работал нормально и показывал всё правильно.
Но затем изменили работу этой схемы, связанной с возвратами:

4. От покупателя возврат приходуется на склад "Карантин", независимо от того, с какого склада он был отправлен покупателю.
5. Комиссия проверяет этот товар и либо его уничтожают (брак, порча и т.д.) либо перемещают на склад продаж.

И вот здесь при втором перемещении появляется вторая запись с этой же партией и количеством, которые не надо учитывать.

Правильно ли я понимаю, что мне надо сначала получить все перемещаемые партии со склада Карантин на Склад продаж, а потом в выборке остатков исключать эти регистраторы?
Примерно так:

выбрать Различные
    *
поместить
    ВТ_Партии
из
    РегистрНакопления.ПартииТоваров как Партии
где
    истина
    И Партии.Номенклатура = &Номенклатура
    И Партии.Серия = &Серия
    И партии.Склад = &Склад
;
выбрать
    ... выборка остатков партий
    внутреннее соединение ВТ_Партии
        по ВТ_Партии.Номенклатура = ВыборкаОстатков.номенклатура
        и ВТ_Партии.Серия = Выборкаостатков.Серия
        и ВТ_Партии.Регистратор = ВыборкаОстатков.ДокументПартии


По идее, внутреннее соединение по "ВТ_Партии.Регистратор = ВыборкаОстатков.ДокументПартии" должно отсечь все последующие перемещения?
Или надо еще по дате проверять, чтобы всегда брать более ранний документ оприходования партии?

Давайте обсудим.
Vladal
В упрощенном виде это выглядит так:

выбрать вложенныйзапрос.регистратор поместить ПервоеПеремещение
из (выбрать минимум(партии.регистратор) как регистратор
    из регистранакопления.партиитоваровнаскладах как товары
    где товары.регистратор ссылка документ.перемещениетоваров
      и товары.организация = &организация
      и товары.номенклатура =&номенклатура
      и товары.серияноменклатуры = &серия
      и ....
    ) как вложенныйзапрос
    внутреннее соединение регистрнакопления.партиитоваровнаскладах как партитоваровнаскладах
    по вложенныйзапрос.регистратор = партиитоваровнаскладах.регистратор
;


Задача решена.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.