Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Прямой запрос + быстрое перепроведение (число прочтений - 9390 )
Den@
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 23
Зарегистрирован: 24. Октября 2008
Прямой запрос + быстрое перепроведение
30. Марта 2009 :: 12:02
Печать  
Заинтересовался схемой максимально быстрого перепроведения в 1с 7.7 dbf, переписал модули проведения на использование прямых запросов, теперь проведение одного документа задним числом происходит очень быстро, однако столкнулся со следующей проблемой: если перепроводится некоторая произвольная последовательность документов задним числом, то ее нельзя запускать в транзакции, так как прямые запросы не могут получить обновленные данные. Надо запускать либо со сдвигом ТА, тогда используются стандартные методы 1с (ВыгрузитьИтоги), которые на ТА работают быстрее чем запросы, либо без транзакции, что получается медленно.
Теоретически, есть вариант: перед проведением рассчитать остатки по всем регистрам для всей используемой номенклатуры на первый документ из последовательности, начать транзакцию и при успешном проведении документа дополнять эту общую таблицу новыми данными, образовавшимися в итоге проведения документа. Однако, как написать такой универсальный запрос получения остатков, и главное, как оптимально осуществлять поиск в данной таблице для каждого документа, плюс заполнять новыми данными так чтобы было быстро - тут для меня пока все представляется слишком сложным, т.к. программирование 1с я осваиваю самостоятельно для своих прикладных нужд. Просто интересно, развивал ли кто-нибудь подобную идею на практике?

Второй момент - использует ли кто-нибудь анализ движений документа в модуле проведения с целью узнать, а надо ли его вообще перепроводить. По идее, можно легко считать все существующие движения документа + измененные периодические реквизиты, после этого получить таблицу новых движений и новых значений реквизитов, и если расхождений нет - то не перепроводить все заново, а просто успешно завершить процедуру проведения. Это актуально для распределенных баз, так как при перепроведении в центре получается объемный массив, который рассылается всем дочерним базам (который и загружается при автообмене достаточно долго), а смысла в нем мало, так как реально нужно было перепровести лишь небольшую часть документов. Имеет ли право на существование подобный прием, или я просто что-то не так понимаю?
  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #1 - 31. Марта 2009 :: 07:21
Печать  
1. Да. Мысль правильная. Создавай таблицу в которую и закидывай данные. В каком виде - можно и сказать, но будет намного лучше если сам дойдешь до этого.
2. К сожалению данным вопросом вплотную незанимался. В скульной базе можно сразу при изменении документа перепровести всю дальнейшую последовательность (по аналогии с восьмеркой). В ДБФ - ХЗ, неработаю я с ДБФ вплотную.
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #2 - 01. Апреля 2009 :: 07:18
Печать  
размер базы dbf озвучте,  интересно какой у неё размер
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #3 - 01. Апреля 2009 :: 07:30
Печать  
ev-kov писал(а) 01. Апреля 2009 :: 07:18:
размер базы dbf озвучте,  интересно какой у неё размер

Ну если ДБФ, то понятное дело мелочь.
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #4 - 01. Апреля 2009 :: 08:17
Печать  
Злой Бобр писал(а) 01. Апреля 2009 :: 07:30:
ev-kov писал(а) 01. Апреля 2009 :: 07:18:
размер базы dbf озвучте,  интересно какой у неё размер

Ну если ДБФ, то понятное дело мелочь.


если мелочь, то накой тогда там оптимизация ?

ведь есть всякие патчи dbeng32 снимающие ограничение на 1ГБ dbf или 2 ГБ уж не помню, так что в итоге база может быть 6-8 ГБ
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #5 - 01. Апреля 2009 :: 08:42
Печать  
ev-kov писал(а) 01. Апреля 2009 :: 08:17:
Злой Бобр писал(а) 01. Апреля 2009 :: 07:30:
ev-kov писал(а) 01. Апреля 2009 :: 07:18:
размер базы dbf озвучте,  интересно какой у неё размер

Ну если ДБФ, то понятное дело мелочь.


если мелочь, то накой тогда там оптимизация ?

ведь есть всякие патчи dbeng32 снимающие ограничение на 1ГБ dbf или 2 ГБ уж не помню, так что в итоге база может быть 6-8 ГБ

при чем тут размер базы
Есть ограничение на размер файла dbf 2 гб и никак вы его не обойдете.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #6 - 01. Апреля 2009 :: 08:46
Печать  
Den@ писал(а) 30. Марта 2009 :: 12:02:
Теоретически, есть вариант: перед проведением рассчитать остатки по всем регистрам для всей используемой номенклатуры на первый документ из последовательности, начать транзакцию и при успешном проведении документа дополнять эту общую таблицу новыми данными, образовавшимися в итоге проведения документа. Однако, как написать такой универсальный запрос получения остатков, и главное, как оптимально осуществлять поиск в данной таблице для каждого документа, плюс заполнять новыми данными так чтобы было быстро - тут для меня пока все представляется слишком сложным, т.к. программирование 1с я осваиваю самостоятельно для своих прикладных нужд. Просто интересно, развивал ли кто-нибудь подобную идею на практике?

Второй момент - использует ли кто-нибудь анализ движений документа в модуле проведения с целью узнать, а надо ли его вообще перепроводить.


Лучше вообще уходи от последовательности. Движения документа должны быть как можно просты и как можно меньше зависить от других документов.


На качественный анализ времени затратишь больше чем само проведение.
  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #7 - 01. Апреля 2009 :: 09:00
Печать  
ev-kov писал(а) 01. Апреля 2009 :: 08:17:
если мелочь, то накой тогда там оптимизация ?

В посте автора на мой взгляд все достаточно понятно написано. Почитай еще разок.
ev-kov писал(а) 01. Апреля 2009 :: 08:17:
ведь есть всякие патчи dbeng32 снимающие ограничение на 1ГБ dbf или 2 ГБ уж не помню, так что в итоге база может быть 6-8 ГБ

Не стоит путать размер базы и размер файла.
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #8 - 01. Апреля 2009 :: 09:08
Печать  
Z1 писал(а) 01. Апреля 2009 :: 08:46:
Лучше вообще уходи от последовательности.

Эх..., если б все было так просто... . Такое можно сделать только отказавшись от партионного учета. Что само по себе бросает в дрожь бухов, а если сделать на практике - ошалеют вкрай. Очень довольный
Иногда можно, а иногда и нет. Так что каждый должен найти свою "золотую середину". Подмигивание
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #9 - 01. Апреля 2009 :: 09:18
Печать  
Злой Бобр писал(а) 01. Апреля 2009 :: 09:00:
ev-kov писал(а) 01. Апреля 2009 :: 08:17:
если мелочь, то накой тогда там оптимизация ?

В посте автора на мой взгляд все достаточно понятно написано. Почитай еще разок.
ev-kov писал(а) 01. Апреля 2009 :: 08:17:
ведь есть всякие патчи dbeng32 снимающие ограничение на 1ГБ dbf или 2 ГБ уж не помню, так что в итоге база может быть 6-8 ГБ

Не стоит путать размер базы и размер файла.


Что есть размер базы для dbf ?
Кто мешает создать 100 справочников каждый размером по 1гб ?
тогда общий объем файлов будет 100 гб.
  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Прямой запрос + быстрое перепроведение
Ответ #10 - 01. Апреля 2009 :: 11:01
Печать  
Z1 писал(а) 01. Апреля 2009 :: 09:18:
Что есть размер базы для dbf ?

Общий размер файлов *.dbf
Z1 писал(а) 01. Апреля 2009 :: 09:18:
Кто мешает создать 100 справочников каждый размером по 1гб ?

Никто.
Z1 писал(а) 01. Апреля 2009 :: 09:18:
тогда общий объем файлов будет 100 гб.

Плюс размер остальных *.dbf
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Прямой запрос + быстрое перепроведение
Ответ #11 - 01. Апреля 2009 :: 12:12
Печать  
Да, думаю ограничение не играет большой роли.
Чтобы достичь 2 ГБ на табличку - общий размер базы - около 30 Гб.
И это без учета элементарных декомпозиций -
свертка, вынос строковых реквизитов в отдельный спр и т.п. ....
Т.е. где то без оптимизации > 60 Гб

При таком объеме говорить об 1С 7.7 как то странно

P.S> Элементарные приемы уменьщения объемов базы и увеличения производительности

1.Убрать галочку отбор у общих реквизитов (уменьшение 1SJourn)
2.У строковых реквизитов документов >100 поставить галочку "неограниченной" длины (DH*)
3.Проверить "закрывается" ли регистр (RG*)
4.Часть реквизитов вынести в связанный с объектом 1:1 спр (SC*)
5.Период реквизиты элементарно можно хранить в подчиненном спр (1SConst)
6. Убрать лишние графы отбора (1SCRDOC)
7. В реквизитах регистра не хранить строки >9 - спр или перечисления
не хранить много измерений - лучше или пара рег или класть измерения в спр типа партии(RA*)
  
Наверх
 
IP записан
 
Den@
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 23
Зарегистрирован: 24. Октября 2008
Re: Прямой запрос + быстрое перепроведение
Ответ #12 - 16. Апреля 2009 :: 05:44
Печать  
Спасибо, kiruha, за советы по оптимизации, посмотрев внимательно и разобравшись с таблицами смог сильно оптимизировать регистры.

Насчет сабжа, предпринял следующее...

По размеру базы, она у нас маленькая, совсем. 4 магазина розничной торговли, один год работы - 100тыс документов. Миграция для удобства настроена на все базы...

Свернув документы по нужным реквизитам, без потери данных, удалось сократить количество документов до 24тыс.

Далее, занялся оптимизацией проведения. Проблема с необходимостью перепроведения в том, что по одной группе товара номенклатура загружается из двух больших прайсов разных поставщиков, и при этом многие позиции дублируются, но с небольшими расхождениями в наименованиях, из за чего создаются дубли. Так как данная номенклатура - DVD-диски, то для правильного ассортимента дубли в обороте недопустимы... А бывает так что каждый дубль уже побывал в обороте, соответственно - замена значения + нарушение последовательности при этом.

Без оптимизации, стандартными средствами 1с, перепроведение 24тыс доков занимало минут 30-40. Но основная проблема не в этом, а в том что итоговая выгрузка содержала около 4 мегабайт и загружалась на компьютерах на местах до часа, плюс получение большого файла по небыстрому интернету.

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

А в обработке проведения РегистрацияИзменений(0) перед проведением, и если движения изменились, то потом делаем Записать(), чтобы документ попал в выгрузку.

Таким образом, полное перепроведение начало занимать ровно 5 минут с затратами на 1 документ 0,01 секунды. В выгрузки попадают только изменившиеся документы, а их очень немного при замене дублей.

Жаль, что подобную схему 1с не реализовала на уровне движка...
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Прямой запрос + быстрое перепроведение
Ответ #13 - 16. Апреля 2009 :: 06:21
Печать  
Написал ба статейку по оптимизации и ускорению работы 1С средствами 1С++.
Думаю форумчане будут благодарны.
  
Наверх
 
IP записан
 
Den@
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 23
Зарегистрирован: 24. Октября 2008
Re: Прямой запрос + быстрое перепроведение
Ответ #14 - 16. Апреля 2009 :: 08:33
Печать  
С удовольствием напишу, если это правда кому-то пригодится. И даже приложу вырезку из своей конфигурации, демонстрирующую все что я использовал для себя. Конечно, у меня всего лишь небольшой собственный опыт, но я правда во всем интернете не нашел внятного описания предложенной схемы. Проект 1с++ очень уважаю, с помощью него реализовал все необходимые мне вещи, так что буду рад если мой опыт поможет кому-то быстрее освоить данную тематику.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать