Имя: Пароль:
1C
1С v8
Не удаляются документы в транзакции
,
0 GrVas
 
27.09.18
11:05
Пытаюсь удалить все документы, кроме одной организации.
Код
Процедура ВыбратьВсеДокументы()
    
//    УстановитьМонопольныйРежим(Истина);
    МассивДокументов=Метаданные.Документы;
    ВсегоДок = 0;  
    Для каждого СтрМас Из МассивДокументов Цикл
//        НачатьТранзакцию();
        КолДок = 0;
        Если СтрМас.Реквизиты.Найти("Организация")= Неопределено Тогда
            Продолжить;
        Иначе    
        
        КонецЕсли;
        
        
        ДокТип=СтрМас.Имя;
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    "+ДокТип+".Ссылка
        |ИЗ
        |    Документ."+ДокТип+" КАК "+ДокТип +" Где " + ДокТип+ ".Организация <> &Организация";
        Запрос.УстановитьПараметр("Организация", Организация);
        Результат = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ВсегоДок = ВсегоДок +1;    
            Если КолДок >=  100     Тогда
//             ЗафиксироватьТранзакцию();
             КолДок = 0;
//             НачатьТранзакцию();
            КонецЕсли;    
            Состояние(ВыборкаДетальныеЗаписи.Ссылка);
            Объект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
            Объект.Удалить();
            КолДок= КолДок+1;
        КонецЦикла;
  //      ЗафиксироватьТранзакцию();
    КонецЦикла;
//    УстановитьМонопольныйРежим(Ложь);
КонецПроцедуры    


Если использовать транзакции, строки закомментированы, то документы не удаляются.
Если не использовать транзакции документы удаляются.
Что не так?
1 Вафель
 
27.09.18
11:06
транзакция не фиксируется из-за ошибки.
2 GrVas
 
27.09.18
11:07
(1) Тоже так подумал, сообщений об ошибках не выводится при удалении без транзакции.
3 Cyberhawk
 
27.09.18
11:09
"документы не удаляются" // Подробнее
4 GrVas
 
27.09.18
11:09
(1) удаление сделать в попытке ?
5 GrVas
 
27.09.18
11:10
(3) не понятно, что не понятно. ))))
6 runuts
 
27.09.18
11:14
ну навскидку количество вызовов НачатьТранзакцию <> ЗафиксироватьТранзакцию

из-за

Если СтрМас.Реквизиты.Найти("Организация")= Неопределено Тогда
            Продолжить;  !!!!!!!!!!!!!!!1
7 GrVas
 
27.09.18
11:21
(6) попробую


Процедура ВыбратьВсеДокументы()
    
//    УстановитьМонопольныйРежим(Истина);
    МассивДокументов=Метаданные.Документы;
    ВсегоДок = 0;  
    Для каждого СтрМас Из МассивДокументов Цикл
        КолДок = 0;
        Если СтрМас.Реквизиты.Найти("Организация")= Неопределено Тогда
            Продолжить;
        Иначе    
        
        КонецЕсли;
        
        НачатьТранзакцию();
        
        ДокТип=СтрМас.Имя;
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    "+ДокТип+".Ссылка
        |ИЗ
        |    Документ."+ДокТип+" КАК "+ДокТип +" Где " + ДокТип+ ".Организация <> &Организация";
        Запрос.УстановитьПараметр("Организация", Организация);
        Результат = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ВсегоДок = ВсегоДок +1;    
            Если КолДок >=  100     Тогда
             ЗафиксироватьТранзакцию();
             КолДок = 0;
             НачатьТранзакцию();
            КонецЕсли;    
            Состояние(ВыборкаДетальныеЗаписи.Ссылка);
            Объект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
            Объект.Удалить();
            КолДок= КолДок+1;
        КонецЦикла;
        ЗафиксироватьТранзакцию();
    КонецЦикла;
//    УстановитьМонопольныйРежим(Ложь);
КонецПроцедуры
8 GrVas
 
27.09.18
11:37
(6) Спасибо. Документы удаляются.