Быстрое Удаление Движений Регистров Документов

  1. 7 нед. назад

    :)
    всем привет
    кто свертывал сикульную базу на 1с77 нестандартным способом?
    Задача минимум: удалить движения документов за период прямым запросом
    Задача максимум: еще и документы пометить на удаление
    зы
    вот такой код нашел - пробовал кто?

    выбДата = Формат(ДобавитьМесяц(РабочаяДата(), -6), "ДГГГГММДД");
    ТекстЗапроса = "
    |UPDATE
    | _1sjourn
    |SET
    | ismark = 1, closed = 0
    |WHERE
    | (Date_Time_IDDOC<'"+выбДата+"')
    |AND
    | IDDocDef=$ВидДокумента.кпкЗадание
    |";
    Query = СоздатьОбъект("ODBCRecordSet");
    Возвр = Query.Выполнить(ТекстЗапроса);
    Если Возвр = 0 Тогда
    глКомментарий(Query.GetLastError(),0,,"!");
    КонецЕсли;
    Query.Закрыть();

    ззы
    https://ekorshunov.blogspot.com/2015/07/1-1.html

    Ответы: (7) (14)
  2. Удали и движения и документы напрямую удалением таблиц полностью.

  3. :) ну я как бы не написал прямо но в коде же намек что это свертка за период

  4. на клюшках жи штатно всё норм делалось. Переносишь ТА на 01.01.2000 удаляешь документы через .Удалить(), Возвращаешь ТА на место

    Ответы: (4)
  5. 12.10.2022 15:10:09 отредактировано andrewalexk

    (3):) это если база нормальная а если громоздкая и надо ускорить процесс на порядок

    Ответы: (5)
  6. 12.10.2022 15:11:54 отредактировано 1Сергей

    (4) тогда, извинити. Ебститесь на здоровие. Я таким не занимался)

  7. :) мало кто ... но безумству храбрых поем мы песни

  8. (0) вроде даже мое (хз сколько лет назад) это чистка последышей от КПК (кпкЗадание), как-бы работала. Но помню, что есть резалки и получше.

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

  10. :)
    вот как раз первое дело - убрать записи в регистрах ... расширенный поиск из мисты дает много веток но все сырые

  11. Чем тебе не понравился способ удаления средствами 1С?

  12. Закомментируй модули документов чтоб никаких проверок не было и удаляй.

  13. :) не подходит увы

  14. :)
    вот кстати и для регов кинули примерный текст однажды на форуме
    СЦ = 0;
    Для СЦ = 1 По Метаданные.Регистр() Цикл
    вМетаРег = Метаданные.Регистр(СЦ);
    вИдент = вМетаРег.Идентификатор;
    ТекстЗапроса = "
    |DELETE FROM $Регистр."+вИдент+"
    |WHERE IDDOC IN (
    | SELECT
    | жОбщий.IDDOC
    | FROM
    | _1SJourn as жОбщий (NOLOCK)
    | WHERE
    | жОбщий.DATE_TIME_IDDOC <= :ВыбДата
    |)
    |";

    КонецЦикла;

  15. :)
    и для варианта (0)
    вРекордСет = СоздатьОбъект("ODBCRecordset");
    Состояние("Начинаем Чистку регистров у непроведенных документов.");
    СЦ = 0;
    Для СЦ = 1 По Метаданные.Регистр() Цикл
    вМетаРегистр = Метаданные.Регистр(СЦ);
    вИдент = вМетаРегистр.Идентификатор;
    ТекстЗапроса = "
    |DELETE FROM $Регистр."+вИдент+"
    |WHERE IDDOC IN (
    |
    |SELECT
    | рег.IDDOC
    |FROM
    | $Регистр."+вИдент+" as рег(NOLOCK)
    | INNER JOIN _1SJourn as жОбщий (NOLOCK) on рег.IDDOC = жОбщий.IDDOC
    |WHERE
    | жОбщий.CLOSED & 1 = 0
    |GROUP BY
    | рег.IDDOC
    |)
    |";
    вТаблаЗнач = СоздатьОбъект("ТаблицаЗначений");
    Попытка
    вТаблаЗнач = вРекордСет.ВыполнитьИнструкцию(ТекстЗапроса);
    Исключение
    глСообщитьОбОшибке(ОписаниеОшибки()+"[201404291347]");
    вТаблаЗнач = СоздатьОбъект("ТаблицаЗначений");
    КонецПопытки;
    КонецЦикла;

  16. USE MyTestBase Go CREATE TABLE ##ID (IDDOC char(9) primary key clustered) Go INSERT INTO ##ID SELECT DISTINCT IDDOC FROM _1SJOURN WHERE (DATE_TIME_IDDOC < '20220101') Go BEGIN TRANSACTION DECLARE Mycur cursor for SELECT sysobjects.name,syscolumns.name FROM syscolumns INNER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE (syscolumns.name = N'iddoc') OR (syscolumns.name = N'docid') OPEN MyCur DECLARE TableName varchar(20) DECLARE ColName varchar(20) FETCH NEXT FROM MyCur INTO TableName, ColName WHILE @@FETCH_STATUS = 0 BEGIN EXEC ('Delete from '+@TableName+' with (tablock) where '+@ColName+' IN (Select IDDOC FROM ##ID)') FETCH NEXT FROM MyCur INTO TableName, ColName END CLOSE MyCur DEALLOCATE MyCur COMMIT TRANSACTION DROP TABLE ##ID

  17. как тут отформатировать - не знаю

  18. После обрезки, итоги пересчитать таки придется.

  19. :)
    итоги это тоже проблема
    база большая специализированная работает от 21 до 24 часов в сутки 7 дней в неделю

    Ответы: (23) (27) (28)
  20. тогда только средствами 1С, без всяких скриптов SQL, увы.

  21. :)
    вот именно что увы средствами 1с

  22. Итоги за сворачиваемый период тоже можно удалить прямым запросом, но нормальным, без 1С++

  23. Что там ещё было в 7.7 ?
    Периодические реквизиты все хранились в таблице констант.
    Строки неограниченной длины тоже в отдельной таблице хранились. Если в удаляемых доках есть такие реквизиты, то тоже чистить надо.

  24. andrewalexk :)
    итоги это тоже проблема
    база большая специализированная работает от 21 до 24 часов в сутки 7 дней в неделю

    Перевести их на 8.3, и не [...] мозг :)

    Ответы: (25)
  25. :)
    я пока не про полную очистку данных
    задача №1 - свернуть регистры
    то есть
    задача№1.0 -создать ввод остатков
    задача№1.1 - пометить документы за первый год на удаление
    задача№1.2 - убрать движения регистров без документов
    задача№1.3 - провести ввод остатков

  26. (23):)) доброе старое нуралиевское эпохи 8.0 - переходите на 1с8 - там все реализовано (нет)
    я помню тогда фирмы разорялись "пытаясь" перейти ...

  27. Суровый онанизм. Писал нечто подобное, но под 8-ку.

    Если так проблемно сделать свертку, может будет проще создать новую базу? Перекинуть в неё нужные справочники и остатки, запустить юзеров.

    Ответы: (27) (28)
  28. 6 нед. назад

    (26):) см (18)

    Ответы: (28)
  29. andrewalexk (26):) см (18)

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

    Ответы: (30) (44)
  30. :) уже лучше

  31. 14.10.2022 13:25:31 отредактировано Идун

    (28) я делал через РИБ Полный обмен (или как он там), остальное - так же. В репликации (только новые и измененные) как делать не разбирался (лень). Ессно РИБ лепить из скульной копии (узел только создать до-то-го). Потом таблички поправить... в памяти только = менять идентификаторы баз в 1SDBSET (поле DBSTATUS). Центр это M, периферийка это C. и де-то исчо.

  32. Средствами 1с репликация будет ворочаться медленно и печально. Для больших баз может не взлететь, у dbf ограничения есть

    Ответы: (32)
  33. (31) рбд (урбд) в 77, лежащей на SQL, работает гораздо быстрее рбд 8 -рошного. Она-же для древних компов делана и размер файла обмена 0,5 Мб обрабатывается за секунды. а 0,5, для 77 - это суточный обмен с одним подразделением.

  34. Так я же не сравниваю риб в 7-ке и 8-ке. В этом смысла нет. Риб в 8-ке на больших базах тупит очень сильно, поэтому и приходится пилить на t-sql.

    Для задачи ТС без прямой работы со скулем не обойтись

  35. :) наш админ сказал что репликация ваще не проблема

  36. 2 нед. назад

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

    Ответы: (36)
  37. (35) Не понял в чем проблема? В 7-ке на скуле лежат только данные, конфа лежит отдельно в md файле. Изменения md репликация не увидит.

  38. :) ну как отреагирует 1с при репликации на сикуле на изменение dds файла?

    Ответы: (42)
  39. Смотря что менять. Если потребуется реструктуризация таблиц, то плохо. Не надо так делать.

    Ответы: (39)
  40. (38):) говорю же - порядок измерений в регистрах

    Ответы: (40)
  41. (39) Не делай этого. Не надо.(С)

  42. :) т.е. не взлетит? жаль

  43. andrewalexk как отреагирует 1с при репликации на сикуле на изменение dds файла?

    Просто 77 не запустится, несоответствием объявлений в dds и составом таблиц в базе.
    Делать изменения таблиц "вручную" (приводить в соответствие с dds), ну взлетит (я бы не делал, слишком муторно). И это не совсем быстро и никакой работы пользователей , на время изменения, не предусмотрено. Поэтому так не делают, в смысле делают, только в виде ремонтных действий единичные, колонки правят, но не более.

  44. 1 нед. назад

    :)
    а такая мелочь - порядок колонок ... сикул же - вжух и нашел описание метаданных

  45. 6 дн. назад

    (28)
    :)
    "Разверни рядом копию базы.
    Настрой репликацию на скуле, пусть синхронизируется с основной.
    В клоне делай ввод остатков и обрезание.
    Потом переключай в неё юзеров и объявляй боевой."
    а ты сам делал так?
    а то говорят одна базы только на чтение

или зарегистрируйтесь чтобы ответить!