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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #15 - 27. Мая 2010 :: 14:12
Печать  
Улыбка
Соединение - это то, что обычно записывают в секции FROM sql-запросов.
При подключении по OLE сам объект нужно создавать в этом подключении. Типа

ARS = ТекБ.CreateObject("AccountsRecordset");
  

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


Не быть умнее, чем ты
есть на самом деле...

Сообщений: 17
Местоположение: Киев
Зарегистрирован: 18. Мая 2010
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #16 - 27. Мая 2010 :: 14:44
Печать  
Спасибо за разъяснения.
Все получается пока что.
Только вот еще вдогонку вопрос.
Метод УстБД() работает с данным классом?
Это на тот случай, если без ОЛЕ к другой базе коннектиться
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #17 - 27. Мая 2010 :: 14:51
Печать  
Sekator писал(а) 27. Мая 2010 :: 14:44:
Метод УстБД() работает с данным классом?

Нет. Т.е. вызов метода, вероятно, пройдёт без ошибки, но правильный результат не гарантируется.
  

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


Не быть умнее, чем ты
есть на самом деле...

Сообщений: 17
Местоположение: Киев
Зарегистрирован: 18. Мая 2010
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #18 - 27. Мая 2010 :: 15:16
Печать  
А куда выгружать при подключении через ОЛЕ данные запроса?
???= ARS.ВыполнитьИнструкцию(Текст);
Ведь ТаблицаЗначений не работает.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #19 - 27. Мая 2010 :: 16:10
Печать  
А чё ей сделается?  Озадачен
  

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


Не быть умнее, чем ты
есть на самом деле...

Сообщений: 17
Местоположение: Киев
Зарегистрирован: 18. Мая 2010
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #20 - 28. Мая 2010 :: 07:25
Печать  
Наверное, в подключаемой базе она и заполняется, только вот как ее назад в родную базу передать? У меня ARS.ВыполнитьИнструкцию(Текст) возвращает 0, тип "число" (
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #21 - 28. Мая 2010 :: 08:41
Печать  
Это баг 1С++, проявляющийся при подключении по OLE. Обойти можно так:
Код
Выбрать все
	ARS = ТекБ.CreateObject("AccountsRecordset");
	RS = ТекБ.CreateObject("ODBCRecordset");

	...

	Текст = ARS.ОбрМетаСКЛ(Текст);
	ТЗ = RS.ВыполнитьИнструкцию(Текст); 

  

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


Не быть умнее, чем ты
есть на самом деле...

Сообщений: 17
Местоположение: Киев
Зарегистрирован: 18. Мая 2010
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #22 - 28. Мая 2010 :: 10:20
Печать  
Это все хорошо, только теперь тип возвращаемого значения "ОЛЕ". Значит, ТЗ в подключенной базе недоступно для манипуляций в текущей базе? Что-то метод EvalExpr() не работает или я по-прежнему криворукий. Как можно с помощью EvalExpr() выбрать из ТЗ данные? Например, на ТекБ.EvalExpr("ТЗ.Итог(3)") ругается что переменная ТЗ неопределена. Это, неудивительно. Но как быть?

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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #23 - 28. Мая 2010 :: 10:22
Печать  
Sekator писал(а) 28. Мая 2010 :: 10:20:
Например, на ТекБ.EvalExpr("ТЗ.Итог(3)") ругается что переменная ТЗ неопределена. Это, неудивительно. Но как быть?

Написать просто:

ТЗ.Итог(3)
  

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


Не быть умнее, чем ты
есть на самом деле...

Сообщений: 17
Местоположение: Киев
Зарегистрирован: 18. Мая 2010
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #24 - 28. Мая 2010 :: 10:39
Печать  
Блин, и в самом, деле, просто с предыдущей ошибкой ушел в сторону. А тут все просто. Спасибо за помощь и терпение в подсказках Улыбка
  
Наверх
 
IP записан
 
Sekator
Junior Member
**
Отсутствует


Не быть умнее, чем ты
есть на самом деле...

Сообщений: 17
Местоположение: Киев
Зарегистрирован: 18. Мая 2010
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #25 - 03. Июня 2010 :: 10:08
Печать  
Есть вопрос по скорострельности.
Например, запрос к БИ средствами 1С один раз формируется и далее, как вариант, методами ДО(), КО(), ОБ() обращается к результатам запроса. То есть, фактически, запрос формируется единожды.
Если я заменяю методы ДО(), КО(), ОБ(), на используемый в классе метод БИОбороты, то прямой запрос формируется каждый раз, столько, сколько раз я бы использовал методы ДО(), КО(), ОБ().
Таким образом, в контексте моей задачи скорострельность не улучшается, а даже на 10-50% падает.
Есть у кого мысли по моей проблеме?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #26 - 03. Июня 2010 :: 10:30
Печать  
Выгружай результат запроса в ИТЗ. Ставь нужные индексы и далее, усановив фильтры, получаешь искомые тебе суммы для заданных реквизитов.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #27 - 03. Июня 2010 :: 10:38
Печать  
Sekator писал(а) 03. Июня 2010 :: 10:08:
Например, запрос к БИ средствами 1С один раз формируется и далее, как вариант, методами ДО(), КО(), ОБ() обращается к результатам запроса. То есть, фактически, запрос формируется единожды.

Это не верно. ВыполнитьЗапрос лишь подготавливает аналитику, а расчёт итогов происходит именно при вызове ДО, КО.. Получение итогов штатными средствами может быть быстрее, если нет необходимости обходить всю выборку. Ну или если ты пишешь неэффективные запросы..

Кроме того, использование прямых запросов - это получение итогов в виде таблицы, а не в виде дерева, как у штатных методов. Разумеется, это подразумевает изменение используемых алгоритмов.

Также, как правило, оказывается, что данные, полученные штатными средствами, требуют дополнительной обработки (отборы по реквизитам субконто или видам документов, сортировки не по времени etc.). Всё это, естественно, следует вынести в прямой запрос.

В общем, простое получение итогов по счетам с разлапистой аналитикой обычно даёт ускорение в 5..7 раз, перенос доп. обработки в запрос - в десятки раз.
  

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


Не быть умнее, чем ты
есть на самом деле...

Сообщений: 17
Местоположение: Киев
Зарегистрирован: 18. Мая 2010
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #28 - 03. Июня 2010 :: 10:45
Печать  
У меня в методах ДО, КО, ОБ используются каждый раз разные счета, потому  по-любому приходится передавать в функцию значения для каждой пары счетов по отдельности, соответственно, и прямой запрос запускается не один раз. В этом и загвоздка в скорости. Список счетов укладывать - не выход, потому что мне нужны конкретные пары корреспондирующих счетов...
Например,
Код
Выбрать все
ОБ281361 = БИ.ОБ(Сч281,Сч361);
ОБ301302 = БИ.ОБ(Сч301,Сч302); 


Это все в рамках одного запроса 1С к бухитогам.
А вот прямой запрос с использованием класса Акаунтрекодсет будет запускаться дважды в теле функции ПрямойЗапросБИ
Код
Выбрать все
ОБ281361 = ПрямойЗапросБИ(Сч281,Сч361);
ОБ301302 = ПрямойЗапросБИ(Сч301,Сч302); 



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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВопросЫ по использованию класса AccountsRecordset
Ответ #29 - 03. Июня 2010 :: 10:46
Печать  
berezdetsky писал(а) 03. Июня 2010 :: 10:38:
Sekator писал(а) 03. Июня 2010 :: 10:08:
Например, запрос к БИ средствами 1С один раз формируется и далее, как вариант, методами ДО(), КО(), ОБ() обращается к результатам запроса. То есть, фактически, запрос формируется единожды.

Это не верно. ВыполнитьЗапрос лишь подготавливает аналитику, а расчёт итогов происходит именно при вызове ДО, КО..

Не знал... В очередной раз жалею, что на ДБФ
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать