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



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 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 записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 
ОтправитьПечать