Мобильные телефоны и гаджеты

Мобильные телефоны и гаджеты

» » Коды ошибок в 1с 8.3. Наиболее частые ошибки «1С» и методы их исправления. Двойной щелчок для редактирования элемента

Коды ошибок в 1с 8.3. Наиболее частые ошибки «1С» и методы их исправления. Двойной щелчок для редактирования элемента

Описание ошибки формата потока в 1С 8.3

Ошибка формата потока в 1С встречается наиболее часто у всех пользователей. И обычно в таких случаях объяснить её появление вызывает затруднение – вроде бы работали в 1С, всё как обычно. В очередной раз запуская 1С, мы получаем вот такое сообщение:

Ни одна из кнопок Ошибки формата потока не позволяет запустить базу и продолжить работу. Именно потому, что эта ошибка самая популярная и частая, мы сперва объясним её причины, а уже затем перейдем к рассмотрению методов её решения.

Причины появления ошибки формата потока в 1С 8.3

Ошибка формата потока в 1С связана с чтением кэша базы при обращении к ней. Кэш, если говорить простыми словами, это вспомогательная информация (настройки, избранное, частые команды и т.п.) 1С, хранящаяся в отдельных от базы файлах. Во время работы 1С регулярно обращается к кэшу. При возникновении ситуации, когда это обращение было прервано (при отключении электричества, неполадках в сети, экстренном завершении работы 1С), кэш может быть записан с ошибками. В таком случае, при последующем запуске чтение кэша приведёт к этой самой ошибке – ошибке формата потока в 1С.

Способы решения ошибки формата потока в 1С 8.3

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

Для быстрого создания резервной копии откройте папку с базой (как это делается в способе №1) и скопируйте её содержимое в любое другое место. Проводите работы по исправлению ошибок только имея резервную копию!
1.
2.
3.
4.
5.
6.

Очистка кэша базы 1С

Самый простой и помогающий в большинстве случаев способ – очистка кэша базы 1С. Для этого запустим 1С: Предприятие и узнаем путь, по которому хранится база:

Откроем эту папку в Проводнике и удалим все файлы, кроме файла базы, как показано на рисунке ниже. Заметим, что количество файлов могут отличаться, все они должны быть удалены, кроме одного – 1Сv8 (файловая информационная база).

Очистка кэша 1С

Следующий способ – очистка кэша 1С: Предприятие. Для этого нужно открыть папки, где они хранятся. На Windows 7 и выше их две:

C:\Users\Username\AppData\Roaming\1C

C:\Users\Username\AppData\Local\1C

Следует удалить папку 1cv8 в обоих из них:

После очистки кэша попробуйте зайти в базу ещё раз. Ошибка осталась? Попробуйте следующий способ.

Исправление базы утилитой chdbfl.exe

Возможно, ошибка формата потока может быть связана с ошибками в самой базе. Для этого её стоит проверить с помощью специальной программы chdbfl.exe, которая идёт в комплекте с 1С: Предприятие. Для этого перейдите в папку с программой (чаще всего это C:\Program Files\1cv8\8.3.XX.YYY\bin\) и найдите файлик chdbfl.exe:

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

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

Тестирование и исправление базы через Конфигуратор

Следующим способом решения ошибки формата потока в 1С является Тестирование и исправление базы, доступные из Конфигуратора.

Запустите 1С: Предприятие через режим Конфигуратор:

В открывшемся Конфигураторе выберите Администрирование – Тестирование и Исправление:

В открывшемся окне установите настройки, как на рисунке ниже, и нажмите Выполнить.

Дождитесь окончания всех процедур. Закройте Конфигуратор и попробуйте зайти в базу. Ошибка осталась? Попробуйте следующий способ.

Выгрузка и загрузка базы через dt

Данный способ может помочь устранить такие ошибки, которые не устраняются п.3 и п.4 данной статьи. Зайдите в базу через режим Конфигуратор, как в способе выше. Выберите Администрирование – Выгрузить информационную базу:

В открывшемся окне выберите место расположения выгрузки. Оно может быть любым, главное – запомнить это место.

Нажав Сохранить, дождитесь окончания выгрузки. Выйдите из режима Конфигуратора. Откройте ещё раз 1С: Предприятие, и выберите пункт Добавить – Создание новой информационной базы – Создание информационной базы без конфигурации – Далее – Готово.

Откройте созданную базу через Конфигуратор и нажмите Администрирование – Загрузить информационную базу. Укажите в открывшемся окне тот файл выгрузки, который вы сформировали только что. Дождитесь окончания загрузки, закройте Конфигуратор и попробуйте зайти в новую загруженную базу. Ошибка осталась? Попробуйте следующий способ.

Продвинутые способы решения ошибки формата данных 1С

Подробное рассмотрение продвинутых способов решения ошибки формата данных в 1С выходит за рамки данной статьи, поскольку для их использования нужно обладать теми или иными знаниями в области обращения с компьютером, поэтому инструкции и пометки по каждому из них были бы довольно объёмными.

Ограничимся их перечислением:
1. Выгрузка и загрузка данных между неработающей и пустой базой с помощью обработки «Выгрузка и загрузка данных XML».
2. Различные версии используемых 1С, работающих в одной базе через сеть (подробнее см.) необходимо привести в порядок.
3. Отключение протокола IPv6 через реестр Windows.
4. Переустановка или обновление 1С: Предприятие.
5. Перенос базы на другой компьютер и попытка запустить её там.
6. Отключение или удаление фаерволов и/или антивирусов.
7. Проверка формата потока с помощью утилиты Tool_1CD
8. Обновите конфигурацию с помощью.cf файла.

Проблема «Ошибка формата потока в 1С 8.3» не решена? Получите бесплатную консультацию от наших специалистов по решению данной проблемы!

Тестирование и исправление информационной базы 1С 8.3 необходимо выполнять в случае, если у вас возникают ошибки в работе информационной базы и перед обновлением конфигурации базы. В большинстве случаев при повреждении вашей информационной базы оно помогает.

Перед выполнением тестирования и исправления необходимо сделать резервную копию базы. Если же вы не можете зайти в конфигуратор, то в папке с установленной программой 1С есть утилита для тестирования и исправления, которая не требует запуска программы в режиме конфигуратор. Обо всем этом поговорим ниже.

Рассмотрим этот инструмент и как с ним работать. Особенно подробно разберем какие флаги надо ставить в интерфейсе.

Запустим программу в режиме конфигуратор:

Выбираем из меню Администрирование пункт “Тестирование и исправление”:

Какие галочки ставить?

Существуют различные варианты настройки тестирования, рассмотрим эти галки:

  • Реиндексация таблиц информационной базы - это полное перестроение индексов для таблиц базы данных. Реиндексация повышает скорость работы информационной базы. Процедура длительная, но никогда не будет лишней.
  • Проверка логической целостности информационной базы - проверять логическую и структурную целостность БД, исправляет ошибки в данных;
  • Проверка ссылочной целостности информационной базы - проверка «битых ссылок» в базе данных. Такие ошибки могут возникать при непосредственном удалении объектов системы или сбоях. Существует 3 варианта действий для исправления таких ошибок:
    • Создавать объекты - система создает элементы-заглушки, которые можно потом заполнить необходимой информацией,
    • Очищать ссылки - «битые» ссылки будут очищены,
    • Не изменять - система только покажет вам ошибки.
  • Пересчет итогов. Итоги - таблица предварительно подсчитанных результатов в регистрах накопления, расчета и бухгалтерии. Пересчет итогов, также как реиндексация, никогда не будет вредна и даст плюс в скорости работы программы;
  • Сжатие таблиц информационной базы - при удалении данных 1С не удаляет строки таблиц, а лишь «помечает» их на удаление. Они не видны пользователю, но продолжат находится в БД. Сжатие базы данных удаляет эти данные безвозвратно. Так же такого же эффекта можно достичь выгрузкой и загрузкой файла информационной базы (*.dt);
  • Реструктуризация таблиц информационной базы - долгий процесс, с помощью которого система осуществляет пересоздание таблиц базы. Такая процедура происходит и при внесение изменений в структуру конфигурации.

В нашем примере проставим все галочки как показано на рисунке и нажимаем “Выполнить”:

Этап выполнения операции мы можем наблюдать в левом нижнем углу окна конфигуратора 1С. Выявленные ошибки показываются в окне служебных сообщений.

После окончания тестирования нажимаем “Закрыть”:

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

Тестирование и исправление закончено.

Если конфигуратор не открывается: утилита chdbfl.exe

Если база повреждена настолько, что вы не можете зайти в конфигуратор, можно воспользоваться . Утилита устанавливается вместе с платформой 1С и найти ее можно в папке Bin каталога установки:

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

После того как нажали копировать, нажимаем правой кнопкой на пустом месте окна папки и нажимаем “Вставить”. Копия сделана, запускаем утилиту:

Появляется главное окно утилиты. Нам нужно указать имя файла базы данных. Нажимаем на три точки. Открывается окно выбора файла БД. Ищем каталог вашей базы и в нем указываем на файл 1Cv8.1CD. Нажимаем “Открыть”.

Ставим галочку “Исправлять обнаруженные ошибки” и нажимаем “Выполнить”.

Ждем окончания операции. Она может занять продолжительное время, в зависимости от размера базы.

После выполнения, если были исправлены ошибки они отобразятся в окне утилиты. В моем случае ошибок не обнаружено. Нажимаем “Закрыть” и пробуем зайти в программу. Если зайти все же не получается, вам необходимо обратиться к специалисту.


Последняя редакция №22 от 15.07.08 | История
URL:
Ключевые слова: ошибка,исключение,попытка, 80004005, 80040E31, 00000005, 00000041, 80070005, 80000009, 80030005, 8001011B, 80010108, 80010005, 800706BA, 800706BE, 80080005,SDBL,pos,CAST

Предлагаю всем дружно составить перечень ошибок 1С 80 и какое сообщение об этой ошибке можно получить для анализа в функции ОписаниеОшибки().

Просьба соблюдать формат и дословно приводить текст ошибки.

Ошибка блокировки при транзакциях

Microsoft OLE DB Provider for SQL Server: Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

HRESULT=80004005, SQLSTATE=40001, native=1205

Возникает при конфликте транзакций, часто при записи объектов.

Ошибка блокировки при транзакциях 2

Microsoft OLE DB Provider for SQL Server: Lock request time out period exceeded.

HRESULT=80040E31, SQLSTATE=HYT00, native=1222

Истек тайм-аут.

Более 256 таблиц в запросе

Ошибка выполнения запроса "Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256."

Когда в запросе идет обращение более, чем к 256 таблицам.

Ошибки: 00000005, 00000041, 80070005, 80000009, 80030005, 8001011B
Возникают в тех случаях, когда пользователь, от имени которого работает клиентское приложение, не имеет прав доступа к каким-либо ресурсам. В частности, это может означать, что пользователю, от имени которого стартовало клиентское приложение 1С:Предприятия, недоступны либо средства COM+ того компьютера, на котором установлен сервер, либо зарегистрированное на нем COM+ приложение 1CV8, которое является сервером 1С:Предприятия.

Если эта ошибка возникает во внешнем соединении 1С:Предприятия, то это означает отсутствие соответствующих прав у пользователя того приложения, которое обратилось к внешнему соединению. Это может быть любое интерактивное приложение или, например, WEB-сервер. В частности, если в качестве WEB-сервера используется Microsoft Internet Information Services, то таким пользователем может быть пользователь IUSR_<Имя компьютера> или ASPNET.

Методика настройки прав доступа пользователей к COM+ серверу описана в разделах "Вопросы установки и настройки 1C:Предприятия 8.0 в варианте "клиент-сервер"" и "Особенности использования внешнего соединения 1С:Предприятия в WEB-приложениях".
(С) ИТС

Ошибка 80010108
Может возникнуть в том случае, если клиентское приложение некоторое время (несколько минут) находилась в неактивном состоянии, например из-за засыпания компьютера или долгого ожидания на точке останова в отладчике. Причиной этого является особенность механизма DCOM, обеспечивающего принудительный разрыв соединения с сервером, если клиент долго не проявлял активность.
(C) ИТС

Ошибка 80010005
Может возникнуть в клиентском приложении в процессе обращения к серверу 1С:Предприятия, если при перерисовке экрана клиентское приложение обратилось к серверу 1С:Предприятия повторно. Это может быть проявлением внутренней ошибки клиентского приложения 1С:Предприятия. Для ее оперативного исправления желательно описать обстоятельства ее возниконовения и обратиться на линию технической поддержки 1С:Предприятия 8.0.
(C) ИТС

Ошибки 800706BA, 800706BE
Сигнализируют об аварийной ситуации на сервере 1С:Предприятия, которая привела к его автоматическому перезапуску.
(С) ИТС

Ошибка 0х80080005: Server execution failed
Одной из причин возникновения этой ошибки явлются проблемы с подсистемой COM+, являющейся частью операционной системы. При возникновении такой ошибки, как правило, в системные журналы событий также записываются события с источником COM+, именем серверного приложения System Application и указанием файла Comsvcs.dll. Существуют процедуры восстановления работоспособности COM+, однако они дают желаемый результат не всегда. Описания официально рекомендованных процедур можно найти в http://support.microsoft.com/default.aspx?scid=kb;en-us;315296 (или похожей http://support.microsoft.com/default.aspx?scid=kb;en-us;318731), однако по результатам практических применений рекомендуется процедура, описанная в http://www.jsifaq.com/subN/tip6900/rh6951.htm . Эта последовательность шагов дополнена по сравнению с официальной и может быть использована в операционных системах 2000/XP/2003. Ниже приводится ее перевод на русский язык.
Для восстановления поврежденного каталога COM+:

1. Переименуйте каталог %SystemRoot%\System32\Clbcatq.dll в %SystemRoot%\System32\~Clbcatq.dll (обратите внимание на появление тильды в имени каталога).
2. Перезагрузите компьютер.
3. Удалите из системного реестра ключ COM3, расположенный в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.
4. Запустите командную консоль CMD.EXE.
5. Наберите pushd %SystemRoot% и нажмите Enter.
6. Наберите rd /s /q Registration и нажмите Enter.
7. Наберите popd и нажмите Enter.
8. Наберите exit и нажмите Enter.
9. Удалите слово Hide из строки, начинающейся с COM=, в файле %SystemRoot%\Inf\Sysoc.inf. Для редактирования файла можно использовать Notepad.
10. Для Windows XP:
* Запустите командную консоль CMD.EXE.
* Наберите regsvr32 /s ole32.dll и нажмите Enter.
* Наберите regsvr32 /s oleaut32.dll и нажмите Enter.
* Наберите exit и нажмите Enter.
11. Запустите панель управления Установка/Удаление программ и выберите пункт Добавление\удаление компонент Windows.
12. Нажмите Next и переустановите COM+.
Замечание: Если механизм защиты системных файлов Windows File Protection блокирует одно или несколько из вышеприведенных действий, то необходимо выполнять эти действия в безопасном режиме (Safe Mode).
http://users.v8.1c.ru/Adm433.aspx

Ошибка записи/проведения

Ошибка при вызове метода контекста (Записать): Операция не выполнена!

Возникает, если в модуле записи/проведения присвоить Отказ=истина

Ошибка преобразования данных XML

возникает при рассинхронизации структуры данных (конфигурации) между узлами распределенной базы

В базе нет пользователя с административными правами
При редактировании списка пользователей роли берутся только из конфигурации БД. Обновить конфигурацию БД (F7).

Попытка передачи мутабельного значения на сервер 1С:Предприятия
Возникает только в клиент-серверной версии (SQL). Для исправления ошибки нужен программист. Если у вас типовая конфигурация, попробуйте обновить ее до последнего релиза.
Мутабельный - изменяемое. На сервер 1С можно передавать значения только примитивных типов данных.

Клиентский поток исполняется на сервере. Удалить клиента веременно невозможно
v8: Клиентский поток исполняется на сервере. Удалить клиента веременно невозмож

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

Ошибка SDBL: Поля "CAST (Q_000_T_001/Recorder AS REF(Document4055)/Fld4092" и "CAST (Q_000_T_001/Recorder AS REF(Document123)/Fld2322" не совместимы по типам.(pos=10173)

В документах "Приходный кассовый ордер" и "Расходный кассовый ордер" реквизит "Основание" имеет в свойстве "Неограниченная длина" включенный флаг, надо снимать флаг и указать длину этого реквизита

"Ошибка SQL: Поле не найдено "MaxGetCode"

Эта ошибка выдается в файловом варианте, когда клиенты разных версий одновременно работают с ИБ в файловом варианте.

Одной из самых неприятнейших встречающихся ошибок при работе с 1С 8.3 или 8.2 является «Ошибка формата потока». Причин ее появления может быть множество и их не всегда легко установить. При этом окно уведомления об ошибке далеко не эталон информативности.

Первым делом попробуйте подумать над тем, что же всё-таки могло привести к данной неполадке.

Наиболее распространенные причины

Самой распространенной причиной ошибки формата потока является неправильная обработка кэша программой 1С 8. Вспомните, не было ли перебоев электропитания до ее возникновения, обновления конфигурации? Корректно ли был завершен сеанс работы пользователя? Зачастую в таком случае ошибка формата потока будет возникать не на всех компьютерах. Проблемы лучше предупреждать, чем потом исправлять, поэтому рекомендуется использовать источники бесперебойного питания на компьютерах.

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

Как исправить ошибку формата потока

  1. Первым делом попробуйте . Если на одном компьютере программа работает нормально, а на другом появляется ошибка формата потока, то, скорее всего этот способ именно для вас.
  2. В том случае, если очистка кэша не помогла, попробуйте открыть информационную базу в режиме конфигуратора и запустите .
  3. Если вам не удалось зайти в конфигуратор, но база файловая – воспользуйтесь ChDBFl.exe. Данная утилита является аналогом тестирования и исправления ошибок в конфигураторе, но более простым.
  4. Убедитесь, что все текущие пользователи данной информационной базы используют одинаковую версию платформы. Если версии различаются, то установите всем актуальные.
  5. Если 1С запускается в режиме «Предприятие», то выгрузите все данные при помощи универсальной выгрузки/загрузки в новую базу.
  6. Отключите, а при необходимости удалите все фаерволы и антивирусы.
  7. Если данная информационная база клиент – серверная, то проверьте, хватает ли дискового пространства на сервере в папке для хранения временных данных.
  8. Удалите платформу 1С (через панель управления) и установите заново.
  9. Если информационная база открывается в конфигураторе, попробуйте выгрузить ее в файл *.dt и загрузить в пустую.
  10. Воспользоваться HEX-редактором, заменив содержимое чистой базы содержимым той, в которой произошла ошибка.

Если все эти способы вам не помогли, что маловероятно, то тут только бубен в помощь или квалифицированный специалист.

В начале юридического договора, особенно в ИТ области, обычно есть раздел под названием Термины. В нем объясняется — что значит или включает в себя то или иное ИТ слово.

Но кроме действительно сложных слов как сервер или сайт также и обычные, всем известные слова у программистов могут значить совсем другое. Например ошибки. В общечеловеческом смысле это слово означает неправильное действие. Такое, за которое его автору может быть даже стыдно.

В программистом смысле слово ошибки имеет, наверное, два уточнения..

Что означает термин «ошибка» в программировании и в 1С

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

Стандартизация как железа, так и программ, позволяет нам предполагать, что на каждом компьютере программы будут работать одинаково, однако по факту всегда могут складываться определенные обстоятельства, когда автор программы будет удивлен почему программа делает сейчас именно так, а не иначе.

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

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

Например, программист задумывал, что сначала пользователь откроет файл, а потом программа сделает то-то и то-то. Однако когда программа была скопирована пользователю на компьютер и пользователь забыл открыть файл. Или пытался открыть, но файл оказался некорректный или винчестер «битый».
И программа сообщает пользователю: Эй, тут ошибка! Я не могу сделать то, что должна.

Ошибки 1С имеют несколько уровней – во первых сообщения об ошибках 1С могут принадлежать , которая сообщает о невозможности выполнить какие-то действия, которые она должна была выполнить из-за сложившихся обстоятельств.

Второй уровень – это ошибки 1С в программе на языке 1С. Да, платформа выполняет успешно написанную программистом 1С программу, но программа может быть написана некорректно или также не может быть выполнена именно в сложившихся обстоятельствах (на этом компьютере, при таких действиях конкретного пользователя и т.п.).

Третий уровень – это ошибки 1С в данных. Данные в базе данных взаимосвязаны друг с другом. Тем не менее могут встречаются ситуации когда данные «портятся». Например, в одной из форм не стоят достаточные проверки, чтобы особенно креативный пользователь ввел что-то неправильно. Далее программа может сработать неверно, потому что алгоритм не предполагал что кто-то введет такое..

Сообщение об ошибке 1С

1С сообщает об ошибке выполнения программы на языке 1С с помощью типового окошка с текстом ошибки 1С и кнопками ОК и Подробнее.

Причем секрет тут в том, что в этом окошке отображается только краткое сообщение об ошибке 1С, которое зачастую программисту ни о чем не говорит.

Чтобы увидеть полное – нужно нажать на кнопку Подробно. Уже там будет отображена даже строка программы, в которой произошла ошибка 1С. Также можно перейти прямо в конфигуратор к этой строке.

Но пользователи об этом не знают.. И всегда присылают скриншот того первого окошка. Если присылают 🙂

Генерация исключения

Итак, мы рассматриваем ошибку 1С в программировании как способ/возможность программе сообщить пользователю о том, что она не может что-то сделать.

Пример. Нужно открыть файл. Но при открытии возможны ошибки 1С – например у пользователя нет доступа на чтение файла. Мы можем написать так:


Если Файл = Ложь Тогда
Сообщить(«Не удалось открыть файл»);
Иначе
//программа идет дальше, делаем что-то с файлом
КонецЕсли;

В данном примере мы учли, что файл может быть не открыт с помощью конструкции «Если».

Однако у данного примера есть очевидные минусы:

  • Таких вариантов может быть много (не откроется файл, не прочитается файл до конца, пользователь пьян, выключили электричество..)
  • Могут быть неучтенные варианты, про которые программист не подумал.

Поэтому в программировании принято использовать прием под названием «генерировать исключение» — то есть позволить ошибке 1С произойти.

Программа делает вид, что файл в любом случае откроется. Никаких «Если» не пишется. Если же что-то пойдет не так, то программа собственно и сообщит об ошибке 1С – ее выполнение прервется.

1С сама файл не открывает – она вызывает команду Windows API. Windows написана также с использованием этого приема. Таким образом Вы можете представить себе цепочку прерываний выполнения, начинающуюся с Windows:

  • Язык 1С – команда открыть файл
  • Платформа 1С – команда открыть файл
  • Windows API – команда открыть файл
  • Программа на ассемблере – команда открыть файл
  • Опа! Файл не открывается!
  • Программа на ассемблере прервана!
  • Функция Windows API прервана!
  • Платформа 1С выполнение программы прервано!
  • Программа на языке 1С прервана!
  • Пользователь видит сообщение.

Вопрос: кто выводит тогда сообщение об ошибке 1С? Откуда оно берется?

Перехват и обработка исключения

Так мы подходим к следующему приему: перехват исключений, сгенерированных во время выполнения этой цепочки.

Исключения переходят с нижнего уровня выполнения наверх, по цепочке. Если последний уровень не обработал исключение – то это сделает предыдущий уровень.

Пример. Обработаем исключение в языке 1С:
Попытка
Файл = ОткрытьФайл(ИмяФайла);
Строка = Файл.Прочитать();
Исключение
Сообщить(«Файл не удалось открыть: не существует или нет прав доступа»);
КонецПопытки;

В этом примере мы обработали самостоятельно исключение (т.е. исключительную ситуацию или ошибку 1С). Таким образом именно мы сообщаем пользователю о произошедшей «ошибке» — невозможности открыть файл.

Когда мы делаем это самостоятельно – мы можем и не сообщать пользователю ничего, а просто пойти по другому варианту выполнения программы.

Легко заметить, что этот способ можно применять в том числе и на случай, когда в каком-то участке кода может произойти «какая-нибудь» ошибка 1С. Мы ее «ловим» и обрабатываем или сообщаем о ней пользователю.

Что будет, если не перехватить и не обработать ошибку 1С на нашем «верхнем» уровне? Тогда о ней сообщит следующий уровень ниже — платформа 1С. Как она это делает, мы только что говорили и смотрели на скриншоте.

Что будет, если платформа не отработает это? Правильно – это обычно отработает более нижний уровень – Windows. В этом случае программа 1С «упадет», а Windows сообщит – программа совершила недопустимую операцию и будет закрыта.

Что будет, если Windows не отработает это? Вы наверняка это видели – компьютер зависнет или перезагрузится.

Вложенный перехват и транзакции

Как Вы думаете, какие сообщения увидит пользователь при выполнении данного примера?

Попытка
Попытка
ф = 1/0;
Исключение
Сообщить("Конкретная ошибка");
КонецПопытки;
Исключение
Сообщить("Общая ошибка");
КонецПопытки;

Верно! Сработает внутренний обработчик и сообщит «Конкретная ошибка», а внешний не сработает.

Однако с точки зрения программы здесь произошла ошибка 1С, хотя она и была отработана. Где-то там у себя в мозгах платформа запомнила – здесь была ошибка 1С.

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

НачатьТранзакцию();
//создали справочник 1, но на самом деле он не записался в базу данных
Спр1.Записать();
//создали справочник 2, но на самом деле он не записался в базу данных
Спр2.Записать();
ЗафиксироватьТранзакцию();
//эта команда записала в базу данных все, что было сделано начиная с ‘НачатьТранзакцию’

Функция ЗафиксироватьТранзакцию() может быть выполнена только в случае, если с момента вызова НачатьТранзакцию() не произошло ни одной ошибки 1С.

Если Вы при написании подобного кода понимаете, что в этой строке кода может быть ошибка 1С – Вы можете поставить ее обработку с помощью Попытка/Исключение. Однако платформа в этом случае все равно учтет, что ошибка 1С произошла и не станет фиксировать транзакцию и записывать данные в базу данных.

Непреднамеренные ошибки 1С

Итак, в программе 1С программистом может быть допущена ошибка 1С. В этом случае платформа 1С сообщит о ней.

В случае, если не удается понять, почему и когда такая ошибка 1С возникает, Вы можете использовать Попытка/Исключение, чтобы обработать ошибку 1С.

Также Попытка/Исключение можно использовать в случае, когда Вы хотели бы создать гарантированно безошибочный участок программы. Вы сможете быть уверены, что если даже ошибка 1С произойдет, то Вы ее отлавливаете и отрабатываете специальным образом.

Преднамеренные ошибки 1С

Вы можете в тексте программы делать вид что файл всегда откроется и число всегда поделится. Но использовать Попытка/Исключение как способ переключить программу на другой вариант исправления в случае, если такое произойдет. Или просто сообщить пользователю об ошибке 1С.

Собственный вызов ошибки 1С

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

Это можно сделать вот так:

Функция СделатьЧтото(Параметр)
Если Параметр = Неопределено Тогда
ВызватьИсключение «Ошибка в функции СделатьЧтото. Не указан параметр»;
КонецЕсли;
КонецФункции

Для чего это требуется? В случае, когда Вы создаете функцию, которой будете пользоваться во многих местах, а может будут пользоваться и другие – это красивый способ одновременно убить нескольких зайцев:

  • Отработать ошибку 1С
  • Сообщить об ошибке 1С на уровень выше (программе, которая вызывала эту функцию)
  • Сообщить не только об ошибке 1С, но и текст/подробности
  • Гарантированно прервать выполнение не только своей функции, но и всех уровней, если программист писавший их не подумал о том, что такая ошибка 1С может быть и не обработал ее.

Более корректные способы сообщения об ошибке 1С

Обычно когда требуется сообщить что-то пользователю, используются .

Однако в типовых конфигурациях, таких как Бухгалтерия, Управление торговлей, УПП – есть специальная функция:
ОбщегоНазначения.СообщитьОбОшибке(«Текст»);

Ее плюсы:

  • Форма сообщения зависит от запущенного клиента
  • Записывает сведения в журнал регистрации
  • В некоторых конфигурациях реализована более красивая форма сообщения об ошибке 1С.

Анализ ошибок

При работе платформы 1С работает журнал регистрации. Кроме действий пользователя он также сохраняет сведения об ошибках 1С, которые происходили в течении работы платформы 1С.

В конфигураторе выберите пункт меню Администрирование/Журнал регистрации.

Нажмите кнопку Отбор (как на картинке). Установите отбор событий только по ошибкам 1С.

Журнал отобразит список происходивших ошибок. Кликните на строчку, чтобы рассмотреть конкретное сообщение подробнее.