Имя: Пароль:
1C
1С v8
УТ 11 - программно изменить статус Заказа клиента
0 BeyondBelieff
 
27.08.12
10:30
Есть обработка, которая программно устанавливает статус Заказа клиента К обеспечению или К отгрузке.
После ее запуска при открытии любого заказа клиента возникает вот такая ошибка.

Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка СУБД:
Файл базы данных поврежден 'K:\.../1Cv8.1CD'
по причине:
Файл базы данных поврежден 'K:\.../1Cv8.1CD'

Лечится тестированием и исправлением, но при повторном запуске обработки возникает снова.
Проведение заказа выполняется в попытке, так что если он не может быть проведен (например, товара на складе нет), то он и не проводится, обработка ищет следующий заказ. Ошибка возникает именно в том случае, если удалось программно изменить статус и провести документ.

Подскажите, пожалуйста, куда копать?
11.0.8.13
Платформа уже обновлена до последней, не помогло.
1 andrewks
 
27.08.12
10:38
кэш чистил?
2 andrewks
 
27.08.12
10:39
и это... код давай
3 BeyondBelieff
 
27.08.12
10:44
Кэш - не, сейчас попробую
А код вот

   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    ЗаказКлиента.Ссылка
   |ИЗ
   |    Документ.ЗаказКлиента КАК ЗаказКлиента
   |ГДЕ
   |    ЗаказКлиента.Статус = &КОбеспечению";
   
   Запрос.УстановитьПараметр("КОбеспечению", Перечисления.СтатусыЗаказовКлиентов.КОбеспечению);
   ТЗ = Запрос.Выполнить().Выгрузить();
   
   Если ТЗ.Количество() > 0 Тогда
       
       Для каждого Строка из ТЗ Цикл
           
           ОбъектЗаказ = Строка.Ссылка.ПолучитьОбъект();
           
           Попытка
               ОбъектЗаказ.Заблокировать();
               Провести = истина;
           Исключение
               Провести = ложь;
               Сообщить("" + Строка.Ссылка + " редактируется пользователем. Статус не изменен.");
           КонецПопытки;
           
           Если Провести = истина ТОгда
               
               ОбъектЗаказ.Статус = Перечисления.СтатусыЗаказовКлиентов.КОтгрузке;
               
               Попытка ОбъектЗаказ.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Оперативный);
                   
                   Сообщить("Для " + Строка.Ссылка + " установлен статус ""К отгрузке""");
               Исключение
                   Сообщить("Для " + Строка.Ссылка + " не может быть установлен статус ""К отгрузке""");
                   
               КонецПопытки;
               
КонецЕсли;            
           
       КонецЦикла;
   КонецЕсли;
4 BeyondBelieff
 
27.08.12
10:49
И кстати это не кэш
На двух разных компьютерах ошибка
5 andrewks
 
27.08.12
10:51
1. попробуй на другой базе с типовым cf-шником
2. попробуй на чистой базе с выгруженным из этой базы cf-шником
6 Nenaviwu1c20
 
27.08.12
10:55
Попробуй исключить запрос и написать простенькой выборкой на 1совском языке а параметры через структуру установишь.У меня была такая проблема помогло
7 andrewks
 
27.08.12
10:57
попробуй убрать блокировку вообще, оставь только запись  в попытке
8 andrewks
 
27.08.12
10:57
кстати, а чё там с блокировками - они же после фиксации транзакции снимаются? Разблокировать() тут не надо?
9 andrewks
 
27.08.12
10:59
(6) запрос-то тут при чём?
10 BeyondBelieff
 
27.08.12
11:00
Хм.. совет почистить кэш навел на мысль удалить все, что есть в папке с базой, кроме 1Cv8.cd, пока ошибки нет.. Что-то не верится. что все так просто

(7) Изначально было без блокировки, просто показалось, что глючит на тех заказах, которые в данный момент открыты у пользователя. Но это не так

(6) Если закомментировать строку  "ОбъектЗаказ.Записать(...)", то ошибки нет, запрос не мешает
11 BeyondBelieff
 
27.08.12
11:03
Ну все, пока больше не ломается

andrewks, спасибо!
12 andrewks
 
27.08.12
11:06
/e1cib/logForm - это явно не сама БД, либо кэш протух, либо не хватает дисковой/оперативной памяти
13 BeyondBelieff
 
27.08.12
11:12
Да нет, места много, оперативки 6 гигов
Кэш почищу, если снова ошибка вылезет
Просто на двух разных компах, вряд ли кэш
14 andrewks
 
27.08.12
11:15
возможно, протухли файлы с логами, а не кэш (logForm как бы намекает на логи :-)  ), тогда это объясняет наличие проблемы на двух разных компах - подключение-то к одной папке шло. теперь ты логи почистил - проблема ушла
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой