Имя: Пароль:
1C
1С v8
Обрезка базы данных
0 IPredator
 
05.12.23
06:23
Есть бд с данными от 2017 года. Крутится на MSSQL. Мне нужно урезать таким образом, чтобы остался только период с 01.2020 по настоящее время.
Как в таблицах правильно называются столбцы "Дата документа" и "Статус документа" .
Написал скрипт, но логично что он выдает мне ошибку, т.к. неверно указаны эти параметры.
Буду очень благодарен за любую помощь

DECLARE @TableName NVARCHAR(MAX);
DECLARE table_cursor CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_type = 'BASE TABLE';

OPEN table_cursor;

FETCH NEXT FROM table_cursor INTO @TableName;

WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE @SqlStatement NVARCHAR(MAX);
    SET @SqlStatement = N'DELETE FROM ' + @TableName + ' WHERE DocumentDate < ''2020-01-01'' OR (DocumentStatus IS NOT NULL AND DocumentStatus != ''Проведен'');';
    EXEC sp_executesql @SqlStatement;

    FETCH NEXT FROM table_cursor INTO @TableName;
END

CLOSE table_cursor;
DEALLOCATE table_cursor;
1 Aleksey
 
05.12.23
06:27
3 конверта уже написал?
2 rphosts
 
05.12.23
06:28
Учёл, что если просто удалить часть записей например РН, РБ - при любом пересчёте остатки улетят в космос?
3 rphosts
 
05.12.23
06:29
И да, бэкапов ведь не делается?
4 Андрей_Андреич
 
naïve
05.12.23
06:30
Очень длинный код. Достаточно Format C:
5 IPredator
 
05.12.23
06:56
Я так понял эти названия в таблицах не явные?
6 DimVad
 
05.12.23
07:01
Вам нужна не "обрезка" БД, а свёртка.
Свёртка выполняется по-разному в разных конфигурациях. Это можно погуглить.

Но всегда свёртка выполняется способами 1С, а не скуля.
7 rphosts
 
05.12.23
07:28
(6) можно и скулем, но нужно очень хорошо знать как саму конфу так и знать SQL (в смысле Language)
8 rphosts
 
05.12.23
07:29
(5) ПолучитьСтруктуруХраненияИнформационнойБазы(), но это тебе рано
9 DimVad
 
05.12.23
07:49
(7) Ну вот срежет он движения по РН до 01.2020
Как иметь в базе правильные остатки на эту дату ?
А нужно сформировать документы ввода начальных остатков на 01.2020.

Мне кажется что сложно это будет сделать средствами скуля :-)
10 DrLekter
 
05.12.23
08:17
Документы ввода сформировать 1с, а резать старое - скулем.
11 DrLekter
 
05.12.23
08:18
Главное - последовательность действий не перепутать )
12 Bigbro
 
05.12.23
08:23
это мощно конечно. хотя методологически неверно.
а имена можно посмотреть ручками открыв любую из этих табличек раз уж из скуля работаем
но не забывайте про бэкапы когда таким балуетесь
13 IPredator
 
05.12.23
08:25
(8)"ПолучитьСтруктуруХраненияИнформационнойБазы()" это не обсуждается.
Я спрашиваю в пределах своей компетенции, именно средствами sql.
Конфигурация не поддерживает Свёртку.
Поэтому решаю задачу именно средствами sql
14 IPredator
 
05.12.23
08:27
(12) "а имена можно посмотреть ручками открыв любую из этих табличек раз уж из скуля работаем" Очень интересно. Только я так и не разобрался как из БД 1с средствами SQL посмотреть хоть какие-то данные.
15 Bigbro
 
05.12.23
08:43
открываешь в ЕМ таблицы смотришь структуру - там все достаточно прозрачно.
16 Dedal
 
05.12.23
08:53
(13) Нету конфигураций не поддерживающих свертку, есть люди которую эту свертку не написали.

Про три конверта тебе правильно написали, то что ты хочешь приведет к необратимым последствиям после которых кроме как завести новую базу или достать копию не отрезанной и долго и упорно восстанавливать учет.
17 АНДР
 
05.12.23
09:01
Может быть у него документооборот? Тогда банальное удаление данных в sql прокатит.

(0) Чем обусловлена даа 01.2020? Для бухгалтерии должна быть 01.2019.

P S. Delete медленная операция, используй вставку в новую таблицу, удаляй старую, переименовывай.
18 Тихий омут
 
05.12.23
09:12
(0) Прежде чем делетить, отладь саму по себе выборку с нужными условиями. Вообще, прежде чем напрямую изменять данные в СУБД, хорошо бы несколько месяцев потренироваться на выборках из своей БД. Ещё по опыту 77 помню - там делал свёртку на скуле, но после того, как разложил по полочкам в своей бестолковке, как же база изнутри в скуле устроена. Тренировался на развёртке олап кубов в msbi
19 АгентБезопасной Нацио
 
05.12.23
09:17
(18) структура клюшек все-таки гораздо проще...
20 Мимохожий Однако
 
05.12.23
09:28
(13) Глупость и смелость в одном флаконе.
В документации к платформе 1С прямым текстом прописано, что запрещено таким образом работать с базой.
ОФФ: Вспомнился больничный анекдот про больному, которому в одновременно дали слабительное и снотворное.
21 АгентБезопасной Нацио
 
05.12.23
09:32
(20) "Слабоумие и отвага"©Чип&Дейл
А работать с базой напрямую запрещено всего лишь лицензией.
22 Тихий омут
 
05.12.23
09:53
(19) Согласен. Тем более, прежде чем - нужно на кошечках...
23 Тихий омут
 
05.12.23
09:56
(21) А вот кстати - написание скрипта для обслуживания баз в скуле это прямая работа или ещё не очень, особенно с учётом рекомендаций вендора про платформы 8.3.22 и старше? И чем чревато такое нарушение лицензии - она становится недействительна? Не ради спора спрашиваю, а для общего развития
24 Dedal
 
05.12.23
10:02
(21) Даже с выборками иногда из скулевой базы 1с8 получаешь интересные моменты и знания как все устроено. Я сильно сомневаюсь, что человек задающий вопрос вида "Как в таблицах правильно называются столбцы "Дата документа" и "Статус документа" ." способен отрезать это средствами скуля чтобы потом те кто будут это поддерживать, после захоронения ТС, не вспоминали его ОЧЕНЬ добрым словом. Но правда заработать можно  если клиент заплатит =)

(0)А так ТС качай Инструменты разработчика там есть обработка с структурой базы, изучай.
25 Dedal
 
05.12.23
10:03
(23) Сломается база, тебе скажут "сам дурак" помогать не будем.
26 Обработка
 
05.12.23
10:10
(0) Я как раз это проделываю сейчас.
1. Вытаскиваешь структуру хранения данных сопоставляешь таблицы скуля и 1С.
2. Обработкой ввода остатков только водишь документы ввода остатков на дату. Обычно он это делает на 1 число месяца и это правильно
3. В скуле просто удаляешь все записи движения регистров до даты ввода остатков.
4. Удаляешь доки до даты.
5. Делаешь между делом шринк чтоб не разбух лог файл.
6. Полный пересчет итогов.
7. Еще раз шринк лога. Можно и всей базы.
27 Обработка
 
05.12.23
10:11
У меня база 1.2 ТБ
Данные с 12 года.
Срезаю до начала 22 года.
Остается примерно 500 ГБ.
28 АгентБезопасной Нацио
 
05.12.23
10:12
(23) скрипт обслуживания - это всё-таки не прямой доступ к данным.
29 Тихий омут
 
05.12.23
10:14
(25) Понял, спасибо. Более чем разумно.
(28) Пусть так:)
30 mikecool
 
05.12.23
10:15
"безумству храбрых поем мы песню..."
31 АгентБезопасной Нацио
 
05.12.23
10:17
(30) не, это всё-таки "слабоумие и отвага"©
32 rphosts
 
05.12.23
10:17
(30) как-бы не стало "ихний стон у нас песней зовется".
33 Обработка
 
05.12.23
10:18
Я не парился как ты прям так:
Удаление итогов БИ
USE база;
delete        _AccRg5565
FROM            _AccRg5565
where _Period < '40180101'
DBCC SHRINKDATABASE ('база', 10);

или удаление документа
USE база;
delete _Document120  FROM _Document120  where _Date_Time < '40180101' DBCC SHRINKFILE  ('логимя_база_log', 100);
34 scanduta
 
05.12.23
10:19
(0) По мне так ошибочный подход изначально пытаться обрезать средствами чисто SQL, даже не зная как получить наименоваия полей.

Я хорошо владею и 1с и SQL и мой тебе совет изменить подход , иначе нечего не получится. Все равно тебе будет нужно залазить в базу через 1с и часть работ вести оттуда
35 Обработка
 
05.12.23
10:21
А вот как можно свертывать не нарушая лицензионное соглашение если средствами 1С ты сворачиваешь 10 дней а средствами скула 1-2 дня?
36 АгентБезопасной Нацио
 
05.12.23
10:22
(34) он же спрашивает "в пределах своей компетенции"©
37 АгентБезопасной Нацио
 
05.12.23
10:22
(35) "медленно и печально"©
38 Обработка
 
05.12.23
10:27
Я еще со времен 1с77 если база большая не сворачивал обычном путем. Это просо жесть.
Даже если небольшая база на 1с.83 сворачивается долго я ввожу остаток и переношу в чистую конфу. Так быстрее.
39 scanduta
 
05.12.23
10:41
(38) А как с доками НДС и прочим? ведь иногда так просто базу не свернешь.
В типовых иногда нужно оставлять некоторые доки для нормального функционирования. Мне кажется например современные сложные конфы, так просто, без анализа не свернуть.
40 Bigbro
 
05.12.23
10:53
в 7ке дополнительно надо было сохранять регистраторы для периодических реквизитов - для тех же ОС чтобы не похоронить данные.
в 8ке еще что то наверняка дополнительно
но вряд ли так уж много
41 АгентБезопасной Нацио
 
05.12.23
10:58
(40) и документы, на которые есть ссылки в документах и регистрах периода. И документы, на которые есть ссылки в 1scrdoc.
42 DimVad
 
05.12.23
11:16
(35) Я выполнял свёртку обработкой на копии а потом перенёс актуальные справочники и документы текущего периода.

Т.к. структура базы идентична то перенос делал с помощью "выгрузка загрузка данных xml".

И нет ни нарушения лицензионного соглашения ни страхов что "не ту табличку долбанул".
43 1Снег
 
05.12.23
14:43
Готовое решение же было: Свертка базы SQL + Альтернативный контроль удаления помеченных
https://open-budget.ru/public/139651/

На Инфостарте неактивно что-то
44 1Снег
 
05.12.23
14:44
+(43) Там в комплекте и документ ввода остатков идет
45 АгентБезопасной Нацио
 
05.12.23
15:10
(43) так понятно, почему "неактивно"...
46 IPredator
 
05.12.23
16:59
(33) мм, спасибо. попробую так.
47 rphosts
 
06.12.23
01:26
(46) что с бэкапами, Чарли?
48 IPredator
 
06.12.23
04:42
(47) если для тебя это так принципиально важно, каждую ночь делает 3 копии бэкапа: 1. Внешний хард, 2. NAS, 3. Физическая тачка в локальной сети. + все операции проводятся на тестовом сервере с полной КОПИЕЙ боевой базы данных.
49 IPredator
 
06.12.23
04:45
А то ты наверно уснуть не можешь и думаешь, есть ли у меня бэкапы или нет.
50 Bigbro
 
06.12.23
05:17
(48) хороший подход. это принципиально важно для того кто потом исправлять будет.
51 IPredator
 
06.12.23
05:50
(50) Кто будет исправлять в курсе, а у rphosts смотрю подгорело с самого начала, есть ли бэкапы или нет, а по теме 0
52 DJ Anthon
 
06.12.23
07:06
(51) по теме тебе тут почти все уже написали, твой подход в общем случае непригоден. ты даже конфигурацию не написал. хз, что у тебя там, самописка с одним видом документов или ERP. базы в 1С уже давно сложноструктурированные объекты с кучей взаимосвязей, где нельзя вот так просто залезть в скуль и порушить пару таблиц, времена 7.7 уже давно прошли. у нас подготовка к свертке заняла полгода и еще столько же займет. а ты захотел пару скриптов по-быстренькому написать и подгораешь.
53 Мимохожий Однако
 
06.12.23
07:20
(51) А кто будет исправлять? Мужики то не знают
54 АгентБезопасной Нацио
 
06.12.23
08:30
(53) это будет сюрприз!
55 IPredator
 
06.12.23
08:41
(53) Кто что будет исправлять? Какие мужики, ты что такое несешь вообще?)  (52) В моем случае свертка не поможет, немного другая задача. В базе есть скажем 7 организаций, только в одной из этих 7 организаций содержатся непроводные документы. Так вот, мне нужно просто исключить эту организацию, оставить остальные 6 и сделать с 01.20 года по настоящее время. Все таки думаю можно средствами sql этого добиться, пока в работе.
56 Мимохожий Однако
 
06.12.23
08:52
(55) Тебе виднее. Но поверь, что средствами 1С, уже есть вполне рабочий способ с использованием РИБ. Быстрее найти вменяемого 1С-ника и поделиться с ним, чем нырять в разборки со структурой базы в SQL. "Проходили, знаем."©
57 DJ Anthon
 
06.12.23
09:24
(55) ну вот, уже детали появляются, наконец. документы непроводные, значит, проблем с регистрами накопления быть не должно. но есть еще регистры сведений. документ самописный? в чем проблема их удалить штатно, если они непроводные, это же как два пальца? и что сделать с 01.20?
58 IPredator
 
06.12.23
09:31
(57) В базе документы по всем организациям с 2014 года, мне нужно оставить только с 01.2020 года. А одну организацию вообще убрать с базы
59 АгентБезопасной Нацио
 
06.12.23
09:31
(57) "непроводные" - чаще всего имеется ввиду, что "не проводятся по официальной бухгалтерии", т.е. "черная бухгалтерия".
60 Шурик71
 
06.12.23
09:44
(55)
> В моем случае свертка не поможет, немного другая задача.
..
> и сделать с 01.20 года по настоящее время.

Вот именно это сверткой и называют.

У тебя есть представление, каким образом в твоей "обрезанной базе" должны появиться остатки регистров накопления и бухгалтерии на 01.01.2020?

Ты понимаешь, что в текущей базе они формируются платформой из движений документов ДО даты 01.01.2020?

Ты понимаешь, что если просто удалить документы до 01.01.2020 - то любой системный пересчет итогов (например, в штатном режиме "Тестирование и исправление") эти остатки убьет?

Ты понимаешь, что основная задача свертки как раз и заключается в замене старых документов на входящие остатки?

Ты понимаешь, что в некоторых случаях даже замена старых документов на входящие остатки не дает возможности обойтись без потерь некоторой значимой информации?

Если у тебя на все эти вопросы есть ответ "да, понимаю и у меня есть решение" - то дерзай :) Но, ИМХО, человек с имеющимся решением этих проблем не задаст вопрос (0) ..
61 DJ Anthon
 
06.12.23
09:56
(60) а когда он узнает, что остатки формируются по первичным документам, объектам расчета и а еще есть справочники назначений, серий, ключей доступа, ключей аналитики, и ух ты! кадровые документы! вообще будет атас )))
62 shuhard
 
06.12.23
09:57
(61) ТС админ, он таких букв не знает (с)
63 АгентБезопасной Нацио
 
06.12.23
09:59
(60) да ему нужно просто удалить "черную бухгалтерию"
64 mikecool
 
06.12.23
09:59
(33) итоги как раз трунковать надо, потом пересчитать быстрее будет
65 PLUT
 
06.12.23
10:01
(61) дык этож 8-ка сырая? а ТС пофигурацию озвучил?
66 PLUT
 
06.12.23
10:02
(63) вполне себе метод норм - непосредственное удаление по сцылке Организация. а сцылки <Объект не найден> очистить средствами платформы

сто раз так делал :)
67 DJ Anthon
 
06.12.23
10:08
(66) а потом окажется, что у него интеркампани )))
68 PLUT
 
06.12.23
10:14
(67) ну и что? контрагент (с наименованием похеренной Организации) останется жы
69 Андрей_Андреич
 
naïve
06.12.23
10:26
В базе документы с 2014 года, а надо оставить с 2020.
Представляю, сколько мусора накопилось.
Делать, так делать в комплексе - остатки с 2024 и чистка справочников. А старую базу оставить на поглядеть. Но у ТС наверняка свое видение ситуации а у ГБ и прочих - им лишь бы ничего не делать
70 Bigbro
 
06.12.23
10:32
слабоумие и отвага! (с)
71 rphosts
 
06.12.23
10:38
(48) ну молодец, а то регулярно поднимается вопрос.
72 DJ Anthon
 
06.12.23
11:25
(68) с чего это? в документах передачи товаров между организациями не контрагенты.
73 PLUT
 
06.12.23
11:45
(72) тогда это уже не ч0рная бюстгалтерия

а так, да. в интеркампани организации, в (68) был не прав
74 Обработка
 
06.12.23
11:52
(39) Ну не без этого.
Хочешь свернуть грамотно то разбирай каждый документ и каждый регистр. Удалять только то что не повлияет на работы свернутой базы.
75 DJ Anthon
 
06.12.23
12:07
(74) как раз до второго пришествия ) 1С уже генерит новые доки и регистры быстрее, чем успеваешь их изучать, не говоря об всяких раузах и онлайнах-офлайнах
надо разбираться со встроенными механизмами свертки и допиливать их. и еще инструменты разработчика изучать, так как штатно при наличии хотя бы одной мелкой ошибки не работает бОльшая часть механизмов (групповуха, удаление, архивирование чеков, удаление дублей, удаление битых, и так далее)
76 Bigbro
 
07.12.23
05:26
как успехи
77 Мимохожий Однако
 
07.12.23
07:05
(76) Уволился )
78 Bigbro
 
07.12.23
07:13
"В базе документы по всем организациям с 2014 года,"
"Есть бд с данными от 2017 года."
база быстро растет в прошлое.
завтра ТС должен рассказать что документов в базе уже с 2011го.
79 DJ Anthon
 
07.12.23
07:19
(78) а там, глядишь, и до семерки недалеко)
80 shuhard
 
07.12.23
07:33
(76) ТС пришёл с конкретным вопросом, в (33) получил ответ, задачу успешно решил и болт положил на форум
81 Bigbro
 
07.12.23
08:42
судя по времени сообщений он еще на следующий день появлялся в теме. с уточнениями.
82 Обработка
 
07.12.23
11:25
По сути для работы важно ввести остатки на дату и удалить движения до даты свертки. А все остальное можно делать не спеша. Как бы ты не сворачивал.

Ввод остатков делается быстро от 10-15 минут до 1 часа.
Далее надо удалить движение до даты.
После включить активность записей ввода остатков.
И можно уже работать.
И по ночам или в более менее не загруженном промежутке потихоньку удалять  доки.
83 Обработка
 
07.12.23
11:27
Вот как раз удалять дживижения за 7-8 или 10-12 лет бывает очень долго.  И тут можно в скуле их замочить ))) быстро от часа до суток.
84 Прохожий
 
07.12.23
11:42
(82) И получить невозможность расчета больничных и отпускных по среднему.