четверг, 9 июля 2015 г.

1С и 1С++: пометка на удаление документов определенного вида до определенной даты

Необходимо: Пометить 200 тыс. документов вида "кпкЗадание" на удаление. Документ не принадлежит ни к одной из компонент.

Решение:
Все документы 1С хранятся в таблице _1SJourn. Для пометки документа на удаление необходимо модифицировать следующие поля (очистить признак проведения и установить флаг пометки на удаление):

F=CLOSED                |Flag document is clo    |Y   |0     |0
F=ISMARK                |Doc is Marked for De    |L   |0     |0
  
CLOSED - Флаг проведения документа. Для каждого набора компонент свое значение (аналогично полю APPCODE). Значение последнего бита отвечает за флаг проведения документа. Тип - Число(1). 
ISMARK - Флаг пометки на удаление. 0 - не помечен, 1 - помечен. Тип - Число(1,0) (бинарное значение).
 
Источники:
http://www.skalnyy.com/1c-sql-bystroe-udalenie-dokumentov/ 
http://www.script-coding.com/Direct_queries.html#3.
http://www.script-coding.com/v77tables.html#1.2.4.

Текст модуля:

выбДата = Формат(ДобавитьМесяц(РабочаяДата(), -6), "ДГГГГММДД");
ТекстЗапроса = "
    |UPDATE
    |    _1sjourn
    |SET
    |    ismark = 1, closed = 0
    |WHERE
    |    (Date_Time_IDDOC<'"+выбДата+"')

    |AND
    |    IDDocDef=$ВидДокумента.кпкЗадание
    |";
Query = СоздатьОбъект("ODBCRecordSet");  
Возвр = Query.Выполнить(ТекстЗапроса);
Если Возвр = 0 Тогда
    глКомментарий(Query.GetLastError(),0,,"!");
КонецЕсли;
Query.Закрыть();

Комментариев нет: