1) Получение конкретного места и номера строки возникновения исключения.
1.1) Через установку настроек отладки
Зачастую у пользователей возникают разные ошибки при работе с системой 1С:Предприятие. При этом они связываются с поддержкой, разработчиками и всё, что могут доложить об ошибке - это текст, который выводится у них на экране.
Например, при открытии документа «Реализация Товаров и услуг» возникает следующая ошибка:
Зачастую отловить быстро местонахождение такой ошибки не так просто. В типовых конфигурациях уже при открытии формы часто происходит вызов ряда процедур общего модуля и быстро понять место возникновения исключения не просто.
Многие разработчики также знают, что когда они из конфигуратора запускают отладочный режим в случае возникновения исключения система помимо кнопки Ок, выводит также и кнопку Подробно.
При нажатии на кнопку «Подробно…» можно получить информацию о точном месте возникновения ошибки.
Но, оказывается, существует недокументированная возможность получать полную информацию об ошибке и без конфигуратора или подключения из него отладочного режима.
Что для этого надо сделать?
Все очень просто. Необходимо сначала зайти через пункты Главное меню (пиктограмма со стрелкой в верхнем левом углу экрана) – Сервис –Параметры.
И в открывшемся окне значение параметра «Отладка в текущем сеансе:» установить в значение «Разрешена (протокол TCP/IP)».
Вот и всё.
Воспроизведем теперь ошибку и Вуаля!) Доступна кнопка "Подробно..."!
1.2) Получение данных об ошибке через форму информации для технической поддержки.
Спасибо Bonv, он подсказал еще способ, требующий даже еще меньше телодвижений.
После возникновения ошибки необходимо нажать пиктограмму "Показать информацию о программе", а затем в открывшемся окне - "Информация для технической поддержки".
В открывшемся окне будет также видна подробная информация о возникшем исключении.
Есть еще несколько удобных механизмов платформы, которыми не всё пользуются, а зря)
2) Переопределение значений переменных, свойств объектов, параметров прямо во время отладки.
Зачастую при отладке возникают ситуации, когда необходимо поменять значения локальных переменных или каких-то свойств для возможности выполнения каких-то действий, противоречащих текущей логике.
Начиная с 8.3.7 платформа 1С стала предоставлять такую возможность.
Например, у Вас существует документ, у которого в событии «При создании на сервере» выполняется масса всяких проверок, в которых выполняется контроль на наличие специальных ролей, каких-то доп. свойств у текущего пользователя, контроль закрытого периода.
В результате форма при открытии недоступна для изменения, а Вам необходимо срочно выполнить для проверки какие-то интерактивные действия. Как быть?
Запускаем отладчик и устанавливаем точку останову в самом конце процедуры ПриСозданииНаСервере
Срабатывает точка останова, теперь просмотрим значение свойства формы ТолькоПросмотр.
Для этого перейдем к окну вычисления выражения (Отладка – Вычислить выражение) или Shift + F9.
В открывшемся окне в поле выражения пропишем свойство формы ТолькоПросмотр и нажимаем Enter или Рассчитать.
Мы видим, что действительно свойство формы «ТолькоПросмотр» установлено в значение Истина. Мы можем это исправить.
Для этого нажимаем пиктограмму установки нового значения.
В открывшемся окне вводим Ложь и нажимаем кнопку «Установить».
Появляется сообщение об успешном изменении значения.
Вот и всё! Форма доступна для изменения.
Понятно, что далеко не всегда при недоступности формы будет работать этот алгоритм, где-то может быть установлено не свойство ТолькоПросмотр, а свойство Доступность (в Ложь). Возможно (хотя и маловероятно), что свойство будет установлено в событии ПриОткрытии.
Возможно переопределять и значение Параметров.
Например, в событии НачалоВыбора поля ввода подразделения присутствует следующий код:
Процедура ПодразделениеНачалоВыбора (Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбработатьНачалоВыбораПодразделения();
КонецПроцедуры
В процедуре ОбработатьНачалоВыбораПодразделения реализован нестандартный выбор подразделения по ограниченному списку. В результате, существует возможность выбрать лишь ограниченный список подразделений, а нам в рамках проверки необходимо выбрать подразделение, не попадающее в этот список. Вопрос также решается очень легко. Ставим точку останова в конце процедуры и также через окно вычисления выражения устанавливаем значение параметра СтандартнаяОбработка в Истина.
Привел лишь несколько примеров. На самом деле очень часто эта возможность платформы позволяет выполнять самые разные действия в обход текущей логики и значительно упрощает тестирование или выполнение каких-то проверочных действий.
3) Просмотр временных таблиц запроса.
3.1) Возможности при использовании платформы 8.3.8 и выше.
Фирма 1С, начиная с версии 8.3.8, предоставила нам ряд возможностей по просмотру содержимого временных таблиц при отладке.
Рассмотрим два варианта:
1. Объявляется только запрос, менеджер временных таблиц не объявляется. Тогда для получения данных любой из временных таблиц запроса необходимо выполнить следующие действия:
Перейти к окну Выражения («Отладка» –> «Вычислить Выражение»… или Shift + F9).
В открывшемся окне в поле Выражение прописываем:
Запрос.ВыполнитьПакетСПромежуточнымиДанными()
И нажимаем «Рассчитать».
В результате в окне результата нам выведен результат выполнения метода ВыполнитьПакетСПромежуточнымиДанными() – это массив последовательно расположенных результатов каждого запроса пакета из нашей переменной Запрос.
Для того, чтобы получить данные из результата запроса напомню необходимо использовать метод Выгрузить(). Таким образом, если, например, Вы хотите получить результат, содержащийся во второй по счету таблице из пакета, вы должны в окне вычисления выражения написать:
Запрос.ВыполнитьПакетСПромежуточнымиДанными()[1].Выгрузить()
В результате в окне результата вы получите таблицу значений с интересующими вас данными:
Можно увидеть её значения, для этого необходимо сначала перейти к строке в поле Результат, а затем либо нажать пиктограмму открытия значения либо нажав F2.
2. Следующая ситуация, когда таблицы у нас находятся внутри менеджера временных таблиц и нам необходимо увидеть их содержимое. Допустим менеджер временных таблиц находится в переменной МенеджерВТ (он может быть привязан и к запросу, в этом случае получаем его как Запрос.МенеджерВременныхТаблиц).
Можно увидеть список всех таблиц, хранящихся в менеджере. Для этого в окне Выражения надо прописать МенеджерВТ.Таблицы
В окне Результата отобразиться значение специального типа ВременныеТаблицыЗапроса.
Можно увидеть список временных таблиц перейдя к этой строке и нажав пиктограмму открытия значения либо F2.
А чтобы увидеть содержимое любое из временных таблиц необходимо от типа ВременнаяТаблицаЗапроса перейти к таблице значений, это можно сделать двумя способами: по индексу временной таблице и по имени:
МенеджерВТ.Таблицы[1].ПолучитьДанные().Выгрузить() //Обращение по индексу 1. Не забывайте что индексы ведут счет с 0, поэтому мы получим вторую по счету таблицу в пакете.
МенеджерВТ.Таблицы["ВТ_Подразделения"].ПолучитьДанные().Выгрузить() // Обращение по имени временной таблицы "ВТ_Подразделения"
3.2) Просмотр содержимого временных таблиц в версиях платформы ниже 8.3.8
Если же Вы работаете с версией платформы ниже 8.3.8, то не стоит сильно печалиться)
Можно реализовать альтернативный вариант в своей конфигурации.
Для этого необходимо в общем модуле создать следующую процедуру:
Функция СодержимоеВременнойТаблицы(МенеджерВременныхТаблиц, ИмяВременнойТаблицы) Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ * ИЗ " + ИмяВременнойТаблицы;
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Теперь также открыв окно вычисления выражения, можете прямо в поле Выражение обратиться к этой функции общего модуля.
Например, если общий модуль, в котором Вы прописали функцию СодержимоеВременнойТаблицы, называется Расчеты, переменная с менеджером временных таблиц - МенеджерВТ, а имя временной таблицы - ВТ_Сотрудники, то необходимо прописать следующее выражение:
Расчеты.СодержимоеВременнойТаблицы (МенеджерВТ, "ВТ_Сотрудники")
Либо если менеджер временных таблиц установлен для запроса с именем Запрос:
Расчеты.СодержимоеВременнойТаблицы (Запрос.МенеджерВременныхТаблиц, "ВТ_Сотрудники")
В результате Вы получите таблицу значений с содержимым временной таблицы!
Спасибо за уделенное время и внимание моей статье!
Надеюсь, она Вам пришлась по душе и хоть чему-то да научила) Если статья оказалась полезной, не забываем плюсовать её)