Имя: Пароль:
1C
1С v8
Определить поступление по остаткам номенклатуры
,
0 Asmody
 
27.06.23
16:30
Уважаемые знатоки!
Вопрос задаёт Asmody с мисты:
Есть остатки номенклатуры. Есть документы поступления на склад. Партионный не ведется.
Считаем, что со склада отгружаем по FIFO.
Требуется для каждой номенклатуры получить первое из тех поступлений, товар из которого есть в остатках.

Время!
1 Волшебник
 
27.06.23
16:33
Отвечает Александр Друзь:
Включите партионный учёт, заполните партии.
2 Garykom
 
гуру
27.06.23
16:52
(0) Чем не устраивает банальный обратный расчет партий?
3 Жан Пердежон
 
27.06.23
16:57
(0) а в чем заковыка? вроде всё банально
а приходы на склад конечно не только поступлением могут делаться...
4 Aleksey
 
27.06.23
17:02
Товар от клиента не возвращается? Как его учитывать?
Оприходование. как с ним?
5 Asmody
 
27.06.23
17:04
(0)+ забыл самое главное: запросом. ну или СКД тоже подойдет
6 Asmody
 
27.06.23
17:04
(4) считаем, что оприходование, перемещение и т.д. - это тоже поступление
7 Asmody
 
27.06.23
17:05
(1) нееет, спасибо, этот кактус мы уже кушали
8 lodger
 
27.06.23
17:15
вопрос же баянище?
перевернуть https://infostart.ru/1c/articles/99207/ задом наперёд и вперёд.
9 Asmody
 
27.06.23
17:30
(8) Теперь представим, что в базе документов за 10+ лет. Сколько будет выполняться тот запрос расчёта "нарастающего итога"?
10 ProxyInspector
 
27.06.23
17:41
Так ты для каждой номенклатуры получить ПОСЛЕДНЕЕ из тех поступлений, товар из которого есть в остатках. Это легко и быстро. А результат подобного партионного учета не сильно изменется
11 azernot
 
27.06.23
17:43
(9) Верно. Попытка решить такую задачу "одним запросом" обречена на неоптимальность.
Я бы делал в рекурсии. И весь вопрос в выборе размера итерации. Это может быть один документ, а может быть год...
12 Garykom
 
гуру
27.06.23
17:48
Имхо РС создать и начать заполнять
Организация - Склад - Номенклатура - Количество - РасходныйДокумент - ПриходныйДокумент
13 Гена
 
гуру
27.06.23
18:14
Это... а бух-остатки где-то же хранятся? Вон как шустро ОСВ по счёту за квартал срабатывает.
Достаточно быстро же выхватить первый год или квартал или месяц по ОСВ по счёту 41, где есть первый в истории ДебетОборот по данной номенклатуре? А далее - обычные методы. А то и по регистратору первого дебетового оборота по 41. Нет?
14 azernot
 
27.06.23
18:46
(13) Представьте. Остаток 91 шт
Есть некоторое количество поступлений по 10 шт в год и расход по 1 шт в год.
Т.е. искомое поступление примерно в 2013 году.
15 Гена
 
гуру
27.06.23
18:58
(14) это не проблема...
Ещё одна идея: а сами коды номенклатуры не подряд идут при заполнении справочника по мере поступления? К примеру, если найдено первое поступление номенклатуры 00000012, то можно номенклатуру 00000096 искать уже не с начала, а с даты первого поступления 00000012?
16 Гена
 
гуру
27.06.23
19:04
А журнал логов не хранится нигде? Там нельзя увидеть дату занесения данной номенклатуры каким-то пользователем в справочник?
17 azernot
 
27.06.23
19:47
(15) А-а-а, я понял. Это в стиле Ералаша "Дяденька, я знаю, что у вас сломалось!".
Уйди, мальчик, не мешай взрослым разговаривать.
18 Злопчинский
 
27.06.23
21:59
У Ильдаровича на ИС посмотри, там практически нужная задача решается
19 Мимохожий Однако
 
28.06.23
07:11
Прикольный вопрос. И неожиданный )
20 Bigbro
 
28.06.23
07:28
тоже считаю самым дешевым вариантом будет включить партии.
иначе это лопатить все приходы расходы перемещения возвраты от начала времен....
ладно если это сделать бы один раз, но я подозреваю это будет требоваться постоянно.
21 majkk
 
28.06.23
08:16
(0)
ВЫБРАТЬ Документы.ссылка
ИЗ Остатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документы ПО (Документы.номенклатура=Остатки.номенклатура)
ГДЕ Документы.дата В (ВЫБРАТЬ МИНИМУМ(дата) ИЗ Документы КАК ОпятьДокументы ГДЕ Документы.Номенклатура = ОпятьДокументы.Номенклатура)
22 majkk
 
28.06.23
08:22
(21) ВЫБРАТЬ Документы.ссылка, Документы.Номенклатура
...
23 Kigo_Kigo
 
28.06.23
08:43
Помню делал такой отчет на СКД, пришлось делать через 4 или 5 временных таблиц
24 Kigo_Kigo
 
28.06.23
08:49
Выбираем остатки с ПТУ или с регистратором, помещаем в ВТ, перебираем ВТ оставляя только документв прихода это ПТУ Оприходование, возарты, перебираем ВТ с Максимумом по регистратору, и что то еще делал не помню, помню были проблемы с доками прихода за одну дату
25 АгентБезопасной Нацио
 
28.06.23
08:51
поступления - это любой из документов, увеличивающих остатки (Приобретение,перемещение, оприходование, корректировка реализации, возврат)?  или только партиеобразующие (приобретение, оприходование)? или только приобретения?
26 АгентБезопасной Нацио
 
28.06.23
08:53
+(25)  и только последнее приобретение, из которого остался товар, или приобретения, поступления по которым  хватит на имеющийся остаток?
27 Гена
 
гуру
28.06.23
08:54
(24) Возвраты-то зачем?
(25) Только приобретение/оприходование. Ежу понятно, что перемещение/возврат всегда не ПЕРВЫЕ для данной номенклатуры )
28 Гена
 
гуру
28.06.23
08:56
Или я не так понял? Речь про вообще первое в жизни появление данной номенклатуры или какое-то другое "первое"? )
29 АгентБезопасной Нацио
 
28.06.23
08:57
(27) возвраты - затем, что "продали клиенту, а он верещит, что товар говеный - ищем откуда взяли такой товар". А это не приход, а возвёрнутый старый брак, уже однажды возвращенный другим клиентом.
30 Гена
 
гуру
28.06.23
08:58
(29) Если автору нужен ПЕРВЫЙ приход в жизни, то возврат и на фиг не нужен.
31 АгентБезопасной Нацио
 
28.06.23
08:58
(27) преремещение-возврат - не первые _для_номенклатуры_, но могут быть первыми _для_номенклатуры_на_конкретном_складе_
32 2S
 
28.06.23
08:59
поддержу вариант включения партионного учета.
Рисовать свои параллельные регистры учета партий конечно можно. Даже простой РС "Партия поступления / количество / сумма" частично решитт вопрос. Но это костыли
33 АгентБезопасной Нацио
 
28.06.23
09:00
(30) а, я первый с последним перепутал.
Ну, первые для набора номенклатуры вообще легко:
Два последних прихода как пример, только там последние. знак поменять надоть.
34 Гена
 
гуру
28.06.23
09:00
(31) Уверены, что автора склад интересует? А зачем?
35 Гена
 
гуру
28.06.23
09:04
Ещё раз перечитал (0)... а может автору не вообще первый приход нужен, а только такой, который первый по фифе ЗАЦЕПИЛ текущий остаток?
Чего автор хочет, кто-нибудь понял?
36 АгентБезопасной Нацио
 
28.06.23
09:04
(34) да хез. А зачем ему первые поступления? в отсутствии партионки меня бы интересовали партиеобразующие документы на товары, лежащие на остатках. для бухучета склады пофиг. для упручета - нужны. а что реально нужно (не хочет, а именно нужно) ТС'у - хз.
37 Гена
 
гуру
28.06.23
09:06
(36) А где автор? А то он один раз ... и в тину )
38 Kigo_Kigo
 
28.06.23
09:09
а , так первые, тогда
Выбрать Первые 1 из любого регистра где ГДЕ Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслу или Регистратор ССЫЛКА Документ.ОприходованиеТМЦ и ТД, это вообще просто можно еще бахнуть в ВТ и взять Минимум(Регистратор)
39 Kigo_Kigo
 
28.06.23
09:13
Я почему то прочитал последние, с этим сложнее, 1С придумала срез последних, а вот Выбрать Последние 1 не придумала, печаль
40 Новиков
 
28.06.23
09:14
(0) ответ будет зависеть от конфы. Назови название.
41 АгентБезопасной Нацио
 
28.06.23
09:25
(40) от конфы, даже от платформы (наверное, даже от учетной системы) - принципиально совершенно не зависит
42 Новиков
 
28.06.23
09:29
(41) зависит, просто ты не в курсе. Это нормально.
43 Гена
 
гуру
28.06.23
09:43
(40) Судя по предыдущим авторским веткам у него ERP с отключённым партионным учётом.
44 Гена
 
гуру
28.06.23
09:48
В третий раз перечитал (0). Скорее всего автор хочет кусок квазипартионного учёта получить. Мысленно представим себе, что как-будто велись партии. Вот автор и хочет увидеть старейший приход по фифе, который ещё не полностью израсходован. Это если я павильно перевёл его мысль )
45 Asmody
 
28.06.23
09:49
неважно какая конфа.
конкретизирую для непонятливых:
сейчас на складе 10 шт.

были такие приходы (не важно какого вида документ):
...
01.06: 8 шт
02.06: 5 шт
03.06: 3 шт
04.06: 2 шт
05.06: 1 шт
---

тогда ответом на вопрос будет приход от 02.06: 5 шт.
46 АгентБезопасной Нацио
 
28.06.23
09:50
(42) не зависит. просто ты не можешь этого представить. это тоже норма ("Закон Соболя-БЖ"™).
47 Гена
 
гуру
28.06.23
09:51
(45) А если внутри были расходы?
48 АгентБезопасной Нацио
 
28.06.23
09:52
(39) придумала.
49 Asmody
 
28.06.23
09:52
(47) Если 19 шт пришло, а 10 осталось? Конечно были, и что?
50 АгентБезопасной Нацио
 
28.06.23
09:53
(47) расходы были из предыдущих партий. Т.е. как я и говорил в (36) - только ему нужны не все, а самый ранний
51 Гена
 
гуру
28.06.23
09:53
...
01.06: 8 шт
02.06: 5 шт

02.06: -7 шт ?

03.06: 3 шт
04.06: 2 шт
05.06: 1 шт
---
52 Asmody
 
28.06.23
09:55
(51) когда был расход - это неважно
53 АгентБезопасной Нацио
 
28.06.23
09:55
(49) а что у тебя есть для остатков? регистр движения номенклатуры есть? или на документах делать?
54 АгентБезопасной Нацио
 
28.06.23
09:56
+(53)  склады - важны?
55 Asmody
 
28.06.23
09:57
(53) обычный регистр остатков.
56 Asmody
 
28.06.23
09:58
(54) не имеет значения, задача от этого не поменяется
57 АгентБезопасной Нацио
 
28.06.23
09:58
(55) момент-Регистратор-Знак-Номенклатура-количество ?
58 АгентБезопасной Нацио
 
28.06.23
09:59
(56) немного - лишний разрез, лишняя связь.
59 Гена
 
гуру
28.06.23
10:00
Какая-то лёгкая задача тогда... просто пускаем время назад и плюсуем приходы до достижения порога.
60 Asmody
 
28.06.23
10:00
(59) в запросе?
61 Гена
 
гуру
28.06.23
10:01
(60) не знаю... это к спецам )
62 Новиков
 
28.06.23
10:03
(46) зависит, просто ты не в курсе.
63 Гена
 
гуру
28.06.23
10:12
Первое, что попалось в инете про обратный перебор:
https://1clenta.ru/pattern/102
64 АгентБезопасной Нацио
 
28.06.23
10:20
(62) я ж говорю, ты соответствуешь  Теореме Соболя-БЖ. Причем, похоже, ее усиленному варианту.
65 АгентБезопасной Нацио
 
28.06.23
10:47
(60) ну как-то так:
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Момент, Номенклатура В (&СписокНоменклатуры)) КАК ТоварыНаСкладахОстатки
;

ВЫБРАТЬ
    ТоварыНаСкладах.Период КАК Период,
    ТоварыНаСкладах.Регистратор КАК Регистратор,
    ТоварыНаСкладах.Номенклатура КАК Номенклатура,
    ТоварыНаСкладах.ВНаличии КАК Приход
ПОМЕСТИТЬ ВТ_Приходы
ИЗ
    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
    ТоварыНаСкладах.Номенклатура В(&СписокНоменклатуры)
    И ТоварыНаСкладах.Период > &ДатаНачалаВремен
    И ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
//    И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПриходныйОрдерНаТовары  // тут ограничь по вкусу
;

ВЫБРАТЬ
    ВТ_Приходы.Период КАК Период,
    ВТ_Приходы.Регистратор КАК Регистратор,
    ВТ_Приходы.Номенклатура КАК Номенклатура,
    ВТ_Остатки.Остаток КАК Остаток,
    СУММА(ВТ_Приходы.Приход) КАК Приход
ПОМЕСТИТЬ ВТ_ФИФО
ИЗ
    ВТ_Остатки КАК ВТ_Остатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Приходы КАК ВТ_Приходы
        ПО (ВТ_Приходы.Номенклатура = ВТ_Остатки.Номенклатура)
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Приходы КАК ВТ_Приходы1
        ПО (ВТ_Приходы.Период <= ВТ_Приходы1.Период)
            И (ВТ_Приходы.Номенклатура = ВТ_Приходы1.Номенклатура)

СГРУППИРОВАТЬ ПО
    ВТ_Остатки.Остаток,
    ВТ_Приходы.Период,
    ВТ_Приходы.Регистратор,
    ВТ_Приходы.Номенклатура

ИМЕЮЩИЕ
    СУММА(ВТ_Приходы.Приход) < ВТ_Остатки.Остаток
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ФИФО.Период КАК Период,
    ВТ_ФИФО.Регистратор КАК Регистратор,
    ВТ_ФИФО.Номенклатура КАК Номенклатура
ИЗ  ВТ_ФИФО КАК ВТ_ФИФО
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ
    МИНИМУМ(ВТ_ФИФО.Период) КАК Период,
    ВТ_ФИФО.Номенклатура КАК Номенклатура
ИЗ
    ВТ_ФИФО КАК ВТ_ФИФО
СГРУППИРОВАТЬ ПО
    ВТ_ФИФО.Номенклатура
    ) КАК ПервоеПоступление
ПО ПервоеПОступление.Период=ВТ_ФИФО.Период
И ПервоеПОступление.Номенклатура=ВТ_ФИФО.Номенклатура
66 azernot
 
28.06.23
10:51
(65) Если в один период два поступления - не сработает. ;)
67 АгентБезопасной Нацио
 
28.06.23
10:53
(66) период тут - секунда. Но вообще можно и от этого легко уйти. но лень.
68 azernot
 
28.06.23
11:56
А у меня вот такой запрос получился.

ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток
ПОМЕСТИТЬ ОстаткиТоваров
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&ПериодОстатков, Номенклатура В (&Номенклатура)) КАК ТоварыНаСкладахОстатки
ГДЕ
    ТоварыНаСкладахОстатки.ВНаличииОстаток > 0
;

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

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладах.Период,
    ТоварыНаСкладах.МоментВремени,
    ТоварыНаСкладах.Регистратор,
    ТоварыНаСкладах.Номенклатура

ИМЕЮЩИЕ
    НЕ СУММА(ТоварыНаСкладах.ВНаличии) = 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Поступления.Период КАК Период,
    Поступления.МоментВремени КАК МоментВремени,
    Поступления.Регистратор КАК Регистратор,
    Поступления.Номенклатура КАК Номенклатура,
    Поступления.Поступление КАК Поступление,
    СУММА(ПоследующиеПоступления.Поступление) КАК СуммаПоступлений
ПОМЕСТИТЬ ПоступленияСНакопительнымИтогомПоследующихПоступлений
ИЗ
    Поступления КАК Поступления
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Поступления КАК ПоследующиеПоступления
        ПО Поступления.Номенклатура = ПоследующиеПоступления.Номенклатура
            И Поступления.МоментВремени <= ПоследующиеПоступления.МоментВремени

СГРУППИРОВАТЬ ПО
    Поступления.Период,
    Поступления.МоментВремени,
    Поступления.Регистратор,
    Поступления.Поступление,
    Поступления.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПоступленияСНакопительнымИтогомПоследующихПоступлений.Период КАК Период,
    ПоступленияСНакопительнымИтогомПоследующихПоступлений.МоментВремени КАК МоментВремени,
    ПоступленияСНакопительнымИтогомПоследующихПоступлений.Регистратор КАК Регистратор,
    ПоступленияСНакопительнымИтогомПоследующихПоступлений.Номенклатура КАК Номенклатура,
    ПоступленияСНакопительнымИтогомПоследующихПоступлений.СуммаПоступлений КАК СуммаПоступлений
ПОМЕСТИТЬ ПоступленияСДостаточнымНакопительнымИтогом
ИЗ
    ПоступленияСНакопительнымИтогомПоследующихПоступлений КАК ПоступленияСНакопительнымИтогомПоследующихПоступлений
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОстаткиТоваров КАК ОстаткиТоваров
        ПО ПоступленияСНакопительнымИтогомПоследующихПоступлений.Номенклатура = ОстаткиТоваров.Номенклатура
            И ПоступленияСНакопительнымИтогомПоследующихПоступлений.СуммаПоступлений >= ОстаткиТоваров.Остаток
;

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

СГРУППИРОВАТЬ ПО
    ПоступленияСДостаточнымНакопительнымИтогом.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
    ПоступленияСДостаточнымНакопительнымИтогом.Номенклатура,
    ПоступленияСДостаточнымНакопительнымИтогом.Период
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОстаткиТоваров.Номенклатура КАК Номенклатура,
    ОстаткиТоваров.Остаток КАК Остаток,
    ПервыеПартииОстатка.ПерваяПартияПоступления КАК ПерваяПартияПоступления,
    ПервыеПартииОстатка.ПоступленияНачинаяСПервойПартии КАК ПоступленияНачинаяСПервойПартии
ИЗ
    ОстаткиТоваров КАК ОстаткиТоваров
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПервыеПартииОстатка КАК ПервыеПартииОстатка
        ПО ОстаткиТоваров.Номенклатура = ПервыеПартииОстатка.Номенклатура


Но на серьёзной базе вряд ли он отработает.
69 Asmody
 
28.06.23
13:27
(65) (68) вот и получается, что без тета-самосоединения эта задача не решается.
70 azernot
 
28.06.23
14:01
(69) Одним запросом - да. А перебором за рамками запроса - можно без мегасоединений.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn