Ошибка при выполнении процедуры зафиксироватьтранзакцию

ошибка при выполнения процедуры зафиксироватьтранзакцию

Я
   zhenianik

17.06.11 — 12:14

встретился с такой проблемой. Комплексная 7.7, перепровожу документы за период, выходит ошибка «ошибка при выполнения процедуры зафиксироватьтранзакцию». Вот простецкий код:

   Док = СоздатьОбъект(«Документ»);

   НачатьТранзакцию();

   ном = 0;

   Док.ВыбратьДокументы(НачДата, КонДата);

   Пока Док.ПолучитьДокумент() = 1 Цикл

       Если Док.Проведен()=1 Тогда

           ном = ном+1;

           Док.Провести();

           Сообщить(Док);

       КонецЕсли;

       Если ном/20 = Цел(ном/20) Тогда

           ЗафиксироватьТранзакцию();

           НачатьТранзакцию();

       КонецЕсли;

   КонецЦикла;

   ЗафиксироватьТранзакцию();

   zhenianik

1 — 17.06.11 — 12:15

Всем доброго дня!

   vicof

2 — 17.06.11 — 12:16

транзакция в транзакции…интересно

   zhenianik

3 — 17.06.11 — 12:17

(2) перепровожу по 20 доков в транзакции… что не так?

   dk

4 — 17.06.11 — 12:18

ошибок при выполнении не выскакивает?

   fedoss

5 — 17.06.11 — 12:20

А если сделать

Провелись = Док.Провести();

Сообщить(?(Провелись = 1, «Проведен:», «Не проведен:») + Док);

   zhenianik

6 — 17.06.11 — 12:22

(4) Ошибок не заметил

(5) Да, щас попробую, наверно все таки какой то документ не проводится

   1Сергей

7 — 17.06.11 — 12:23

Если ном%20 = 0 Тогда

   1Сергей

8 — 17.06.11 — 12:23

(7)* вместо

Если ном/20 = Цел(ном/20) Тогда

   dk

9 — 17.06.11 — 12:24

    Док = СоздатьОбъект("Документ");
    НачатьТранзакцию();
    ном = 0;
    фл = 1; 
    Док.ВыбратьДокументы(НачДата, КонДата);
    Пока Док.ПолучитьДокумент() = 1 Цикл
        Если Док.Проведен()=1 Тогда
            ном = ном+1;
            фл = 0; 
            Попытка
                Док.Провести();
                Сообщить(Док);
                фл=1;
            Исключение
                Сообщить("Ошибка при проведении: " + описаниеошибки());
            КонецПопытки
            Если фл = 0 тогда
               Сообщить("выход");
               Прервать;
            КонецЕсли; 
        КонецЕсли;
        Если (ном % 20) = 0 Тогда
            ЗафиксироватьТранзакцию();
            НачатьТранзакцию();
        КонецЕсли;
    КонецЦикла;
    Если фл = 1 Тогда
       ЗафиксироватьТранзакцию();
    КонецЕсли;
   Ёпрст

10 — 17.06.11 — 12:25

(0) и.. пусть весь мир подождёт ?

Нафига этот изврат с транзакцией ?

Пользователи базы яички еще не прищемляют вам за это ?

   zhenianik

11 — 17.06.11 — 12:27

(7)(9) ном%20 не юзал раньше такую конструкцию ))) Спасибо

   zhenianik

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) , причем, еще и в транзакции, что в корне не верно.

   zhenianik

16 — 17.06.11 — 12:38

(15) Если трудно, расскажите, почему транзакции делают неверные движения? Через операции побовал, кучу ошибок выдает, поэтому и написал в «заднем» числе

   Cthulhu

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 из 2

  1. 1с бухгалтерия 7.07.539
    Обновляю до 543 сразу полным файлом конфигурации. Обновляется отлично, без проблем. При запуске после подтверждения легальности выскакивает ошибка «ЗафиксироватьТранзакцию();
    {Обработка.ОбновлениеИБ.Форма.Модуль(10757)}: Ошибка при выполнении процедуры ЗафиксироватьТранзакцию».

    Возможно перескочила через что-то важное. Обновляю по очереди все четыре обновления. до 542 отлично. с 542 на 543 опять та же ошибка. Дело было не в бобине. Может там было еще какое-нить дообновление, а я пропустила? Помогите!!!

  2. И даже было бы не важно, что выскочила эта ошибка, если бы каждый раз при запуске программы, программа не просила бы подтвердить легальность полученного обновления((
    может быть кто-нибудь сталкивался с подобной проблемой?

  3. Ничего подобного. То что вы обновили метаданные еще ни о чем не говорит.
    Сообщениеговорит о том что произошла какая-то ошибка при обновлении данных конфигурации.
    ТИ делали перед обновлением?

  4. Сделала сейчас. все равно та же ошибка. версии 540, 541 и 542 встали нормально ж. только 543 не встает


  5. Хряк

    Offline

    Хряк
    Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.556
    Симпатии:
    59
    Баллы:
    54

    см. описание к релизу
    это как раз переходной релиз, надо обработки запустить перед обновлением

    и хде вы берете такую древность?

  6. в описании к релизу ничего нового не сказано. что за обработки?


  7. Хряк

    Offline

    Хряк
    Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.556
    Симпатии:
    59
    Баллы:
    54

    типа conv44 точно не помню
    выложи сюда список обработок в каталоге ExtForms 543 релиза

    во, блин, перепутал всё
    мои слова относились к 453 релизу
    543 это ж последний
    извиняюсь

    как объединяете?

  8. как всегда: Конфигурация — Объединение конфигураций — выбираю мд файл — сохраняю — запускаю

  9. У вас ошибка в заполнении реквизита ВидПлатежаСтрока в документе

    • Платежное поручение
    • Инкассовое поручение
    • Платежное требование
    • Аккредитив

    копайте в этом направлении


  10. yuraskas

    Offline

    yuraskas

    Регистрация:
    24 апр 2006
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1

    Вы не поверете, но у меня точно такая же ошибка. Один в один. Автор решил проблему?? В строке состояния действительно обрывается на объединении платежных поручений. И что с этим делать?

  11. Как причем? При обновлении последнего релиза идет установка нового реквизита у документов вышеуказанного типа. Если криво обновились (ну скажем один из документов не стали обновлять) — выскочит эта ошибка. Т.к. транзакция общая для всех документов


  12. yuraskas

    Offline

    yuraskas

    Регистрация:
    24 апр 2006
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1

    Конфигурация девственная. Обновляюсь как обычно.


  13. yuraskas

    Offline

    yuraskas

    Регистрация:
    24 апр 2006
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1

    Не совсем понятно, что нужно делать. Подскажите пожалуйста поточнее???

  14. в обработке обновления БД вырубить транзакцию (закомментировать). В этом случае должна выскочить явная ошибка. Тогда уж будет виден тип документа, а значит легче локализовать


  15. yuraskas

    Offline

    yuraskas

    Регистрация:
    24 апр 2006
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1

    Закоментировал транзакцию в строке {Обработка.ОбновлениеИБ.Форма.Модуль(10757)}: так ошибка вообще исчезла. База полностью обновилась. Интересно, и каких теперь ждать подводных камней?

  16. Получилось. Спасибо огромное!!!
    Проверила список документов, измененных в 543 версии. В моей базе только платежки. Так вот там была проблема с заполнением реквизита ВидПлатежа. Обработкой ПоискОбъектов нашла все платежки (в моем случае) с видом платежа «электронный». Открываю док, а поле это не заполнено ни в одном документе. Т.е. программа видит, что там одно из перечислений, а по факту в доке перечисление не встало. Групповой обработкой проставила в этих доках данный реквизит и обновила снова. Обновление прошло без ошибок.

  17. Да вроде нет таковых……..


  18. yuraskas

    Offline

    yuraskas

    Регистрация:
    24 апр 2006
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1

    Решено, да но всеравно чтото не так. Вообщем ни в какую не хочет обновлятся с 542 на 543. Точно вычислил что причина в Платежном поручении (закоментировав в Обработке обновления соотвествующий код.) Обновление прошло. Пошел дальше. Написал обработку, где сначала везде проставилось Электронно. Не помогло. Везде полностью очистил реквизит ВидПлатежа — не помогло. Ну и наконец, последний раунд, закомментировал в обработке обновления платжное поручение, обновил базу, вынес закомментированный код в отдельную обработку и запустил в уже обновленной базе. Зараза, не выдал ни одной ошибки. И что ж ему мешало обновиться стандартно, осталось тайной.


  19. SerzhM

    Offline

    SerzhM
    Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    526
    Симпатии:
    3
    Баллы:
    29

    Может тип реквизита поменялся, вот и глючил.

  20. Лень смотреть, но как вариант в платежном поручении был косяк. В самой БД. Хорошо бы сделать выгрузку/загрузку

Страница 1 из 2


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Исключительная ситуация — Транзакция не активна

При вызове ЗафиксироватьТранзакцию() или ОтменитьТранзакцию() возникает ошибка транзакция не активна.

Ошибка означает, что транзакция не была начата командой «НачатьТранзакцию()», либо уже зафиксирована/отменена.

Не зависит от платформы.

Данная ошибка не связана с транзакциями сервера базы данных, а относится к  встроенному механизму отложенной записи изменений в базе.

Скриншот ошибки

Транзакция не активна

Подробно

Ошибка при вызове метода контекста (ОтменитьТранзакцию)
Соединение.ОтменитьТранзакцию();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.8.1652): Транзакция не активна

Поведение системы

Система продолжает работать, но выполнение кода обработчика прерывается. Такие ошибки возникают обычно при обмене данными.

Решение

Добавить проверку ТранзакцияАктивна(), либо убрать дублирующие отмены транзакции в алгоритме программы.

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при выполнении программы поле объекта не обнаружено
  • Ошибка при выполнении проверки эп crypto de
  • Ошибка при выполнении приложения сервиса
  • Ошибка при выполнении приложения сервера что это такое
  • Ошибка при выполнении приложения сервера что это значит