Имя: Пароль:
1C
1С v8
Свертка нетиповой 1С базы
0 247tsm
 
24.09.17
14:35
Добрый день, знатоки 1с83,
Понадобилось нашему директору ежемесячно чистить базу - удалять (от греха подальше) все прошлые документы - документы до начала текущего месяца. Я погуглил, но, к сожалению, так и не нашел подходящую обработку, т.к. они все заточены под определенные конфигурации или платные.
Итак, вкратце, задача такая:
1. Есть самописная конфигурация - 1с83 - управляемое приложение.
2. В ней куча разных регистров, в т.ч и бухгалтерии.
2. Нужно на начало месяца удалять все документы (приход, перемещение, расход...), оставляя лишь остатки по всем регистрам, включая бухгалтерию.

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

Большое спасибо.
1 mehfk
 
24.09.17
14:48
(0) Бесплатный обработки создаются самостоятельно в режиме конфигуратора.
2 247tsm
 
24.09.17
14:52
(1) Думаю, на свете не перевелись еще добрые люди.
3 mehfk
 
24.09.17
14:55
Вместо з/п тебе твой босс "спасибо" говорит?
4 Смотрящий
 
24.09.17
14:59
(2) Не перевелись, но рыночный оскал заставляет скалиться в ответ
5 mehfk
 
24.09.17
15:01
Я бы брал свертку с ИТС и уже ее бы дорабаывал под себя.
6 247tsm
 
24.09.17
15:35
(4) значит, рынок - зло
7 Смотрящий
 
24.09.17
15:36
(6) Догада ... Плановую похоронили - жрите чо дают
8 Cyberhawk
 
24.09.17
15:37
"ежемесячно чистить базу - удалять (от греха подальше) все прошлые документы - документы до начала текущего месяца" // Зачем тогда вообще база?
9 Смотрящий
 
24.09.17
15:38
(8) обычно три месяца держат - остальное в архивную сливают
10 Cyberhawk
 
24.09.17
15:39
(9) Такое могут позволить только те, кому документы-объекты БД из прошлых периодов не нужны
11 247tsm
 
24.09.17
15:40
(8) По секрету - а если он не хочет показывать "левый" товар?
Три месяца ждать не "комфортно".
12 247tsm
 
24.09.17
15:41
(10) ему не нужны прошлые документы. Тем более, что перед сверткой можно делать архив
13 Смотрящий
 
24.09.17
15:41
(10) Все вводом остатков доработанных разруливается. Надо что то совсем уж до штуки/копейки посмотреть - лезут в архивную
14 Cyberhawk
 
24.09.17
15:41
(12) Ты что-то напутал. Никакая свертка не решает задачу удаления данных из базы.
15 247tsm
 
24.09.17
15:43
(14) А если свертка не чистит базу, зачем она нужна?
16 Cyberhawk
 
24.09.17
15:44
(15) Свертка решает единственную возложенную на нее задачу - уменьшение размера, занимаевого БД на диске. В основном за счет свертки _регистров_, а никакой не "базы".
17 Смотрящий
 
24.09.17
15:45
(14) Эмммм ... Просвети про это "Никакая свертка не решает задачу удаления данных из базы"
18 Cyberhawk
 
24.09.17
15:46
(17) Свертка = свертка регистров.
Остального универсального не существует, поэтому и зваться сверткой оно не может.
19 247tsm
 
24.09.17
15:46
(16) т.е. в базе остаются все документы за 10 лет?
20 247tsm
 
24.09.17
15:47
(16) А что занимает больше места: записи регистров или документы?
21 NorthWind
 
24.09.17
15:47
(17) так свертка в обычном понимании действительно не удаляет документы. Она очищает регистры. Документы все остаются для просмотра и распечатки, только проводить их нельзя, чтобы не создавались движения в "свернутом" периоде.
22 NorthWind
 
24.09.17
15:48
То что требуется автору - это совершенно не типовая свертка. Ему требуется автоматизировать ввод остатков в чистую базу
23 Cyberhawk
 
24.09.17
15:48
(19) Конечно остаются, ведь они сидят в движениях регистров, в т.ч. свернутых. Документы никакая свертка трогать не должна, ибо сворачивать можно вообще только какой-то один жирный регистр.
24 Cyberhawk
 
24.09.17
15:49
(20) Так это зависит от дерева метаданных уже. Смотрится на каждой базе индивидуально перед принятием решения, а что же, собственно, надо сворачивать для уменьшения ее размера
25 247tsm
 
24.09.17
15:49
(22) согласен, можно задачу сформулировать и так.
26 NorthWind
 
24.09.17
15:49
то бишь надо из старой базы в XML или еще куда выгрузить остатки, а потом автоматически создать в новой чистой базе документы ввода остатков. Задача эта под каждую базу решается индивидуально, никакого общего механизма тут быть не может.
27 h-sp
 
24.09.17
15:51
(20) ну а зачем сворачивать каждый месяц? Это глупо. И очень дорого. Лучше например создать базу на флешке, и флешку на ночь сдавать в задний карман брюк директора.
28 247tsm
 
24.09.17
15:52
(26) А можно сделать универсальный регистратор и в цикле пройтись по всем регистрам, определить остатки и зафиксировать их этим регистратором?
29 Cyberhawk
 
24.09.17
15:53
(28) И все равно это не будет универсально, тем более если регистратор "сделать". Алгоритмы проведения, например, в куче мест заточены под тип регистратора и его реквизиты.
30 247tsm
 
24.09.17
15:54
(27) А если внезапно в магазин приходят "люди в черном" и забирают комп с флешкой, где вся база?
31 Смотрящий
 
24.09.17
15:56
(18, 21) Ну а как же парадигма типовых "нет движений - нет и документов" ?
32 247tsm
 
24.09.17
15:56
(29) А зачем проводить универсальный документ-регистратор? Ведь можно движения создать программно и запретить перепроводить документ-регистратор. Или я что-то не то говорю?
33 NorthWind
 
24.09.17
16:00
(31) ну, парадигма парадигмой, а жизнь она "ширее" парадигм :)
34 247tsm
 
24.09.17
16:00
(29) Движения это записи в регистре. Почему нельзя использовать метаданные, чтобы пробежаться по всем регистрам, вычислить остатки, почистить регистр и записать в него остатки, и где в качестве регистратора будет некий документ-регистратор?
Вот мне бы пример такого цикла, или скорее там будут вложенные циклы.
35 NorthWind
 
24.09.17
16:01
(34) инфостарт вам в помощь, там такое попадается. Вот к примеру http://catalog.mista.ru/public/14873/
36 NorthWind
 
24.09.17
16:02
хотя это под семерку, прошу прощения
37 247tsm
 
24.09.17
16:03
(33) но тогда нужно строго-настрого запретить перепроводить старые оставшиеся в базе документы.
Хотя, по-моему, удалять только движения - это полумера.
38 NorthWind
 
24.09.17
16:04
(37) это делается автоматически. Устанавливается специальный признак, и документ не проводится ни при каких обстоятельствах.
39 Смотрящий
 
24.09.17
16:05
(38) Документы прошлых периодов после свертки базы _надо удалять_.
40 Смотрящий
 
24.09.17
16:09
(+39) Чистятся справочники от старой информации (v7v8), снижается нагрузка на полнотекстовый поиск (v8), режется общий размер базы.
Исключается вариант постанализа данных недобросовестными сотрудниками (засланными казачками)
и т.д.
41 247tsm
 
24.09.17
16:11
Но всё же. Кто-то может показать код:

используя метаданные, пробежаться по всем регистрам, вычислить остатки по регистру, почистить регистр и записать в него остатки на заданную дату, а в качестве регистратора будет некий документ-регистратор.
43 247tsm
 
24.09.17
16:20
(42) А насколько страшна или неправильна идея замены всех регистраторов всех регистров прошлого периода на "универсальный регистратор"? Может есть какие-нибудь подводные камни?
Ведь тогда не будут видны документы и проверяющим не к чему придраться.
Хотя база при этом не уменьшится.
44 247tsm
 
24.09.17
16:22
(42) Соврал, база уменьшится за счет удаления старых документов.
45 247tsm
 
24.09.17
16:26
(42) Т.е.,
1) заменяем регистраторы всех регистров до определенной даты на один и тот же "общий" регистратор
2) удаляем без боязни документы до даты "свертки" (т.к. они уже не являются регистраторами)

Какие подводные камни?
46 Amra
 
24.09.17
16:35
(45) Подводные камни? Убитая база. На документы ссылки есть не только как на регистраторы, но и в измерениях регистров - в партиях товаров, во взаиморасчетах по документам
47 h-sp
 
24.09.17
16:51
(43) проверяющим есть с чему придраться. Они сразу увидят, что нет предыдущих месяцев. Скажут, ну и где?
48 247tsm
 
24.09.17
17:15
(47) а кто сказал, что в базе обязательно должны храниться все документы? Всегда есть отговорка: программа написана так, что хранятся только документы текущего месяца, а прошлые - смотрите бумажные документы.
49 h-sp
 
24.09.17
17:21
(48) ну тут вы вообще чудите. Проверяющие проверяют по бумажным документам. С какого бодунам они вдруг решат полезть в базу? Да и кто им даст базу?
50 247tsm
 
24.09.17
17:28
(49) Тогда к чему (47)?
51 h-sp
 
24.09.17
17:49
(50)  (47) это к (43) "не будут видны документы и проверяющим не к чему придраться"
52 Cyberhawk
 
26.09.17
11:36
(32) Я имел в виду, что алгоритмы проведения типовых регистраторов заточены на всякие там проверки, что предыдущие записи сделаны таким-то документом, и на твой "универсальный регистратор" могут быть не рассчитаны. В типовых таких примеров масса.
53 Cyberhawk
 
26.09.17
11:38
(31) Так движения-то есть (останутся), в свойствах которых и сидят ссылки на те самые документы, движения которых вероятно и буду свернуты. Но сами-то ссылки останутся ) Поэтому после свертки для вычищения нужно, например, те же документы расчетов заменять на какой-нибудь "подложный" новый документ.
А потом вдруг окажется, что какой-нибудь алгоритм проведения документа оплаты строит таблицу взаиморасчетов, опираясь на реквизиты регистратоа :)
54 vadim777
 
26.09.17
11:53
Почитал ветку, и задался вопросом - а стоит ли вообще делать свертку на 8-ке, если документы удалять нельзя? Размер базы то все равно не уменьшится. Даже возрастет немного, на размер документов, формируемых сверткой.
55 Cyberhawk
 
26.09.17
12:09
(54) Свертку жирных регистров как раз и делают, чтобы размер базы уменьшился. А ты что-то путаешь.
56 Рэйв
 
26.09.17
12:32
(0)Для "сокрытия" ненужных телодвижений текущую базу превращают в черную, а рядом кладут белую, куда перегружают только белые и пушистые данные.

а свертка - это дело сугубо техническое, к учету мало имеющее отношение
57 nicxxx
 
26.09.17
13:06
(41) Да это у тебя и так практически код. Что там сложного? Ты сам-то программист или кто?

Для каждого Регистр из Метаданные.Регистры Цикл
Запрос.Текст = "
Выбрать
   Организация, Контрагент, СуммаОстаток
Из
   Регистр.Остатки(&ДатаОстатков)
";
Рез = Запрос.Выполнить();
Выборка = Рез.Выбрать();
ДокВводаОстатков = Документы.ВводОСтатков.Создать
Пока Выборка.Следующий() Цикл
  новСтр = ДокВводаОстатков.ТабЧасть.Добавить();
  новСтр.Организация = Выборка.Организация;
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший