Вход | Регистрация
 

изобрел получение ближайшей закупочной на момент продажи

изобрел получение ближайшей закупочной на момент продажи
Я
   Гений 1С
 
14.07.21 - 18:44
Я просто ранее никогда таким способом не пользовался, что скажете коллеги, все ли ок?
Или есть способы проще.

Фишечка в соединении двух одинаковых запросов.
В общем, в итог попадают те закупочные цены, у которых нет более поздних закупочных цен.

Мне такой способ никогда раньше в голову не приходил, а тут само родилось как-то.

Вот текст запроса:

ВЫБРАТЬ
    ТО.Услуга КАК Номенклатура,
    ТО.Ссылка.Дата КАК Дата,
    ТО.Количество КАК Количество,
    ЕСТЬNULL(ТП.Цена, 0) КАК ЦенаЗакупочная
ИЗ
    Документ.Наряд.Услуги КАК ТО
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ТМ.Номенклатура КАК Номенклатура,
            ТМ.Ссылка.Дата КАК Дата,
            ТМ.Ссылка КАК Ссылка,
            ТМ.Цена КАК Цена
        ИЗ
            Документ.ПоступлениеМатериалов.Материалы КАК ТМ
        ГДЕ
            ТМ.Ссылка.Дата <= &КонецПериода) КАК ТП
        ПО (ТП.Номенклатура = ТО.Услуга)
            И (ТП.Дата <= ТО.Ссылка.Дата)
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ТМ.Номенклатура КАК Номенклатура,
            ТМ.Ссылка.Дата КАК Дата,
            ТМ.Ссылка КАК Ссылка,
            ТМ.Цена КАК Цена
        ИЗ
            Документ.ПоступлениеМатериалов.Материалы КАК ТМ
        ГДЕ
            ТМ.Ссылка.Дата <= &КонецПериода) КАК ТП2
        ПО (ТП2.Номенклатура = ТО.Услуга)
            И (ТП2.Дата <= ТО.Ссылка.Дата)
            И (ТП2.Дата > ТП.Дата
                ИЛИ ТП2.Дата = ТП.Дата
                    И ТП2.Ссылка > ТП.Ссылка)
ГДЕ
    (ТП.Ссылка ЕСТЬ NULL
            ИЛИ ТП2.Ссылка ЕСТЬ NULL)
    И ТО.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
   BeerHelpsMeWin
 
1 - 14.07.21 - 18:47
РС.ЦеныНоменклатуры.СрезПоследних(&НужнаяДата, ВидЦены=&ВидЦеныЗакупочная)
   nicxxx
 
2 - 14.07.21 - 18:47
   Fragster
 
4 - 14.07.21 - 18:51
главное, что результат не совсем верный, а так пофиг
   Вафель
 
5 - 14.07.21 - 18:51
Коррелированные подзапросы не так делаются.
Делаешь соединение с нужной таблицей по всем полям, а дата в (выбрать первые 1 ... Где номенклатура = основнойзапррс.номенклатура)
   Новый1сник2
 
6 - 14.07.21 - 18:54
(0) (1) "РС.ЦеныНоменклатуры.СрезПоследних(&НужнаяДата, ВидЦены=&ВидЦеныЗакупочная)", что еще нужно?
   Гений 1С
 
7 - 14.07.21 - 18:54
(1) (6) мдя, мелко сударь, мелко. Речь о дате на момент регистратора, &НужнаяДата - она гулящая.
(2) Получая 1800 в час, несложно, сударь. Это преимущество ИП
(4) в чем неверность?
(5) не выйдет, там динамический отбор по дате продажи.
   Fragster
 
8 - 14.07.21 - 18:56
(7) подумай, что будет, если будет более одного поступления в периоде
   Fragster
 
9 - 14.07.21 - 18:56
и да, куда ты деваешь то время, которое ты экономишь на набирании псевдонимов таблиц?
   Новый1сник2
 
10 - 14.07.21 - 18:57
(7) ну добавь там конец дня, задача то какая?
   Новый1сник2
 
11 - 14.07.21 - 18:58
и это поступление материалов, могут быть и другие поступления
   Ненавижу 1С
 
12 - 14.07.21 - 19:01
Гений изобрел срез последних на произвольные даты
Скоро фифо в запросе реализует
   Новый1сник2
 
13 - 14.07.21 - 19:07
(0) "В общем, в итог попадают те закупочные цены, у которых нет более поздних закупочных цен." смотрим (10)
   Гений 1С
 
14 - 14.07.21 - 19:08
(10) надо не на конец дня, а на регистратор.
   Новый1сник2
 
15 - 14.07.21 - 19:12
(14) а смысл, есть поступление материалов или поступление товаров, чем тебе поможет регистратор?
   Новый1сник2
 
16 - 14.07.21 - 19:13
или в течении дня цены меняются как на морковку?
   Новый1сник2
 
17 - 14.07.21 - 19:22
теперь понятен замысел правительства по отказу от долларов, теперь в  обменных пунктах, вместо доллара будет стоимость морковки))) как я сразу не догадался))
   H A D G E H O G s
 
18 - 14.07.21 - 19:24
Находятся люди, которые читают ветки Сергея, я им удивляюсь.

P.S. я здесь, чтобы удивиться, а не читать.
   Вафель
 
19 - 14.07.21 - 19:26
(7) именно так и делается
ВЫБРАТЬ
    ТО.Услуга КАК Номенклатура,
    ТО.Ссылка.Дата КАК Дата,
    ТО.Количество КАК Количество,
    ЕСТЬNULL(ТМ.Цена, 0) КАК ЦенаЗакупочная
ИЗ
    Документ.Наряд.Услуги КАК ТО
        ЛЕВОЕ СОЕДИНЕНИЕ  Документ.ПоступлениеМатериалов.Материалы КАК ТМ
        ПО ТО.Услуга = ТМ.Номенклатура
         И ТМ.Ссылка.Дата В (ВЫБРАТЬ ПЕРВЫЕ 1
            ТМ.Ссылка.Дата КАК Дата
        ИЗ
            Документ.ПоступлениеМатериалов.Материалы КАК ТМ1
        ГДЕ
            ТМ1.Номенклатура = ТО.Услуга
            ТМ1.Ссылка.Дата <= ТО.Ссылка.Дата
        УПОРЯДОЧИТЬ ПО
            Дата УБЫВ) КАК ТП

   Prog111
 
20 - 14.07.21 - 19:28
"ТО", "ТМ" и "ТП" - как-то некошерно.
   Вафель
 
21 - 14.07.21 - 19:29
тут конечно не хватает условия на проведенность, но у гени тоже нте
   BeerHelpsMeWin
 
22 - 14.07.21 - 19:29
(7) Да, это я не посмотрел. Давно не видел такого говнокода, отвык. Могу научить срезу последних на произвольные даты. Ну и в моей среде общения и таблицы называют нормально, и выборку по документам не делают.
(18) это ж одновременно развлечение, разминка для мозгов и повышение квалификации - улыбнись, как забавно сделано и подумай, как сделать правильно. Бонус - попробуй угадать, что на самом деле хотел сделать автор.
   Новый1сник2
 
23 - 14.07.21 - 19:30
(18) ну как бы демократия, читаем что приглянулось
   Вафель
 
24 - 14.07.21 - 19:30
(19) хотя лучше не дату в (...) делать, а ссылка в (...)
   Вафель
 
25 - 14.07.21 - 19:32
ВЫБРАТЬ
    ТО.Услуга КАК Номенклатура,
    ТО.Ссылка.Дата КАК Дата,
    ТО.Количество КАК Количество,
    ЕСТЬNULL(ТМ.Цена, 0) КАК ЦенаЗакупочная
ИЗ
    Документ.Наряд.Услуги КАК ТО
        ЛЕВОЕ СОЕДИНЕНИЕ  Документ.ПоступлениеМатериалов.Материалы КАК ТМ
        ПО ТО.Услуга = ТМ.Номенклатура
         И ТМ.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 1
            ТМ1.Ссылка КАК Ссылка
        ИЗ
            Документ.ПоступлениеМатериалов.Материалы КАК ТМ1
        ГДЕ
            ТМ1.Номенклатура = ТО.Услуга
            И ТМ1.Ссылка.Дата <= ТО.Ссылка.Дата
            И ТМ1.Ссылка.Проведен
        УПОРЯДОЧИТЬ ПО
            ТМ1.Ссылка.Дата УБЫВ) КАК ТП

   H A D G E H O G s
 
26 - 14.07.21 - 19:32
(22) спасибо, не надо. Я вчера весь день угадывал, что хотел сказать автор, когда erp передачей материалов в производство плодила отрицательные остатки по себестоимости.
   BeerHelpsMeWin
 
27 - 14.07.21 - 19:35
(26) Это заняло так долго потому, что у вас нет опыта угадывания, что хотел сделать ТС! :)
   NorthWind
 
28 - 14.07.21 - 19:43
(7) 1800 в час - несложно, а вот гарантированные 200 в месяц - не так-то просто.
   Гений 1С
 
29 - 14.07.21 - 22:08
(25) о, спасибо, про выбрать Первые 1 во вложенном запросе тоже только счас узнал, раньше максимум юзал.
(16) почему в течении дня? у тебя есть продажи за месяц, нужно с-сть посчитать этих продаж. На каждую продажу нужно извлекать последнюю закупочную цену, в течении месяца она может менятся. Тем более отчет можно выполнять за квартал.
   Гений 1С
 
30 - 14.07.21 - 22:10
(28) это всего 111 часов. у меня выработка 80 в месяц, мне хватает.
 
 
   mikecool
 
31 - 14.07.21 - 22:13
(0) про данные регистров когда вспомнишь?
   Гений 1С
 
32 - 14.07.21 - 22:42
(31) ты о чем?
   Ненавижу 1С
 
33 - 15.07.21 - 00:11
(32) у документов даже проверку на проведение не организовал
   assasu
 
34 - 15.07.21 - 07:24
(0) если в запросах баловаться с условиями на "<" и ">" можно и не такое еще получить.
   Гений 1С
 
35 - 15.07.21 - 08:14
(33) не ищи пятна на Солнце
   BaZZiL
 
36 - 15.07.21 - 10:55
Прочитал как "ближайшей закусочной")
   Krendel
 
37 - 15.07.21 - 10:57
(0) Работа Регистра сведений выполненная ректальным запросом?
   Лефмихалыч
 
38 - 15.07.21 - 11:02
(0) печально, что ты так из 8.0 и не вырос
   Classic
 
39 - 15.07.21 - 11:42
(29)
"Выбрать первые" универсальней.
например если тебе надо сортировать не только по дате, а и еще по какому-то критерию.
   Гений 1С
 
40 - 15.07.21 - 11:54
(37) Ты будешь удивлен, но даже к периодическому регистру сведений нужен такой запрос если на дату регистратора нужен показатель
Опыта маловато, да?
   Chameleon1980
 
41 - 15.07.21 - 12:55
снова "изобрёл"
запатентовал?
   WebberNSK
 
42 - 15.07.21 - 13:36
(0)
Вот 1С написали стандарты разработки, чтобы люди, не умеющие писать запросы правильно не допускали "детские" ошибки. Но нет, и стандарты нам тоже использовать не хочется...
   acht
 
43 - 15.07.21 - 13:43
(42) Да кто вы такие, чтобы указывать Солнцу (35)?
   Гений 1С
 
44 - 15.07.21 - 14:29
(41) Кстати, через соединения быстрее работает, но через В Первые проще воспринимается.

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

Тут важно, что ТМВ сортировать надо не только по дате, но и по ссылке, чтобы в обоих таблицах ТМВ была гарантированно выбрана одна и та же накладная поступления (если их будет две с одинаковой датой).


Жаль, что вот так нельзя, было бы лаконично:

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

Если использовать ссылку, могут быть проблемы если в документе две одинаковые строки
   Гений 1С
 
45 - 15.07.21 - 14:30
(42) о каком стандарте идет речь?


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.