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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Свертка базы
10. Апреля 2007 :: 05:12
Печать  
Такой вопрос: кто-нибудь делал свертку базы средствами 1С++?
  
Наверх
ICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #1 - 10. Апреля 2007 :: 13:53
Печать  
Nick писал(а) 10. Апреля 2007 :: 05:12:
Такой вопрос: кто-нибудь делал свертку базы средствами 1С++?

Если добывать итоговые данные, это не проблема.
А все остальное, наверное лучше 1С попыхтит...
  
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #2 - 11. Апреля 2007 :: 02:57
Печать  
А как насчет удаления истории периодических реквизитов? по идее можно одним запросом удалить по заданную дату или я ошибаюсб?
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #3 - 11. Апреля 2007 :: 09:05
Печать  
Nick писал(а) 11. Апреля 2007 :: 02:57:
А как насчет удаления истории периодических реквизитов? по идее можно одним запросом удалить по заданную дату или я ошибаюсб?


delete from _1sconst where date < cast('20070101' as datetime)

Только поаккуратнее нужно с этим: на самом деле сначала нужно перенести на первую сохраняемую дату последние ранее назначенные значения реквизитов. Скрипт с ходу не нашёл, а заново писать лениво.

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

insert into _1sconst
           |(id, objid, date, value, docid, time, actno,lineno_,tvalue)
           |select ta.id0 as id, ta.objid0 as objid, cast('20031231' as datetime), tb.value, tb.docid, tb.time, tb.actno, tb.lineno_, tb.tvalue from
           |(select t0.id as id0, t0.objid as objid0, (select top 1 ref.row_id from
           |_1sconst as ref
           |where
           |ref.id = t0.id
           |AND
           |ref.date < '20040101'
           |AND
           |ref.objid = t0.objid
           |Order by ref.date desc, ref.time desc, ref.docid desc, ref.row_id desc) rowid
           |from (select distinct id,objid from _1sconst where
           |id in (select id from "+ИмяВрТаб+")
           |AND
           |date < '20040101')
           |as t0
           |) ta
           |left join
           |(select row_id, date, value, docid, time, actno, lineno_,tvalue from _1sconst) tb
           |on ta.rowid= tb.row_id
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #4 - 11. Апреля 2007 :: 09:16
Печать  
trdm писал(а) 10. Апреля 2007 :: 13:53:
Nick писал(а) 10. Апреля 2007 :: 05:12:
Такой вопрос: кто-нибудь делал свертку базы средствами 1С++?

Если добывать итоговые данные, это не проблема.
А все остальное, наверное лучше 1С попыхтит...

Не факт.
Хорошо показала себя следующая последовательность:
1. Вываливаю бух. и опер. остатки на дату "обрезания" в специализированные доки ввода нач. остатков (рекомендуется кромсать по 10тыс строк)
2. Прямым запросом чикаю все движения регистров, а также все промежуточные итоги, за закрываемый период.
3. Средствами 1С делаю выбратьдокументы за требуемый период, цикл получитьдокумент()=1 и док.удалить.
Юмор в том, что документы, не имеющие движений, удаляются со свистом, а проводок у меня почти нет. Если проводок дохрена, имеет смысл подкорректировать алгоритм.
Прямое удаление доков (а) лениво писать (б) у меня бывают весьма хитрые ПриОтменеПроведения.
4. Прямым запросом чищу все бух.итоги за удаляемый период.
5. Пересчет регистров и бух остатков средствами 1С
6. Провожу ранее подготовленные доки ввода нач.остатков датой обрезания минус 1.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #5 - 11. Апреля 2007 :: 09:25
Печать  
И проводки можно пожалуй тоже удалить средствами SQL а потом перерасчет итогов сделать, только конечно с начало операцию ввода остатков сделать.
А вот можно что - нибудь такое с регистрами проделать?
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #6 - 11. Апреля 2007 :: 09:27
Печать  
Nick писал(а) 11. Апреля 2007 :: 09:25:
И проводки можно пожалуй тоже удалить средствами SQL а потом перерасчет итогов сделать, только конечно с начало операцию ввода остатков сделать.
А вот можно что - нибудь такое с регистрами проделать?

Пока писал вопрос устарел Улыбка смотри выше
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #7 - 11. Апреля 2007 :: 09:33
Печать  
Nick писал(а) 11. Апреля 2007 :: 09:25:
И проводки можно пожалуй тоже удалить средствами SQL а потом перерасчет итогов сделать, только конечно с начало операцию ввода остатков сделать.
А вот можно что - нибудь такое с регистрами проделать?


Разумеется, можно. Просто я не стал заморачиваться, т.к. у меня их очень мало, в основном всё на регистрах. А регистры я как раз напрямую и чикал - см.выше повнимательнее

Примерно так:
delete from rg12345 where period<={d '1945-12-01'}

delete from ra12345 where date_time_iddoc<'19451231z'

Потому как ежели чикать регистры путём удаления доков, то каждый раз будут пересчитываться промежуточные итоги, а это ОЧЕНЬ долго

  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Свертка базы
Ответ #8 - 11. Апреля 2007 :: 09:33
Печать  
Quan писал(а) 11. Апреля 2007 :: 09:16:
trdm писал(а) 10. Апреля 2007 :: 13:53:
Nick писал(а) 10. Апреля 2007 :: 05:12:
Такой вопрос: кто-нибудь делал свертку базы средствами 1С++?

Если добывать итоговые данные, это не проблема.
А все остальное, наверное лучше 1С попыхтит...

Не факт.
Хорошо показала себя следующая последовательность:
1. Вываливаю бух. и опер. остатки на дату "обрезания" в специализированные доки ввода нач. остатков (рекомендуется кромсать по 10тыс строк)
2. Прямым запросом чикаю все движения регистров, а также все промежуточные итоги, за закрываемый период.
3. Средствами 1С делаю выбратьдокументы за требуемый период, цикл получитьдокумент()=1 и док.удалить.
Юмор в том, что документы, не имеющие движений, удаляются со свистом, а проводок у меня почти нет. Если проводок дохрена, имеет смысл подкорректировать алгоритм.
Прямое удаление доков (а) лениво писать (б) у меня бывают весьма хитрые ПриОтменеПроведения.
4. Прямым запросом чищу все бух.итоги за удаляемый период.
5. Пересчет регистров и бух остатков средствами 1С
6. Провожу ранее подготовленные доки ввода нач.остатков датой обрезания минус 1.


А документы по вводу остатков регистров делал для каждого регистра разные или один универсальный документ? С какой - нибудь хитрой табличной частью?
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #9 - 11. Апреля 2007 :: 10:07
Печать  
Nick писал(а) 11. Апреля 2007 :: 09:33:
А документы по вводу остатков регистров делал для каждого регистра разные или один универсальный документ? С какой - нибудь хитрой табличной частью?


Документ один, в заголовке - имя регистра, в табличной части - поля неопределённого типа (Измерения) и числовые (ресурсы). При проведении - через если-иначеесли анализ имени регистра, присвоение соответствующих величин, и выполнение движений.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #10 - 11. Апреля 2007 :: 14:56
Печать  
кстати, если поставить ТА на дату "начала времён" (т.е. до первого документа в БД), то при удалении доков ни какие итоги по регам не пересчитываются. Чем я раньше доблестно и пользовался. (Весьма хитрое ПриОтменеПроведения() не встречалось, может и упереться).

ЗЫ: DBF tested.
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #11 - 11. Апреля 2007 :: 15:11
Печать  
Вариант-вопрос:

Что-то последнее время достало рисовать спец.доки с развесистой ТЧ, сделал док вообще без ТЧ. И шапка пустая. Док берет для себя данные из текстового файла, который я формирую обормоткой. Файл зарезервлен на сменный носитель. Вносит остатки нужным регам.
Перепроведение\Отмена  документа программно запрещены.

Пока живет (громкое слово "живет"; пользуюсь раз в год.. если правильно помню.)

Из минусов, заметных мне :

1) Поправить пару строчек или цифр - фигу, хотя это от лени написать редактор файла.
2) Страааашно  Круглые глаза   .... было. Но это, наверное, стереотипы.

Файлы с данными назвал RE*.DBF, чтобы архивировались за одно с БД. В * привязка ко внутр. ИДу документа (т.е. жму "Записать", а потом уже вызываю "Фиксатор остатков". Но это частность)) )

Ага, вопрос-то задать хотел Улыбка
Нормально же придумал? Или так-себе?
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #12 - 12. Апреля 2007 :: 06:21
Печать  
dnp писал(а) 11. Апреля 2007 :: 15:11:
Ага, вопрос-то задать хотел Улыбка
Нормально же придумал? Или так-себе?


гм.... работоспособно, но ИМХО некрасиво. Всё-таки самодостаточные данные должны жить в базе (опять же имхо).
Если уж так хочется хранить текстовые исходники разнородных даннык, то может стОит создать в шапке единственный реквизит неопределённой длины?
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #13 - 12. Апреля 2007 :: 07:17
Печать  
Quan писал(а) 12. Апреля 2007 :: 06:21:
работоспособно, но ИМХО некрасиво

Вообще-то согласен.

Просто, после пары раз судорожных переделок структурированных доков ввода остатков, решил забить на красоту.

А про безразмерную строку - честно, просто пожалел 1SCONST.DBF забивать парой сотен килобайт данных, нужных один раз.

Выраженного желания хранения текстовых исходников данных, конечно, не было. Ибо там такие исходники, что человек их все равно не прочитает, все агрегатные объекты в виде ЗначениеВстрокуВнутр(...).

В ДБФ-ной базе безразмерная строка на сколько ёмкая? Не глюканет?
  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: Свертка базы
Ответ #14 - 12. Апреля 2007 :: 07:19
Печать  
dnp писал(а) 12. Апреля 2007 :: 07:17:
А про безразмерную строку - честно, просто пожалел 1SCONST.DBF забивать парой сотен килобайт данных, нужных один раз.

Выраженного желания хранения текстовых исходников данных, конечно, не было. Ибо там такие исходники, что человек их все равно не прочитает, все агрегатные объекты в виде ЗначениеВстрокуВнутр(...).

В ДБФ-ной базе безразмерная строка на сколько ёмкая? Не глюканет?


Сорри, постоянно забываю про существование ДБФ. Там, возможно, Ваше решение подходит лучше.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать