Ищу обработку быстрого удаление документов в 1с 7.7 SQL.

Тема в разделе "Продукты 1C", создана пользователем Дятел81, 3 окт 2010.

  1. Дятел81

    Дятел81 Писатель

    Регистр.:
    11 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Собственно сабж.
    Находил в интернете метод быстрого удаления, но
    после его применения база перестает работать,
    не помогает даже ТиИ
     
  2. dap

    dap Создатель

    Регистр.:
    27 дек 2009
    Сообщения:
    10
    Симпатии:
    22
    А что может быть быстрее чем:

    НачатьТранзакцию();
    Док.ВыбратьДокументы();
    Пока Док.ПолучитьДокумент() = 1 Цикл
    Док.Удалить();
    КонецЦикла;
    ЗафиксироватьТранзакцию();

    ?

    Вас интересует прямой доступ к SQL через OLE Automation?
    Может база переставала работать, т.к. удаляли НЕПОСРЕДСТВЕННО без контроля ссылочной целостности?
     
  3. Дятел81

    Дятел81 Писатель

    Регистр.:
    11 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Я использовал данную статью на копии базы - не работает.
    После данных скриптов база вообще не работает - выдает ошибку.
    Ищу правильный скрипт.
    Быстрое удаление документов.
    Свертка базы 1С включает в себя не только корректное формирование остатков. Это еще и удаление старых документов, которые не будут актуальными после формирования начального сальдо. Использование штатных методов платформы 1С: Предприятие 7.7 не подходят для свертки базы 1С больших размеров. Процесс удаления может затянуться на продолжительный промежуток времени. Отсюда возникает вопрос: КАК МАКСИМАЛЬНО БЫСТРО ВЫПОЛНИТЬ СВЕРТКУ БАЗЫ 1С?
    Если Ваша база работает на SQL сервере, тогда решение этой задачи можно выполнить, используя его возможности. Что для этого нужно предпринять?
    Немного теории
    В каталоге информационной базы находится файл 1Cv77.DDS, в котором хранятся данные о структуре конфигурации. Из этого файла становится понятно, что шапки документов и их табличные части хранятся в таблицах, которые начинаются на DT и DH. Следовательно, нам нужно получить список таблиц базы данных, в которых хранятся данные по документам.
    Установим пометку удаления на документах:
    Для того, чтобы быстро пометить все документы в базе данных используем следующий скрипт:
    UPDATE _1sjourn SET ismark = 1, closed=4
    WHERE
    (Date_Time_IDDOC < 'ДатаУдаленияДокументов')
    Получим список таблиц табличных частей и шапок документов.
    Открываем Enterprise Manager SQL Server 2000. Открываем список таблиц информационной базы. Выделяем все, которые начинаются на DH и DT и делаем экспорт списка.
    Удалим из базы все помеченные на удаление документы.
    К настоящему этапу у нас все документы помечены на удаление, список таблиц базы данных имеются. Следовательно, не что не мешает нам удалить не нужные нам документы. Делается все это очень просто. При помощи такого кода:
    Delete From d From DH111(ИЛИDT111) d inner join _1SJourn j on d.iddoc = j.iddoc and j.ismark = 1 where j.Date_Time_IDDoc < 'ДатаУдаленияДокументов'
    Заключительные шаги.
    Очистив таблицы и шапки документов, нам остается удалить записи, которые хранятся в таблицах подчиненных документов и журнале документов.
    DELETE FROM _1scrdoc WHERE Child_Date_Time_IDDoc <= 'ДатаУдаленияДокументов'
    DELETE FROM _1SJourn Where ( (Date_Time_IDDOC < 'ДатаУдаленияДокументов') And (ISmark = 1))
    В результате выполнения этих шагов мы сможем очистить базу данных от не нужных документов в считанные минуты. Тем самым свертка базы данных 1С осуществляется во многие разы быстрее штатных механизмов. Как следствие у Вас освобождается много времени на проработку более серьезных задач переноса.
    Удачи Вам и не забывайте делать backup`ы…
     
  4. dap

    dap Создатель

    Регистр.:
    27 дек 2009
    Сообщения:
    10
    Симпатии:
    22
    Автор спрашивает про быстрое удаление чего-то а не свертку базы.
    А про прямой доступ к таблицам минуя контроль ссылочной целостности - это для профи. А тем, кто задает такие вопросы - так нельзя делать. В посте же не все написано ... :)
     
  5. Forseil2001

    Forseil2001 Писатель

    Регистр.:
    17 сен 2010
    Сообщения:
    0
    Симпатии:
    0
    Я думаю все решаемо я прикручивал к УРБД пометку для выгрузки
    http://rapidshare.com/files/427886401/_______________________________________________.ert
    Можно по этой же схеме и почистить базу
     
  6. Дятел81

    Дятел81 Писатель

    Регистр.:
    11 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Не скачивается обработка в приложении (((
     
  7. gorenski

    gorenski

    Регистр.:
    12 апр 2007
    Сообщения:
    164
    Симпатии:
    23
    Если удалять штатно, то самое быстрое так:
    PHP:
    СписокДокументов СоздатьОбъект("СписокЗначений");
    Док СоздатьОбъект("Документ");
    Док.ВыбратьДокументы();
    Пока Док.ПолучитьДокумент() = 1 Цикл
        СписокДокументов
    .ДобавитьЗначение(Док.ТекущийЭлемент());
    КонецЦикла;
    УдалитьОбъекты(СписокДокументов);
    Можно еще выборку ускорить прямым запросом, если используешь 1cpp.
     
  8. Дятел81

    Дятел81 Писатель

    Регистр.:
    11 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    gorenski
    спасибо, конечно.
    Но речь идет об удалении около миллиона документов,
    что штатно очень долго.
     
  9. gorenski

    gorenski

    Регистр.:
    12 апр 2007
    Сообщения:
    164
    Симпатии:
    23
    Я не сторонник прямого удаления в таблицах SQL, может будет проще перенести справочники в чистую базу?