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