1с в данной транзакции уже происходили ошибки
Ошибки базы данных и транзакции
При работе с базой данных могут происходить ошибки. В 1С:Предприятии 8 ошибки базы данных подразделяются на следующие две категории:
К невосстановимым относятся такие ошибки базы данных, при возникновении которых функционирование 1С:Предприятия 8 может быть серьезно нарушено. Поэтому, во избежание более серьезных неприятностей (например, порчи данных), при возникновении невосстановимой ошибки выполнение 1С:Предприятия 8 прекращается. Если невосстановимая ошибка базы данных произошла в процессе выполнения транзакции, то все изменения сделанные в рамках этой транзакции отменяются.
При возникновении восстановимой ошибки считается, что серьезных нарушений в работе 1С:Предприятия 8 не произошло и работа может быть продолжена, но сама вызвавшая ошибку операция прекращается, и вызывается исключение, которое может быть перехвачено и обработано средствами встроенного языка. Казалось бы, все понятно. Но есть тонкость. Если восстановимая ошибка базы данных произошла в процессе выполнения транзакции, то, вне зависимости от того, было исключение, вызванное этой ошибкой, перехвачено и обработано или нет, транзакция уже не может быть продолжена или зафиксирована. Единственная операция с базой данных, которую можно произвести в такой ситуации - это отмена транзакции. Таким образом, приведенный фрагмент кода не вполне корректен:
Если при выполнении оператора Данные.Записать() произойдет восстановимая ошибка базы данных (например, по причине того, что элемент данных был заблокирован другим пользователем), то вызванное этой ошибкой исключение будет перехвачено, но повторное выполнение этого же оператора в цикле уже безусловно приведет к ошибке, так как при выполнении данной транзакции уже имела место ошибка базы данных. Следует заметить, что не всякая ошибка приводит к невозможности продолжения выполнения и фиксации транзакции, а именно ошибка базы данных. Исключения, не имеющие отношения к ошибкам базы данных, никакого влияния на возможность продолжения выполнения транзакции не оказывают.
Как же выйти из такой ситуации? Общее правило состоит в следующем: если при выполнении транзакции имели место ошибки базы данных, то следует отменить всю транзакцию в целом и, в случае необходимости, повторить попытку ее выполнения с самого начала. Таким образом, приведенный выше пример должен быть переработан следующим образом:
В данном варианте, если при выполнении оператора Данные.Записать() произойдет восстановимая ошибка базы данных, то при обработке исключения, вызванного этой ошибкой, транзакция будет отменена и при повторном выполнении цикла транзакция будет начата сначала.
Следует однако сделать предостережение. Дело в том, что в рамках уже выполняемой транзакции можно обращаться к методам НачатьТранзакцию() , ЗафиксироватьТранзакцию() и ОтменитьТранзакцию() . Однако вызов метода НачатьТранзакцию() при уже выполняющейся транзакции не означает начала новой транзакции. В этом случае просто произойдет увеличение на 1 значения внутреннего счетчика транзакций. Метод НачатьТранзакцию() начинает новую транзакцию только в том случае, если значение внутреннего счетчика транзакций равно 0. Аналогично, обращение к методам ЗафиксироватьТранзакцию() или ОтменитьТранзакцию() приводит к реальному завершению транзакции только в том случае, если значение внутреннего счетчика транзакций равно 1. Если при значении счетчика транзакций большем 1 произойдет обращение к методу ЗафиксироватьТранзакцию() , то значение счетчика будет просто уменьшено на 1:
Если же при значении счетчика траназкций большем 1 произойдет обращение к методу ОтменитьТранзакцию() , то значение счетчика транзакций не только будет уменьшено на 1, но и произойдет установка признака, не позволяющего зафиксировать результаты выполнения всей транзакции в целом. И последующее обращение к методу ЗафиксироватьТранзакцию() , выполняемое при значении счетчика транзакций равном 1, фактически приведет к отмене транзакции:
Аналогично, ошибка базы данных, произошедшая при значении счетчика транзакций большем 1, приведет к невозможности продолжения и фиксации всей транзакции в целом.
Подобная ошибка может произойти при обработки ситуации «Попытка-Исключение». Например, при создании записи «Объект_1» формируется исключительная ситуация, а сама ошибка появляется в «Ссылка_2.Наименование». То есть происходит запрос базы данных объектной модели.
В «Попытке-Исключение» начинается обработка операции, которая также должна быть выполнена в транзакции, которая, в свою очередь, может быть явной или неявной (создается в момент записи объекта).
1С: Предприятие 8.3 не поддерживает транзакций вложенного типа. Однако допускается создание вложенной конструкции сразу нескольких транзакций. Из-за наличия явной и неявной транзакции может возникнуть ошибка. То есть программа запрещает транзакцию 1-го уровня на более низших уровнях.
Есть ли смысл исправлять ошибки транзакции, которые уже происходили
При работе с 1С 8.3 не стоит оставлять подобные вещи без внимания. Прежде всего, другой пользователь также может столкнуться с ней, но не поймет причин её возникновения. Если не выполнить отладку системы, то в дальнейшем могут возникнуть дополнительные проблемы. Так как оповещение «В данной транзакции уже происходили ошибки» появляется при первом обращении, то в журнале регистрации данная строка обязательно зафиксируется, но, опять же, без подробного пояснения. Хоть ошибка и располагается на нижнем уровне кода, она нарушит необходимую иерархию. Это приведет к сбою других функций и только еще больше запутает администратора.
Устраняем ошибку транзакции в 1С Предприятие версии 8.3
В первую очередь стоит очистить кэш базы данных. Сделать это можно вручную. Для этого:
Также можно выполнить удаление другим способом:
После того, как файл преобразуется, его можно запустить и весь пользовательский кэш удалится автоматически. Пробуем снова запустить программу и выполнить операцию. Если не помогло, то лучше всего обратиться к администратору. Также нужно помнить про основные особенности написания кода с использованием транзакций. Это поможет исключить ряд распространенных ошибок.
Особенности написания кода, которые помогут исключить ошибку в транзакциях
Прежде всего нужно опираться на нюансы корректной обработки исключений:
- Метод «Начать транзакцию» должен быть вынесен за пределы «Попытка-Исключение».
- Действия, осуществляемые после вызова «Начать транзакцию» должны быть в пределах блока «Попытка». К этом также относится чтение, обработка или блокировка данных.
- Метод «Зафиксировать транзакцию» необходимо прописывать последним в блоке «Попытка» и до «Исключение».
- В блоке «Исключение» необходимо сначала обратиться к методу «Отменить транзакцию» и уже потом выполнять прочие действия.
- Если применяются вложенные транзакции, то в конце «Исключение» не лишним будет добавить оператора «Вызвать исключение».
- В «Исключения» следует добавить соответствующую запись об ошибке.
- Если транзакция неявная, то нет никакого смысла переходить к методу «Начать транзакцию». Некоторые также пробуют «обернуть» в явную транзакцию те операции, которые и вовсе не нуждаются в согласовании.
Решить проблему транзакций, в которых происходят ошибки, самостоятельно получается не всегда. Поэтому стоит попробовать выполнить простейшие действия – перезагрузить программу или очистить кэш. К более серьезным манипуляциям в 1С стоит переходить только при уверенности, что вы обладаете достаточным опытом.
При написании кода 1С или проведения бухгалтерских операций в системе 1С 8.3 и более ранних системах вы можете столкнуться с уведомлением « Преобразование значения к типу Число не может быть выполнено ». Причиной ошибки обычно является попытка программиста преобразовать в число значение, которое числовым быть не может. Ниже разберём суть данной ошибки, а также представим возможные варианты её решения.
Причины ошибки выполнения преобразования значения к типу Число
Обычно данная проблема возникает при запуске кода, выполнении процедуры проверки кода на ошибки или при осуществлении стандартных операцией составления отчётности в системе 1С 8.3 (и ранних системах).
В частности, ошибка фиксировалась в следующих обстоятельствах:
- Вместо переменной числового типа был использован NULL, строка, индекс почты, ИНН, дата и другие значения. В этом случае стандартное арифметическое действие с двумя или несколькими числовыми переменными не может быть выполнено, так как какое-либо из значений не может быть трансформировано в число;
- При выполнении операции по сложению чисел программист указал первым значением строку, а не число, тем самым совершив ошибку;
- Было использовано двойное обозначение для единиц исчисления. К примеру, это может быть руб и RUB. Для устранения ошибки рекомендуем использовать одно унифицированное обозначение, в случае двоих указывайте для них одинаковые ставки и коэффициенты во избежание конфликта;
- В коде указана операция в двух разных направлениях (наиболее часто встречается в 8 версии 1С). Во избежание дисфункции необходимо убрать одну из проводок;
- Пользователь использует устаревшую (неотлаженную) версию 1С, где пытается работать с современными типами данных.
Давайте разберём, как устранить ошибку «Преобразование значения к типу Число не может быть выполнено» в конфигурации 1С 8.3.
Обновите вашу систему 1С до самой актуальной версии
Прежде чем разбирать особенности ошибок в коде 1С, рекомендуем обновить вашу 1С до самой актуальной версии. В некоторых случаях ошибка «преобразование значения к типу число» вызвана устаревшим вариантом системы, на которой специалист пытается вести отчётность. Установите наиболее актуальную версию системы, и рассматриваемая нами ошибка может исчезнуть.
Внимательно проверьте код на наличие переменных
В большинстве случаев рассматриваемая ошибка вызвана невнимательностью программиста, вместо числового значения указавшего не числовое, что не позволяет системе выполнить правильный подсчёт числовых значений. Рекомендуем внимательно проверить создаваемый вами код, найти место в коде вызывающее исключение (ошибку) и пофиксить его.
Например, в примере:
переменная B будет вести к ошибке так как её формат не позволяет системе сложить числовое значение «А» и значение в форме даты. Для решения проблемы замените B на строку: B=5 или аналогичную. В этом случае система выдаст вам корректный результат (в данном случае это будет 8).
Измените первый тип слагаемого на число
В некоторых случаях платформа 1С анализирует тип первого слагаемого числа, обнаруживает строку, вследствие чего может решить, что в данном коде речь идёт о сложении строк, а не необходимых программисту числах. Вследствие этого она пытается выполнить преобразование каждого слагаемого в строку, после чего объединить их как строки.
Для решения проблемы необходимо использовать скобки, позволяя системе вначале выполнить вычисление результата в скобках как суммы чисел, а уже потом преобразовать результат в строку.
К примеру, вместо ошибочной строки:
Будет необходимо использовать строку:
Вследствие этого вы получите ожидаемый результат в виде числе 24.
Используйте конфигуратор для нахождения исключения кода
Порядок действий в этом случае будет следующим:
- Выполните запуск конфигуратора;
- В его настройках поставьте галочку на опцию остановки по ошибке;
- Нажмите на кнопку F5 для запуска 1С;
- Выполните приведшие к ошибке операции. Программа определит строчку, где имеется некорректный код;
- Найдите в данной строчке ошибку и исправьте её. Проблема будете решена.
Переиндексируйте ваши файлы
Запустите данный файл, укажите имя файла для проверки, поставьте галочку рядом с опцией «Исправлять обнаруженные ошибки», после чего нажмите на «Выполнить внизу». Дождитесь завершения процедуры проверки и исправления, после чего вновь попробуйте выполнить необходимые операции.
Используйте функцию «Есть NULL»
Если выскакивает ошибка, то иногда одна из задействуемых переменных может принимать значение NULL. Для исправления ошибки рекомендуется использовать функцию «ЕСТЬNULL» (переменная, 0), что позволит устранить рассматриваемую в статье проблему.
Заключение
Причинами проблемы обычно является следующее:
- Устаревшая версия системы 1С на пользовательских ПК;
- Отсутствие свободного места на диске, на котором установлена система;
- В системе 1С имеется огромное количество временных устаревших файлов влияющих на её работу;
- Уже описанная выше ошибка библиотеки 1CBarcodWin64_9_0_12_13.dl;
- В редких случаях причиной дисфункции является действия антивируса, блокирующего нормальную работу системы 1С.
Обновите систему до самой актуальной версии
Первым делом рекомендуем обновить вашу систему 1С до самой актуальной версии. Множество ошибок в работе 1С связано именно с устаревшей версией системы, при которой нормальная безошибочная работа становится попросту невозможной. Обычно для обновления системы необходимо перейти в меню «Администрирование», и выбрать там опцию «Обновление версии программы».
Перед обновлением вашей системы рекомендуем сделать бекап вашей базы данных.
Некоторые пользователи при этом рекомендуют попробовать опцию динамического обновления, не затрагивающего структуру базы.
Убедитесь в достаточном количестве свободного места на диске
В ряде случае ошибка «На сервере 1С: Предприятия произошла неисправимая ошибка. Приложение будет закрыто» вызвана отсутствие свободного места на диске PC. Рекомендуем убедиться в достаточном количестве свободного места на диске, и при необходимости увеличить количество свободного места, удалив ненужные файлы.
Сохраните работу формирования штрих-кодов
Для временного устранения проблем с работой библиотеки v8_xxx_xx.1CBarcodWin64_9_0_12_13.dl будет необходимо выполнить следующее:
- Выберите режим конфигуратора;
- Там запустите конфигурацию имеющейся у вас информационной базы;
- Отыщите там «ОбщиеМодули — МенеджерОборудованияКлиент/МенеджерОборудованияВызовСервера» и закомментируйте следующую строку:
Затем перезапустите систему и посмотрите, будет ли появляться рассматриваемая ошибка.
Очистите временные файлы системы 1С
Также может помочь очистка временных файлов 1С, число которых стремительно растёт в ходе работы программы. Для их очистки понадобится выполнить следующее:
- Прекратите работу «Агент сервера 1С Предприятия» и закройте программу;
- Очистите папки временных файлов, находящихся по пути:
C:\Users\ИМЯ УЧЁТКИ ПОЛЬЗОВАТЕЛЯ\AppData\Local\Temp
Далее очистите папку временных файлов пользователя, запускающего агент 1С. Обычно по умолчанию это USR1CV8, но путь и имя пользователя могут отличаться в зависимости от конкретики настроек вашей системы.
После выполнения очистки данных папок запустите ваш сервер 1С и выполните проверку работоспособности базы. Если не помогло – идём дальше.
Используйте функционал утилиты CHDBFL
Как известно, в функционале системы 1С 8.3 используется утилита chdbfl.exe, предназначенная для теста и исправления информационной базы 1С 8.3. Её возможности позволяют произвести проверку физической целостности баз данных, что равняет её с инструментом тестирования и исправления данных конфигуратора вашей системы.
Перед запуском указанной утилиты рекомендуем сделать копию вашей базы данных.
Для старта утилиты перейдите по пути:
- C:\Program Files (x86)\1cv8\ВЕРСИЯ ВАШЕЙ СИСТЕМЫ\bin\ и запустите там файл chdbfl.exe.
- После запуска отобразится окно проверки целостности базы данных.
- Укажите путь к базе данных, поставьте галочку на опции исправления обнаруженных ошибок, после чего нажмите на «Выполнить».
- Дождитесь завершения операции, после которой системы отобразит информацию о произведённых ей действиях.
Если же данный вариант не помог, также может помочь запуск функции «Тестирование и исправление» в настройках конфигуратора.
Добавьте в исключения антивируса папки и файлы 1С
В некоторых случаях ошибка «На сервере 1С: Предприятия произошла неисправимая ошибка» может быть вызвана действиями антивируса, блокирующего доступ или запуск тех или иных служебных файлов 1С. Рекомендуем внести в исключения антивируса все каталоги и файлы 1С на всех ПК, на которых установлена система 1С. После этого проблема может быть устранена.
Обратитесь в службу поддержки 1С
Если не один из указанных способов не помог, рекомендуем обратиться за помощью в вашу поддержку 1С или вызвать ответственного специалиста по работе 1С. Указанная ошибка может быть вызвана конкретикой именно вашей системы, для которой не подойдут универсальные советы. В этом случае рекомендуем обратиться в саппорт или вызвать ответственного специалиста, который определит корень проблемы и укажет на действенное решение.
Заключение
Читайте также: