Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Восстановление ГП штатно и через 1с++ ВОПРОСИЩЕ (число прочтений - 4620 )
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Восстановление ГП штатно и через 1с++ ВОПРОСИЩЕ
27. Сентября 2007 :: 03:04
Печать  
вот такой вопрос. а как добиться прироста скорости проведения.
ведь при восстановлении последовательности обычным методом метод РассчитатьрегистрыНа() не будет задействован так как при штатном режиме Итоги всегда Актуальны?
соответственно при восстановлении последовательности штатным методом
будет быстрее чем 1с++ или я ошибаюсь
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #1 - 27. Сентября 2007 :: 08:41
Печать  
глянь http://www.1cpp.ru/forum/YaBB.pl?num=1185864029/5#5 я делал такое, когда мне нужно было рассчитывать регистр, там все написано
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #2 - 30. Сентября 2007 :: 17:11
Печать  
пытаюсь сделать похожую задачу - переписать списание по партиям в ТИС.
хочу просто получить ТЗ с итогами по регистру на документ (фильтр по товару).
пытался читать это http://www.1cpp.ru/forum/YaBB.pl?num=1185864029/5#5 понял что самому не осилить. Подскажите, пожалуйста, как такое сделать для ДБФ.

пока, путем выдирания кусков из разных веток, получил такой запрос:
Код
Выбрать все
перем БД,RS;

 	БД=CreateObject("OLEDBData");
	Рез=БД.Соединение("Provider=VFPOLEDB.1;Deleted=Yes;Mode=ReadWrite;Collating Sequence=RUSSIAN;Data Source="+?(Прав(КаталогИБ(), 1)= "\", Лев(КаталогИБ(), СтрДлина(КаталогИБ())-1), КаталогИБ()));
	RS=БД.СоздатьКоманду();


	_Мета = СоздатьОбъект("MetaDataWork");
	Товар = _Мета.ЗначениеВСтрокуБД(выбТовар);


	ТекстЗапроса = "
	|SELECT
	|	$ПартииТоваров.Товар as [Товар $Справочник.Номенклатура],
	|	$ПартииТоваров.ОстатокТовара as Количество,
	|   $ПартииТоваров.ПрихДокумент as [Док $Документ]
	|FROM
	|	$РегистрИтоги.ПартииТоваров as ПартииТоваров
	|WHERE
	|	($ПартииТоваров.Товар = '"+Товар+"')
	|";


	Склад = _Мета.ЗначениеВСтрокуБД(Константа.ОсновнойСклад);
	Фирма = _Мета.ЗначениеВСтрокуБД(Константа.ОсновнаяФирма);

		RS.УстановитьТекстовыйПараметр("ДатаПериодаОстатков",выбДата);

		НачалоВремени = _GetPerformanceCounter();
		тз_2 = RS.ВыполнитьИнструкцию(ТекстЗапроса);
		КонецВремени = _GetPerformanceCounter() - НачалоВремени;

		Сообщить(""+КонецВремени/1000+" сек.");
	тз_2.выбратьстроку();
 



заранее спасибо
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #3 - 30. Сентября 2007 :: 18:15
Печать  
Bond писал(а) 30. Сентября 2007 :: 17:11:
пытаюсь сделать похожую задачу - переписать списание по партиям в ТИС.
хочу просто получить ТЗ с итогами по регистру на документ (фильтр по товару).

Я дико извиняюсь - но то что написано - так не делают...

При расчете итогов или получении остатков(на ТА) по регистру для ДБФ стандартный 1С использует индексы и использует достаточно эффективно(попадание зачастую почти по всем измерениям). Плюс транзакция(еще ускорение + 50%).
Остаток по регистру вычисляется зачастую в 1000 раз быстрее чем "обычный" прямой запрос (например тот что приведен).

Приведенный выше запрос на моей базе будет выполняться около 3 сек (придется считывать всю таблицу
партий), 1С - доли секунды (будет считаны только записи с выбранным товаром).

Ускорять можно, но не таким способом. Статья по индексам прикреплена выше.
Для ускорения проведения я создавал специальный класс - но выигрыш в основном достигается
на неправильно сконфигурированных регистрах или при применении метода временного расчета.
  
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #4 - 01. Октября 2007 :: 06:11
Печать  
Цитата:
При расчете итогов или получении остатков(на ТА) по регистру для ДБФ стандартный 1С использует индексы и использует достаточно эффективно(попадание зачастую почти по всем измерениям). Плюс транзакция(еще ускорение + 50%). 
Остаток по регистру вычисляется зачастую в 1000 раз быстрее чем "обычный" прямой запрос (например тот что приведен).


полностью согласен. в случае, когда проведение проводится после ТА, буду использовать стандартный метод ВыгрузитьИтоги(). Но когда документ проводится задним числом - этот метод у меня сильно тормозит, поэтому хочу использовать различные методы получения итогов по партиям, в зависимости от позиции документа.
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #5 - 01. Октября 2007 :: 06:25
Печать  
Bond писал(а) 01. Октября 2007 :: 06:11:
Цитата:
При расчете итогов или получении остатков(на ТА) по регистру для ДБФ стандартный 1С использует индексы и использует достаточно эффективно(попадание зачастую почти по всем измерениям). Плюс транзакция(еще ускорение + 50%).  
Остаток по регистру вычисляется зачастую в 1000 раз быстрее чем "обычный" прямой запрос (например тот что приведен).


полностью согласен. в случае, когда проведение проводится после ТА, буду использовать стандартный метод ВыгрузитьИтоги(). Но когда документ проводится задним числом - этот метод у меня сильно тормозит, поэтому хочу использовать различные методы получения итогов по партиям, в зависимости от позиции документа.

Попробуй ВыбратьИтоги с фильтром, иногда работает быстрее, чем ВыгрузитьИтоги().
  
Наверх
ICQ  
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #6 - 01. Октября 2007 :: 07:20
Печать  
Цитата:
Попробуй ВыбратьИтоги с фильтром, иногда работает быстрее, чем ВыгрузитьИтоги().


спасибо. попробую. Но меня сейчас больше интересует ситуация, когда необходимо расчитывать регистры (проведение задним числом).
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #7 - 05. Октября 2007 :: 13:38
Печать  
путем советов и поиска по форуму и документации пришел к такому:

создал отчет в котором имитировал получение таблицы партий штатными методами и прямыми запросами
первая процедура:
Код
Выбрать все
Процедура Сформировать2()
	НачалоВремени = _GetPerformanceCounter();
	рег = СоздатьОбъект("Регистр.ПартииТоваров");
	 Рег.ВременныйРасчет();
     РассчитатьРегистрыПо(выбдок);
	 тз = СоздатьОбъект("таблицаЗначений");
	 Рег.УстановитьЗначениеФильтра("Товар", выбТовар, 1);
	 Рег.УстановитьЗначениеФильтра("Фирма", Константа.ОсновнаяФирма, 1);

     рег.выгрузитьИтоги(тз,1,1);

	 КонецВремени = _GetPerformanceCounter() - НачалоВремени;

		Сообщить(""+КонецВремени/1000+" сек.");

	 тз.выбратьстроку();

КонецПроцедуры
 



и прямой запрос
Код
Выбрать все
Запрос=СоздатьОбъект("ЗапросSQL"); фЭтоSQL=Запрос.фЭтоSQL;
     Запрос.УстановитьТекстовыйПараметр("ДатаОстатков", Дата(ДатаГод(НачМесяца(ДатаКонца)-1), ДатаМесяц(НачМесяца(ДатаКонца)-1), 1));
     Запрос.УстановитьТекстовыйПараметр("ДатаНачала", НачМесяца(ДатаКонца)); //Дата начала остатков
     Запрос.УстановитьТекстовыйПараметр("ДатаКонца", ДатаКонца);
     Запрос.ДобавитьУсловие("Tmp", "Фирма", "",Константа.ОсновнаяФирма, "Фирма", "", "", "");
     Запрос.ДобавитьУсловие("Tmp", "Номенклатура", "", выбТовар, "Номенклатура", "", "", "");
     Запрос.ДобавитьУсловие("Tmp", "Склад", "", Константа.ОсновнойСклад, "Склад", "", "", "");
     Запрос.ДобавитьУсловие("J", "IDDOC", "", выбдок.ТекущийДокумент(), "Док", "", "<>", "");

     стрИмяФайлаЖурнала=Запрос.ПолучитьИмяЖурнала();

     ТекстЗапроса="
     |SELECT
     |     Tmp.Фирма as [Фирма $Справочник.Фирмы],
     |     Tmp.Номенклатура as [Номенклатура $Справочник.Номенклатура],
     //|     Tmp.Склад as [Склад $Справочник.МестаХранения],
     |     Tmp.Партия as [Партия $Документ],
     |
     |     Tmp.Количество as Количество
     |FROM (
     |	    SELECT
     |		   $регПартииНаличие_Итоги.Фирма as Фирма,
     |		   $регПартииНаличие_Итоги.Товар as Номенклатура,
     //|		   $регПартииНаличие_Итоги.Склад as Склад,
     |		   $регПартииНаличие_Итоги.ПрихДокумент as Партия,
     |
     |		   $регПартииНаличие_Итоги.ОстатокТовара as Количество
     |	    FROM
     |		   $РегистрИтоги.ПартииТоваров as регПартииНаличие_Итоги
     |	    WHERE
     |		   регПартииНаличие_Итоги.PERIOD = :ДатаОстатков~~
     |
     |     UNION ALL
     |
     |	    SELECT
     |		   $регПартииНаличие_Движение.Фирма as Фирма,
     |		   $регПартииНаличие_Движение.Товар as Номенклатура,
     //|		   $регПартииНаличие_Движение.Склад as Склад,
     |		   $регПартииНаличие_Движение.ПрихДокумент as Партия,
     |
     |		    as Количество
     |	    FROM
     |		   $Регистр.ПартииТоваров as регПартииНаличие_Движение
     |	    INNER
     |		   JOIN "+стрИмяФайлаЖурнала+" as J ON регПартииНаличие_Движение.IDDOC=J.IDDOC
     |	    WHERE
     |		   J.DATE BETWEEN :ДатаНачала~~ AND :ДатаКонца~~ AND J.$ФлагРегистра.ПартииТоваров=1 AND %J.Док
     |) as Tmp
     |     WHERE %Tmp.Номенклатура AND %Tmp.Фирма
     |;";

     Запрос.Текст=ТекстЗапроса;
     тзЗапрос=Запрос.Выполнить(0, 0);
     тзЗапрос.Свернуть("Фирма,Склад,Партия", "Количество");


	 КонецВремени = _GetPerformanceCounter() - НачалоВремени;

		Сообщить(""+КонецВремени/1000+" сек.");


	 тзЗапрос.выбратьстроку();
 



разница в скорости около 9 раз (прямой запрос быстрее)

но столкнулся с тем что нужно как то расчитывать регистр ПО документ.
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #8 - 05. Октября 2007 :: 13:46
Печать  
в документации написано следущее:

Цитата:
В DBF версии нужно сделать условие на время. В системе время хранится не в минутах и секундах, а в миллисекундах, прошедших с начала дня. Поэтому время – уникально для каждого документа.


но вытащить это время не получается (с точностью до милисекунды).
кто нибудь подскажите плз, как добавить условие в запрос, что бы все-таки получить итоги по документ.
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #9 - 05. Октября 2007 :: 14:01
Печать  
СформироватьПозициюДокумента(ТекущийДокумент()));
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #10 - 05. Октября 2007 :: 14:07
Печать  
Цитата:
СформироватьПозициюДокумента(ТекущийДокумент()));


попробовал так
ДатаКонца=СформироватьПозициюДокумента(выбдок.ТекущийДокумент(), -1);
     Сообщить(ДатаКонца);
вернуло такое:
#20070920 432510000    358065ЯЯЯ

так должно быть?
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #11 - 05. Октября 2007 :: 15:04
Печать  
Кури параметры этого дела, по умолчанию там 0 вроде
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #12 - 06. Октября 2007 :: 12:53
Печать  
не понял  Нерешительный
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Восстановление ГП штатно и через 1с++ ВОПРОСИЩ
Ответ #13 - 06. Октября 2007 :: 17:35
Печать  
СформироватьПозициюДокумента(ТекущийДокумент(),Тут параметр);
Попробуй его поменять, могу ошибаться
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать