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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
07. Ноября 2008 :: 06:30
Печать  
Предположим есть проведенная расходная накладная.
В ней скажем 200 строк.
Мы меняем в последней строке количество ( и сумму ) и перепроводим документ.
Тогда получается что для регистра остатки товаров
речь в основном идет об итогах регистра
для 199 строк sql будет "перевычислять" впустую надо сначала удалить все эти движения
и после создаст тоже самое и только для одной строки будет какая-то полезная работа.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #1 - 07. Ноября 2008 :: 06:32
Печать  
Z1 писал(а) 07. Ноября 2008 :: 06:30:
Предположим есть проведенная расходная накладная.
В ней скажем 200 строк.
Мы меняем в последней строке количество ( и сумму ) и перепроводим документ.
Тогда получается что для регистра остатки товаров
речь в основном идет об итогах регистра
для 199 строк sql будет "перевычислять" впустую надо сначала удалить все эти движения
и после создаст тоже самое и только для одной строки будет какая-то полезная работа.


И что ты предлагаешь?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #2 - 07. Ноября 2008 :: 06:37
Печать  
Nick писал(а) 07. Ноября 2008 :: 06:32:
И что ты предлагаешь?

Пока ничего. Пока только более углубленно разбираюсь как что работает.
Может уже кто-то что делал с этим (статью на softpoint читал)
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #3 - 07. Ноября 2008 :: 06:44
Печать  
Z1 писал(а) 07. Ноября 2008 :: 06:37:
Nick писал(а) 07. Ноября 2008 :: 06:32:
И что ты предлагаешь?

Пока ничего. Пока только более углубленно разбираюсь как что работает.
Может уже кто-то что делал с этим (статью на softpoint читал)


Вроде в какой то из последних версий 8 анонсировалась фича по поводу того что переписываются только те движения которые реально изменились, правда кто то говорил что реально не работает. Сам не проверял врать не буду. Вопрос в том как ты собираешся проверять что изменилось, а что нет? И сколько на этом можно выиграть выиграешь.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #4 - 07. Ноября 2008 :: 06:56
Печать  
Nick писал(а) 07. Ноября 2008 :: 06:44:
Вопрос в том как ты собираешся проверять что изменилось, а что нет? И сколько на этом можно выиграть выиграешь.

Как бы есть несколько мыслей ( различных путей ).
Наилучший как мне кажется путь 
1.сначала во временную таблицу со знаком минус пишем текущие движения.
2.После этого на основании логики программы пишем в эту таблицу новые движения документа.
3.Сворачиваем эту временную таблицу по всем измерениям.
4.Удаляем строки где все ресурсы 0,0.
5.Записываем результат в RG от текущ даты до TA.
Кстати выигрыш еще будет и в том что перебор периодов происходит только один раз.

Еще мысль блокировка по регисту нужна только на шаге 5.

кстати вопрос по ms sql временные таблицы сессии #tabl видны в хр ?

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


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #5 - 07. Ноября 2008 :: 09:53
Печать  
Можно отключить автоматическое удаление движений и всегда допроводить документ по измененым строкам ТЧ. Флажок что строка проведена можно устанавливать при проведении и сбрасывать при редактировании строки.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #6 - 07. Ноября 2008 :: 10:11
Печать  
DmitrO писал(а) 07. Ноября 2008 :: 09:53:
Можно отключить автоматическое удаление движений и всегда допроводить документ по измененым строкам ТЧ. Флажок что строка проведена можно устанавливать при проведении и сбрасывать при редактировании строки.

так это понятно но хочется все делать с помощью sql
иначе не будет никакого
выигрыша в скорости - основная цель сделать проведение документа как можно быстрее.
Теоретически вроде все получается сделать на xp.
Пока есть только одна БОЛЬШАЯ проблема подгрузка УРБД.
теоретически тоже решается.при подгрузке УРБД надо
восстановить логику как у 1с.

Вопрос можно ли получить mssql -connect после соеденения
для Конфируратора?

  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #7 - 07. Ноября 2008 :: 13:06
Печать  
Z1 писал(а) 07. Ноября 2008 :: 10:11:
Вопрос можно ли получить mssql -connect после соеденения
для Конфируратора?

Да, можно, если юзать плагин Опенконф с прямым доступом, например, Телепат, Визуал1С++.
Возможно - подразумевается, что возможно внутри плагина Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #8 - 08. Ноября 2008 :: 08:14
Печать  
Вроде у меня все получилось имеется ввиду пост 4
По крайней мере на бумаге.
Что-то все слишком просто и слишком круто и универсально.
Буду писать тест.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #9 - 08. Ноября 2008 :: 08:22
Печать  
рефакторинг xp.Сделал исходя из предположения
что практически всегда период = Месяц
для _1sp_GetBeginOfPeriod М поставил первым в IF
Код
Выбрать все
Create procedure _1sp_GetNextPeriod(@BaseDate DATETIME, @Period CHAR(1), @NewDate DATETIME OUTPUT) AS

SET NOCOUNT ON
SET DATEFIRST 1
DECLARE @BeginOfPeriod datetime
DECLARE @day integer

IF @Period='M' BEGIN
    SELECT @NewDate = DATEADD(mm, DATEDIFF(mm, '1753-01-01', @BaseDate), '1753-02-01')
    RETURN
END


EXECUTE _1sp_GetBeginOfPeriod @BaseDate, @Period, @BeginOfPeriod OUTPUT
IF @Period='D'
    SELECT @NewDate=DATEADD(dd, 1,  @BeginOfPeriod)
ELSE IF @Period='W'
    SELECT @NewDate=DATEADD(wk, 1,  @BeginOfPeriod)
ELSE IF @Period='M'
    SELECT @NewDate=DATEADD(mm, 1,  @BeginOfPeriod)
ELSE IF @Period='Q'
    SELECT @NewDate=DATEADD(qq, 1,  @BeginOfPeriod)
ELSE IF @Period='Y'
    SELECT @NewDate=DATEADD(yy, 1,  @BeginOfPeriod)
ELSE IF @Period='T' BEGIN
    SELECT @day=DATEPART(dd, @BeginOfPeriod)
    IF @day>15 SELECT @NewDate=DATEADD(mm, DATEDIFF(mm, '1753-01-01', @BeginOfPeriod), '1753-02-01')
    ELSE	 SELECT @NewDate=DATEADD(dd, 15, @BeginOfPeriod)
END
ELSE IF @Period='C' BEGIN
    SELECT @day=DATEPART(dd, @BeginOfPeriod)
    IF @day>20 SELECT @NewDate=DATEADD(mm, DATEDIFF(mm, '1753-01-01', @BeginOfPeriod), '1753-02-01')
    ELSE	 SELECT @NewDate=DATEADD(dd, 10, @BeginOfPeriod)
END
ELSE IF @Period='F' BEGIN
    SELECT @day=DATEPART(dd, @BeginOfPeriod)
    IF @day>25 SELECT @NewDate=DATEADD(mm, DATEDIFF(mm, '1753-01-01', @BeginOfPeriod), '1753-02-01')
    ELSE	 SELECT @NewDate=DATEADD(dd, 5,  @BeginOfPeriod)
END
ELSE SELECT @NewDate=CONVERT(datetime, '1753-01-01')
GO


Create procedure _1sp_GetBeginOfPeriod(@BaseDate DATETIME, @Period CHAR(1), @NewDate DATETIME OUTPUT) AS

SET NOCOUNT ON
SET DATEFIRST 1
DECLARE @Day int
IF @Period='M'
    SELECT @NewDate=DATEADD(mm, DATEDIFF(mm, '1753-01-01', @BaseDate), '1753-01-01')
ELSE  IF @Period='D'
    SELECT @NewDate=@BaseDate
ELSE IF @Period='W'
    SELECT @NewDate=DATEADD(dd, -DATEPART(dw, @BaseDate)+1, @BaseDate)
ELSE IF @Period='Q'
    SELECT @NewDate=DATEADD(qq, DATEDIFF(qq, '1753-01-01', @BaseDate), '1753-01-01')
ELSE IF @Period='Y'
    SELECT @NewDate=DATEADD(yy, DATEDIFF(yy, '1753-01-01', @BaseDate), '1753-01-01')
ELSE IF @Period='T'
    BEGIN
	    SELECT @Day=DATEPART(dd, @BaseDate )
	    IF @Day>15 SELECT @Day=15
	    ELSE	 SELECT @Day=0
	    SELECT @NewDate=DATEADD(dd, @Day, DATEADD(mm, DATEDIFF(mm, '1753-01-01', @BaseDate), '1753-01-01'))
    END
ELSE IF @Period='C'
    BEGIN
	    SELECT @Day=DATEPART(dd, @BaseDate )
	    IF	@Day>20  SELECT @Day=20
	    ELSE IF @Day>10  SELECT @Day=10
		ELSE		 SELECT @Day=0
	  SELECT @NewDate=DATEADD(dd, @Day, DATEADD(mm, DATEDIFF(mm, '1753-01-01', @BaseDate), '1753-01-01'))
    END
ELSE IF @Period='F'
    BEGIN
	  SELECT @Day=DATEPART(dd, @BaseDate )
	  IF	@Day>25 SELECT @Day=25
	  ELSE IF @Day>20 SELECT @Day=20
	  ELSE IF @Day>15 SELECT @Day=15
	  ELSE IF @Day>10 SELECT @Day=10
	  ELSE IF @Day>5  SELECT @Day=5
	  ELSE		SELECT @Day=0
	  SELECT @NewDate=DATEADD(dd, @Day, DATEADD(mm, DATEDIFF(mm, '1753-01-01', @BaseDate), '1753-01-01'))
    END
ELSE SELECT @NewDate=CONVERT(datetime, '1753-01-01')
GO
 

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #10 - 08. Ноября 2008 :: 08:24
Печать  
Вопрос где можно освежить знания связь md и dds
когда и после каких событий все восстанавливается ?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в
Ответ #11 - 08. Ноября 2008 :: 08:43
Печать  
При записи документа одноэсина кстати и обновляет только записанные строки
При проведении - кото мешает организовать допроведение без очистки движений?
А... или волнует имено пересчет итогов? Что-то еще не проснулся...
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #12 - 08. Ноября 2008 :: 08:53
Печать  
Цитата:
При записи документа одноэсина кстати и обновляет только записанные строки
Речь идет не о записи документов
Цитата:
При проведении - кото мешает организовать допроведение без очистки движений?
Допроведение не универсально
во первых надо лопатить код. Во вторых весь анализ идет на 1с
и это будет неоптимально по времени ( из-за этого не стоит даже что-то делать)
в третьих Возможна ситуация когда у Вас не меняется многострочная часть документа,
а движения будут другие - например у товара сменили признак товар на признак услуга
тогда при проведении этого документа движения будут другие.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #13 - 08. Ноября 2008 :: 09:05
Печать  
Короче речь идет о рефакоринге проведения регистров
Как маленький пример смотрите xp изменения периодов пост 9.
Это изменение даст выигрыш везде во всех конфигурациях.
Рефакторинг проведения - может назвать "Прямое проведение" ( по аналогии с прямыми запросами)
даст огромный выигрыш в скорости и при этом не меняется ни одной строки в исходной конфигурации.
Изменения затрагивают только xp.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #14 - 08. Ноября 2008 :: 13:43
Печать  
Тест получился. новые хп правильно работают.
по нескольким товарам правильные остатки.
В понедельник возьму тестовую базу и запущу одновременное проведение с 10-15 сессий.
Цитата:
даст огромный выигрыш в скорости и при этом не меняется ни одной строки в исходной конфигурации.
Обманул по две строки в каждый модуль проведения документа придеться вставлять все же.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #15 - 08. Ноября 2008 :: 17:43
Печать  
Честно говоря ниасилел где будет огромный выигрыш
Вот проводить одну строку вместо 200 - дело другое...
Можно пояснить для тупых когда взлетит поподробнее?
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #16 - 13. Ноября 2008 :: 05:56
Печать  
Модленно взлетает.
Как лучше выложить статью ?
1. В виде файл
2. Просто постить
3 Файл + Посты
думаю что лучше третий вариант.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #17 - 13. Ноября 2008 :: 06:04
Печать  
Про что статья то?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #18 - 13. Ноября 2008 :: 06:06
Печать  
Цитата:
Про что статья то?

Про "революцию" - оптимизация проведения на xp
см пост 4 этой ветки.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #19 - 13. Ноября 2008 :: 09:57
Печать  
all ну неужели вы не видете фишку ?
А если сказать так - это будет лучше чем гибкие блокировки
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #20 - 13. Ноября 2008 :: 10:04
Печать  
Z1 писал(а) 13. Ноября 2008 :: 09:57:
all ну неужели вы не видете фишку ?
А если сказать так - это будет лучше чем гибкие блокировки

Вот это врядли
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #21 - 13. Ноября 2008 :: 10:04
Печать  
Nick писал(а) 13. Ноября 2008 :: 10:04:
Z1 писал(а) 13. Ноября 2008 :: 09:57:
all ну неужели вы не видете фишку ?
А если сказать так - это будет лучше чем гибкие блокировки

Вот это врядли

почему ??? ТЕстовая база работает уже с понедельника.
Сейчас думаю как все это переносить в рабочую базу.
Также думаю над оптимизацией того что есть. Но по некоторым вещам не хватает знаний.
Ближайшая цель убрать курсоры в хп ra...
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #22 - 13. Ноября 2008 :: 10:10
Печать  
Цитата:
ТЕстовая база работает уже с понедельника.


И что, кто в ней работает? Сколько пользователей оновременно?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #23 - 13. Ноября 2008 :: 10:15
Печать  
база сейчас тестовая копия реальной.
Все основные действия пользователей работают правильно.
Чтобы перевести на реальную базу Цитата:
Торопиться не надо

Ключевое слово : другой Алгоритм проведения.
лучше чем тот который есть сейчас, а реализовать алгоритм можно так как есть точки доступа в виде xp.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #24 - 13. Ноября 2008 :: 10:24
Печать  
Цитата:
all ну неужели вы не видете фишку ?

Чета я тоже пока не вижу..
Пиши статью (лучше в html сразу), я готов написать на нее рецензию.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #25 - 13. Ноября 2008 :: 10:26
Печать  
сейчас выложу в ветку
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #26 - 13. Ноября 2008 :: 10:27
Печать  
Прямое проведение Регистров

Термин   «Прямое проведение» Регистров спорный может  в дальнейшем будет что-нибудь  получше. Пока пусть будет такой.
Оптимизация движений регистров заключается в другом формировании
записей таблиц rg…
В статье речь пойдет об оптимизации 1с 77 только sql версия.
Терминология
Период движения или просто период это месяц (хотя есть и другие экзотич.периоды  декада 5  дней день), в который провели документ.
хп, xp  -  это хранимые процедуры ms msq.
Часть логики 1с реализована в хп. ИХМО большой просчет, что реализована часть а не вся логика на хр. Если бы была зашита вся логика работы 1с   ms sql  через хп, то 1cv77система получилась гораздо лучше во всех отношениях ( но естественно судить легко, а у фирмы 1с могли быть ограниченные ресурсы как по времени, деньгам, кадрам  и.т.д.)
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #27 - 13. Ноября 2008 :: 10:29
Печать  
Пролог

Все началось с того, что перевалив какой то предел 1с стал «Тормозить».
Возникают пиковые ситуации все процессы становяться в очередь на проведение и все :  1с "умирает". Очередь по блокировкам wait доходит до 5-10 и все alles.
Отдельно работающие пользователи все ок.
Стал думать о гибких блокировках. Прочитал о существующих решениях.
Полез внутрь хп. Сначала нашел несоответствие по переполнению регистра 99999
Ветка на 1с++ (  http://www.1cpp.ru/forum/YaBB.pl?num=1225518509 )
После этого почитал умные книжки по sql и написал свою реализацию гибких блокировок.
Стал рисовать картинки на бумаге. Получалась довольно невзрачная картина либо
возможны взаимные блокировки строк таблиц базы,
либо стоимость блокировок становилась огромной и решение становилось бы
сопоставимым с тем какое есть сейчас.
После этого стал «копать» еще глубже и разбираться как оно все работает.
В частности как работает 1с с регистрами.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #28 - 13. Ноября 2008 :: 10:30
Печать  

Регистры снаружи и изнутри


Снаружи : Регистр служит для накопления количественных данных ( ресурсов) по заданным характеристикам ( измерениям). Есть два типа регистров регистр остатков и регистр оборотов.
Регистры тесно связаны с документами. Записать движения регистра можно только из документа. Отношение между Документом и регистром один ко многим.

Отличие между регистром остатков и регистров оборотов:
Регистр остатков хранит итоговые данные документа в нескольких периодах  ( одном или более)
Оборотный регистр хранит данные документа только в одном периоде.



Изнутри : Для каждого регистра есть две таблицы
RA…  и RG….

RA…   содержит движения регистра. Каждая запись в таблице RA связана с конкретным документом.
RG…  содержит накопительные ( итоговые ) данные. Каждая запись означает
сумарные  ресурсы по конкретным измерениям конкретного периода.
Причем  для любого периода должна быть либо 1 либо 0 записей  по конкретной фиксированной комбинации измерений.

Для оборотного регистра данные заносятся только в один конкретный период ( период документа). Для регистра остатков данные заносятся во все периоды начиная с периода документа и заканчивая максимальным периодом бд.

Для простоты далее рассматриваем только один регистр.(одну таблицу ra и rg )
Рассмотрим теперь что происходим при перепроведении документа с  регистром остатков.

Сначала вызывется метод ОчиститьДвижения() – метод вызывается либо автоматически либо вручную при этом происходит следующее :
Для каждого движения регистра по заданным измерениям  уменьшаем значения ресурсов   RG для всех периодов от периода Документа до  максимального периода.

После этого  очищаются все записи данного документа в таблице RA.

Далее для Каждого Рег.ДвижениеПриходВыполнить ( и всех аналогич методов )
Делается  следущее :
добавляется одна запись в таблицу RA.
Для таблицы RG всех периодов начиная с периода документа по максимальный период
изменяем значение записи с теми же измерениями на заданную величину.
(Если в каком-то периоде нет записи по этим измерениям запись создается).
Еще одно маленькое ( но существенное замечание ) все эти действия происходят в транзакции.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #29 - 13. Ноября 2008 :: 10:31
Печать  
Чтобы понять недостатки вышеописанного алгоритма  рассмотрим несколько примеров :

Пример №1.
Пусть есть проведенный документ Приходная Накладная от 10.01.2008 ( т.а стоит на 31.12.2008) Скажем 200 строк с разными товарами.
В этом документе изменяем примечание и сохраняем и перепроводим документ
Что при этом будет происходить
Начинает работать ОчиститьДвижения()
1.Для каждого движения ( каждой строки т.к. у нас на одну строку одно движение)
Для всеx периодов уменьшаем значение таблицы  RG
2. Для данного документа очищается все RA ( как вызывается метод ) не знаю.
Для каждой строки в МодулеПроведения выполняется ВыполнитьПриход
при этом добавляется строка в таблицу ra
и для всех периодов увеличиваем значение таблицы RG

Проделана огромная работа, а результат остался прежний.
(Для таблицы RG имеем изменено строк = 12*200*2  = 4800 update)
В идеале не надо вообще ничего делать в RG


Пример №2
Пусть есть непроведенная Приходная накладная от 12.01.2008 и в ней 10 одинаковых строк
Тов1,Склад1,15 (15 колво)
Что происходит при Записи и проведении этого документа.
Начинает работать ОчиститьДвижения()т.к. движений нет ничего не очищием.
Для каждой строки в МодулеПроведения выполняется ВыполнитьПриход
при этом добавляется строка в таблицу ra
и для всех периодов( от 01.01.2008 до 01.12.2008 ) увеличиваем значение таблицы RG на 15.

В результате имеем для таблицы RG выполнилось для каждого периода
10 одинаковых операций
увеличиваем значение таблицы RG на 15.
(всего операций по изменению 12 * 10 = 120 изменений )
В идеале хотелось иметь бы одну операцию для каждого периода
увеличиваем значение таблицы RG на 150  ( т.е. всего 12 операций)

Пример №3
берем проведенный документ из примера 2 и просто делаем отмену проведения

Начинает работать ОчиститьДвижения()
1.Для каждого движения ( у нас 10 одинаковых движений)
Для всеx периодов( у нас их 12 )
уменьшаем значение таблицы  RG на 15
(всего операций по изменению 12 * 10 = 120 изменений )

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


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

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #30 - 13. Ноября 2008 :: 10:32
Печать  
Новый алгоритм  Прямое Проведение
Раз Вы дочитали до этих строк, Вы прекрасно разобрались как при проведении ( и его отмене) формируются ДвиженияРегистров ( таблицы RA,RG).
Далее на основании вышеизложенного написан новый алгоритм - «Прямое проведение» изменения таблицы RG
Вводиться новая таблица X_RG структура один в один как и у RG. ( на каждый регистр одна таблица)
Вводим метод СохранитьВсеДвижения(). Он вызывается из модуля проведения ( полная аналогия операция .записать()  ). Должен вызываться один раз в конце модуля проведения и в модуле отмена проведения.


Новый алгоритм проведения документа :

Сначала вызывется метод ОчиститьДвижения() следущее :
Каждое движение регистра копируем в таблицу X_RG

После этого  очищаются все записи данного документа в таблице RA.

Далее для Каждого ДвижениеПриходВыполнить ( и всех аналогич методов )
добавляется одна запись в таблицу RA по этому движению.

Далее новый метод СохранитьВсеДвижения()
1.Получаем объедененную Таблицу X_RG и RA ( по данному документу )
2.Сворачивем ее по измерения, ресурсы
3.После сверки оставляем строки где ресурсы не равны 0.
4. Для каждой строки из получившейся таблицы
для каждого периода от Текущего до максимального
записываем в таблицу RG текущую строку.

Действия с 1-3 хотя и грозно звучат в реализации ms sql всего лишь один оператор select


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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #31 - 13. Ноября 2008 :: 10:33
Печать  
Рассмотрим те же самые примеры 1-3 для нового алгоритма.

Пример №1
Начинает работать ОчиститьДвижения()
1.Для каждого движения ( каждой строки т.к. у нас на одну строку одно движение)
копируем эту строку в Х_RG.

2. Для данного документа очищается все.

3. Для каждой строки в МодулеПроведения выполняется ВыполнитьПриход
при этом добавляется строка в таблицу ra

4 При вызове метода метод СохранитьВсеДвижения()
После свертки таблиц получаем таблицу с нулевым числом строк
Таблицу RG не изменяем совсем.

Пример №2.
1.Начинает работать ОчиститьДвижения() т.к. движений нет ничего не очищием.
2.Для каждой строки в МодулеПроведения выполняется ВыполнитьПриход
при этом добавляется строка в таблицу ra
4 При вызове метода метод СохранитьВсеДвижения()
сворачиваем строки получаем одну строку
( сворачиваем 0 строк из x_rg  и 10 строк из ra )
товар_1,склад_1,150
для всех периодов изменяем таблицу RG
т.е всего изменений в таблице rg 12* 1 = 12

Пример №3
1.Начинает работать ОчиститьДвижения()
добавляем 10 строк из текущих движений в таблицу x_rg.
2. удаляем движения из ra.
4 При вызове метода метод СохранитьВсеДвижения() из Модуля Отмена Проведения()
сворачиваем строки получаем одну строку
( сворачиваем 10 строк из x_rg  и 0 строк из ra )
товар_1,склад_1,-150
для всех периодов изменяем таблицу RG
т.е всего изменений в таблице rg 12* 1 = 12

небольшое упражнение Пример №4
Есть проведенный документ скажем за 10.01.2008.
В документе произвольное количество строк скажем 5 000.
Мы меняем только одну строку.
Тогда расписав все  вышеизложенные действия ( предоставляется сделать это читателю самостоятельно ) вы получите Всего 12 изменений в таблице rg.
Замечание упражнение 4 предполагает что не менялись признаки косвенного проведения т.е. не менялся алгоритм проведения или при изменении статуса товара могут генериться другие движения)

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #32 - 13. Ноября 2008 :: 10:34
Печать  
Преимущества нового алгоритма :
1.Скорость
Недостатки
1.В самом модуле проведения надо будет по другому считать остатки с периода документа по ТА ( но эту дельту можно учесть у нас же есть X_RG) –
я даже не знаю недостаток ли это здесь это упомянуто чтобы подчеркнуть
что в модуле проведения должна быть другая логика. Это одновременно
и хорошо и плохо. Плохо потому что надо будет переделывать,
хорошо потому что новая логика ( точнее ее реализация ) имеет и свои плюсы
о которых поговорим позже.


Теперь Вы знаете новый алгоритм и его надо реализовать на xp ms msq.
В следующей статье будет представлена моя реализация мною же придуманного алгоритма «Прямое проведение» ( каламбур прямо какой-то получается).
Хотелось бы услышать замечания предложения, рекомендации, критику и.т.д.
Самые нетерпеливые уже сейчас могут написать свою реализацию алгоритма ( я же смог).
Моя реализация алгоритма будет предложена в следующей статье.

Морев Андрей aka Z1  12.11.2008


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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #33 - 13. Ноября 2008 :: 10:40
Печать  
Z1 писал(а) 13. Ноября 2008 :: 10:29:

написал свою реализацию гибких блокировок.


Ужас, покажешь?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #34 - 13. Ноября 2008 :: 10:44
Печать  
Nick писал(а) 13. Ноября 2008 :: 10:40:
Z1 писал(а) 13. Ноября 2008 :: 10:29:

написал свою реализацию гибких блокировок.


Ужас, покажешь?

написал будет продолжение. Хотелось бы сначала обсудить сам алгоритм.может я что либо упустил ( хотя вроде ничего)

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #35 - 13. Ноября 2008 :: 11:26
Печать  
Статью прочитал. Судя по ней, за решение пятерка. Но не понятно к чему сравнение с "гибкими блокировками". Твое решение - это "мягкое", а ГБ - это "теплое".
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #36 - 13. Ноября 2008 :: 11:39
Печать  
trad писал(а) 13. Ноября 2008 :: 11:26:
Статью прочитал. Судя по ней, за решение пятерка. Но не понятно к чему сравнение с "гибкими блокировками". Твое решение - это "мягкое", а ГБ - это "теплое".

Оперативный учет
основные блокировки sql
идут на создание новых id 1с и изменения регистров т.е. таблиц rg.
В своей конкретной реализации алгоритма я упорядочил запись в rg и фактически достаточно блокировок sql и взаимоблокировок быть не может быть в принципе ( т.е. как бы все изменения rg происходят в плотном однонаправленном потоке аналогия езда на авто в пробках )
второй выигрыш так как запись происходит значительно быстрее
то и вероятность самих блокировок записей уменьшается.
Но тут надо думать может лучше всеже наложить одну свою блокировку.
также вроде получается уйти совсем от курсоров не знаю хорошо это или плохо по моему это хорошо - что тоже должно дать сумарный выигрыш по скорости.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #37 - 13. Ноября 2008 :: 11:47
Печать  
Суть ГБ от софтпоинта в том что теоретически в один момент времени может проводиться более одного документа. И всё.
Твое решение не о том.
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #38 - 13. Ноября 2008 :: 11:55
Печать  
trad писал(а) 13. Ноября 2008 :: 11:47:
Суть ГБ от софтпоинта в том что теоретически в один момент времени может проводиться более одного документа. И всё.
Твое решение не о том.

О том находясь в модуле проведения расх накладной
поставил предупреждение("Ждем")
я спокойно провел документ ПриходноКассовый ордер.
Если я буду проводить другую расходную накладную
она тоже спокойно проведется т.к мы пересчитываем rg
потому что мы не достигли последнего оператоа модуля проведения
и она спокойно проведеться.
Другое дело что меняется логика вычисления контрольных остатков
но плюсы прямого проведения значительно перевешивают
это незначительное изменение кода на 1с в модуле проведения.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #39 - 13. Ноября 2008 :: 12:02
Печать  
Цитата:
Если я буду проводить другую расходную накладную
она тоже спокойно проведется т.к мы пересчитываем rg


Даже если обе будут двигать один и тот же товар?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #40 - 13. Ноября 2008 :: 12:09
Печать  
Nick писал(а) 13. Ноября 2008 :: 12:02:
Цитата:
Если я буду проводить другую расходную накладную
она тоже спокойно проведется т.к мы пересчитываем rg


Даже если обе будут двигать один и тот же товар?

Да
если нам не нужен контроль отрицательных остатков.


пусть есть док1  Рн и он двинул Тов1 в -10
это движение записали в x_rg и записали в ra
после этого стали специальным if ом на ждем.
с другой 1с сессии прододим Другой рн с товаром Тов1 в -40.
при движении записали данные в x_rg и в ra.
Далее док 2 пройдет свою точку СохранитьВсеДвижения()
и запишет окончательно rg -40.
после этого нажимаем ок в ждем док1 и он тоже
пройдет свою точку СохранитьВсеДвижения()
и запишет окончательно rg -10.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #41 - 13. Ноября 2008 :: 12:10
Печать  
Z1 писал(а) 13. Ноября 2008 :: 11:55:
О том находясь в модуле проведения расх накладной
поставил предупреждение("Ждем")
я спокойно провел документ ПриходноКассовый ордер.

Хм. Но намеков на это я в статье не увидел.
  

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


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #42 - 13. Ноября 2008 :: 12:11
Печать  
Полностью согласен с trad-ом - "гибкими блокировками" тут и не пахнет.
Хотя мне и самому не нравится это название, т.к. блокировка не может быть гибкой, на то она и блокировка. Улыбка
Но применительно к 1С и несчатстным 1С-кам, у которых во время проведения блокируется по сути дела вся база, "гибкими блокировками" принято называть, когда в одну единицу времени может проводиться несколько документов - оставим это маркетинговое название в покое.

Предложенная методика позволяет оптимизировать только перепроведение, ито только в том случае если большинство сформированных движений останутся такими-же, и кроме того перепроведение должно быть "сильно задним числом" (далеко от ТА). В остальных случаях она не дает ничего, кроме дополнительных, хоть и не больших, но расходов. Тем не менее очевидно, что выигрышь в быстродействии должен быть заметен. А вот насколько, пока не проведены тесты, не ясно. При штатной работе базы, когда движения документов пишутся со сдвигом ТА, ну или близко к ТА, создаются новые документы, никакого эффекта не будет.
Если честно, то я ожидал большего.
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #43 - 13. Ноября 2008 :: 12:17
Печать  
Z1 писал(а) 13. Ноября 2008 :: 12:09:
[quote author=Nick link=1226039405/30#39 date=1226577762]
Да
если нам не нужен контроль отрицательных остатков.


А если нужен тогда как?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #44 - 13. Ноября 2008 :: 12:18
Печать  
DmitrO писал(а) 13. Ноября 2008 :: 12:11:
Полностью согласен с trad-ом - "гибкими блокировками" тут и не пахнет.
Хотя мне и самому не нравится это название, т.к. блокировка не может быть гибкой, на то она и блокировка. Улыбка
Но применительно к 1С и несчатстным 1С-кам, у которых во время проведения блокируется по сути дела вся база, "гибкими блокировками" принято называть, когда в одну единицу времени может проводиться несколько документов - оставим это маркетинговое название в покое.

Предложенная методика позволяет оптимизировать только перепроведение, ито только в том случае если большинство сформированных движений останутся такими-же, и кроме того перепроведение должно быть "сильно задним числом" (далеко от ТА). В остальных случаях она не дает ничего, кроме дополнительных, хоть и не больших, но расходов. Тем не менее очевидно, что выигрышь в быстродействии должен быть заметен. А вот насколько, пока не проведены тесты, не ясно. При штатной работе базы, когда движения документов пишутся со сдвигом ТА, ну или близко к ТА, создаются новые документы, никакого эффекта не будет.
Если честно, то я ожидал большего.

Когда писали видели пост 40 ?
У нас всегда ТА стоит в будущем из-за  УРБД.
Я не считаю что ТА должна быть на последнем документе все равно зайдя в накладную  и перепроведя ее через 5 минут Вы уже в прошлом. но это отступление к subj не очень относиться.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #45 - 13. Ноября 2008 :: 12:22
Печать  
Nick писал(а) 13. Ноября 2008 :: 12:17:
Z1 писал(а) 13. Ноября 2008 :: 12:09:
[quote author=Nick link=1226039405/30#39 date=1226577762]
Да
если нам не нужен контроль отрицательных остатков.


А если нужен тогда как?

Наверное также как и в любой другой системе  ставим свою блокировку
считаем и двигаемся дальше.
Еще теоретически проверку  остатков я думаю можно поставить в конце при Записи ( естественно со своей блокировкой )
Плюс будет в том что это действие не будет происходить в дорогостоящей операции транзакция.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #46 - 13. Ноября 2008 :: 12:28
Печать  
Говори уже _1sp__1SJOURN_TLockX патчил или нет?
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #47 - 13. Ноября 2008 :: 12:30
Печать  
trad писал(а) 13. Ноября 2008 :: 12:28:
Говори уже _1sp__1SJOURN_TLockX патчил или нет?

да снял все блокировки со всех кроме user и не помню как называется которая выдает новые id.

А на конкретном документе и так болтается файловай блокировка.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #48 - 13. Ноября 2008 :: 12:34
Печать  
Но вышеназванный алгоритм можно применять также и не сняв ни одной другой блокировки.
т.е. можно изменить только хп начинающиеся с ra.
в каждый момент времени у нас будет проводиться толко один документ этой же сессией будут наложены и блокировки на все ra и все rg так что будет тоже все ок, но тогда уже не будет никакого паралельного проведения.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #49 - 13. Ноября 2008 :: 12:37
Печать  
Z1 писал(а) 13. Ноября 2008 :: 12:30:
да снял все блокировки

Тогда об этом нужно было рассказать перед сравниванием с ГБ. И заодно рассказать как правильно вручную блокировать объекты БД что бы не начитать всякий мусор и не влететь на дедлоки.
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #50 - 13. Ноября 2008 :: 12:42
Печать  
trad писал(а) 13. Ноября 2008 :: 12:37:
Z1 писал(а) 13. Ноября 2008 :: 12:30:
да снял все блокировки

Тогда об этом нужно было рассказать. И заодно рассказать как правильно вручную блокировать объекты БД что бы не начитать всякий мусор и не влететь на дедлоки.

Не согласен меня учили должна быть следущущее решение любой задачи :
Задача --> постановка задачи --> алгоритм решения --> реализация ( кодирование ) --> Отладка,Эксплуатация.

На каждом из этих этапов возможны ошибки. Чем  на более раннем этапе совершена ошибка тем дороже она обходится.
Я предложил и предлагаю обсудить пока алгоритм.
Решений( реализаций) может быть много.
Хотелось бы пока узнать есть ли ошибки,противоречия уже в вышеизложенном алгоритме.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #51 - 13. Ноября 2008 :: 12:47
Печать  
Хорошо. Оставим финты с блокированием, судя по всему там вообще темный лес. Оцениваем только алгоритм (саму идею).
Тогда все что я написал остается в силе.

А зачем при УРБД тащить ТА далеко вперед (на несколько периодов), что за религия?
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #52 - 13. Ноября 2008 :: 12:51
Печать  
а почему ты свою дополнительную таблицу назвал x_rg, вроде как x_ra больше подходит, конечно название значения не имеет, спрашиваю по тому, что в статье не достаточно точно описана ее структура, а если учесть пост #40 то вообще чета не понятно становится..
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #53 - 13. Ноября 2008 :: 12:55
Печать  
DmitrO писал(а) 13. Ноября 2008 :: 12:51:
а почему ты свою дополнительную таблицу назвал x_rg, вроде как x_ra больше подходит, конечно название значения не имеет, спрашиваю по тому, что из статьи не точно описана ее структура, а если учесть пост #40 то вообще чета не понятно становится..

нет x_rg это дельты rg и структура у нее как у rg .
это просто отложенные в сторогку дельты


почему так назвал потому что вседга обычно использую такую приставку.
так сложилость исторически в каком то релизе 1с в стандартном запросе текст
Товар = Документ.Расхобная.Товар не работал
а текст
Х_Товар = Документ.Расхобная.Товар  работал
с тех пор я этот Х_ ставлю автоматически.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #54 - 13. Ноября 2008 :: 13:02
Печать  
вобщем, тогда у нее структура как у rg, только без периода, так?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #55 - 13. Ноября 2008 :: 13:03
Печать  
DmitrO писал(а) 13. Ноября 2008 :: 13:02:
вобщем, тогда у нее структура как у rg, только без периода, так?

да
+ еще в моей реализации столбец @@spid
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #56 - 13. Ноября 2008 :: 13:05
Печать  
DmitrO писал(а) 13. Ноября 2008 :: 13:02:
вобщем, тогда у нее структура как у rg, только без периода, так?

(off) Вообще то странно что ты еще не напился Улыбка
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #57 - 13. Ноября 2008 :: 13:10
Печать  
Завтра Улыбка, седня мне еще поездить надо.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #58 - 14. Ноября 2008 :: 06:57
Печать  
Я тут подумал и пришел к еще одному выводу прямое проведение дает большой выигрыш при востановлении  последовательности
и вообще при массовом перепроведении документов.
Это происходит потому что эти операции идут из "далекого" прошлого, а новый алгоритм за счет сокращения операций с rg будет иметь большой выигрыш.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql
Ответ #59 - 14. Ноября 2008 :: 08:43
Печать  
Ога, только восстановление последовательности эффективнее делать со сдвигом ТА.
  
Наверх
ICQ  
IP записан
 
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] 
ОтправитьПечать