Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 17 ОтправитьПечать
Очень популярная тема (более 25 ответов) AccountsRecordset v3.17. Прямые запросы к БИ. (число прочтений - 135846 )
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: AccountsRecordset v2.50. Прямые запросы к БИ.
Ответ #15 - 09. Августа 2008 :: 11:25
Печать  
vlad-1c писал(а) 09. Августа 2008 :: 10:28:
Нужно! Уже тестирую....

В общем, расчёт переходящих остатков (по периодам) там основан на недокументированном поведении SQL Server, что позволило избежать использования курсоров. Я уверен, что это будет работать в SQL Server 2000 (и не уверен, что будет в 2005  Круглые глаза ), но хотелось бы увидеть результат независимого тестирования.

Есть ещё пара архитектурных вопросов, связанных с оборотными субконто, но давайте сперва разберёмся с этим.
  

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


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 11. Августа 2008
Re: AccountsRecordset v2.50. Прямые запросы к БИ.
Ответ #16 - 12. Августа 2008 :: 12:54
Печать  
Не получается выполнить запрос к БИДвиженияССубконто с соединением к  $БИ.Субконто

Пишет: "AccountsRecordset::СформироватьОшибку(Строка Ошибка=Meta name parser error: неизвестное метаимя или алиас "$БИ")".
Брал пример работы из описания класса и менял на свои параметры запроса

СтоИт задача реализовать карточку отдельного счета (список проводок), может быть можно как-нить по-другому сделать?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: AccountsRecordset v2.50. Прямые запросы к БИ.
Ответ #17 - 12. Августа 2008 :: 14:12
Печать  
Для исправления ошибки в функции МетаПарсер замени строку

ПарситьБИСубконто(ТекстЗапроса);

на

ТекстЗапроса = ПарситьБИСубконто(ТекстЗапроса);


UPD: Исправленная версия лежит здесь.
« Последняя редакция: 12. Августа 2008 :: 17:06 - berezdetsky »  

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


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: AccountsRecordset v2.63. Прямые запросы к БИ.
Ответ #18 - 29. Сентября 2008 :: 13:25
Печать  
Почему у меня такое происходит?:

Если в файле defcls.prm я баню определения функций класса:
Код
Выбрать все
класс AccountsRecordset = AccountsRecordsetV2.ert : ODBCRecordset
{
  //Неопределенный ВыполнитьИнструкцию(...);
  //Число Открыть(...);
  //Строка ОбрМетаСКЛ(Строка ТекстЗапроса, Число bOnOff = 1);
  //void Отладка(Число bOnOff = 1);
  //Неопределенный ВыполнитьСкалярный(Строка ТекстЗапроса = "");
  //void УложитьСписокГрупп(Неопределенный СписокОбъектов, Строка ИмяТаблицы, Строка ВидОбъектов = "");
}; 


то такая конструкция работает нормально:
Код
Выбрать все
NameOfFunction="fn_getrestsoftmz";
_DeleteFunction(NameOfFunction);
	rs_acc=createobject("AccountsRecordset");
	ТекстЗапроса = "
	|select
	|		rests.Субконто1 					[Субконто1 $Субконто]
	|,		rests.Субконто1_вид
	|,		upper(rtrim(storage.descr))			[Склад]
	|,		rests.Субконто2 					[Субконто2 $Субконто]
	|,		rests.Субконто2_вид
	|,		rtrim(tmz.descr)					[ТМЦ]
	|,		rtrim($tmz.КодТНВД)					[КодТНВД]
	|,		rests.Субконто3 					[Субконто3 $Субконто]
	|,		rests.Субконто3_вид
	|,		rtrim(part.descr)					[Партия]
	|,		isnull($part.Цена_Прих,0)			[ЦенаПартии]
	|,		$part.Дата_Прих						[ДатаПартии]
	|,		isnull(rests.СуммаОстатокДт,0)		[СуммаСКД]
	|,		isnull(rests.СуммаОстатокКт,0)		[СуммаСКК]
	|,		isnull(rests.КоличествоОстатокДт,0)	[КвоСКД]
	|,		isnull(rests.КоличествоОстатокКт,0)	[КвоСКК]
	|,		0									[Обработано]
	|from
	|		$БИОстатки.Основной(:ВыбДата,,(Счет = :ВыбСчет),(МестаХранения, ТМЦ, Партии),) rests
	|		inner join $Справочник.МестаХранения storage(nolock) on storage.id = Субконто1
	|		left join $Справочник.ТМЦ tmz(nolock) on tmz.id = Субконто2
	|		left join $Справочник.Партии part(nolock) on part.id = Субконто3
	|";
	rs_acc=createobject("AccountsRecordset");
	rs_acc.УстановитьТекстовыйПараметр("ВыбДата",'30.09.2007');
	ной));
	Мета = rs_acc.ОбрМетаСКЛ(ТекстЗапроса,1);
	textQuery="create function dbo."+NameOfFunction+" ()
	|returns table
	|as
	|return
	|(
	|"+Мета+")";


	if rs.execute(textQuery)=0 then
		message("Ошибка создания функции "+NameOfFunction+"!","!!!");
		message(rs.GetLastError());
		Return;
	endif;
 


а если оставляю так как есть, т.е. такой prm как в архиве, то сыпятся ошибки:
Код
Выбрать все
Метод AccountsRecordset::ВыполнитьСкалярный - различаются параметры ( Знач или без Знач ) в описании класса (prm-файл) и его реализации (модуль класса)
Метод AccountsRecordset::ОбрМетаСКЛ - различаются параметры ( Знач или без Знач ) в описании класса (prm-файл) и его реализации (модуль класса)
Метод AccountsRecordset::ВыполнитьСкалярный - различаются параметры ( Знач или без Знач ) в описании класса (prm-файл) и его реализации (модуль класса)
Метод AccountsRecordset::ОбрМетаСКЛ - различаются параметры ( Знач или без Знач ) в описании класса (prm-файл) и его реализации (модуль класса)
Мета = rs_acc.ОбрМетаСКЛ(ТекстЗапроса,1);
{D:\DB1C\ACCOUNT_DB\EXTFORMS\UNIPROCS\CREATEFUNCTION.ERT(292)}: Метод  - различаются параметры в описании класса (prm-файл) и его реализации (модуль класса) 


  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: AccountsRecordset v2.63. Прямые запросы к БИ.
Ответ #19 - 29. Сентября 2008 :: 10:52
Печать  
Kapet писал(а) 29. Сентября 2008 :: 13:25:
Почему у меня такое происходит?

Веротно, потому, что Цитата:
различаются параметры ( Знач или без Знач ) в описании класса (prm-файл) и его реализации (модуль класса)

Я бы предпочёл, чтобы исправление было внесено в ночной билд - убрать вообще Знач из файлов описаний. Или оставить его там для обратной совместимости, сделав незначимым.
  

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


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: AccountsRecordset v2.63. Прямые запросы к БИ.
Ответ #20 - 14. Ноября 2008 :: 08:17
Печать  
1С 7.70.020. Текстошибки:
[code]
тз_итоги = RecordSetEx.ВыполнитьИнструкцию(текст_запроса);
{D:\DOCS\РАБОТА\2008_11\ОБОРАЧИВАЕМОСТЬТОВАРНЫХЗАПАСОВ\ОБОРАЧИВАЕМОСТЬ ТОВАРНЫХ ЗАПАСОВ.ERT(127)}: AccountsRecordset::СформироватьОшибку(Строка Ошибка=State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 74: Incorrect syntax near 'МестоХранения $Субконто'.) : State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 74: Incorrect syntax near 'МестоХранения $Субконто'.
вм.СформироватьОшибку(Ошибка);
{D:\1SDB\77\TesterSTO\MyClasses\DB\AccountsRecordsetV2.ert(50) }
[/code]

Текст запроса, вызвавшего ошибку:
[code]
     текст_запроса = "
     |
     | SELECT
     |                  Счет [Счет $Счет.Основной]
     |            , Субконто1 [МестоХранения $Субконто]
     |            , Субконто1_вид МестоХранения_вид
     |            , Субконто2 [ТМЦ $Субконто]
     |            , Субконто2_вид ТМЦ_вид
     |   , 0
     |   , СуммаОборотДт
     |            , СуммаОборотКт
     |   , 0
     | FROM
     |            $БИОбороты.Основной(:НачДата, :КонДата ~, Период,,(Счет IN (SELECT Val FROM #ГруппаСчетов)), (МестаХранения, ТМЦ)) БИОборотыОсновной
     |
     | UNION ALL
     |
     | SELECT
     |                  Счет [Счет $Счет.Основной]
     |            , Субконто1 [МестоХранения $Субконто]
     |            , Субконто1_вид МестоХранения_вид
     |            , Субконто2 [ТМЦ $Субконто]
     |            , Субконто2_вид ТМЦ_вид
     |   , (СуммаОстатокДт - СуммаОстатокКт) НачОстаток
     |   , 0
     |   , 0
     |   , 0
     | FROM
     |            $БИОстатки.Основной(:НачДата,, (Счет IN (SELECT Val FROM #ГруппаСчетов)), (МестаХранения, ТМЦ),) AS НачОстатки
     |
     |";
[/code]

Если меняю местами объединяемые таблицы (сначала Остатки, потом Обороты), то работает нормально. Почему? Это так и надо?
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: AccountsRecordset v2.63. Прямые запросы к БИ.
Ответ #21 - 14. Ноября 2008 :: 08:41
Печать  
Это ошибка. Посмотрю на выходных.
  

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


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: AccountsRecordset v2.63. Прямые запросы к БИ.
Ответ #22 - 14. Ноября 2008 :: 09:46
Печать  
Глянул в отладчике...
Ошибки нет - надо прописывать все запятые, потаму как парсер без тормозов и проскакивает закрывающую скобку, и собирает в параметры все подряд: имя таблицы, следующий юнион, ту же закрывающую скобку...  Смех  ...в случае если эта таблица в конце, то проблем нет - просто заканчивается строка и эти параметры остаются пустыми. Потаму так и получилось.

Было б приятно, если бы класс распознавал, что параметры закончились и следует остановиться (оставшиеся забить нулями). Где это сделоть не понял - джуниор я в 1С++...

Было б максимально приятней, если бы вы сделали это моими ручками (направлять, а я буду въезжать).
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: AccountsRecordset v2.64. Прямые запросы к БИ.
Ответ #23 - 15. Ноября 2008 :: 10:56
Печать  
Исправлено.
  

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


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: AccountsRecordset v2.64. Прямые запросы к БИ.
Ответ #24 - 15. Ноября 2008 :: 21:12
Печать  
Улыбка где выкладывается последняя версия?  Улыбка
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: AccountsRecordset v2.64. Прямые запросы к БИ.
Ответ #25 - 16. Ноября 2008 :: 00:19
Печать  
Roman_K писал(а) 15. Ноября 2008 :: 21:12:
Улыбка где выкладывается последняя версия?  Улыбка

ЗдесьКруглые глаза
  

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


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: AccountsRecordset v2.65. Прямые запросы к БИ.
Ответ #26 - 17. Ноября 2008 :: 13:42
Печать  
Есть просьба расширить БИОстатки в таком виде чтобы там появилось измерение Период. чтобы получать остатки по дням из одной виртуальной таблицы

нужно для расчета периода оборачиваемости товарных запасов по формуле  = "средние продажи в день" / "средние остатки в день".

Уж очень влом плодить юнионы для каждого дня квартала  ...да и строка 1Совская не вместит столько соединений ((
  

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: AccountsRecordset v2.65. Прямые запросы к БИ.
Ответ #27 - 17. Ноября 2008 :: 14:23
Печать  
Посчитай остатки на начало периода + обороты по дням. Обороты рекомендую считать ВТ БИДвиженияССубконто (ВТ БИОбороты считается с корреспонденцией).

Полноценную ВТ БИОстаткиОбороты я представляю, как сделать, но энтузиазма не хватает..
  

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


1C++ rocks!

Сообщений: 10
Зарегистрирован: 08. Декабря 2008
Re: AccountsRecordset v2.65. Прямые запросы к БИ.
Ответ #28 - 08. Декабря 2008 :: 15:30
Печать  
Подскажите, почему не работает:

     "SELECT Счет [Счет $Счет.IAS]
     |, Валюта [Валюта $Справочник.Валюты]
     |, Субконто1 [Субконто1 $Субконто]
     |, Субконто1_вид   
     |, Субконто2 [Субконто2 $Субконто]    
     |, Субконто2_вид 
     |, СуммаОборотДт
     |, СуммаОборотКт
     |FROM $БИОбороты.IAS(:НачДата, :КонДата ~,
     |,,
     |      (Счет = :ВыбГруппаСчетов),
     |      ,((РазделительУчета = :ВыбФирма) and (Субконто1 in (select val from #СписЦФУ))),,) AS БИОбороты
     |ORDER BY Счет"   

Причем если убрать and (Субконто1 in (select val from #СписЦФУ)) - работает на ура.

Пишет: The column prefix '_1SBKTTL_vt' does not match with a table name or alias name used in the query.) : State 42000, native 107, message [Microsoft][ODBC SQL Server Driver][SQL Server]The column prefix '_1SBKTTL_vt' does not match with a table name or alias name used in the query.
  
Наверх
 
IP записан
 
Roman_K
Junior Member
**
Отсутствует


I Love 1C++!

Сообщений: 61
Местоположение: Kiev
Зарегистрирован: 27. Июня 2008
Пол: Мужской
Re: AccountsRecordset v2.65. Прямые запросы к БИ.
Ответ #29 - 08. Декабря 2008 :: 16:06
Печать  
В продолжение темы о склеивании таблиц...

Задача: мне нужен остаток 28ого на :НачДата Обороты между :НачДата и :КонДата~ и остаток на :КонДата~

Логично предположить, что
ОстатокНач = (СуммаОстатокДт - СуммаОстатокКт) из $БИОстатки.Основной(:НачДата
Приход = СуммаОборотДт из $БИОбороты.Основной(:НачДата, :КонДата~
Расход = СуммаОборотКт из $БИОбороты.Основной(:НачДата, :КонДата~
ОстатокКон = (СуммаОстатокДт - СуммаОстатокКт) из $БИОстатки.Основной(:КонДата~ ...


ОстатокНач + Приход - Расход = ОстатокКон

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

Я б изменил мир, ...но Бог не дает исходники
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 ... 17
ОтправитьПечать