ошибка при выполнения процедуры зафиксироватьтранзакцию |
Я |
17.06.11 — 12:14
встретился с такой проблемой. Комплексная 7.7, перепровожу документы за период, выходит ошибка «ошибка при выполнения процедуры зафиксироватьтранзакцию». Вот простецкий код:
Док = СоздатьОбъект(«Документ»);
НачатьТранзакцию();
ном = 0;
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Проведен()=1 Тогда
ном = ном+1;
Док.Провести();
Сообщить(Док);
КонецЕсли;
Если ном/20 = Цел(ном/20) Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
1 — 17.06.11 — 12:15
Всем доброго дня!
2 — 17.06.11 — 12:16
транзакция в транзакции…интересно
3 — 17.06.11 — 12:17
(2) перепровожу по 20 доков в транзакции… что не так?
4 — 17.06.11 — 12:18
ошибок при выполнении не выскакивает?
5 — 17.06.11 — 12:20
А если сделать
Провелись = Док.Провести();
Сообщить(?(Провелись = 1, «Проведен:», «Не проведен:») + Док);
6 — 17.06.11 — 12:22
(4) Ошибок не заметил
(5) Да, щас попробую, наверно все таки какой то документ не проводится
7 — 17.06.11 — 12:23
Если ном%20 = 0 Тогда
8 — 17.06.11 — 12:23
(7)* вместо
Если ном/20 = Цел(ном/20) Тогда
9 — 17.06.11 — 12:24
Док = СоздатьОбъект("Документ"); НачатьТранзакцию(); ном = 0; фл = 1; Док.ВыбратьДокументы(НачДата, КонДата); Пока Док.ПолучитьДокумент() = 1 Цикл Если Док.Проведен()=1 Тогда ном = ном+1; фл = 0; Попытка Док.Провести(); Сообщить(Док); фл=1; Исключение Сообщить("Ошибка при проведении: " + описаниеошибки()); КонецПопытки Если фл = 0 тогда Сообщить("выход"); Прервать; КонецЕсли; КонецЕсли; Если (ном % 20) = 0 Тогда ЗафиксироватьТранзакцию(); НачатьТранзакцию(); КонецЕсли; КонецЦикла; Если фл = 1 Тогда ЗафиксироватьТранзакцию(); КонецЕсли;
10 — 17.06.11 — 12:25
(0) и.. пусть весь мир подождёт ?
Нафига этот изврат с транзакцией ?
Пользователи базы яички еще не прищемляют вам за это ?
11 — 17.06.11 — 12:27
(7)(9) ном%20 не юзал раньше такую конструкцию ))) Спасибо
12 — 17.06.11 — 12:27
(10) перепровожу на тестовой базе, так тупо быстрее обрабатывает. Яички в полном порядке)
13 — 17.06.11 — 12:33
(12) ну-ну.. вот только движения неверные будут, ну это ничего.. продолжайте дальше творить.
14 — 17.06.11 — 12:34
>>>
Если Док.Проведен()=1 Тогда
rtfm, смотри метод УстановитьФильтр у документа.
15 — 17.06.11 — 12:35
да и.. весь код в топку.
Пользуйся проведением через операции — проведение документов, там документы проводятся в потоке, а не в «заднем» числе, как у тебя в (0) , причем, еще и в транзакции, что в корне не верно.
16 — 17.06.11 — 12:38
(15) Если трудно, расскажите, почему транзакции делают неверные движения? Через операции побовал, кучу ошибок выдает, поэтому и написал в «заднем» числе
17 — 17.06.11 — 12:39
1с не поддерживает вложенные транзакции. Проведение само по себе выполняется в транзакции.
За проведение в транзакции — прострелить коленку нахрен.
При ошибке в процессе такого некорректного действа вполне можно получить проводки(движения) у непроведенного документа. со всеми вытекающими.
18 — 17.06.11 — 12:41
(16) ну подумай сам.. у тебя новые движения сделанные предыдущим документом не учитываются при проведении следующего, ибо транзакция не зафиксирована.
Следовательно, при получении останков будут всегда браться «старые» записи от «старых» движений этих же документов.
Фирштейн ?
zhenianik
19 — 17.06.11 — 12:43
(18) во я тупанул, фирштейн, спасибо Ёпрст3
Показывать по
10
20
40
сообщений
Новая тема
Ответить
Фенин Иван
Дата регистрации: 26.11.2008
Сообщений: 19
«Ошибка при выполнении процедуры ЗафиксироватьТранзакцию<br><br>Вот такую ошибку пишет, когда создаю новое средство, в основных и нематериальных активах.<br>Код стоит Автоматически, но он его не создает. в чем может быть проблема?<br><br>Вырезка из кода<br><br>Процедура ВводНового(Копирование)<br>Новый = 1;<br>ЗначениеОтбора=»»»»;<br>ИспользоватьДату(‘01.01.2009’);<br>Если Копирование = 0 Тогда <br>Если ТипЗначенияСтр(Форма.Параметр) = «Справочник» Тогда<br>Владелец = Форма.Параметр;<br>ИначеЕсли ТипЗначенияСтр(Форма.Параметр) =»СписокЗначений» Тогда<br>Если ТипЗначенияСтр(Форма.Параметр.Получить(«Владелец»)) = «Справочник» Тогда <br>Владелец= Форма.Параметр.Получить(«Владелец»);<br>КонецЕсли;<br>Если ТипЗначенияСтр(Форма.Параметр.Получить(«Родитель»)) = «Справочник» Тогда <br>Родитель= Форма.Параметр.Получить(«Родитель»);<br>КонецЕсли;<br>КонецЕсли;<br>ВидНФА=Перечисление.ВидыНФА.ОС;<br>КоличественныйУчет=0;<br>СпособНачисленияАмортизации=3; <br>Иначе<br>СостояниеОС =»»»»;<br>ДатаПостОС =»»»»; НомерДокПост=»»»»;<br>ДатаВводаВЭксплуатацию =»»»»; АктПередачВЭкспл=»»»»; <br>ДатаПеремещ = «»»»; НомерПриказаПерем=»»»»;<br>ДатаВыбытия = «»»»; НомАктаВыбытия=»»»»;<br>ПричинаВыбытия =»»»»;<br>МестоХранения = «»»»;<br>КонецЕсли;<br>БалансСтоимОС=0;<br>ОстСтоимость=0;<br>КоличествоОС=0;<br>Код=»автоматически»; //Е <br>КонецПроцедуры «
Вячеслав-С
Дата регистрации: 10.04.2009
Сообщений: 20
«>Код=»автоматически»; //Е <br><br>Попробуйте без этой строчки.<br>А еще лучше — процитируйте текст ошибки.»
Фенин Иван
Дата регистрации: 26.11.2008
Сообщений: 19
Вот такую ошибку выдает «Ошибка при выполнении процедуры ЗафиксироватьТранзакцию»,<br>и пишет что кон не уникальный.<br>Как сделать так, что бы код присваивался автоматически изменяясь с созданием нового объекта?<br>Спасибо
Вячеслав-С
Дата регистрации: 10.04.2009
Сообщений: 20
Уберите код, который я выделил.
BelikovS
Дата регистрации: 05.03.2007
Сообщений: 1701
«Код = УстановитьНовыйКод();<br>»
Антышев Влад
Дата регистрации: 14.05.2009
Сообщений: 8
1. Если автоматом не создает, значит нарушена уникальность номеров — перенумеровать !<br>2. В настройках справочника отключено автоматическое создание номеров ))<br>
Фенин Иван
Дата регистрации: 26.11.2008
Сообщений: 19
«убрал строчку, которую сказали, запустил, теперь как сделать? что бы код присваивался автоматически?<br><br>подставил строчку<br> Код = УстановитьНовыйКод();<br>и теперь он выдает <br><br>Код = УстановитьНовыйКод();<br>процедура вызывается как функция<br><br>и обьект когда его копируешь не открывается ((«
Фенин Иван
Дата регистрации: 26.11.2008
Сообщений: 19
А где настройки справочника смотреть? что бы поставить автоматическое присваивание номеров.<br>Спасибо
BelikovS
Дата регистрации: 05.03.2007
Сообщений: 1701
«Извиняюсь — надо было просто написать:<br>УстановитьНовыйКод();<br>»
BelikovS
Дата регистрации: 05.03.2007
Сообщений: 1701
Отсортируйте по коду и посмотрите на них внимательно.<br>Я уже не помню точно как это в 7-ке, а 8-ка берет последний код и добавляет к нему 1. Отсюда проблема — если код закончился на букву, то все следующие коды будут равны ему. И если кто-то присвоил некоторому элементу максимальный код из девяток, то следующий начнет отсчет с начала и скорее всего такой уже есть.
Показывать по
10
20
40
сообщений
Читают тему:
ПУБ: SQL Выполняю следующий код Но… выполнение данного кода останавливается. Вот записи в файле лога: 20:12:30 : Обрабатываю документ: Выпуск продукции К000202 (10.02.06) 20:12:30 : Разбиваю документ на части 20:12:31 : (Транзакция) Создан документ: Выпуск продукции К000417 (10.02.06) 20:12:31 : (Транзакция) Проведен документ: Выпуск продукции К000417 (10.02.06) 20:12:31 : (Транзакция) Создан документ: Выпуск продукции К000418 (10.02.06) 20:12:31 : (Транзакция) Проведен документ: Выпуск продукции К000418 (10.02.06) 20:12:31 : (Транзакция) Удаляю документ: Выпуск продукции К000202 (10.02.06) 20:12:31 : (Транзакция) Документ удалён. 20:12:31 : Ошибка в процессе проведения документа Ошибка: Ошибка при выполнении процедуры ЗафиксироватьТранзакцию» То есть, если судить по файлу лога: выполнение останавливается непосредственно на процедуре ЗафиксироватьТранзакцию Так вот: такой вот вопрос — отчего эта ошибка происходит? Лично я думаю что это какие то грабли в SQL. Может база в СКЛ Сервере неправильно настроена?
забыл добавить — выполняю всё монопольно.
ОтменитьТранзакцию убери…
а это тут при чём? ошибка ведь наступает до этой строки?
Наверное надо пройтись поиском по транзакции внутри попытки
дело в том, что эта ошибка не стабильна. Т.е. возникает время от времени. И поймать дебагером её не могу.
Потому что получишь такое сообщение: Транзакция неактивна. А чтобы поймать свою ошибку вообще убери все, что относится к транзакциям…
если убрать всё что относится к транзакциям — ошибки не возникает как таковой. Т.е. всё вполне нормально и безошибочно записывается и проводится. Повторяю: ошибка возникает при выполнении процедуры ЗафиксироватьТранзакцию не раньше и не позже.
Самое смешное — сейчас дома делаю эту же самую операцию на DBFе. Никаких ошибок не возникает, всё нормально. Может дело в SQLе?
Перепиши алгоритм, переставь попытку и вообще… Нафига попытка если монопольно? Нельзя проверить возможные ошибки?
попытка — для того что бы если что- то не проведётся отменить всё назад так как было, а не оставлять после себя непроведённые документы. А как можно проверить возможные ошибки? Если один раз они в одном числе возникают, другой раз — в другом?
Такс… а отменить транзакцию значит не делает все как было?
делает. для этого она там и стоит.
Вообще-то при возникновении ошибки в транзакции зафиксировать транзакцию все равно не получится. Так что попытка тут точно — лишнее.
Ну ладно, пока всем КонецСвязи….
ну может быть. Но так хотя бы ошибку в лог запишу. Ладно, всем пока. Буду копать дальше.
ОтменитьТранзакцию — в исключении Если в блоке попытка» ошибка — переходим в блок исключение и пытаемся отменить неактивную транзакцию. Уже ошибка. Но самое главное: Проведение документа — уже транзакция. Ты пытаешься внутри одной транзакции начать другую… Правильно сказали: убери транзакцию нафиг…
Тэги:
Комментарии доступны только авторизированным пользователям
-
1с бухгалтерия 7.07.539
Обновляю до 543 сразу полным файлом конфигурации. Обновляется отлично, без проблем. При запуске после подтверждения легальности выскакивает ошибка «ЗафиксироватьТранзакцию();
{Обработка.ОбновлениеИБ.Форма.Модуль(10757)}: Ошибка при выполнении процедуры ЗафиксироватьТранзакцию».Возможно перескочила через что-то важное. Обновляю по очереди все четыре обновления. до 542 отлично. с 542 на 543 опять та же ошибка. Дело было не в бобине. Может там было еще какое-нить дообновление, а я пропустила? Помогите!!!
-
И даже было бы не важно, что выскочила эта ошибка, если бы каждый раз при запуске программы, программа не просила бы подтвердить легальность полученного обновления((
может быть кто-нибудь сталкивался с подобной проблемой? -
Ничего подобного. То что вы обновили метаданные еще ни о чем не говорит.
Сообщениеговорит о том что произошла какая-то ошибка при обновлении данных конфигурации.
ТИ делали перед обновлением? -
Сделала сейчас. все равно та же ошибка. версии 540, 541 и 542 встали нормально ж. только 543 не встает
-
Offline
Хряк
Профессионал в 1С- Регистрация:
- 26 сен 2007
- Сообщения:
- 1.556
- Симпатии:
- 59
- Баллы:
- 54
см. описание к релизу
это как раз переходной релиз, надо обработки запустить перед обновлениеми хде вы берете такую древность?
-
в описании к релизу ничего нового не сказано. что за обработки?
-
Offline
Хряк
Профессионал в 1С- Регистрация:
- 26 сен 2007
- Сообщения:
- 1.556
- Симпатии:
- 59
- Баллы:
- 54
типа conv44 точно не помню
выложи сюда список обработок в каталоге ExtForms 543 релизаво, блин, перепутал всё
мои слова относились к 453 релизу
543 это ж последний
извиняюськак объединяете?
-
как всегда: Конфигурация — Объединение конфигураций — выбираю мд файл — сохраняю — запускаю
-
У вас ошибка в заполнении реквизита ВидПлатежаСтрока в документе
- Платежное поручение
- Инкассовое поручение
- Платежное требование
- Аккредитив
копайте в этом направлении
-
Offline
yuraskas
- Регистрация:
- 24 апр 2006
- Сообщения:
- 11
- Симпатии:
- 0
- Баллы:
- 1
Вы не поверете, но у меня точно такая же ошибка. Один в один. Автор решил проблему?? В строке состояния действительно обрывается на объединении платежных поручений. И что с этим делать?
-
Как причем? При обновлении последнего релиза идет установка нового реквизита у документов вышеуказанного типа. Если криво обновились (ну скажем один из документов не стали обновлять) — выскочит эта ошибка. Т.к. транзакция общая для всех документов
-
Offline
yuraskas
- Регистрация:
- 24 апр 2006
- Сообщения:
- 11
- Симпатии:
- 0
- Баллы:
- 1
Конфигурация девственная. Обновляюсь как обычно.
-
Offline
yuraskas
- Регистрация:
- 24 апр 2006
- Сообщения:
- 11
- Симпатии:
- 0
- Баллы:
- 1
Не совсем понятно, что нужно делать. Подскажите пожалуйста поточнее???
-
в обработке обновления БД вырубить транзакцию (закомментировать). В этом случае должна выскочить явная ошибка. Тогда уж будет виден тип документа, а значит легче локализовать
-
Offline
yuraskas
- Регистрация:
- 24 апр 2006
- Сообщения:
- 11
- Симпатии:
- 0
- Баллы:
- 1
Закоментировал транзакцию в строке {Обработка.ОбновлениеИБ.Форма.Модуль(10757)}: так ошибка вообще исчезла. База полностью обновилась. Интересно, и каких теперь ждать подводных камней?
-
Получилось. Спасибо огромное!!!
Проверила список документов, измененных в 543 версии. В моей базе только платежки. Так вот там была проблема с заполнением реквизита ВидПлатежа. Обработкой ПоискОбъектов нашла все платежки (в моем случае) с видом платежа «электронный». Открываю док, а поле это не заполнено ни в одном документе. Т.е. программа видит, что там одно из перечислений, а по факту в доке перечисление не встало. Групповой обработкой проставила в этих доках данный реквизит и обновила снова. Обновление прошло без ошибок. -
Да вроде нет таковых……..
-
Offline
yuraskas
- Регистрация:
- 24 апр 2006
- Сообщения:
- 11
- Симпатии:
- 0
- Баллы:
- 1
Решено, да но всеравно чтото не так. Вообщем ни в какую не хочет обновлятся с 542 на 543. Точно вычислил что причина в Платежном поручении (закоментировав в Обработке обновления соотвествующий код.) Обновление прошло. Пошел дальше. Написал обработку, где сначала везде проставилось Электронно. Не помогло. Везде полностью очистил реквизит ВидПлатежа — не помогло. Ну и наконец, последний раунд, закомментировал в обработке обновления платжное поручение, обновил базу, вынес закомментированный код в отдельную обработку и запустил в уже обновленной базе. Зараза, не выдал ни одной ошибки. И что ж ему мешало обновиться стандартно, осталось тайной.
-
Offline
SerzhM
Опытный в 1С- Регистрация:
- 26 окт 2009
- Сообщения:
- 526
- Симпатии:
- 3
- Баллы:
- 29
Может тип реквизита поменялся, вот и глючил.
-
Лень смотреть, но как вариант в платежном поручении был косяк. В самой БД. Хорошо бы сделать выгрузку/загрузку
Исключительная ситуация — Транзакция не активна
При вызове ЗафиксироватьТранзакцию() или ОтменитьТранзакцию() возникает ошибка транзакция не активна.
Ошибка означает, что транзакция не была начата командой «НачатьТранзакцию()», либо уже зафиксирована/отменена.
Не зависит от платформы.
Данная ошибка не связана с транзакциями сервера базы данных, а относится к встроенному механизму отложенной записи изменений в базе.
Скриншот ошибки
Подробно
Ошибка при вызове метода контекста (ОтменитьТранзакцию)
Соединение.ОтменитьТранзакцию();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.8.1652): Транзакция не активна
Поведение системы
Система продолжает работать, но выполнение кода обработчика прерывается. Такие ошибки возникают обычно при обмене данными.
Решение
Добавить проверку ТранзакцияАктивна(), либо убрать дублирующие отмены транзакции в алгоритме программы.
Потребитель и вправду может все еще воображать, что его действия отвечают его собственным потребностям об удовлетворении своих запросов. Однако суждение это, поверхностное и весьма приблизительное, является следствием иллюзий, сложившихся в процессе управления его желаниями.