Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Как получить из журнала расчетов записи указанного вида? (число прочтений - 5326 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Как получить из журнала расчетов записи указанного вида?
19. Сентября 2008 :: 11:24
Печать  
В общем запрос работает отлично.
Теперь понадобилось выбрать записи только определенного вида расчета.
Поставил такое условие в запрос:

Код
Выбрать все
пЗапрос = СоздатьОбъект("ODBCRecordset");
	ТекстЗапроса="
	|SELECT
	|	ЖР.ids AS [Абонент $Справочник.Абоненты],
	|	ЖР.idalg AS [ВидРасч $ВидРасчета],
	|	ЖР.result AS СуммаЗаписи,
	|	ЖР.period AS ПериодРегистрации,
	|	ЖР.recalc AS Признаки,
	|	ЖР.dateb AS ДатаНачала,
	|	ЖР.datee AS ДатаОкончания,
	|	ЖР.IDDoc as [ТекущийДокумент $Документ],
	|	ЖурналДокументов.IDDocDef as ТекущийДокумент_вид
	|
	|
	|FROM
	|	$ЖурналРасчетов.ЖурналОплаты AS ЖР
	|	LEFT OUTER JOIN
	|	_1Sjourn AS ЖурналДокументов ON ЖР.IDDoc = ЖурналДокументов.IDDoc
	|
	|WHERE
	|	(ЖР.idalg = :пВидРасчета)";

	пЗапрос.УстановитьТекстовыйПараметр("пВидРасчета", ВидРасчета.Оплата);

	пТабЗапроса = пЗапрос.ВыполнитьИнструкцию(ТекстЗапроса);

 



... не работает.

Как правильно надо сделать?
  
Наверх
ICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #1 - 22. Сентября 2008 :: 06:49
Печать  
Код
Выбрать все
ТекстЗапроса="
	|SELECT
	|	ЖР.ids AS [Абонент $Справочник.Абоненты],
	|	ЖР.idalg AS [ВидРасч $ВидРасчета],
	|	ЖР.result AS СуммаЗаписи,
	|	ЖР.period AS ПериодРегистрации,
	|	ЖР.recalc AS Признаки,
	|	ЖР.dateb AS ДатаНачала,
	|	ЖР.datee AS ДатаОкончания,
	|	ЖР.IDDoc as [ТекущийДокумент $Документ],
	|	ЖурналДокументов.IDDocDef as ТекущийДокумент_вид
	|
	|
	|FROM
	|	$ЖурналРасчетов.ЖурналОплаты AS ЖР
	|	LEFT OUTER JOIN
	|	_1Sjourn AS ЖурналДокументов ON ЖР.IDDoc = ЖурналДокументов.IDDoc
	|
	|WHERE
	|	(ЖР.idalg = '"+глMDW.ЗначениеВСтрокуБД(ВидРасчета.Оплата)+"')"; 


где:
глMDW = СоздатьОбъект("MetaDataWork");

По идее что то с установкой и преобразованием параметра, посмотри в профайлере текст запроса.
  
Наверх
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #2 - 22. Сентября 2008 :: 08:25
Печать  
Так все равно не работает,

глMDW.ЗначениеВСтрокуБД(ВидРасчета.Оплата) возвращает значение - 95. Я посмотрел значения поля IDALG в таблице журнала расчетов - там такого значения вообще нет! Хотя записи с видом расчета ВидРасчета.Оплата в журнале есть.

И еще тип поля idalg - целое число.

Как быть?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #3 - 22. Сентября 2008 :: 08:42
Печать  
Что же молчат разработчики?
Помогите пожалуйста разобраться
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #4 - 22. Сентября 2008 :: 09:01
Печать  
вот такой 1с-ский запрос:

Код
Выбрать все
	ТекстЗапроса =
	"//{{ЗАПРОС(Сформировать)
	|Период с НачДата по КонДата;
	|Обрабатывать НеПомеченныеНаУдаление;
	//|Без итогов;
	//|ТекущийДокумент = ЖурналРасчетов.ЖурналОплаты.ТекущийДокумент;
	|Объект = ЖурналРасчетов.ЖурналОплаты.Объект;
	|Результат = ЖурналРасчетов.ЖурналОплаты.Результат;
	|ВидРасч = ЖурналРасчетов.ЖурналОплаты.ВидРасч;
	|Функция РезультатСумма = Сумма(Результат);
	|Группировка Объект;
	|Условие(ВидРасч = ВидРасчета.Оплата);
	|"//}}ЗАПРОС
	;
 



в профайлере выглядит так:

Код
Выбрать все
declare @P1 int
set @P1=180150004
declare @P2 int
set @P2=2
declare @P3 int
set @P3=1
declare @P4 int
set @P4=-1
exec sp_cursoropen @P1 output, N'select SC55.DESCR,CJ118.IDS,CJ118.RESULT ,CJ118.RESULT,CJ118.IDALG
from  CJ118(NOLOCK) left outer join SC55(NOLOCK) on CJ118.IDS=SC55.ID
where CJ118.PERIOD = ''20080701M''', @P2 output, @P3 output, @P4 output
select @P1, @P2, @P3, @P4 



условия по виду расчета вообще не видно
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #5 - 22. Сентября 2008 :: 09:36
Печать  
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #6 - 22. Сентября 2008 :: 09:51
Печать  
спасибо, сейчас попробую
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #7 - 22. Сентября 2008 :: 09:55
Печать  
такой вариант:

Код
Выбрать все
		|	(ЖР.idalg = $ВидРасчета.Оплата)";
 



работает
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #8 - 22. Сентября 2008 :: 09:57
Печать  
значит в той теме действительно правильно сказано, что метапарсер 1С++ работает с ошибкой:

berezdetsky писал(а) 30. Ноября 2006 :: 11:48:
SisterHo писал(а) 30. Ноября 2006 :: 06:54:
Подскажите что не так?

     ТекстЗапроса = "
     |SELECT
     |ЖР.ids AS [Объект $Справочник.Сотрудники],
               |ЖР.idalg AS [ВР $ВидРасчета]
               |FROM
     |$ЖурналРасчетов.Зарплата AS ЖР
               |WHERE
               |(ЖР.period='"+Формат(НачМесяца(Текущаядата()),"Д ГГГГММДД")+"M') AND
     |(ЖР.idalg=:ВидРасчета~~) 
               |"//}}ЗАПРОС
     ;   
     RS.УстановитьТекстовыйПараметр("ВидРасчета", ВидРасчета.ОплатаПоОкладу);
пишет
Syntax error converting the varchar value 'A1  Q7    Q7           ' to a column of data type int.
Как исправить?Помогите!

Если верить документации, второй модификатор вида расчёта для SQL должен быть int. Однако, это не так (по крайней мере для версий 1.8.1.6 и 2.0.3.1). Т.е. это ошибка метапарсера 1С++ или ошибка документации. Обойти её можно, используя метаимя $ВидРасчета.
Код
Выбрать все
|(ЖР.idalg = $ВидРасчета.ОплатаПоОкладу) 


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



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #9 - 22. Сентября 2008 :: 10:40
Печать  
Код
Выбрать все
|WHERE
	|	(ЖР.idalg = "+глMDW.СтрокаВЧисло(глMDW.ЗначениеВСтрокуБД(ВидРасчета.Оплата),36)+")";  

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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #10 - 22. Сентября 2008 :: 13:16
Печать  
Да, так тоже работает,

но все-таки удобнее было бы так:

Код
Выбрать все
RS.УстановитьТекстовыйПараметр("ВидРасчета", ВидРасчета.Оплата);

или, например:

RS.УстановитьЧисловойПараметр("ВидРасчета", ВидРасчета.Оплата);
 



т.е. необходимо доработка 1с++
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #11 - 23. Сентября 2008 :: 03:55
Печать  
Пишите в багзиллу.
Доработаем со временем.
ЗЫ без багзиллы все забудем Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
serjeant
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 12. Сентября 2008
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #12 - 24. Сентября 2008 :: 14:00
Печать  
Ребята, подскажите пожалуйста как в СКЛ-ном запросе получить дату начала и дату окончания периода регистрации из журнала расчетов. Заранее благодарен Улыбка
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #13 - 25. Сентября 2008 :: 11:58
Печать  
Примерно так:

Код
Выбрать все
	ТекстЗапроса="
	|SELECT
	|	ЖР.ids AS [Абонент $Справочник.Абоненты],
	|	ЖР.idalg AS [ВидРасч $ВидРасчета],
	|	ЖР.result AS СуммаЗаписи,
	|	ЖР.period AS ПериодРегистрации,
	|	ЖР.recalc AS Признаки,
	|	ЖР.dateb AS ДатаНачала,
	|	ЖР.datee AS ДатаОкончания,
	|	ЖР.IDDoc as [ТекущийДокумент $Документ],
	|	ЖурналДокументов.IDDocDef as ТекущийДокумент_вид
	|
 



а потом строку периода преобразовать в дату:

Код
Выбрать все
		лГод = Сред(ТабЗапроса.ПериодРегистрации, 1, 4);
		лМесяц = Сред(ТабЗапроса.ПериодРегистрации, 5, 2);
		лЧисло = Сред(ТабЗапроса.ПериодРегистрации, 7, 2);
		лДата = Дата(лГод, лМесяц, лЧисло);
 



А вообще лучше новую тему заводить....
Так как вопрос не связан с моим
  
Наверх
ICQ  
IP записан
 
serjeant
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 12. Сентября 2008
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #14 - 26. Сентября 2008 :: 06:23
Печать  
мне нужно фильтр в запросе добавить, поэтому после выполнения запроса - мне от этой даты толку никакого. и к тому же дату начала периода регистрации можно вытянуть в запросе сразу, а не пытаться преобразовать строку в дату после выполнения запроса Улыбка
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #15 - 26. Сентября 2008 :: 09:27
Печать  
Ну можно конечно...

Просто надо будет сделать преобразование строки периода в дату начала и конца периода прямо в тексте запроса.
  
Наверх
ICQ  
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить из журнала расчетов записи указанного вида?
Ответ #16 - 29. Сентября 2008 :: 11:41
Печать  
К примеру, вот так получить дату начала действия периода:
Код
Выбрать все
SELECT
	CONVERT(DateTime,LEFT(ЖР.period,8),112) AS ПериодРегистрации
FROM dbo.CJ299 AS ЖР
 


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