1с ошибка компиляции при вычислении выражения или выполнении фрагмента кода

Содержание

Инструкции препроцессора в 1С 8.3

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

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

Часть кода расположенная между #Если ВебКлиент Тогда и #КонецЕсли будет отсутствовать в данной процедуре при выполнении не в веб клиенте 1С.

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

У каждой инструкции препроцессора обязательно должен быть завершающий оператор #КонецЕсли. Если его не указать, то будет ошибка компиляции «Ожидается завершение оператора препроцессора Если (If)»:

Процесс выполнения кода на встроенном языке 1с:

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

Инструкции препроцессора

Возможные варианты инструкций препроцессора:

Клиент и НаКлиенте — одно и то же. Сервер и НаСервере — одно и то же.

Также есть инструкции для выделения областей в модуле и для директивы «Изменение и контроль» в расширениях. В данной статье они не будут рассмотрены.

Инструкции препроцессора и директивы компиляции

Директивы компиляции используются в модулях форм и команд. Они определяют где будет скомпилирована процедура: на клиенте или на сервере. Директивы компиляции начинаются с символа &.

Сначала выполняются инструкции препроцессора, а уже потом определяются директивы компиляции. Например:

Данный кусок кода будет присутствовать в серверном модуле формы, но не будет скомпилирован. В клиентском модуле формы его даже не будет.

Часто инструкции препроцессора по ошибке называют директивы препроцессора. Но правильно все-таки инструкции препроцессора.

Исполнение процедур и функций

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

В клиент-серверном варианте экземпляры общих модулей создаются как на сервере, так и на клиенте. Если в модуле есть #Если Сервер Тогда … #КонецЕсли, то кусок кода между ними будет только на сервере. Если обратиться к процедуре в этом куске кода на клиенте, то вызов будет перенаправлен на сервер, потому что на клиенте не будет этой процедуры. Если между #Если Сервер Тогда … #КонецЕсли находится только часть процедуры, то она будет присутствовать только на сервере, и тогда вызов этой процедуры на сервере будет отличаться от вызова на клиенте.

Если в модуле есть #Если ТонкийКлиент (или толстый) Тогда … #КонецЕсли, то этот кусок будет только на клиенте. Если там была процедура, то к ней нельзя будет обращаться на сервере, потому что нельзя с сервера вызывать клиента.

Работа с отладчиком. Инструкция для «чайников»

В статье речь пойдет об «азах» работы с отладчиком 1С.

1. Варианты запуска отладки

Возможные режимы: «тонкий клиент», «веб-клиент», «мобильный клиент», «мобильное приложение», толстый клиент», «толстый клиент (обычное приложение)».

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

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

2. Запуск отладки в режиме, когда предмет отладки выполняется от имени пользователя 1С (не разработчика)

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

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

3. Установка точек останова 1С

Точка останова 1С без условий: позиционируемся на нужной строке кода и затем либо нажимаем «F9», либо выполняем двойной щелчок мышью на затемненной полосе слева от белой области с кодом. Еще можно в контекстном меню (нажатие правой кнопки мыши) выбирать пункт «Точка останова в 1С». На полосе слева от области с кодом появится значок установленной точки останова 1С в виде кружочка розового цвета.

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

На полосе слева от области с кодом появится значок установленной точки останова (по условию в виде синего кружочка со знаком вопроса).

Если требуется отключить/включить срабатывание точки останова в 1С (как простой, так и с условием): позиционируемся на нужной строке и затем либо нажимаем сочетание «Ctrl+Shift+F9», либо в контекстном меню (нажатие правой кнопки мыши) выбираем пункт «Включить/отключить точку останова». При этом отключенная точка останова в 1С будет обозначена кружочком серого цвета, а включенная в зависимости от типа: розовым кружочком либо синим кружочком со знаком вопроса.

Замечу, что возможные действия с точками останова в 1С отображаются в соответствующих группах контекстного меню (нажатие правой кнопки мыши) и пункте меню «Отладка» главного меню.

Чтобы открыть список всех установленных точек, нужно либо нажать сочетание «Alt+F9», либо выбрать пункт меню «Отладка»→»Список точек останова» главного меню. Откроется окно со списком точек останова 1С, в котором у активных точек останова взведен флаг «Вкл./выкл.». Доступные действия с точками останова отображаются справа над списком. По двойному щелчку по любой из точек в списке либо при нажатии кнопки «Перейти к исходному коду» над списком происходит открытие («переключение на») соответствующего модуля с позиционированием на соответствующей строке с установленной точкой останова.

4. Остановка по ошибке при выполнении отладки

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

5. Пошаговая отладка

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

«Шагнуть» (клавиша «F11», или соответствующий пункт в панели «Отладка конфигурации» панели инструментов, или соответствующий пункт в меню «Отладка» главного меню). Происходит выполнение кода текущей строки, и курсор отладки останавливается на следующей строке кода. При этом, если курсор отладки находился на строке с вызовом какой-либо процедуры (функции), происходит переход курсора на первую строку в теле вызванной процедуры (функции).

«Шагнуть через» (клавиша «F10» или соответствующий пункт в панели «Отладка конфигурации» панели инструментов, или соответствующий пункт в меню «Отладка» главного меню). Если курсор отладки находился на строке с вызовом какой-либо процедуры (функции), происходит переход курсора на следующую за этой строкой кода строку без остановки в этой процедуре (функции). При этом выполняется весь код вызываемой в предыдущей строке процедуры (функции), включая вызовы из нее других процедур (функций), и так далее без ограничения по уровню вложенности.

Следующее действие в Пошаговой отладке: «шагнуть из» (сочетание «Shift+F11» или соответствующий пункт в панели «Отладка конфигурации» панели инструментов, или соответствующий пункт в меню «Отладка» главного меню). Если курсор отладки находился на строке кода в теле текущей процедуры (функции), происходит выполнение оставшегося кода тела текущей процедуры (функции), включая вызовы из нее других процедур (функций), и так далее без ограничения по уровню вложенности. После чего курсор отладки позиционируется на строке после той, из которой произошел вызов данной процедуры (функции).

«Идти до курсора» (сочетание «Shift+F10», или соответствующий пункт в панели «Отладка конфигурации» панели инструментов, или соответствующий пункт в меню «Отладка» главного меню). Выполняется весь код от текущего положения курсора отладки до строки, на которой находится курсор редактора кода, включая вызовы из нее других процедур (функций), и так далее без ограничения по уровню вложенности. После чего курсор отладки позиционируется на строке, на которой находится курсор редактора кода.

6. Вычисление выражений при выполнении отладки

При паузе во время отладки можно просматривать значения переменных. Для этого можно просто навести курсор редактора на нужную переменную и в небольшом всплывающем окне отобразится ее текущее значение. А можно выделить курсором название переменной и нажать «Shift+F9». Еще вариант: выбрать соответствующий пункт в контекстном меню (нажатие правой кнопки мыши), на панели инструментов «Отладка конфигурации либо в меню «Отладка» главного меню.

7. Окно «Табло» при выполнении отладки (открывается внизу окна конфигурации в 1С)

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

8. Окно «Локальные переменные» (также открывается внизу окна конфигурации в 1С)

Похожий на окно «Табло» функционал реализован в окне «Локальные переменные», в котором в процессе пошаговой отладки можно просматривать значения локальных переменных текущей процедуры (функции).

Для переменных и свойств в окнах «Вычислить выражение», «Табло» и «Локальные переменные» в контекстном меню (нажатие правой кнопки мыши) доступен пункт «Установить новое значение в виде выражения», при выборе которого отрывается окно, в котором можно установить новое значение переменной (свойства).

Отмечу также, что в окнах «Вычислить выражение» и «Табло» доступно непосредственное редактирование значений переменных (свойств), а также рекурсивное разворачивание (нажатием на пиктограмму «плюс» слева от переменной(свойства)) их вложенных свойств.

9. Окно «Стек вызовов» (также открывается внизу окна конфигурации в 1С)

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

10. Восстановление связи с предметом отладки

Возникают ситуации, когда теряется связь с предметом отладки (чаще всего для кода, выполняемого на сервере). То есть отладчик перестает останавливаться на точках останова. В таких случаях обычно помогает в окне «Подключение» меню «Отладка» главного меню отключить и снова подключить требуемый предмет отладки (клиент, сервер и т. д.). В редких случаях приходится завершить и снова начать сеанс работы с конфигуратором.

Преобразование значения к типу Число не может быть выполнено 1С 8.3 — как исправить?

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

Ошибка преобразование по типу число

Причины ошибки выполнения преобразования значения к типу Число

Обычно данная проблема возникает при запуске кода, выполнении процедуры проверки кода на ошибки или при осуществлении стандартных операцией составления отчётности в системе 1С 8.3 (и ранних системах).

В частности, ошибка фиксировалась в следующих обстоятельствах:

Давайте разберём, как устранить ошибку «Преобразование значения к типу Число не может быть выполнено» в конфигурации 1С 8.3.

Ошибка преобразование 1С

Обновите вашу систему 1С до самой актуальной версии

Прежде чем разбирать особенности ошибок в коде 1С, рекомендуем обновить вашу 1С до самой актуальной версии. В некоторых случаях ошибка «преобразование значения к типу число» вызвана устаревшим вариантом системы, на которой специалист пытается вести отчётность. Установите наиболее актуальную версию системы, и рассматриваемая нами ошибка может исчезнуть.

Сообщение об обновлении версии конфигурации

Внимательно проверьте код на наличие переменных

В большинстве случаев рассматриваемая ошибка вызвана невнимательностью программиста, вместо числового значения указавшего не числовое, что не позволяет системе выполнить правильный подсчёт числовых значений. Рекомендуем внимательно проверить создаваемый вами код, найти место в коде вызывающее исключение (ошибку) и пофиксить его.

Рисунок где ошибка

Например, в примере:

переменная B будет вести к ошибке так как её формат не позволяет системе сложить числовое значение «А» и значение в форме даты. Для решения проблемы замените B на строку: B=5 или аналогичную. В этом случае система выдаст вам корректный результат (в данном случае это будет 8).

Фото девушки жест отлично

Измените первый тип слагаемого на число

В некоторых случаях платформа 1С анализирует тип первого слагаемого числа, обнаруживает строку, вследствие чего может решить, что в данном коде речь идёт о сложении строк, а не необходимых программисту числах. Вследствие этого она пытается выполнить преобразование каждого слагаемого в строку, после чего объединить их как строки.

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

К примеру, вместо ошибочной строки:

Сообщить(«Результат: » + 7 + 8 + 9);

Будет необходимо использовать строку:

Сообщить(«Результат: » + (7 + 8 + 9));

Вследствие этого вы получите ожидаемый результат в виде числе 24.

Используйте конфигуратор для нахождения исключения кода

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

Порядок действий в этом случае будет следующим:

Остановка по ошибке

Переиндексируйте ваши файлы

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

Файл 1С

Запустите данный файл, укажите имя файла для проверки, поставьте галочку рядом с опцией «Исправлять обнаруженные ошибки», после чего нажмите на «Выполнить внизу». Дождитесь завершения процедуры проверки и исправления, после чего вновь попробуйте выполнить необходимые операции.

Окно переиндексации базы

Используйте функцию «Есть NULL»

Если выскакивает ошибка, то иногда одна из задействуемых переменных может принимать значение NULL. Для исправления ошибки рекомендуется использовать функцию «ЕСТЬNULL» (переменная, 0), что позволит устранить рассматриваемую в статье проблему.

Параметр ЕСТЬNULL

Заключение

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

Источники:

https://program1s. com/instrukcii-preprocessora/

https://spb. koderline. ru/expert/instruktsii/article-rabota-s-otladchikom-instruktsiya-dlya-chaynikov/

https://rusadmin. biz/oshibki/preobrazovanie-k-tipu-chislo-ne-vypolneno-1c-8-3/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: