1с как узнать откуда вызвана процедура
Очень часто начинающие 1С программисты сталкиваются с такой проблема, когда не знают как узнать откуда была вызвана та или иная процедура или функция. Допустим во время работы программы вываливается ошибка, при переходе в конфигуратор открывается общий модуль и функция, в которую передаются не правильные параметры, в результате чего появляется ошибка. Соответственно что бы Вам устранить ошибку нужно найти место откуда она была вызвана. На самом деле тут все достаточно просто, сегодня на примере Демонстрационной версии конфигурации «Управление торговлей редакции 11» расскажу как узнать откуда была вызвана функция или процедура.
Как найти место в коде откуда была вызвана функция
Чаще всего такая проблема возникает когда функция или процедура расположенная в общем модуле. И так допустим 1С во время работы выдает ошибку и при переходе в конфигуратор открывает вот эту функцию (Скрин ниже). Для того чтобы узнать откуда она была вызвана необходимо поставить точку останова и запускаем 1С в режиме отладки.
Выполняем действия которые приводят к появлению ошибки.
После того как сработала точка останова, выделяем название функции, и на панели инструментов нажимаем на значок «Стек вызовов» если не можете его найти нажимайте сочетание клавиш «Ctrl+Alt+C».
Откроется окно «Стек вызовов» в котором будет отображена последовательность вызовов. В нашем случае мы видим что функция была вызвана из документа «Заказ клиента» из события «При создании на сервере». Для того чтобы перейти в это место просто кликаем по данной строчке.
В результате откроется то место программы откуда была вызвана искомая функция. Для того чтобы убедиться наверняка, можно выделить имя функции нажать «Shift+F9» и мы увидим объект перехода.
Как видите все достаточно просто, самое главное в этом деле никуда не торопиться и быть внимательными.
Так как я не являюсь гуру 1С программирования, могу в чем-то ошибаться, если нашли в статье не точность или ошибку сообщите, так же можете поделиться и свои опытом!
Отладчик является встроенным в конфигуратор инструментом. Он помогает отлаживать программные модули, создаваемые в процессе разработки прикладного решения. Отладчик позволяет отслеживать последовательность выполнения операторов встроенного языка и просматривать значения переменных.
Основные возможности отладки
Точки останова
Отладчик позволяет установить на конкретную строку модуля специальный маркер — точку останова, — при достижении которой исполнение программного модуля останавливается и управление передается отладчику. Точки останова могут быть безусловными или с условием. При достижении безусловной точки останова исполнение программного модуля останавливается в любом случае:
При достижении точки останова с условием, выполнение программного модуля останавливается только в том случае, если заданное условие истинно:
Отладчик поддерживает возможность отключения точек останова. При этом строка модуля остается отмечена маркером, однако на ход исполнения модуля он никакого влияния не оказывает:
При большом количестве точек останова удобно использовать отдельное окно для работы с точками останова, позволяющее просматривать и редактировать их в едином списке:
Пошаговое выполнение
После того, как при достижении точки останова управление прикладным решением передано отладчику, существует возможность дальнейшего исполнения модуля в нескольких режимах: пошаговое выполнения, исполнение вызова функции или процедуры, прерывание пошагового исполнения функции или процедуры, выполнения модуля до той строки, на которой стоит курсор или продолжение свободного выполнения модуля:
Просмотр выражений
Во время пошагового выполнения существует возможность просматривать значения переменных, содержащихся в модуле, и рассчитывать произвольные значения. Для этого используется специальное окно, отображающее результат расчета:
Для объектов встроенного языка значения их свойств представляются в виде древовидной структуры. Для значений, являющихся строками, массивами и коллекциями значений также возможен просмотр в отдельном окне:
Текущее значение переменной также можно просмотреть, подведя указатель мыши к этой переменной. Текущее значение будет показано в виде короткой подсказки рядом с переменной.
Табло и локальные переменные
Результаты вычислений, которые требуется просматривать на протяжении выполнения некоторой части модуля, можно вывести в отдельное окно — табло, — в котором есть возможность распределить все просматриваемые выражения по четырем страницам:
Для удобного просмотра и изменения локальных переменных, что представляется наиболее частой задачей, существует команда Локальные переменные. Она открывает табло, которое уже автоматически заполнено всеми локальными переменными.
Изменение значений переменных
Значения примитивных типов можно изменить прямо в ячейке Значение.
В этом окне полностью функционирует контекстная подсказка.
Стек вызовов
Отладчик позволяет использовать стек вызовов, который показывает последовательность вызовов процедур и функций, приведшую к строке модуля, которая отлаживается в данный момент:
Двойным щелчком мыши на имени процедуры в стеке вызова можно перейти в соответствующую строку процедуры.
Остановка по ошибке
В платформе предусмотрена возможность использовать режим Остановка по ошибке. В этом режиме отладка может быть остановлена либо при каждой возникающей ошибке, либо при ошибке, в тексте которой присутствует подстрока, указанная разработчиком. Подстроки интересующих ошибок указываются в настройках отладки.
Во время отладки при такой настройке отладка будет останавливаться только при возникновении ошибок, связанных с делением на ноль.
skype: live:di-sem
@programmist_1C
Советы программистам 1с при работе с конфигуратором
Подсветка текущего идентификатора
Позволяет подсвечивать текущий идентификатор выбранным цветом.
Выделяются все идентикаторы у которых такое же имя.
Очень удобно для поиска идентификатора по тексту кода.
Отладка под определенным пользователем
Позволяет запускать отладку под определенным пользователем.
Незаменимо когда ошибка появляетося только у определенного пользователя или когда пользователю не хватает прав, но неизвестно каких.
Работа с открытыми окнами в конфигураторе
Позволяет расположить окна в удобном виде.
Выделить их все и закрыть.
Форматирование текста кода
Выделить нужный фрагмент кода и нажать Alt+Shift+F
либо через меню:
Предположим, вы дорабатываете незнакомую конфигурацию и в каком-то модуле вам попался неотформатированный текст. Вам трудно в нем разобраться и вы хотите улучшить его читаемость, да и вообще сделать более «приличным».
В этом случае вам не нужно вручную двигать строки текста с помощью клавиши Tab, так как это гораздо удобнее и быстрее сделать с помощью форматирования блока текста.
Для этого выделите этот фрагмент текста (или сразу весь модуль – Ctrl + A) и нажмите кнопку Форматировать (Alt + Shift + F) в командной панели Текст.
Вывод списка всех процедур модуля + заготовки предопределенных процедур
Вернуться в исходное место после команды "Перейти к определению".
Во время анализа кода мы хотим посмотреть что за процедура или функция вызывается. Жмем ПКМ и выбираем перейти к определению и переходим к нужной процедуре/функции.
Но после просмотра функции мы хотим вернуться обратно. Для этого жмем "CTRL" + "-":
Посмотреть где используется выделенная процедура/функция
Откуда была вызвана процедура/функция? Стек вызовов.
Допустим что в этой процедуре у нас ошибка мы ставим точку останова, но видим что в процедуру уже поступают неверные параметры.
Нужно узнать откуда была вызвана данная процедура. Вызываем стек вызовов:
Видим все процедуры из которорых мы перешли к текущей:
Вырезать часть кода в отдельную процедуру/функцию
Мы хотим часть кода вывести в отдельную процедуру чтобы использовать ее в других процедурах.
Для этого выделим нужную часть, вызовем контекстное меню и сделаем так:
Закладки и перейти к строке.
Бывает что код достаточно большой и нужно "прыгать" от одного места к другому.
Искать место глазами совсем неудобно.
Лучше воспользоваться следующими инструментами.
1 Переход к строке.
Запоминаем номер строки, он написан в правой нижней части экрана
Жмем в любом месте этого модуля кнопку или сочетание клавиш
В нужной строке жмем Alt+F2 либо через меню
Переход по закладкам горячие клавиши:
F2 - Следующая закладка
Shift+F2 - Предыдущая закладка
Остановить отладчик до наступления ошибки.
Отладчик будет остановлен на строке на которой будет ошибка.
Проверим что скажет отладчик.
и остановит процедуру на нужной строке
Вычислять выражение не меняя код.
В контекстном меню при остановке отладчика есть команда "Вычислить выражение". Shift+F9
В поле "Выражение" мы можем написать любой код и тут же получить ответ. Например:
Контекстная подсказка по параметрам
Принудительно вызвать обычную контекстную подсказку: CTRL+Пробел
При изменении объекта метаданных отключить автоматический поиск ссылок на него.
Инструмент безусловно полезный, но нужен он не всегда.
Отключается в Сервис-Параметры. Убрать галочки в группе "Рефакторинг при изменениях в метаданных и формах":
Если же мы назначаем контроль прав доступа в процедуре ПередЗаписью, то самым простым способом вызвать запись объекта, чтобы не контролировались наши права доступа, является опять же вызов записи объекта из привелигированного модуля.
Поэтому в процедуре ПередЗаписью при контроле прав доступа важно знать, работаем ли мы из привелигированного модуля или нет.
Исследования показали, что если создать не доступный ни одной роли объект, например константу, то в привелигированном модуле право "Чтение" становится доступным, кроме того, если процедура вызвана из привелигированного модуля, то право "Чтение" все еще доступно. Т.е. открываются все права, пока работает привелигированный модуль. Теперь достаточно проверить право доступа к этому объекту и становится понятным, работаем ли мы из привелигированного модуля.
Например, это можно сделать так. В привилегерованном модуле объявляем процедуру:
Далее, заводим какую-нибудь служебную константу, например п_ДляКонтроляПравДоступаПривилегированногоМодуля, отключаем доступ к ней у всех пользователей.
Далее в общем непривилегерованном модуле объявляем функцию:
У объекта, у которого нужно отличать программную запись от интерактивной меняем в процедуре ПередЗаписью код:
Ну и наконец, чтобы отметить именно программный вызов записи, пишем не Объект.Записать(), а ЗаписатьПрограммно(Объект).
Раньше я сомневался, становится ли доступным в вызове ПравоДоступа право доступа к этому служебному объекту, но проверки показали что все ОК, т.е. не нужно делать попытку доступа к объекту, чтобы знать из привелигированного модуля мы работаем или нет.
Далее, лучше использовать константу, а не параметр сеанса, т.к. все параметры сеанса передаются единым блоком как параметры при каждом запросе по ролям, а константа существует себе в конфигурации и есть не просит.
Внимание. В привелигированный модуль, как оказывается, нельзя передавать Объект, только ссылку (возникает ошибка передачи мутабельного параметра на сервер). Поэтому программная запись становится не таким простым делом. Код приведенный выше работает только в файловой версии, в серверной нужно выкручиваться!
Для записи объекта самым оптимальным способом является разложение его по метаданным в структуру (структуры передавать можно), также в эту структуру нужно поместить ссылку на объект, если она есть (она может быть даже у новых объектов). В таком случае нужно написать процедуру-обертку в общем модуле, которая будет разлагать объект в структуру и передавать ее в привелигированный модуль, а уже там записывать.
Функция должна возвращать ссылку на записанный новый объект.
Накладные расходы мизерны, потому что:
= Привелигированная запись нужна не часто.
= Обращение к базе данных идет гораздо дольше обращения к метаданным и разложения объекта.
Желающие могут поэкспериментировать c XML-серилизацией, но это будет дольше разложения в структуру.
Функции ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр не преобразовывают объект в строку и обратно, к сожалению.
1с конфигуратор – это среда разработки и администрирования информационных баз программы 1с Предприятие.
1с Конфигуратор используется в основном программистами для создания, корректировки программных модулей и объектов конфигурации, а также системными администраторами для выполнения административных функций, таких как создание и восстановление резервных копий программы, тестирование и исправление базы данных и других. Простые пользователи работают и вносят данные в режиме “1с Предприятие”.
Как запустить 1с конфигуратор:
- Запустить программу 1с: Предприятие
- Выбрать нужную информационную базу или создать новую
- Нажать кнопку “Конфигуратор”
- Ввести логин и пароль пользователя с административными правами (если требуется)
Обзор возможностей меню 1с конфигуратора:
Меню “Файл” предназначено для работы с различными файлами поддерживаемыми 1с (внешние отчеты и обработки, текстовые, табличные, графические, HTML документы …), а также просмотра и печати выбранных документов.
Меню “Правка” предназначено для редактирования, поиска, замены информации в модулях ,формах, свойствах, объектах программы.
Если нужно найти какое-то слово или словосочетание в тестах конфигурации используем команду Глобальный поиск.
Вводим нужное словосочетание, выбираем область, настройки поиска и нажимаем кнопку “Искать”.
Появится окно результаты поиска, где можно увидеть все найденные позиции с указанием их месторасположения. По двойному щелчку мыши можно провалиться в искомый модуль прямо к найденному значению.
Если Вы работаете с программным модулем то становится доступно Меню “Текст” программы 1с конфигуратор, которое позволяет настраивать и форматировать текстовые модули, добавлять запросы к объекта информационной базы итд.
Например, чтобы сделать код встроенного языка 1с удобно читаемым – его можно отформатировать через меню Текст-Блок-Форматировать.
Вот пример кода до форматирования:
Выделяем нужный участок кода, выбираем команду “Форматировать”
Вот результат форматирования:
При помощи команд Меню “Конфигурация” Вы можете производить различные манипуляции с текущей конфигурацией .
Что такое Конфигурация
– по сути это программа созданная при помощи 1с конфигуратора, содержащая описание структуры таблиц базы данных и алгоритмы работы с этими данными.
Существует “Основная конфигурация” – это конфигурация с которой работает программист – вносит определенные изменения, чтобы потом обновить конфигурацию базы данных.
Конфигурация базы данных – это программа с которой непосредственно работают пользователи и вносят свои данные . Вносить изменения в структуру конфигурации базы данных можно только путем обновления из основной конфигурации.
Существует также конфигурация поставщика – это исходная конфигурация от компании, создавшей продукт. На ее основе зачастую создается основная конфигурация и конфигурация базы данных. Если программа создается с нуля, то конфигурации поставщика может не существовать. Поставщики зачастую выпускают новые версии своей программы. И если конфигурация не снята с поддержки, то можно обновиться в автоматическом режиме.
Основные команды меню Конфигурация:
- Открыть конфигурацию, для дальнейшей работы с объектами информационной базы
- Сохранить конфигурацию и Обновить конфигурацию– сохранение и обновление Конфигурации БД из основной конфигурации
- Поддержка – Обновление – обновлении конфигурации из конфигурации поставщика из интернета или из файлов cf, cfu
- Сохранение конфигурации в файл cf
- Загрузка конфигурации из файла cf с заменой текущей конфигурации
- Сравнение , объединение конфигурации из файла – сравнение конфигураций и добавление изменений из файла cf
- Проверка конфигурации на ошибки
Если вы работаете с обычными формами, то при их разработке доступно меню Форма.
Команды этого меню позволяют управлять различными элементами управления(Кнопка, Надпись,Поле ввода,Флажок, Поле списка, Табличное поле и другими) на обычной форме.
Меню Отладка содержит команды для работы со встроенным отладчиком 1с.
Отладчик 1с нужен для тестирования программного кода 1с. Для его работы необходимо запустить 1с в режиме отладки. После этого можно останавливаться в произвольном месте программного кода (установить точку останова) и проверять значения которые принимают различные переменные или объекты.
Как посмотреть значения объектов в режиме отладки
- Если это переменная то система выдает значение в подсказке при наведении курсора на переменную
- Через форму Вычислить выражение можно вызвать с помощью контекстного меню или нажатия быстрых клавиш — (Shift + F9), или меню (Отладка — Вычислить выражение).
- через Табло, которое вызывается с помощью быстрых клавиш Ctrl + Alt +W или из меню (Отладка — Табло). Добавить объект в табло можно через кнопку “Включить в табло” из формы “Вычислить выражение” или вписать вручную.
Установить точку останова можно:
Как узнать откуда вызвана процедура или функция ?
Чтобы узнать откуда была вызвана та или иная процедура или функция в 1С предусмотрена специальная функция — «Стек вызовов». Для запуска Стека вызовов необходимо нажать горячие клавиши — Ctrl + Alt + C или через меню (Отладка — Стек вызовов).
С помощью него Вы можете узнать, откуда была вызвана процедура или функция и с какими параметрами:
В процессе отладки можно двигаться и отслеживать изменения по строкам (по шагам) после активации точки останова.Для того чтобы сделать шаг к следующей строке, необходимо нажать кнопку «F11″(Шагнуть в). Когда Вы находитесь в режиме пошаговой отладки слева от кода появляется стрелка:
Рассмотрим основные команды меню Администрирование
Похожие записи
Gallery image with caption: Теги 1227, 1228 в кассовом чеке из 1с. Обработка ATOLKKT c интеграционной компонентой АТОЛ.
Читайте также: