Переключение на Главную Страницу Страницы: 1 ... 3 4 [5]  ОтправитьПечать
Очень популярная тема (более 25 ответов) часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql (число прочтений - 14588 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #60 - 14. Ноября 2008 :: 08:50
Печать  
DmitrO писал(а) 14. Ноября 2008 :: 08:43:
Ога, только восстановление последовательности эффективнее делать со сдвигом ТА.

ничего не могу сказать про восстановление последовательности
у нас это не используется.
Наверно потому и эффективней что в нынешней реализации алгоритма меньше "впустую" пересчитываются изменения rg (только в одном периоде).
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #61 - 15. Ноября 2008 :: 11:15
Печать  
DmitrO писал(а) 13. Ноября 2008 :: 12:47:
А зачем при УРБД тащить ТА далеко вперед (на несколько периодов), что за религия?


вопрос по ТА не видел.
TA в будущем по нескольким причинам

1. Специфика учета.Есть док Планируемые затраты.
Когда затраты планируют документ создают.
Когда утверждают документ проводят.
Диапозон дат документа весь текущий год.

2. в УРБД TA не переносится из одной ПБ в другую и когда
формируют остатки в разных ПБ с пустой датой (на TA ) остатки разные,
но при этом матерьяльная ведомость одинаковая.
Объяснить ситуацию пользователям невозможно да и не нужно.

3. Продвинутые пользователи которые работают в бух программе
после бухгалтерии с трудом понимают что такое за зверь TA и
просят настроить как в бухгалтерии они "думают" налоговыми периодами.
( и вообще в бухгалтерии сделано более логично решении о смене периода принимает человек,
а тут программа молча сама что-то пересчитывает назначает  ТА не понятное).

4. C точки зрения реализации программы TA может постоянно меняться причем как вперед так и назад при отмене этого документа при этом 1cv77.exe должен
постоянно блокировать и разблокировать связанные с этим ресурсы и пересчитывать значения в периоде на ТА

5. Если бы был сделан период TA кратный месяц ( ну другие периоды аналогично )
то тогда внутри программы ( в тех же rg ) вместо даты DATATIME
можно использовать номер INT начиная с 01.01.1753.
Тогда работа всей программы 1с теоретически будет быстрее.

Пока писал 5 придумал, что если завести общий реквизит = номер месяц документа
и это поле проиндексировать в _1sjornl тогда в запросах 1с++ кратным месяцу
можно будет писать between int_нач_дата AND int_кон_дата что будет работать  еще быстрее чем как сейчас.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #62 - 15. Ноября 2008 :: 17:45
Печать  
Цитата:
что будет работать  еще быстрее чем как сейчас

а ты планы запросов смотрел?
Я вот не поленился попробовать добавить поле и сравнить планы выполнения запросов.
1)
Цитата:
select * from _1sjourn where Date_Time_Iddoc between '20080101' and '20080131z'

(1 row(s) affected)

StmtText
------------------------------------------
 |--Clustered Index Scan(OBJECT:([id_ish].[dbo].[_1SJOURN].[PK__1SJOURN]), WHERE:([id_ish].[dbo].[_1SJOURN].[DATE_TIME_IDDOC]>='20080101' AND [id_ish].[dbo].[_1SJOURN].[DATE_TIME_IDDOC]<='20080131z'))

2)
Цитата:
select * from _1sjourn where NumberOfMonth between 1 and 5

(1 row(s) affected)

StmtText
-----------------------
 |--Clustered Index Scan(OBJECT:([id_ish].[dbo].[_1SJOURN].[PK__1SJOURN]), WHERE:([id_ish].[dbo].[_1SJOURN].[NumberOfMonth]>=(1) AND [id_ish].[dbo].[_1SJOURN].[NumberOfMonth]<=(5)))

как видим - планы запросов одинаковые так как есть только один кластерный индекс по ROW_ID
  
Наверх
IP записан
 
logarifm
Junior Member
**
Отсутствует



Сообщений: 92
Местоположение: Украина
Зарегистрирован: 29. Марта 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #63 - 15. Ноября 2008 :: 18:20
Печать  
Я вот не могу понять чем ты умаевыешся я о Z1.  

Тоисть я хочу сказать, что про меня дак ты просто убиваешь время в мертвую отрасль.

Сделал бы это лучше:

Есть возможность вообще паралельно проводить документы, тоисть внедрение своих блокировок, это раз!
Во-вторых можно все переписать на 1С++ и не будет никаких тормозов!

Насчет блокировок не знаю как они в 1С++ но на ToySQL есть такая возможность, хотя документация по этому была платной, попытайся найти что-то на его ресурсах:
http://forum.1csql.ru/
а также тут:
http://1csql.ru/index.html


  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #64 - 17. Ноября 2008 :: 05:44
Печать  
leshik писал(а) 15. Ноября 2008 :: 17:45:
Цитата:
что будет работать  еще быстрее чем как сейчас

а ты планы запросов смотрел?
Я вот не поленился попробовать добавить поле и сравнить планы выполнения запросов.
1)
Цитата:
select * from _1sjourn where Date_Time_Iddoc between '20080101' and '20080131z'

(1 row(s) affected)

StmtText
------------------------------------------
 |--Clustered Index Scan(OBJECT:([id_ish].[dbo].[_1SJOURN].[PK__1SJOURN]), WHERE:([id_ish].[dbo].[_1SJOURN].[DATE_TIME_IDDOC]>='20080101' AND [id_ish].[dbo].[_1SJOURN].[DATE_TIME_IDDOC]<='20080131z'))

2)
Цитата:
select * from _1sjourn where NumberOfMonth between 1 and 5

(1 row(s) affected)

StmtText
-----------------------
 |--Clustered Index Scan(OBJECT:([id_ish].[dbo].[_1SJOURN].[PK__1SJOURN]), WHERE:([id_ish].[dbo].[_1SJOURN].[NumberOfMonth]>=(1) AND [id_ish].[dbo].[_1SJOURN].[NumberOfMonth]<=(5)))

как видим - планы запросов одинаковые так как есть только один кластерный индекс по ROW_ID

Во первых для одного месяца будет
NumberOfMonth = <КонкретМесяц>
Во вторых даже при одинаковых планах сравнение целых чисел (int) будет
быстрее чем сравнение строк ( char(23) )
В третьих в
DATE_TIME_IDDOC<='20080131z' есть еще неявное преобразование
типов а это тоже время.

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #65 - 17. Ноября 2008 :: 06:26
Печать  
Цитата:
сравнение целых чисел (int) будет
быстрее чем сравнение строк ( char(23) )

сомневаюсь, так как сравнение идет по Кластерному индексу. Проверю точно отпишусь.
Цитата:
DATE_TIME_IDDOC<='20080131z' есть еще неявное преобразование
типов

не подскажешь - где тут преобразование? Вроде Date_Time_Iddoc имеет тип char(23)
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #66 - 17. Ноября 2008 :: 06:28
Печать  
leshik писал(а) 17. Ноября 2008 :: 06:26:
Цитата:
сравнение целых чисел (int) будет
быстрее чем сравнение строк ( char(23) )

сомневаюсь, так как сравнение идет по Кластерному индексу. Проверю точно отпишусь.
Цитата:
DATE_TIME_IDDOC<='20080131z' есть еще неявное преобразование
типов

не подскажешь - где тут преобразование? Вроде Date_Time_Iddoc имеет тип char(23)

char(15) --> char(23)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 
ОтправитьПечать