Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Проблема с получением остатка по товарам прямым запросом (число прочтений - 5948 )
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Проблема с получением остатка по товарам прямым запросом
16. Мая 2014 :: 10:49
Печать  
Всем привет.

Что-то произошло, с базой, перестали работать отчеты на классе ПрямойЗапрос, где используются ВТ, в частности в $БИОстатки.

База файловая. Бух итоги пересчитывал, файлы с рассчитанными итогами удалял, результата 0.

Есть отчет по планированию закупки, перестал выводить кусок с остатками, я начал проверять где затык.

В итоге в тестовом примере запрос ниже работает

Код
Выбрать все
ВЫБРАТЬ
	|                                  
	|                                   БухИт.Субконто1 КАК ТоварБИ,
	|                                   СУММА(БухИт.КоличествоОстаток) КАК КоличествоОстаток
	|    
	|                                   ИЗ
	|                              
	| 										$БИОстатки.Основной(:ГраницаКонтроля~,#СзСчетов41_1,(Субконто1),(Количество), (Субконто2 = :ВыбСклад)
	|										 ,) КАК БухИт
	|									СГРУППИРОВАТЬ БухИт.Субконто1
 



разбор

Код
Выбрать все
SELECT
                                  
                                   БухИт.Субконто1 AS ТоварБИ,
                                   SUM(БухИт.КоличествоОстаток) AS КоличествоОстаток
    
                                   FROM
                              
 										(
	SELECT
		Счет
		,Валюта
		,Субконто1,Субконто1_вид

		,SUM(КоличествоОстаток) КоличествоОстаток
		,CASE WHEN SUM(КоличествоОстаток) > 0 THEN SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокДт
		,CASE WHEN SUM(КоличествоОстаток) < 0 THEN -SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокКт
	FROM (
		SELECT
			bkttl_vt.ACCID AS Счет
			,bkttl_vt.CURRID AS Валюта
			,bkttl_vt.SC0 Субконто1
			,bkttl_vt.VSC0 Субконто1_вид

			,CASE WHEN bkttl_vt.KIND = '3' THEN bkttl_vt.SD+bkttl_vt.OBDT1 - bkttl_vt.OBKT1 + bkttl_vt.OBDT2 - bkttl_vt.OBKT2 + bkttl_vt.OBDT3 - bkttl_vt.OBKT3 ELSE 0 END AS КоличествоОстаток
		FROM
			__1S_BKTTL bkttl_vt
		INNER JOIN vt_СзСчетов41_1 accfilter
		ON bkttl_vt.ACCID = accfilter.val
		WHERE (bkttl_vt.DATE = '20140401')
		AND (bkttl_vt.KIND = '3')

		AND (bkttl_vt.SC1 = '     3   ')


		) AS accountingbalance
	GROUP BY
		Счет,Валюта
		,Субконто1,Субконто1_вид

	HAVING (SUM(КоличествоОстаток) <> 0)
) AS БухИт
									GROUP BY БухИт.Субконто1
 



как только вставляю кусок по выборке из справочника номенклатуры с левым соеденением, остатки пустые


Код
Выбрать все
	|          ВЫБРАТЬ
	|          
	|               $СпрНоменклатура.ТекущийЭлемент КАК Товар,
	|               ТаблицаБИ.КоличествоОстаток КАК КоличествоОстаток
	|          
	|          ИЗ Справочник.Номенклатура КАК СпрНоменклатура $nolock
	|
	|          ЛЕВОЕ СОЕДИНЕНИЕ
	|
	|                         (
	|												ВЫБРАТЬ
	|                                  
	|                                   БухИт.Субконто1 КАК ТоварБИ,
	|                                   СУММА(БухИт.КоличествоОстаток) КАК КоличествоОстаток
	|    
	|                                   ИЗ
	|                              
	| 										$БИОстатки.Основной(:ГраницаКонтроля~,#СзСчетов41_1,(Субконто1),(Количество), (Субконто2 = :ВыбСклад)
	|										 ,) КАК БухИт
	|									СГРУППИРОВАТЬ БухИт.Субконто1
	|) КАК ТаблицаБИ
	|          ПО ТаблицаБИ.ТоварБИ = $СпрНоменклатура.ТекущийЭлемент
	|";

 



разбор

Код
Выбрать все
SELECT
          
               СпрНоменклатура.ID AS Товар,
               ТаблицаБИ.КоличествоОстаток AS КоличествоОстаток
          
          FROM [Справочник.Номенклатура] AS СпрНоменклатура

          LEFT JOIN

                         (
												SELECT
                                  
                                   БухИт.Субконто1 AS ТоварБИ,
                                   SUM(БухИт.КоличествоОстаток) AS КоличествоОстаток
    
                                   FROM
                              
 										(
	SELECT
		Счет
		,Валюта
		,Субконто1,Субконто1_вид

		,SUM(КоличествоОстаток) КоличествоОстаток
		,CASE WHEN SUM(КоличествоОстаток) > 0 THEN SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокДт
		,CASE WHEN SUM(КоличествоОстаток) < 0 THEN -SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокКт
	FROM (
		SELECT
			bkttl_vt.ACCID AS Счет
			,bkttl_vt.CURRID AS Валюта
			,bkttl_vt.SC0 Субконто1
			,bkttl_vt.VSC0 Субконто1_вид

			,CASE WHEN bkttl_vt.KIND = '3' THEN bkttl_vt.SD+bkttl_vt.OBDT1 - bkttl_vt.OBKT1 + bkttl_vt.OBDT2 - bkttl_vt.OBKT2 + bkttl_vt.OBDT3 - bkttl_vt.OBKT3 ELSE 0 END AS КоличествоОстаток
		FROM
			__1S_BKTTL bkttl_vt
		INNER JOIN vt_СзСчетов41_1 accfilter
		ON bkttl_vt.ACCID = accfilter.val
		WHERE (bkttl_vt.DATE = '20140401')
		AND (bkttl_vt.KIND = '3')

		AND (bkttl_vt.SC1 = '     3   ')


		) AS accountingbalance
	GROUP BY
		Счет,Валюта
		,Субконто1,Субконто1_вид

	HAVING (SUM(КоличествоОстаток) <> 0)
) AS БухИт
									GROUP BY БухИт.Субконто1
) AS ТаблицаБИ
          ON ТаблицаБИ.ТоварБИ = СпрНоменклатура.ID
 



В чем может быть проблема подскажите.
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #1 - 16. Мая 2014 :: 11:50
Печать  
Загнал в консоль прямо в предприятие, заменив джой с временной табличкой счетов на явное указание счета 41.1

Код
Выбрать все
SELECT
		   СпрНоменклатура.ID AS Товар,
		   ТаблицаБИ.КоличествоОстаток AS КоличествоОстаток

	    FROM Справочник.Номенклатура AS СпрНоменклатура

	    LEFT JOIN

				 (
					   SELECT

					     БухИт.Субконто1 AS ТоварБИ,
					     SUM(БухИт.КоличествоОстаток) AS КоличествоОстаток

					     FROM

 										(
	SELECT
		Счет
		,Валюта
		,Субконто1,Субконто1_вид

		,SUM(КоличествоОстаток) КоличествоОстаток
		,CASE WHEN SUM(КоличествоОстаток) > 0 THEN SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокДт
		,CASE WHEN SUM(КоличествоОстаток) < 0 THEN -SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокКт
	FROM (
		SELECT
			bkttl_vt.ACCID AS Счет
			,bkttl_vt.CURRID AS Валюта
			,bkttl_vt.SC0 Субконто1
			,bkttl_vt.VSC0 Субконто1_вид

			,CASE WHEN bkttl_vt.KIND = '3' THEN bkttl_vt.SD+bkttl_vt.OBDT1 - bkttl_vt.OBKT1 + bkttl_vt.OBDT2 - bkttl_vt.OBKT2 + bkttl_vt.OBDT3 - bkttl_vt.OBKT3 ELSE 0 END AS КоличествоОстаток
		FROM
			__1S_BKTTL bkttl_vt
		WHERE (bkttl_vt.DATE = '20140401')
		AND (bkttl_vt.KIND = '3')

		AND (bkttl_vt.SC1 = '     3   ')
AND (bkttl_vt.ACCID = '    1N   ')

		) AS accountingbalance
	GROUP BY
		Счет,Валюта
		,Субконто1,Субконто1_вид

	HAVING (SUM(КоличествоОстаток) <> 0)
) AS БухИт
									GROUP BY БухИт.Субконто1
) AS ТаблицаБИ
	    ON ТаблицаБИ.ТоварБИ = СпрНоменклатура.ID

 




пустоту выдает.
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #2 - 16. Мая 2014 :: 12:36
Печать  
Кое что нарыл, первое субконто из таблички временных итогов по счету 41.1 перестало типизироватся вообще

т.е. если сделать вот так

БухИт.Субконто1 [Товар $Справочник.Номенклатура]

то получаю пустоту

осталось понять почему это произошло и что с этим делать..

  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #3 - 16. Мая 2014 :: 12:41
Печать  
Вот так работает

БухИт.Субконто1 [Субконто1 $Субконто],
БухИт.Субконто1_вид как Субконто1_вид

вот так НЕ работает

БухИт.Субконто1 [Товар $Справочник.Номенклатура]
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #4 - 19. Мая 2014 :: 03:53
Печать  
Ну, возможно, поменяли тип этого "Субконто" с конкретного справочника, на неопределенный справочник.
  
Наверх
ICQ  
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #5 - 19. Мая 2014 :: 07:32
Печать  
Разобрался, весь косяк из-за добавления ВидаСубконто с типом документ, и галкой отбор.
Причем этот вид субконто не является аналитикой ни в одном из счетов, т.е. просто добавлен и все.
Ошибка воспроизводится только на dbf, при загрузки базы на sql все работает нормально.
Теперь вот не понятно что с этим делать, кроме перехода на скл.
Вид субконто по документам мне нужен..
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #6 - 19. Мая 2014 :: 07:40
Печать  
И это видимо ошибка в классе ПрямойЗапрос
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #7 - 21. Мая 2014 :: 11:35
Печать  
Нет, класс тут не причем.
По-умолчанию, все субконто определенного вида, в табличке бух итогов храняться как SC1...N как ID9

Ты поменял на неопределенный вид, теперь в табличке, все они как ID13

Теперь для типизации и фильтра нужно добавлять (или брать правые 9 символов)  вид справочника/документа
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #8 - 21. Мая 2014 :: 11:40
Печать  
Спасибо, но вот я пишу вот так


Код
Выбрать все
SELECT СпрНоменклатура.ID AS [Товар $Справочник.Номенклатура],
	 ТаблицаБИ.КоличествоОстаток AS КоличествоОстаток
FROM Справочник.Номенклатура AS СпрНоменклатура
LEFT JOIN
  (SELECT БухИт.Субконто1 AS ТоварБИ,
	    SUM(БухИт.КоличествоОстаток) AS КоличествоОстаток
   FROM
     (SELECT Субконто1,
		 SUM(КоличествоОстаток) КоличествоОстаток ,
						CASE WHEN SUM(КоличествоОстаток) > 0 THEN SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокДт ,
																		    CASE WHEN SUM(КоличествоОстаток) < 0 THEN -SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокКт
	FROM
	  (SELECT bkttl_vt.SC0 Субконто1 ,
				     CASE WHEN bkttl_vt.KIND = '3' THEN bkttl_vt.SD+bkttl_vt.OBDT1 - bkttl_vt.OBKT1 + bkttl_vt.OBDT2 - bkttl_vt.OBKT2 + bkttl_vt.OBDT3 - bkttl_vt.OBKT3 ELSE 0 END AS КоличествоОстаток
	   FROM Остатки bkttl_vt
	   WHERE (bkttl_vt.DATE = '20140401')
	     AND (bkttl_vt.KIND = '3')
	     AND (bkttl_vt.SC1 = '     3   ')
	     AND (bkttl_vt.ACCID = '    1N   ')) AS accountingbalance
	GROUP BY Субконто1 HAVING (SUM(КоличествоОстаток) <> 0)) AS БухИт
   GROUP BY БухИт.Субконто1) AS ТаблицаБИ ON ПРАВО(ТаблицаБИ.ТоварБИ,9) = СпрНоменклатура.ID
 



результат такой же..
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #9 - 21. Мая 2014 :: 11:42
Печать  
Да и не понятно почему на скл все работает..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #10 - 21. Мая 2014 :: 11:45
Печать  
AND (bkttl_vt.SC1 = '     3   ')

тут ошибка

делай хотя бы right (bkttl_vt.SC1,9) = '.....траляля'
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #11 - 21. Мая 2014 :: 11:45
Печать  
Хотя, правильнее правое выражение до 13 достроить..прибавив видСправочника/ВидДокумента слева.
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #12 - 21. Мая 2014 :: 11:50
Печать  
Eprst писал(а) 21. Мая 2014 :: 11:45:
AND (bkttl_vt.SC1 = '     3   ')

тут ошибка

делай хотя бы right (bkttl_vt.SC1,9) = '.....траляля'



Да но это именно класс так делает.. это ж разбор с класса.
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #13 - 21. Мая 2014 :: 11:52
Печать  
Я так понимаю это разбор с этого:

(Субконто2 = :ВыбСклад)


  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #14 - 21. Мая 2014 :: 11:59
Печать  
да, добавь вид склада (яя не помню ужо, можно ли модификатором в Подставлять в 1sqlite сразу получить вид+id в подставляемом параметре, смотри доку)
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #15 - 21. Мая 2014 :: 12:17
Печать  
Спасибо огромное.
  
Наверх
 
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #16 - 21. Мая 2014 :: 12:55
Печать  
Кстати почему на SQL работает, я так и не понял..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #17 - 21. Мая 2014 :: 13:04
Печать  
мне лень смотреть, если честно
Улыбка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #18 - 23. Мая 2014 :: 11:19
Печать  
Лечится так:
1. В качестве отбора написать ПОДСТРОКА(Субконто1, 4, 9) = :Параметр
2. В качестве значения передать Субконто1 = :Параметр~

По поводу к классу вопрос или нет, я счас посмотрю. Как раз хотел поставщика допилить мелочи и заодно гляну.
Но за столько времени первый вопрос по моему такой.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Попытка1С
1c++ donor
Отсутствует


Делал все, иногда быстро.

Сообщений: 103
Местоположение: Санкт-Петербург
Зарегистрирован: 28. Февраля 2008
Пол: Мужской
Re: Проблема с получением остатка по товарам прямым запросом
Ответ #19 - 20. Июня 2014 :: 10:13
Печать  
vandalsvq писал(а) 23. Мая 2014 :: 11:19:
Лечится так:
1. В качестве отбора написать ПОДСТРОКА(Субконто1, 4, 9) = :Параметр
2. В качестве значения передать Субконто1 = :Параметр~

По поводу к классу вопрос или нет, я счас посмотрю. Как раз хотел поставщика допилить мелочи и заодно гляну.
Но за столько времени первый вопрос по моему такой.


Спасибо за совет. А на счет класса удалось посмотреть?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать