Переключение на Главную Страницу Страницы: [1] 2 3 ... 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) часть 2 xp - стандартные процедуры по изменению остатка регистра в  1с sql (число прочтений - 14555 )
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 записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 5
ОтправитьПечать