Что-то вы не туда пошли - сервера, УРБД, бекапы....
Для начало нужно определится что за глюк - "железный" или "софтовый". Судя по топику глюк выражается в том, что в определенном файле (или группе файлов) мы имеем записи, которые там быть не должны. Когда происходят проблемы при записи на диск, связанные с железом, то обычно вместо необходимых записей мы получаем "мусор" - набор символов, не несущий информации. В нашем же случае мы имеем структурированную информацию, которая полностью отвечает всем необходимым параметрам. Тоесть с точки зрения железа - все правильно, никаких нарушений. Неправильность видится со стороны софта - согласно бизнес-логики программы - в регистре этих "правильных" данных быть не должно. В результате этого коротко анализа можно с большой долей вероятности забыть про сервера/винты/память и прочее. Давай-те лучше рассмотрим подробнее софт: На мисте (ссылка из первого поста) Ёпрст давал ссылку на описание таблиц 1С - вот с их изучения и надо было начать - там видно логику работы 1С с таблицами БД - как взаимосвязаны регистры и документы и тп. Теперь попробую описать действия 1С при проведении и отмене проведения документа (рассмотрю только регистры). При проведении документа 1С добавляет в регистры записи, которые в качестве указателя на документ имеют поле IDDOC (такой же как у нашего документа в 1SJourn). Логично предположить, что если мы вручную в регистр добавим запись с любым движением и IDDOC равным нашему документу, то в режиме 1С у этого документа добавится еще одно движение. Но при перепроведении документа эта запись удалится. Объясняется это тем, что 1С (в случае установленной галки автоматическое удаление движений) при начале проводки выбирает все движения документа в регистрах и "чикает" их, а потом записывает новые движения. Теперь объясню как "происходит" глюк у автора: Во-первых: глюк произошел только один раз - в момент "одновременной" проводки проблемных документов. Проверяется легко: снимаешь с проводки свой ПКО, а затем выбираешь движения этого документа с помощью такого кода Рег=СоздатьОбъект("РегистрПоКоторомуВисятЛевыеДвижения"); Рег.ВыбратьДвиженияДокумента("НашПКО"); Пока Рег.ПолучитьДвижение()=1 Цикл Сообщить("есть движения по регистру!"); КонецЦикла; То-есть "мусор" в регистре уже лежит, причем давно - проводка и удаление документа ничего не меняет. Объясняется все это очень просто: в журнале документов 1SJourn, есть специальные поля на каждый из регистров - при проведении в них ставится флаг, что документ имеет движения по определенному регистру. Сделано это затем (ИМХО), что бы при удалении движений документа (снятие с проводки) не сканировать все регистры на предмет наличия движений, а только те, в которые писали при проведении. Так вот в твоем случае документ ПКО имеет движения по регистру, который не отмечен в 1SJourn - соответственно при удалении дока эти движения и не удаляются. Последствия лечить довольно легко: 1) удалить лишние движения (я давал пример кода на мисте) 2) поставить нужную галку в 1SJourn и перепровести документ (сам не пробовал, но в теории сработает) 3) ТИИ - долго, но надежно (не надо кричать, что ТИИ побьет базу - в подавляющем большинстве базу бьют "сверхумные" админы)
Причина глюка: Точно не скажу причину (не хватает мне опыта для подобных исследований), но умные люди подсказали несколько очень правдоподных вариантов forum.mista.ru/topic.php?id=391827
Сорри за длинный текст.
ЗЫ если я оказался в чем-то не прав - обязательно поправьте.
|