Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Посчитать себестоимость товара прямым запросом

v7: Посчитать себестоимость товара прямым запросом
Я
   zenon46
 
11.02.20 - 16:47
Доброго всем дня!
Никак не получается реализовать расчет себестоимости через прямой запрос. Попытался составить запрос к регистру ПартииНаличие, в итоге получил ведемость по партиям :-), идея такая, нужно по выбранной фирме, собрать все остатки по партиям сложить в валюте и разделить на количество (естественно в разрезе номенклатуры)..так скажем нужна средняя себестоимость.
Заранее спасибо всем кто откликнется.
   Herby
 
1 - 11.02.20 - 16:59
Через виртуальные таблицы делаешь?
Покажи хотя бы запрос, как делаешь.
   zenon46
 
2 - 11.02.20 - 17:02
(1) нет через запрос к регистру "партии наличие"...да показывать особо нечего...получается ведомость по партиям....сильно урезанный запрос
   zenon46
 
3 - 11.02.20 - 17:04
(1) блин, в смысле бессмысленно показывать запрос, я так понимаю он в корне не правильный....видимо нужен другой подход
   Herby
 
4 - 11.02.20 - 17:05
(3) ну ты значит делаешь обычный селект, он как раз тебе и дает только движения по партиям.
читай вот здесь:
https://www.script-coding.com/Direct_queries.html#4.2.
   Herby
 
5 - 11.02.20 - 17:06
(4) пункт - виртуальные таблицы
   zenon46
 
6 - 11.02.20 - 17:14
(5) попробовал так не понятно как получить остаток в сумме, количественный остаток получается нормально:
SELECT
 Рег.Номенклатура AS [Номенклатура],  
 Рег.КоличествоОстаток AS Количество,
 Рег.СуммаОстаток AS СуммаУпр
FROM
 $РегистрОстатки.ПартииНаличие(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = :ВыбТовар,(Номенклатура),(Количество,СуммаУпр)) AS Рег
   Злопчинский
 
7 - 11.02.20 - 17:16
(2) при чем здесь ВЕДОМОСТИЬ по партиям? ведомость - это обороты.
тебе же нужны тупо остатки по партиям.
   zenon46
 
8 - 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 в измерении..?
   zenon46
 
12 - 11.02.20 - 17:24
(10) да без Рег.СуммаОстаток AS СуммаУпр, работает показывает общий свободный остаток по всем партиям, не получается в суммовом выражении получить.
   zenon46
 
13 - 11.02.20 - 17:30
Во, вот так получилось но сумма мне как то не очень нравится, нужно проверять:
SELECT
 Рег.Номенклатура AS [Номенклатура],  
 Рег.КоличествоОстаток AS Количество,
 Рег.СуммаРубОстаток AS СуммаРуб
FROM
 $РегистрОстатки.ПартииНаличие(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = :ВыбТовар,(Номенклатура),(Количество,СуммаРуб)) AS Рег
   Herby
 
14 - 11.02.20 - 17:50
(13) а в измерение случайно Фирму не нужно добавить?
   Herby
 
15 - 11.02.20 - 17:57
или может в ресурсе СуммаРуб нет ничего.
если вычислить ресурс СуммаУпр он совпадает со значениями типовых отчетов?
   zenon46
 
16 - 11.02.20 - 18:40
(15) да вроде норм, сумма была из запроса больше чем в стандартной ведомости, но как оказалось в запросе : сумма + доп.расходы по партии
   Злопчинский
 
17 - 11.02.20 - 18:56
(16) стандартная ведомость покажет те же самые цифры если допрасходы попадают в "период" отчета.
   zenon46
 
18 - 11.02.20 - 19:01
(17) да, не заметил что ведомость гонял без учета НДС, теперь цифры совпали
   Злопчинский
 
19 - 11.02.20 - 19:03
(18) ну и ок!
   zenon46
 
20 - 14.02.20 - 11:01
Подниму темку, ибо понадобилась доработка. Как обойтись одним запросом и реализовать следующую схему: если в последнем приходном документе по товару, в цене стоит 0 (т.е. на приход поставили, НО цену еще не вбили - такое может быть по ряду причин) то себестоимость по этому товару показать как 0. Можно ли такое прикрутить к такому запросу :
|SELECT
|    Рег.Номенклатура               AS [Единица $Справочник.Единицы],    
|    Рег.КоличествоОстаток               AS [Количество $Число],
|    Рег.СуммаРубОстаток               AS [СуммаРуб $Число],
|   Рег.СуммаРубОстаток/Рег.КоличествоОстаток AS [Себестоимость $Число]
|FROM
|   $РегистрОстатки.ПартииНаличие(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура = :ВбрТовар,(Номенклатура),(Количество,СуммаРуб)) AS Рег
   Злопчинский
 
21 - 14.02.20 - 12:57
(20) то есть по регистру у тебя получается ненулевая себестоимость, но показать хочешь именно нулевую..?
   zenon46
 
22 - 14.02.20 - 13:54
(21) не будет она нулевая, это всего лишь по последнему приходу будет нулевая, а так то она будет "общая сумма партий в наличии/общее количество партий в наличии", так вот и надо, если послдений приход с нулевой ценой то в себестоимость указать 0, когда цену проставят тогда и себестоимость посчитается
   zenon46
 
23 - 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.ДатаПослПрихода
   tgu82
 
24 - 14.02.20 - 14:57
(0) Вдохновил! )
Сажусь смотреть прямые запросы. Когда-то на фокспро их тоннами делал. Но увы еще до пенсии это было )

Всех с Днем программиста !!!
Здоровья и как там: кому юниорства кому миддле ну а кому-то и Хай-класс -
короче наилучшие пожелания и благодарность за разумную помощь и поддержку )

Я вот себя считаю пока только неплохим бизнес-логиком
   zenon46
 
25 - 14.02.20 - 15:06
(24) да то что было в (0) давно сделано, через ВТ к регистру ПартииНаличие
   Злопчинский
 
26 - 14.02.20 - 18:52
(22) че ты тупишь? указан приход. цена/сумма=0, количество = N. В регистр упадет "колво=N, себестоимость=0"
что еще надо?!
   zenon46
 
27 - 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) и..? волнуюсь как-то...
   Dmitry1c
 
32 - 17.02.20 - 10:26
ветки имени Злопчинского :)
   Злопчинский
 
33 - 17.02.20 - 10:28
Я злопный, не люблю напрягаться. а тут прямо-таки вынудили... да еще засомневаться в себе... ;-)
мстя будет страшной! ;-)
   Arbuz
 
34 - 17.02.20 - 16:59
два раза прочёл - так и не понял об чём разногласия. вы оба вдвоём утверждаете одно и то же, имхо. зенон же считает типа усреднённой себестоимости по больнице - и если туда попадает партия с нулевой стоимостью, то получается чушь. ну вроде как со скрина уважаемого Злопчинского - 1410/13 = 141, хотя реальная себестоимость первой партии что-то там под пятьсот денег. хотя ставить туда 0 - тоже чушь. исходя из задачи надо исключать эти партии из выборки, опять сугубое имхо.
   Arbuz
 
35 - 17.02.20 - 17:01
(34) пардон 1410/13 = 108 с почти половиной... тяжело в понедельник ;/
   Злопчинский
 
36 - 17.02.20 - 17:11
(34) возможно мы про одно и то же. прсот оменя смущает/смутила фомулировка "так вот и надо, если последний приход с нулевой ценой то в себестоимость указать 0, когда цену проставят тогда и себестоимость посчитается"
   Злопчинский
 
37 - 17.02.20 - 17:13
Смысл моего утвержденяи в том, что я не вижу никакого крмиминала в том, что проведен приход с нулевой суммой.
то что это искажает истинную партионную себестоимость - то вопрос в том что считать истинной партионной себестоимостью. указал юзер сумму=0 в приходе. Документ успешно провел. ЗНАЧИТ ТАК И НАДО. хочешь исключить партии с нулевой себестоимостью - запрещай проводить документ или проводи его для нулеаой себестоимсоти только по остаткам, а по партиям - не проводи.
   Arbuz
 
38 - 17.02.20 - 17:14
(36) кстати да, а если не последний? а если там в партиях, при такой-то чехарде, ещё где нулевая стоимость, тогда что?
   Arbuz
 
39 - 17.02.20 - 17:18
(37) вот это - верно! и по хорошему ещё и разными документами безо всякого: распровёл/поправил/перепровёл/поехала_последовательность
   Злопчинский
 
40 - 17.02.20 - 17:19
(38) я хз что имеет в виду автор "если последний приход с нулевой ценой то в себестоимость указать 0, когда цену проставят тогда и себестоимость посчитается" - онт так и есть сейчас в типовых - если автор говорит об отражении значений внесенных в документы в записях регистров по этому документу.
   Злопчинский
 
41 - 17.02.20 - 17:21
я хз как построена схема ОУ у ТС.
у себя где считаю критично - там стоят жесткие допилы. или "да" или "нет"=система не пропускает.
все что система пропустила или настройки по инициативе пользователя - считается верным.
   Djelf
 
42 - 17.02.20 - 19:30
(41) Согласен на все 100%.
Это не база, а свинарник, когда все делают что хотят, а программист должен вычленять из регистров заведомо кривые данные по неведомому алгоритму.
Чтобы потом, это красиво было в отчете у начальства, но "кривым", по факту отчетом.

Ну бред же, почему только последний приход делать с нулевой ценой?
А давайте все приходы делать с нулевой ценой, или через раз...
(0) Это так не работает.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Миста — веселый ресурс со своими эксклюзивными тараканами Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.