Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Программное обновление журнала документов?! (число прочтений - 5757 )
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Программное обновление журнала документов?!
02. Сентября 2010 :: 11:36
Печать  
Добрый день. Измените, если не в ту ветку вопрос, но все же: как программно обновить общий журнал документов? Сделал обработку, в которой устанавливаю фильтры по реквизитам шапки любого документа. А далее мне нужно обновить журнал. Вот только как не знаю. Вернее есть решение с использованием граф отбора через УстановитьОтбор(""), но работает медленно. Пока установится отбор по колонке, потом отключится...
Может быть в библиотеках 1cpp или FormEx есть уже готовое решение???
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Программное обновление журнала документов?!
Ответ #1 - 02. Сентября 2010 :: 11:44
Печать  
Посмотрите ЭТО
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #2 - 02. Сентября 2010 :: 12:19
Печать  
Цитата:
Внимание
Поставщик данных «Журнал» не поддерживает создание журнала с типом «Общий».
Похоже не подходит.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Программное обновление журнала документов?!
Ответ #3 - 02. Сентября 2010 :: 12:23
Печать  
Ну тогда рассказывай, как ты сделал свой Журнал с отбором по любому реквизиту Шапки любого документа.
ЗЫ: ТЗ на форме что ли ?
Улыбка

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #4 - 02. Сентября 2010 :: 12:36
Печать  
Есть стандартный общий журнал. На нем я расположил кнопку "Фильтр"
  

001_001.png ( 28 KB | Загрузки )
001_001.png
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #5 - 02. Сентября 2010 :: 12:37
Печать  
При нажатии кнопки открывается модально окно, где я указываю необходимые фильтры.
  

002.png ( 10 KB | Загрузки )
002.png
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #6 - 02. Сентября 2010 :: 12:40
Печать  
Включаю в этом окне флажок "Фильтр активен" и нажимаю кнопку "Закрыть". Вот в этот момент после закрытия модального окна и хотелось бы вызывать переобновление журнала документов.

Для подмены запросов используется компонента ToySQL.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #7 - 02. Сентября 2010 :: 12:48
Печать  
Кусочек кода подмены:
Код
Выбрать все
ТекстSQL = "Select * from _1SJOURN(NOLOCK INDEX=ACDATETIME) where DATE_TIME_IDDOC>=? and DATE_TIME_IDDOC<=? order by DATE_TIME_IDDOC";
НовыйSQL = "Select * from _1SJOURN(NOLOCK INDEX=ACDATETIME) where DATE_TIME_IDDOC between ? and ? " + глТекст + " order by DATE_TIME_IDDOC";
глЗапрос.ДобавитьЗамену(ТекстSQL,НовыйSQL,1);

ТекстSQL = "Select COUNT(*) from _1SJOURN(NOLOCK INDEX=ACDATETIME) where  (DATE_TIME_IDDOC>=? and DATE_TIME_IDDOC<=?) and DATE_TIME_IDDOC<=?";
НовыйSQL = "Select COUNT(*) from _1SJOURN(NOLOCK INDEX=ACDATETIME) where (DATE_TIME_IDDOC between ? and ?) and DATE_TIME_IDDOC<=? " + глТекст;
глЗапрос.ДобавитьЗамену(ТекстSQL,НовыйSQL,1);
глЗапрос.Перехват(1);
УстановкаОтбора("Клиент");
УстановкаОтбора("");
 



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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #8 - 02. Сентября 2010 :: 12:57
Печать  
Если Вы делаете подмены такие то хинты  индексов не ставьте
sql сделает это вместо Вас гораздо лучше.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #9 - 02. Сентября 2010 :: 13:11
Печать  
Z1 писал(а) 02. Сентября 2010 :: 12:57:
Если Вы делаете подмены такие то хинты  индексов не ставьте
sql сделает это вместо Вас гораздо лучше.

К сожалению, если я не буду использовать индексы, то план выполнения запроса будет не самым оптимальным. Я в этом не раз убеждался, вернее меня убеждала утилита от SQL (Microsoft SQL Server Management Studio - Query - Analyze Query in Database Engine Tuning Advisor)
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #10 - 02. Сентября 2010 :: 13:25
Печать  
если Вы напишете
глТекст = " and IDDOC = КонкректныйID";

то ваш подмененный запрос все равно будет использовать индекс
INDEX=ACDATETIME и просмотрит все документы в заданном интервале.
Ну и от таких запросов у sql2005 "сносит крышу" потому что база
работает в режиме 80.

PS Если нет хинтов в запросе это не значит что индексы не используются а это значит что sql сервер сам подберет индекс.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #11 - 02. Сентября 2010 :: 13:28
Печать  
1) А почему тогда профайлер не показывает использование индексов в запросах, если их не описывать?
2) Т.е. ты предлагаешь не использовать хинты индексов в запросах?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #12 - 02. Сентября 2010 :: 13:35
Печать  
ReLock писал(а) 02. Сентября 2010 :: 13:28:
1) А почему тогда профайлер не показывает использование индексов в запросах, если их не описывать?
2) Т.е. ты предлагаешь не использовать хинты индексов в запросах?

Конкретно для твоего случая да.
хинты рекомендуется ставить в особых случаях когда либо из-за каких-то особенностей данных или каких то особенностей задач их нужно применять. Общая рекомендация MS использовать хинты в крайних случаях и когда Вы точно знаете что хотите.
А тут как Вы это можете знать когда у Вас из-за фильтров запрос может меняться очень в широком диапозоне.


Если есть проблемы что на правильных запросах sql медленно работает то обновите статистику и/или перестройте индексы.

PS вопрос 1 я не понял.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #13 - 02. Сентября 2010 :: 13:41
Печать  
Z1 писал(а) 02. Сентября 2010 :: 13:25:
если Вы напишете
глТекст = " and IDDOC = КонкректныйID";

то ваш подмененный запрос все равно будет использовать индекс
INDEX=ACDATETIME и просмотрит все документы в заданном интервале.

PS Если нет хинтов в запросе это не значит что индексы не используются а это значит что sql сервер сам подберет индекс.

Почему SQL Server Profiler не показывает использование индексов (если он их по-любому использует), если они не описаны в запросе?

P.S. А по сабжу рекомендации или, хотя бы, предположения какие-нибудь есть?
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #14 - 02. Сентября 2010 :: 13:46
Печать  
Если только план выполнения покажет использование индексов...
http://www.comprog.ru/SQLQueriesLanguage/article_1390.htm

P.S. Обновление статистики вызывается агентом каждый час
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #15 - 02. Сентября 2010 :: 13:57
Печать  
Цитата из ссылки
Цитата:
Подсказка оптимизатору использовать конкретный индекс полезна, когда необходимо вынудить SQL Server использовать именно этот индекс, и если именно с этим индексом повысится эффективность запроса. Использовать такой хинт лучшее, когда Вы точно знаете, что SQL Server не выбирает оптимальный для запроса индекс, и необходимо помочь SQL Server выбрать правильный индекс


Так я Вам то же самое и пытался сказать другими словами.
хинт INDEX  это для sql сервера -  приказ и после этого sql
сервер будет его обязательно выполнять ( даже если это создаст очень плохой план выполнения )
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #16 - 02. Сентября 2010 :: 15:25
Печать  
А без использования хинта индекса SQL SERVER вместо индекса ACDATETIME использует индекс PK__1SJOURN.
И тем не менее на "голый" (без индекса) запрос DETA дает рекомендации по созданию индекса.

Вот и пойми после этого SQL Server!
  

DETA.png ( 43 KB | Загрузки )
DETA.png
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #17 - 02. Сентября 2010 :: 15:45
Печать  
Наверно не смогу ответить полностью на вопрос
лучше спросите про Tuning Anvisor на sql.ru

Я как бы не вижу противоречия.
Когда работает Tuning Anvisor он Вам дает какие-то средние рекомендации которые в большинстве случаев правильные.

Когда идет компиляция и выполнения конкретного запроса
sql сервер имеет гораздо более подробные данные +статистику на сейчас ( а не когда работал Tuning Anvisor ) + sql сервер также принимает во внимание загруженность своих ресурсов.

Корявый пример Предположим что для запроса  очень оптимален индекс ACDATETIME и этот индекс расположен на отдельном физическом томе.перед выполнением Вашешо запроса например диск индекса посыпался и производительность диска упала в разы.
При поступлении sql запроса sql сервер может обнаружить такую ситуацию и принять решение что в данном случае в данный момент времени надо вместо индекса ACDATETIME использовать кластерный индекс.
Если у Вас в запросе стоит явный хинт по индексу то sql сервер будет выполнять запрос именно по индексу ACDATETIME несмотря на то что это плохо.

PS это как при езде по Москве  если Вам позвонит друг и скажет что на вашем пути большая пробка Вы же постараетесь ее объехать.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #18 - 02. Сентября 2010 :: 15:59
Печать  
Ну а по поводу сабжа можешь чего-нить посоветовать?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #19 - 03. Сентября 2010 :: 04:35
Печать  
ReLock писал(а) 02. Сентября 2010 :: 15:59:
Ну а по поводу сабжа можешь чего-нить посоветовать?

так уже были советы
Если остаетесь в рамках Для подмены запросов используется компонента ToySQL то убири хинты индексрв. Как работает
подмена запросов ToySQL я не знаю и хорошо это или плохо тоже.

Также ответ по твоему subj был уже в первом посте.
Также можно еще переписать журнал на ТП.

PS По поводу как обновить журнал после изменения фильтров -
Увеличь интервал журналов на один день и 1с сама все обновит.
  
Наверх
 
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #20 - 03. Сентября 2010 :: 05:20
Печать  
Z1 писал(а) 03. Сентября 2010 :: 04:35:
ReLock писал(а) 02. Сентября 2010 :: 15:59:
Ну а по поводу сабжа можешь чего-нить посоветовать?

PS По поводу как обновить журнал после изменения фильтров -
Увеличь интервал журналов на один день и 1с сама все обновит.

А вот это надо попробовать. О результате отпишусь.  Улыбка
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #21 - 03. Сентября 2010 :: 09:50
Печать  
А
Код
Выбрать все
Форма.Обновить(0); 

не подойдет?
  
Наверх
ICQ  
IP записан
 
ReLock
Full Member
***
Отсутствует



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #22 - 03. Сентября 2010 :: 13:38
Печать  
Salimbek писал(а) 03. Сентября 2010 :: 09:50:
А
Код
Выбрать все
Форма.Обновить(0); 

не подойдет?

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Программное обновление журнала документов?!
Ответ #23 - 03. Сентября 2010 :: 13:43
Печать  
Не работал с ToySql ,  а разве эта ВК способна подменить табличную форму журнала документов ? Или просто идёт подмена запроса к скулю на свой всегда ?

Или у вас - ТЗ на форме всё же и вы свой запрос в неё выгружаете ?

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



Сообщений: 155
Местоположение: За компом
Зарегистрирован: 01. Февраля 2007
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #24 - 03. Сентября 2010 :: 13:43
Печать  
Z1 писал(а) 03. Сентября 2010 :: 04:35:
ReLock писал(а) 02. Сентября 2010 :: 15:59:
Ну а по поводу сабжа можешь чего-нить посоветовать?

PS По поводу как обновить журнал после изменения фильтров -
Увеличь интервал журналов на один день и 1с сама все обновит.

Тоже не работает. Период меняется, а фильтр не применяется.

В общем оставил как было. Через УстановитьОтбор(). Ставлю фильтр по графе отбора и потом тут же очищаю фильтр. Видимо только такой вариант вызывает обновление общего журнала документов и, соответственно, применение фильтра.

Всем спасибо за попытку помочь!  Подмигивание
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #25 - 03. Сентября 2010 :: 14:20
Печать  
Странно что не работает изменение интервала.
попробуй после установки фильтра
записать текущий документ ( через Док.Записать(); )
« Последняя редакция: 06. Сентября 2010 :: 04:36 - Z1 »  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Программное обновление журнала документов?!
Ответ #26 - 06. Сентября 2010 :: 04:42
Печать  
Я кажется понял в чем проблема.
Когда ты делаешь скажем изменение даты курсор для журнала уже открыт и пока не закрыть-открыть курсор будут действовать прежний select/

Попробуй так
1. Установить интервал дат 01.01.2010 ( т.е. ставим число где нет документов)
2.УстановитьОтбор "". ( Закрываем предыдущий курсор)
3.Установить нужный тебе отбор. (Открываем курсор и в нем будет нужный тебе отбор.)
4. Установить нужный тебе интервал дат.

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