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

17.01.19

Задачи пользователя - Корректировка данных

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

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, то не стоит сильно печалиться)

Можно реализовать альтернативный вариант в своей конфигурации.

Для этого необходимо в общем модуле создать следующую процедуру:


Функция СодержимоеВременнойТаблицы(МенеджерВременныхТаблиц, ИмяВременнойТаблицы) Экспорт 
	
	Запрос = Новый Запрос; 	
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Запрос.Текст = "ВЫБРАТЬ * ИЗ " + ИмяВременнойТаблицы; 
	
	Возврат Запрос.Выполнить().Выгрузить(); 
	
КонецФункции

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

Например, если общий модуль, в котором Вы прописали функцию СодержимоеВременнойТаблицы, называется Расчеты, переменная с менеджером временных таблиц - МенеджерВТ, а имя временной таблицы - ВТ_Сотрудники, то необходимо прописать следующее выражение:

Расчеты.СодержимоеВременнойТаблицы (МенеджерВТ, "ВТ_Сотрудники")

Либо если менеджер временных таблиц установлен для запроса с именем Запрос:

Расчеты.СодержимоеВременнойТаблицы (Запрос.МенеджерВременныхТаблиц, "ВТ_Сотрудники")

В результате Вы получите таблицу значений с содержимым временной таблицы!

 

 

Спасибо за уделенное время и внимание моей статье!

 Надеюсь, она Вам пришлась по душе и хоть чему-то да научила) Если статья оказалась полезной, не забываем плюсовать её)

См. также

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    32671    106    152    

73

SALE! 20%

Корректировка данных Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 2880 руб.

10.02.2017    110503    662    174    

702

Закрытие периода Корректировка данных Бухгалтер Пользователь Платформа 1С v8.3 Оперативный учет 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

4800 руб.

27.10.2021    23918    241    35    

78

Корректировка данных Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет НДС Платные (руб)

Обработка предназначена для корректировки входящего НДС при смене системы налогообложения индивидуального предпринимателя с УСН на ОСНО в 1С:Бухгалтерия предприятия 3.0

4000 руб.

18.07.2024    688    1    0    

1

Корректировка данных Зарплата Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Внешняя обработка предназначена для исправления самых различных ошибок, возникших по самым разным причинам. Общее проявление этих ошибок видно в различии данных между: проводками и различными отчетами по НДФЛ, заполнении ведомостей на выдачу зарплаты, неверным расчетом НДФЛ при начислении ЗП и т.д.

3600 руб.

09.02.2024    1680    11    5    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gradi 5 17.01.19 13:34 Сейчас в теме
Спасибо. Действительно полезные советы.
Sergik_D; PoZiTiFFF; +2 Ответить
12. PoZiTiFFF 927 17.01.19 22:19 Сейчас в теме
(1)Рад, что статья оказалась полезной и помогла кому-то заполнить пробелы в знаниях.
2. FesenkoA 58 17.01.19 14:00 Сейчас в теме
ВыполнитьПакетСПромежуточнымиДанными()


Платформа
Платформа 1С v8.x (все механизмы)


напишите для каких платформ актуальны эти механизмы. Первый например тянется ее с 8.2, второй не помню, а последний на 8.3.9
PoZiTiFFF; +1 Ответить
15. PoZiTiFFF 927 18.01.19 00:35 Сейчас в теме
(2) Возможность работы с Таблицами менеджера временных таблиц и метод ВыполнитьПакетСПромежуточнымиДанными() появились в версии платформы 8.3.8
Возможность динамически переопределять значения переменных - с версии 8.3.7

Добавил эту информацию в статью. Более того, прописал как с помощью функции общего модуля можно получать содержимое временных таблиц в версиях платформы младше версии 8.3.8.
3. VictorRGB2 14 17.01.19 14:10 Сейчас в теме
рекомендую очень осторожно пользоваться советом №2 и не применять его (или стараться свести к минимуму) в рабочей базе, т.к. в некоторых случаях измененное значение замечательно присваивается объекту не только в режиме отладки, но и остается измененным после, что может привести к непредсказуемым последствиям.
user1572509; Neuroproton; user717534; nvv1970; +4 5 Ответить
14. PoZiTiFFF 927 18.01.19 00:10 Сейчас в теме
(3)Согласен. Но мне кажется в конфигураторе рабочей базы вообще всегда надо быть осторожным и не совершать непонятных или неосмысленных действий.
Тем более меняя какие-то значения в системе, мы фактически нарушаем реализованный, прописанный в системе алгоритм, заложенную логику. Так что действительно - пользоваться можно, но осторожно) С умом.
16. tormozit 7229 18.01.19 00:54 Сейчас в теме
(3) Инспектор объектов отладчика не копирует объекты (работает с оригиналами). Поэтому все изменения свойств объектов сразу применяются. Поэтому некорректно писать "в некоторых случаях" (правильнее будет написать "всегда").
18. VictorRGB2 14 18.01.19 09:20 Сейчас в теме
(16) я имел в виду случай, когда человек забыл вернуть обратно исходное значение, но да, вы правы, выразился не точно
51. пользователь 05.03.19 11:01
Сообщение было скрыто модератором.
...
4. login1020 138 17.01.19 14:43 Сейчас в теме
По поводу просмотра временных таблиц уже была статья
https://infostart.ru/public/822287/
Там много что дельного в комментариях по этому поводу:

Обращение по индексу временной таблицы

Запрос.МенеджерВременныхТаблиц.Таблицы[Индекс].ПолучитьДанные().Выгрузить()


Обращение по имени временной таблицы

Запрос.МенеджерВременныхТаблиц.Таблицы.Найти(<Имя временной таблицы>).ПолучитьДанные().Выгрузить() 


Отладочная функция

Функция ПросмотрВТ(Запрос, ИмяВременнойТаблицы) Экспорт

 ЗапросТМП = Новый Запрос("ВЫБРАТЬ * ИЗ " + ИмяВременнойТаблицы);
 ЗапросТМП.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
 Возврат ЗапросТМП.Выполнить().Выгрузить();

КонецФункции
wowik; RustIG; Vladimir Litvinenko; +3 Ответить
5. Vladimir Litvinenko 2896 17.01.19 15:12 Сейчас в теме
Строку кода, вызвавшую исключение, можно увидеть в журнале регистрации. Предложенный способ поможет в случае, если нет доступа к журналу регистрации (например он отключен) или если ошибка воспроизводится на компьютере, где установлен толстый клиент и можно сразу зайти в конфигуратор.

Порекомендую еще очень хорошее видео по этой же теме. Много интересных приёмов продемонстрировано :
https://www.youtube.com/watch?v=y098oG9XT98
Yashazz; wowik; tommadm; RustIG; jif; genayo; +6 Ответить
26. herfis 513 18.01.19 14:52 Сейчас в теме
(5)
Строку кода, вызвавшую исключение, можно увидеть в журнале регистрации.

Не всегда, к сожалению. Правда, не уверен что в этих случаях спасут и предложенные методы. Буду посмотреть.
6. SerVer1C 815 17.01.19 15:39 Сейчас в теме
Вы уверены, что 1с-хак №1 сработает при выключенной отладке на сервере ?
8. Darklight 33 17.01.19 16:01 Сейчас в теме
(6)Да, никаких проблем быть не должно. Данный пункт управляет только отладкой на клиенте!
PoZiTiFFF; +1 Ответить
7. bonv 1560 17.01.19 15:55 Сейчас в теме
(0) По п.1
Просто идем в "О программе..." и далее "Информация для техподдержки", там и будет подробная информация об исключении
Andreyyy; myoker; Uncore; disa_da; markers; vit00lya; Zergil; +7 Ответить
17. PoZiTiFFF 927 18.01.19 09:10 Сейчас в теме
(7) bonv, спасибо за предложенный вариант. Добавил информацию в статью.
9. Darklight 33 17.01.19 16:18 Сейчас в теме
Эх.... ждать нам встроенную в платформу фичу для быстрого обращения в тех поддержку - видимо вечно :-( А всего-то надо было сделать у корня конфигурации доп. свойство "ФормаОбращенияПоТехподдержку" и встроить в окно с системной ошибкой кнопку - "Техподдежка", открывающую данную форму (которая будет назначена в конфигурации для этих целей) и передающая туда объект ИнформацияОбОшибке.

Конечно, в идеале, ещё и значение, на котором возникла ошибка (например при попытке вызвать метод у переменной примитивного типа), и значения объекта контекста, в котором произошла ошибка (например ЭтотОбъект - значение типа "ФормаКлиентскогоПриложения", а ещё ДополнительныеСвойстваОтладки - которые программист может заранее задать для некоторого контекста выполнения - поместив туда всё что угодно); а ещё круто было бы - если бы туда ещё и автоскриншот окна приложения передавался.
Ну это в идеале.

Всё - а далее уже конфигурация пусть сама определяет такую форму и её функционал (ну, опять-таки, в идеале, хорошо бы чтобы и в платформу была встроена хоть-примитивная форма обращения в техподдержку - позволяющая направить сериализованне вышеупомянутые данные (+ номер сеанса и имя пользователя, строку соединения ИБ и дату события) на указанный e-mail адрес, и сохраняющая их в Ж/Р для анализа; а ещё можно преднастроить для ней web-сервис, который она может взывать и передавать данные туда; но это так для галочки - тут, конечно, надо в конфигурации свою форму делать под себя; ну в типовых тоже должна быть своя форма - чтобы и во Фреше ей удобно можно было пользоваться, и самостоятельным компаниям с нетребовательной техподдержкой тоже её использовать для своего информирования).

Вот это было бы круто! А главное - плёвое дело то, такой функционал замутить-то, разработчикам платформы (и далее разработчикам конфигураций). Но в компании 1С не всё для людей.... тем более для программистов делается! :-(
dabu-dabu; Denium79; Dimasik2007; mivari; PoZiTiFFF; +5 Ответить
20. RustIG 1747 18.01.19 10:55 Сейчас в теме
(9) а если ошибка в собственных доработках возникнет? то есть не в типовом функционале.
а если ошибка не в алгоритмах, а кривых данных?
я думаю, разработчики типовых решений и платформы защитили себя от подобного спама, просто не реализовав вашу идею. ;)
22. Darklight 33 18.01.19 13:34 Сейчас в теме
(20)Не понимаю сути претензий! Причём здесь собственные алгоритмы и защита разработчиков 1С?

Я говорю об универсальном решении обращения в техподдержку. А уж кто оказывает её - такому решению должно быть побарабану - что будет настроено туда и будет отправлять! Я даже предложил так, чтобы в самих конфигурациях можно было бы (и нужно было бы) свою форму для обращения в техподдержку подключать (где уже можно было реализовать любые "извращения"; кстати, как вариант - иметь возмоджность переопределить форму из конфигурации, формой из внешней обработки - но это уже тонкости конфигурирования самой формы, а не платформы). А платформенная форма - просто могла бы брать данные настроек из общего ХранилищаНастроек чтобы определить e-mail адрес по умолчанию (куда отправлять, которые пользователь мог бы изменить), параметры доступа к почтовому аккаунту для отправки (или, как альтернативный, вариант создавать письмо через почтовый клиент ОС по умолчанию), web-сервис для передачи данных в специальное автоматзированное ПО (любое это к решению не относится), и телефон техподдержки. Это всё (или часть) можно было бы указать при настройке ИБ (да ещё и с разделителями данных - для фреша): получателем будет либо своя IT-служба, либо поддержка франча (в т.ч. бухофон, или как он там сейчас называется), либо поддержка сопровождения фреш-решения в облаке. Но никак не сама компания 1С. Туда уже информация об ошибке может быть переслана вышеуказанными получателями(службами), по существующие и сейчас схеме обращения регистрации ошибок платформы
user717534; omut; Denium79; dock; PoZiTiFFF; +5 Ответить
24. RustIG 1747 18.01.19 14:18 Сейчас в теме
25. Darklight 33 18.01.19 14:52 Сейчас в теме
(24)Ну, надеюсь теперь ещё и с лучшим пониманием того, чего мне так хочется ;-) а хочется мне чтобы этого хотелось подавляющему числу пользователей платформы 1С Предприятие 8, и уж тем более хотелось её архитекторам!
10. Ibrogim 1327 17.01.19 16:29 Сейчас в теме
(0) Красавчик !
Andreyyy; jif; PoZiTiFFF; +3 Ответить
11. Synoecium 785 17.01.19 18:45 Сейчас в теме
Новым для меня оказалась только настройка разрешения отладки для вывода подробностей об ошибке, раньше отладку в конфигураторе запускал, теперь буду знать. Спасибо за подсказку.
iksanow1988; igee12; PoZiTiFFF; +3 Ответить
13. PoZiTiFFF 927 18.01.19 00:04 Сейчас в теме
(11) Собственно главный акцент в статье и был сделан на эту часть. Это видно и по заголовку) Изначально даже планировалось и статью написать только на эту тему, но уже в процессе решил добавить описание еще двух довольно часто используемых мною весьма ценных плюшек, о которых многие всё-таки не знают.
19. RustIG 1747 18.01.19 10:52 Сейчас в теме
зачастую пользователи клиента звонят, говорят об ошибке, при подключении ошибка не воспроизводится. теперь можно просить их высылать информацию для технической поддержки из окна "О программе". Испытаю данный способ! Возьму на вооружение.
PoZiTiFFF; +1 Ответить
21. androgin 18.01.19 12:56 Сейчас в теме
С чего вдруг после нового года стали постить подобное?
Уже третья статья с "лайфхаками" ))))
Если автор не умеет пользоваться отладчиком или не в курсе как запускать сеанс с отладкой (а 1С этому учит и полно этого в сети), то наверно автору нужно еще поучиться самому
23. echo77 1906 18.01.19 14:08 Сейчас в теме
(21) Статьи заостряют внимание других участниках сообщества на теме. Кто-то уже знает. Кому-то эта информация попадется на глаза и будет полезна.
Jestery; Torin57; Pete; PoZiTiFFF; +4 Ответить
27. AlX0id 18.01.19 15:26 Сейчас в теме
(21)
Надо пойти запостить лафх*йак - как посмотреть, какой код выполняется при открытии формы %) чую, нарублю звезд выше крыши
Yashazz; androgin; +2 1 Ответить
28. PoZiTiFFF 927 18.01.19 20:44 Сейчас в теме
(21)

Если автор не умеет пользоваться отладчиком или не в курсе как запускать сеанс с отладкой (а 1С этому учит и полно этого в сети), то наверно автору нужно еще поучиться самому


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

Статья учит как получить моментально полную информацию об ошибке от пользователей без запуска конфигуратора, без обращения к журналу регистрации. И это в некоторых случаях действительно очень помогает.
Иногда лучше промолчать, чем сказать глупость.
makcbol1; Pete; +2 Ответить
29. androgin 19.01.19 01:24 Сейчас в теме
(28) Именно читал. Статья для "первоклашек"!
Обычный программист без опыта и то должен уметь находить ошибки и знать как их получать на клиенте и в отладчике конфигуратора.
Это в принципе его работа!
Ну и можешь минусовать сколько влезет - я не ведусь на поведение обиженных девочек в песочнице
30. PoZiTiFFF 927 19.01.19 05:04 Сейчас в теме
(29)
Обычный программист без опыта и то должен уметь находить ошибки и знать как их получать на клиенте и в отладчике конфигуратора.
Это в принципе его работа!

Программист - это человек, способный писать программы для решения различных задач.
Уметь находить ошибки - это не далеко его работа в принципе.
Если это в принципе Ваша работа, как программиста, то мне Вас искренне жаль)

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

Ну и про девочек в песочнице Вы тоже я смотрю всем пишите?)
Настолько небогатый словарный запас? Ну придумайте на досуге еще хоть что-нибудь поинтереснее.

Больше вести с Вами диалог не вижу смысла, в связи с чем дальнейшие Ваши сообщения буду игнорировать. Удачи!
makcbol1; user717534; klinval; Torin57; MRAK; Pete; tommadm; +7 Ответить
36. Torin57 7 24.01.19 13:59 Сейчас в теме
(29) Я тоже так раньше думал. Жизнь заставляет пересмотреть свои взгляды. Да, можно подходить к обучению со всей серьезностью, копаться в документации, читать описание изменений к платформе, пойти на очные курсы по 1С в Учебном центре №1. Это малоэффективно. Чтение таких статей для "чайников" - самый эффективный путь обучения для новичка. Проблема в том что без практики теория не дает должного понимания. Статья небольшая, ее можно применить на практике. Как раз то что нужно.
user717534; PoZiTiFFF; +2 Ответить
31. PerlAmutor 155 19.01.19 15:51 Сейчас в теме
Плохо, что в платформе нет расширенной ошибки с некоторым уровнем вложенности стека. Вот что мне дает информация о том, что ошибка возникла в общем модуле БСП на строке номер такая-то и функция ЗначениеРеквизитаОбъекта() ? Да эта функция вызывается из огромного числа мест, мне важно знать кто её вызвал, а не то, что она не справилась с поставленной задачей по причине косячного значения переданного параметра.
33. Darklight 33 21.01.19 10:34 Сейчас в теме
(31)Согласен, данного функционала тоже не хватает!
45. Synoecium 785 01.03.19 20:07 Сейчас в теме
(31) так это, в конфигураторе есть такая функция отладки, стек вызовов называется. Не пробовали её?
47. PerlAmutor 155 03.03.19 16:23 Сейчас в теме
(45) Пробовал и активно использую. Я говорю об ошибках пользователей и тех ошибках, которые пишутся в ЖР Обычные пользователи под отладчиками не сидят, а чтобы угадать чего они там такого нажали надо быть победителем шоу битвы экстрасенсов и обладателем синей пятерни.
48. Synoecium 785 03.03.19 16:26 Сейчас в теме
(47) тогда я видимо неправильно вас понял, извиняюсь. Имеете в виду что-то вроде слепка стека вызовов в момент возникновения ошибки, который бы сохранялся в ЖР?
49. PerlAmutor 155 03.03.19 20:12 Сейчас в теме
(48) В момент возникновения исключения брать хотя бы 3 уровня стека вызова (напр. форма документа, общий модуль, общий модуль БСП). Скорее всего это затруднительно реализовать сохранив скорость работы рабочих процессов, так как на уровне C++ придется завести массив, в который перед каждым вызовом процедуры/функции/метода системы писать информацию о том откуда был произведен вызов. Но, например, при включенном режиме отладки (ключ -debug), такое сделать, наверное, можно было бы. Можно к этому ключу добавить параметр уровня отладки (0 - по умолчанию, стандартный режим, 1 - расширенный, 2 - экспертный и т.д.), тогда ключ мог бы задаваться как "-debug 1", "-debug 2", "-debug 3"
52. logos 214 05.03.19 13:31 Сейчас в теме
(49) Возможно пригодится:
В конструкции попытка-исключении можно использовать конструкцию "ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());"
В ней собирается стек ошибки.
53. PerlAmutor 155 05.03.19 20:26 Сейчас в теме
(52) Может и пригодится, но в попытку/исключения всю конфигурацию не завернешь.
32. fzt 21.01.19 04:48 Сейчас в теме
2) Переопределение значений переменных, свойств объектов, параметров прямо во время отладки.

Мне удобней так (сразу оговоримся что я работаю почти 100% времени с переписанными конфигами).
Где-то в общем модуле создать функцию типа:
Функция П(А,Б) Экспорт
А = Б;
Возврат А;
КонецФункции;

В модуле допустим "О" - Отладочный

Тогда изменение значений можно делать быстрее, быстро набрал в строке
О.П(Отказ,Ложь)
и вся недолга.

Набрать проще сразу в редакторе кода и нажать Shift +F9, если строка окажется годной то она там и останется, после отладки убрать вызовы или regexp`ом заменить. Если объект не снят с поддержки то сперва Shift+F9 потом замена по рассчитать.
Действительно быстрее и никаких лишних телодвижений, только горячие клавиши и никакой мышки.

Ещё насколько помню отладчик не даст присвоить значение какой-то функции, а П() запросто.
PoZiTiFFF; +1 Ответить
34. Danilov 22.01.19 05:26 Сейчас в теме
Спасибо. Полезные советы.
PoZiTiFFF; +1 Ответить
35. Arikite 23.01.19 19:59 Сейчас в теме
Большое спасибо!
Полезная статья
PoZiTiFFF; +1 Ответить
37. user_2010 952 24.01.19 14:12 Сейчас в теме
Спасибо, что поделились сокровенными знаниями! :) Полезно очень!
PoZiTiFFF; +1 Ответить
38. AndreyKnife 4 24.01.19 20:28 Сейчас в теме
Полезная статья, добавил себе. Спасибо)
PoZiTiFFF; +1 Ответить
39. w.r. 650 28.02.19 09:14 Сейчас в теме
В управляемых формах есть аналог "Вычислить выражение..."?
40. Darklight 33 28.02.19 09:29 Сейчас в теме
(39)Вопрос не ясен. Функция "Вычислить" доступна в тонком клиенте.
41. w.r. 650 28.02.19 09:31 Сейчас в теме
(40) меня интересует вопрос - есть ли в режиме предприятия штатные механизмы, аналоличные тому, что описал автор. Про свой велосипед я знаю
42. Darklight 33 28.02.19 09:36 Сейчас в теме
(41)Нет, в управляемом приложении в режиме 1С Предприятие такого механизма нет. В неуправляемом - есть "Табло" но его функционал сильно ограничен. Но самостоятельно вполне можно сделать такой инструмент и встроить его в конфигурацию, чтобы он был доступен в режиме 1С Предприятие (на любых формах) и мало отличался от штатного.
43. w.r. 650 28.02.19 09:45 Сейчас в теме
(42) жалко, что нет. Было бы полезно
44. Darklight 33 28.02.19 09:48 Сейчас в теме
(43)Вот поэтому, тут уже выложили самописки:

https://infostart.ru/public/933372/
https://infostart.ru/public/78098/
https://infostart.ru/public/15862/

Если поискать - может ещё найдутся другие похожие решения
46. cartograph 02.03.19 11:41 Сейчас в теме
50. mvk4d 04.03.19 08:44 Сейчас в теме
(0) Еще можно прописать в параметрах запуска /debug -tcp или -http, чтобы сразу устанавливался режим разрешения отладки при запуске в режиме 1С предприятия и была кнопка "Подробно". Так еще удобней, нежели рассказывать каждый раз пользователям, как вытянуть информацию для технической поддержки.
r.zdorkin; a_n_d_rey; +2 Ответить
54. user1038344 17.01.20 14:25 Сейчас в теме
55. Yashazz 4790 26.07.21 16:54 Сейчас в теме
Если честно, я охреневаю. Такая колоссальная куча плюсов за то, что, в принципе, уже к экзамену по "Профессионалу" надо знать назубок и активно применять. Лайфхак, ага. Следующим, как выше верно заметили, будет "лайфхак" о том, как выгрузить список баз из окошечка запуска 1С в отдельный файлик. Круть несусветная.

А вообще, с появлением новой механики обработки ошибок, половина стонов и страданий из этой темы становится неактуальна.
56. TimofeySin 173 14.02.23 11:35 Сейчас в теме
Иногда пользуюсь хитростью, чтоб остановить выполнение кода во время отладки. (например запустил создание элементов справочника и понял, что создаются не правильно).
На точке остановке присваиваешь какой-нибудь переменной не правильный тип, что-то вроде:
НовыеЭлемент.ВидНоменклатуры = КакойТоВид;
Присваиваешь КакойТоВид=""
И у тебя выполнение вылетает с ошибкой.
Оставьте свое сообщение