|
v7: Посчитать себестоимость товара прямым запросом | ☑ | ||
---|---|---|---|---|
0
zenon46
11.02.20
✎
16:47
|
Доброго всем дня!
Никак не получается реализовать расчет себестоимости через прямой запрос. Попытался составить запрос к регистру ПартииНаличие, в итоге получил ведемость по партиям :-), идея такая, нужно по выбранной фирме, собрать все остатки по партиям сложить в валюте и разделить на количество (естественно в разрезе номенклатуры)..так скажем нужна средняя себестоимость. Заранее спасибо всем кто откликнется. |
|||
1
Herby
11.02.20
✎
16:59
|
Через виртуальные таблицы делаешь?
Покажи хотя бы запрос, как делаешь. |
|||
2
zenon46
11.02.20
✎
17:02
|
(1) нет через запрос к регистру "партии наличие"...да показывать особо нечего...получается ведомость по партиям....сильно урезанный запрос
|
|||
3
zenon46
11.02.20
✎
17:04
|
(1) блин, в смысле бессмысленно показывать запрос, я так понимаю он в корне не правильный....видимо нужен другой подход
|
|||
4
Herby
11.02.20
✎
17:05
|
(3) ну ты значит делаешь обычный селект, он как раз тебе и дает только движения по партиям.
читай вот здесь: https://www.script-coding.com/Direct_queries.html#4.2. |
|||
5
Herby
11.02.20
✎
17:06
|
(4) пункт - виртуальные таблицы
|
|||
6
zenon46
11.02.20
✎
17:14
|
(5) попробовал так не понятно как получить остаток в сумме, количественный остаток получается нормально:
SELECT Рег.Номенклатура AS [Номенклатура], Рег.КоличествоОстаток AS Количество, Рег.СуммаОстаток AS СуммаУпр FROM $РегистрОстатки.ПартииНаличие(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = :ВыбТовар,(Номенклатура),(Количество,СуммаУпр)) AS Рег |
|||
7
Злопчинский
11.02.20
✎
17:16
|
(2) при чем здесь ВЕДОМОСТИЬ по партиям? ведомость - это обороты.
тебе же нужны тупо остатки по партиям. |
|||
8
zenon46
11.02.20
✎
17:17
|
(7) да нужна сумма остатков по партиям, как количественная так и суммовая...
|
|||
9
Злопчинский
11.02.20
✎
17:18
|
(6) Рег.СуммаОстаток AS СуммаУпр
FROM $РегистрОстатки.ПартииНаличие(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = :ВыбТовар,(Номенклатура),(Количество,СуммаУпр)) . я в прямых слаб совсем но меня смущает Рег.СуммаОстаток а в FROM фигурирует (Количество,СуммаУпр) |
|||
10
Злопчинский
11.02.20
✎
17:19
|
сделай тупо сначала без фильтров в From
|
|||
11
Злопчинский
11.02.20
✎
17:23
|
я вообще хз синтаксис но смущает конструкция AND в измерении..?
|
|||
12
zenon46
11.02.20
✎
17:24
|
(10) да без Рег.СуммаОстаток AS СуммаУпр, работает показывает общий свободный остаток по всем партиям, не получается в суммовом выражении получить.
|
|||
13
zenon46
11.02.20
✎
17:30
|
Во, вот так получилось но сумма мне как то не очень нравится, нужно проверять:
SELECT Рег.Номенклатура AS [Номенклатура], Рег.КоличествоОстаток AS Количество, Рег.СуммаРубОстаток AS СуммаРуб FROM $РегистрОстатки.ПартииНаличие(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = :ВыбТовар,(Номенклатура),(Количество,СуммаРуб)) AS Рег |
|||
14
Herby
11.02.20
✎
17:50
|
(13) а в измерение случайно Фирму не нужно добавить?
|
|||
15
Herby
11.02.20
✎
17:57
|
или может в ресурсе СуммаРуб нет ничего.
если вычислить ресурс СуммаУпр он совпадает со значениями типовых отчетов? |
|||
16
zenon46
11.02.20
✎
18:40
|
(15) да вроде норм, сумма была из запроса больше чем в стандартной ведомости, но как оказалось в запросе : сумма + доп.расходы по партии
|
|||
17
Злопчинский
11.02.20
✎
18:56
|
(16) стандартная ведомость покажет те же самые цифры если допрасходы попадают в "период" отчета.
|
|||
18
zenon46
11.02.20
✎
19:01
|
(17) да, не заметил что ведомость гонял без учета НДС, теперь цифры совпали
|
|||
19
Злопчинский
11.02.20
✎
19:03
|
(18) ну и ок!
|
|||
20
zenon46
14.02.20
✎
11:01
|
Подниму темку, ибо понадобилась доработка. Как обойтись одним запросом и реализовать следующую схему: если в последнем приходном документе по товару, в цене стоит 0 (т.е. на приход поставили, НО цену еще не вбили - такое может быть по ряду причин) то себестоимость по этому товару показать как 0. Можно ли такое прикрутить к такому запросу :
|SELECT | Рег.Номенклатура AS [Единица $Справочник.Единицы], | Рег.КоличествоОстаток AS [Количество $Число], | Рег.СуммаРубОстаток AS [СуммаРуб $Число], | Рег.СуммаРубОстаток/Рег.КоличествоОстаток AS [Себестоимость $Число] |FROM | $РегистрОстатки.ПартииНаличие(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = :ВбрТовар,(Номенклатура),(Количество,СуммаРуб)) AS Рег |
|||
21
Злопчинский
14.02.20
✎
12:57
|
(20) то есть по регистру у тебя получается ненулевая себестоимость, но показать хочешь именно нулевую..?
|
|||
22
zenon46
14.02.20
✎
13:54
|
(21) не будет она нулевая, это всего лишь по последнему приходу будет нулевая, а так то она будет "общая сумма партий в наличии/общее количество партий в наличии", так вот и надо, если послдений приход с нулевой ценой то в себестоимость указать 0, когда цену проставят тогда и себестоимость посчитается
|
|||
23
zenon46
14.02.20
✎
14:45
|
Сделал вот так находим последнюю партию сформированную нужным типом документа, и если сумма 0 наш случай, то себестоимость будет 0:
SELECT subsel.Номенклатура AS [Номенклатура $Справочник.Номенклатура], ($Рег.СуммаРуб/$Рег.Количество) AS [ЦенаПослПрих $Число], CASE WHEN ($Рег.СуммаРуб) = 0 THEN 0 ELSE (sebestoimost.СуммаРуб/sebestoimost.Количество) END AS [Себестоимость $Число] FROM #TempTable temp left join ( SELECT $Рег.Номенклатура AS [Номенклатура], MAX(Рег.Date_Time_IDDOC) AS ДатаПослПрихода FROM $Регистр.ПартииНаличие as Рег INNER JOIN _1Sjourn as ЖурналДок ON ЖурналДок.IDDoc = Рег.IDDoc INNER JOIN $Справочник.Партии AS СпрП ON СпрП.ID = $Рег.Партия INNER JOIN $Справочник.Контрагенты AS СпрК ON СпрК.ID = $СпрП.Поставщик WHERE ЖурналДок.iddocdef = $ВидДокумента.ПоступлениеТМЦ_Склад AND $Рег.Номенклатура IN (SELECT val FROM #TempTable) AND $Рег.Фирма = :ВбрФирма AND $СпрП.Поставщик NOT IN (SELECT val FROM #TableKontr) GROUP BY $Рег.Номенклатура ) subsel ON temp.val = subsel.Номенклатура LEFT JOIN ( SELECT Рег.Номенклатура AS [Номенклатура], Рег.КоличествоОстаток AS Количество, Рег.СуммаРубОстаток AS СуммаРуб FROM $РегистрОстатки.ПартииНаличие(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура IN (SELECT val FROM #TempTable),(Номенклатура),(Количество,СуммаРуб)) AS Рег ) sebestoimost ON temp.val = sebestoimost.Номенклатура LEFT JOIN $Регистр.ПартииНаличие AS Рег ON $Рег.Номенклатура = subsel.Номенклатура AND Рег.Date_time_iddoc=subsel.ДатаПослПрихода |
|||
24
tgu82
14.02.20
✎
14:57
|
(0) Вдохновил! )
Сажусь смотреть прямые запросы. Когда-то на фокспро их тоннами делал. Но увы еще до пенсии это было ) Всех с Днем программиста !!! Здоровья и как там: кому юниорства кому миддле ну а кому-то и Хай-класс - короче наилучшие пожелания и благодарность за разумную помощь и поддержку ) Я вот себя считаю пока только неплохим бизнес-логиком |
|||
25
zenon46
14.02.20
✎
15:06
|
(24) да то что было в (0) давно сделано, через ВТ к регистру ПартииНаличие
|
|||
26
Злопчинский
14.02.20
✎
18:52
|
(22) че ты тупишь? указан приход. цена/сумма=0, количество = N. В регистр упадет "колво=N, себестоимость=0"
что еще надо?! |
|||
27
zenon46
15.02.20
✎
11:16
|
(26) нет, сделайте отчет ВедомостьПоПартиям, по товару в котором есть свободный остаток по партиям, а потом последним документом сделайте приход с количеством и пустой ценой, и посмотрите что будет...
|
|||
28
Злопчинский
15.02.20
✎
15:12
|
(27) ок. проверю.
|
|||
29
Злопчинский
15.02.20
✎
16:19
|
(27) "...свободный остаток по партиям"
- по партия либо есть остаток, либо нет. по партиям нет никакого "свободного остатка" это так, к слову. |
|||
30
Злопчинский
15.02.20
✎
16:29
|
(27) Заставляешь ты меня нервничать, не люблю я этого.
Все как я написал. В типовой ТиС работает именно так. без извращений и кривых костылей (можно костыли ставить прямо, а можно криво). https://ibb.co/NSJTqGm https://ibb.co/yk3Mgk2 . ищи у себя кривизну аццкую. не вижу никаких особых причин чтобы в приходе нельзя было указать нулевую сумму. или можно было указать, но это никак не отразилось на партиях. криво у тебя тотально. даже если самописка - думай сильно над архитектурой. на связи. |
|||
31
Злопчинский
17.02.20
✎
10:23
|
(27) и..? волнуюсь как-то...
|
|||
32
Dmitry1c
17.02.20
✎
10:26
|
ветки имени Злопчинского :)
|
|||
33
Злопчинский
17.02.20
✎
10:28
|
Я злопный, не люблю напрягаться. а тут прямо-таки вынудили... да еще засомневаться в себе... ;-)
мстя будет страшной! ;-) |
|||
34
Arbuz
17.02.20
✎
16:59
|
два раза прочёл - так и не понял об чём разногласия. вы оба вдвоём утверждаете одно и то же, имхо. зенон же считает типа усреднённой себестоимости по больнице - и если туда попадает партия с нулевой стоимостью, то получается чушь. ну вроде как со скрина уважаемого Злопчинского - 1410/13 = 141, хотя реальная себестоимость первой партии что-то там под пятьсот денег. хотя ставить туда 0 - тоже чушь. исходя из задачи надо исключать эти партии из выборки, опять сугубое имхо.
|
|||
35
Arbuz
17.02.20
✎
17:01
|
(34) пардон 1410/13 = 108 с почти половиной... тяжело в понедельник ;/
|
|||
36
Злопчинский
17.02.20
✎
17:11
|
(34) возможно мы про одно и то же. прсот оменя смущает/смутила фомулировка "так вот и надо, если последний приход с нулевой ценой то в себестоимость указать 0, когда цену проставят тогда и себестоимость посчитается"
|
|||
37
Злопчинский
17.02.20
✎
17:13
|
Смысл моего утвержденяи в том, что я не вижу никакого крмиминала в том, что проведен приход с нулевой суммой.
то что это искажает истинную партионную себестоимость - то вопрос в том что считать истинной партионной себестоимостью. указал юзер сумму=0 в приходе. Документ успешно провел. ЗНАЧИТ ТАК И НАДО. хочешь исключить партии с нулевой себестоимостью - запрещай проводить документ или проводи его для нулеаой себестоимсоти только по остаткам, а по партиям - не проводи. |
|||
38
Arbuz
17.02.20
✎
17:14
|
(36) кстати да, а если не последний? а если там в партиях, при такой-то чехарде, ещё где нулевая стоимость, тогда что?
|
|||
39
Arbuz
17.02.20
✎
17:18
|
(37) вот это - верно! и по хорошему ещё и разными документами безо всякого: распровёл/поправил/перепровёл/поехала_последовательность
|
|||
40
Злопчинский
17.02.20
✎
17:19
|
(38) я хз что имеет в виду автор "если последний приход с нулевой ценой то в себестоимость указать 0, когда цену проставят тогда и себестоимость посчитается" - онт так и есть сейчас в типовых - если автор говорит об отражении значений внесенных в документы в записях регистров по этому документу.
|
|||
41
Злопчинский
17.02.20
✎
17:21
|
я хз как построена схема ОУ у ТС.
у себя где считаю критично - там стоят жесткие допилы. или "да" или "нет"=система не пропускает. все что система пропустила или настройки по инициативе пользователя - считается верным. |
|||
42
Djelf
17.02.20
✎
19:30
|
(41) Согласен на все 100%.
Это не база, а свинарник, когда все делают что хотят, а программист должен вычленять из регистров заведомо кривые данные по неведомому алгоритму. Чтобы потом, это красиво было в отчете у начальства, но "кривым", по факту отчетом. Ну бред же, почему только последний приход делать с нулевой ценой? А давайте все приходы делать с нулевой ценой, или через раз... (0) Это так не работает. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |