Имя: Пароль:
1C
1C 7.7
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) Это так не работает.