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

v7: Не совпадают значения сумм через запрос и просмотрщик регистров

v7: Не совпадают значения сумм через запрос и просмотрщик регистров
Я
   zenon46
 
07.02.20 - 17:13
Доброго вечера! Ситуация следующая, есть запрос к регистру ПартииНаличие, но в результатх выборки не совпадают суммы как в валюте бух учета так и управленческой, просмотрщик содержимого регистра показывает правильную сумму, в данном случае 100р это доп расходы сверху на поступление, а выборка из запроса показывает почему то просто сумму поступления...как такое вообще может быть ?
вот собственно о чем речь : https://prnt.sc/qyzgi8
вот текст запроса :
    |SELECT
    |    temp.val,
    |    Спр.Code AS Код,    
    |    subsel.Номенклатура AS [Номенклатура $Справочник.Номенклатура],
    |   Isnull(Рег.Date_Time_IDDOC,'-') [ДатаПрих],
    |    $Рег.СуммаРуб AS [СуммаРуб $Число],
    |    $Рег.Количество AS [Количество $Число],    
    |    ($Рег.СуммаРуб/$Рег.Количество) AS [Себестоимость $Число],
    |    $Рег.Партия AS [Партия $Справочник.Партии],
    |    CAST(LEFT(Рег.Date_Time_IDDoc, 8) as DateTime) as ДатаПослПрих,
    |   $Спр.МинОстаток AS [МинОстаток $Число],
    |   $Спр.КолЗаказа AS [КолЗаказа $Число],
    |    balance.Количество 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 Количество
    |FROM
    |    $РегистрОстатки.ОстаткиТМЦ(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура IN (SELECT val FROM #TempTable),(Номенклатура),(Количество)) AS Рег
    |) balance ON temp.val = balance.Номенклатура
    |INNER JOIN
    |    $Справочник.Номенклатура AS Спр ON Спр.ID = temp.val     
    |LEFT JOIN
    |    $Регистр.ПартииНаличие AS Рег ON $Рег.Номенклатура = subsel.Номенклатура AND Рег.Date_time_iddoc=subsel.ДатаПослПрихода
   vicof
 
1 - 07.02.20 - 17:20
Почисть семерочный кэш)))
   GreyK
 
2 - 07.02.20 - 17:50
(0) Называть "запросом" приблуду, которая работает через "дописку", нельзя, пишите "прямой запрос".
   Djelf
 
3 - 07.02.20 - 18:35
Исходя из того что в запросе
    |SELECT
    |    temp.val,
    |    Спр.Code AS Код,    
    |    subsel.Номенклатура AS [Номенклатура $Справочник.Номенклатура],
    |   Isnull(Рег.Date_Time_IDDOC,'-') [ДатаПрих],
    |    $Рег.СуммаРуб AS [СуммаРуб $Число],
    |    $Рег.Количество AS [Количество $Число],    
    |    ($Рег.СуммаРуб/$Рег.Количество) AS [Себестоимость $Число],
    |    $Рег.Партия AS [Партия $Справочник.Партии],
    |    CAST(LEFT(Рег.Date_Time_IDDoc, 8) as DateTime) as ДатаПослПрих,
    |   $Спр.МинОстаток AS [МинОстаток $Число],
    |   $Спр.КолЗаказа AS [КолЗаказа $Число],
    |    balance.Количество AS [Остаток $Число]

отсутствует поле СуммаУпр, ответить на этот вопрос весьма затруднительно.

Рискну предположить что из-за фильтров типа
WHERE
    |   ЖурналДок.iddocdef = $ВидДокумента.ПоступлениеТМЦ_Склад AND    

доп.расходы вообще не учтены в запросе.
   zenon46
 
4 - 07.02.20 - 19:34
(3) так запись по регистру что я показал сделана именно этим видом документа + к нему на основании зацеплен документ доп.расходов
   zenon46
 
5 - 07.02.20 - 19:35
(3) а как их еще учитывать если в записи регистра 6100 а никак не 6000 как выдает запрос...вот я и понять не могу откуда такие разночтения
   zenon46
 
6 - 07.02.20 - 19:35
(2) а это какой запрос, "черный" ?
   zenon46
 
7 - 07.02.20 - 19:38
(3) да если убираю фильтр по виду документа то получаю https://prnt.sc/qz1y76
   zenon46
 
8 - 07.02.20 - 19:40
(3) кажется понял..а как теперь это реализовать? собственно за партию я должен учитывать только док вида "ПоступлениеТМЦ_Склад" + еще как то надо сделать по этой же партии доп.расходы если они есть.
   Salimbek
 
9 - 07.02.20 - 20:04
(4) Вам указали не на "Вид документа", а на то, что кроме СуммаРуб, в вашем регистре, вероятно, есть СуммаУпр. И, чисто теоретически, эти суммы могут отличаться.
   zenon46
 
10 - 07.02.20 - 20:07
(9) это я уже проверил, там все одинаково
   Salimbek
 
11 - 07.02.20 - 20:14
(10) А, тогда хорошо. Доп. расходы - создаются же каким-то документом. Так что можно просто к имеющемуся запросу добавить UNION ALL и сделать выборку с такими же полями по этому, второму виду документов. Если же документы связаны между собой, то еще и найти их где-то в 1SCRCDOC .
   zenon46
 
12 - 07.02.20 - 20:27
(11) Поступление_ДопРасходы таким документом создаются, я полагал что запись то в регистре одна будет Сумма поступления + сумма поступления доп.расходов, но при выборке запросом оказалось не так
   Salimbek
 
13 - 08.02.20 - 20:44
(12) Ну дак, какие движения в каких документах прописал - так и будет писаться. Можно же было в Обработке проведения документа ПоступлениеТМЦ_Склад смотреть, есть ли связанный ДопРасходы и делать соответствующее движение по регистру. Например...
   Злопчинский
 
14 - 08.02.20 - 22:37
(13) имхо нехорошо так делать.
   Злопчинский
 
15 - 08.02.20 - 22:38
(12) с чего бы это одна запись. документы разные - записи регистра под каждый документ свои (если конечно, не извращаться как в 13)
   zenon46
 
16 - 09.02.20 - 12:49
(15) да, уже понял, теперь надо к запросу "прилепить" выборку по этой партии документа доп_расходов.
   Злопчинский
 
17 - 09.02.20 - 14:02
$ВидДокумента.ПоступлениеТМЦ_Склад имхо лучше заменить манипуляциями с Регистр.ПартииНаличие.КодОперации - он там сделан именно для того, чтобы различать варианты движений.
   zenon46
 
18 - 09.02.20 - 16:45
(17) да только есть еще документ ПоступлениеТМЦ и вид операции у них одинаков.
   Злопчинский
 
19 - 09.02.20 - 19:15
(18) а какая разница принципиальная? если они у тебя с одинаковым кодом операции - значит у них и суть одна.
в разница поступления и поступления_склад - если идейно?
   zenon46
 
20 - 10.02.20 - 12:41
(19) да там есть свои особенности в организации бизнес-процессов, схема агента-принципала...именно исходя из этих самых бизнес процессов, отрабатывать нужно именно один вид документа.
Попытался соединить с ДопРасходами...в итоге получаю столько строк сколько по каждому товару было документов доп расходы...ни как нге получается собрать в одну строку...

SELECT
temp.val,
Спр.Code AS Код, 
subsel.Номенклатура AS [Номенклатура $Справочник.Номенклатура], 
Isnull(Рег.Date_Time_IDDOC,'-') [ДатаПрих],
$Рег.СуммаРуб AS [СуммаРуб $Число],
$Рег.Количество AS [Количество $Число], 
($Рег.СуммаРуб/$Рег.Количество) AS [Себестоимость $Число],
$Рег.Партия AS [Партия $Справочник.Партии],
CAST(LEFT(Рег.Date_Time_IDDoc, 8) as DateTime) as ДатаПослПрих,
$Спр.МинОстаток AS [МинОстаток $Число],
$Спр.КолЗаказа AS [КолЗаказа $Число],
balance.Количество AS [Остаток $Число],
subsel_P.СуммаДР 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
 MAX(РегП.Date_Time_IDDOC) AS ДатаПослПриходаДопРасх,
 $РегП.СуммаРуб AS СуммаДР,
 $РегП.Номенклатура AS [Номенклатура]
FROM
 $Регистр.ПартииНаличие as РегП
INNER JOIN
 $Справочник.Партии AS СпрП ON СпрП.ID = $РегП.Партия
WHERE
 $РегП.Фирма = :ВбрФирма AND
 $РегП.Количество = 0
GROUP BY 
  $РегП.Номенклатура,$РегП.СуммаРуб
) subsel_P ON temp.val = subsel_P.Номенклатура

LEFT JOIN
(
SELECT
Рег.Номенклатура AS [Номенклатура],  
Рег.КоличествоОстаток AS Количество
FROM
$РегистрОстатки.ОстаткиТМЦ(:ВыбДата~,,Фирма = :ВбрФирма AND Номенклатура IN (SELECT val FROM #TempTable),(Номенклатура),(Количество)) AS Рег
) balance ON temp.val = balance.Номенклатура

INNER JOIN
$Справочник.Номенклатура AS Спр ON Спр.ID = temp.val  
LEFT JOIN
$Регистр.ПартииНаличие AS Рег ON $Рег.Номенклатура = subsel.Номенклатура AND Рег.Date_time_iddoc=subsel.ДатаПослПрихода
   Salimbek
 
21 - 11.02.20 - 15:17
(20) Ну при Лефт Джойн, так и должно быть.
Тут лучше:
Выборка по ПоступлениеТМЦ_Склад

UNION ALL

Точно такая же Выборка по ДопРасходы


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