Решение детективных задач

25.08.21

Архитектура

Пробуем систематизировать методы решения детективных задач

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

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

Сначала я расстраивался из-за того, что нельзя применить отладку. Злился, но решал задачи без неё. Потом появился интерес – это ведь что-то типа квеста, игра такая, с искусственными ограничениями. Чем дальше, тем больше меня увлекали такие задачи. Я их даже, можно сказать, полюбил.

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

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

Прокачка навыка

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

Я не пытаюсь сказать, что искать ответы в интернете – плохо. Оценка зависит от цели. Если цель – решить задачу, то гуглить – нормально. Если цель – решить задачу и прокачаться, то интернет всё испортит.

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

Исключение

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

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

Если же вы нашли прям ответ на свой вопрос, то что ж… Детектива не будет. Зато клиенту быстро поможете.

Отладочное расширение

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

Но не всегда достаточно возможностей метода Сообщить – данные могут быть сильно страшные. Тут нужен временный логгер.

Временный логгер

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

Самое первое место для складывания – журнал регистрации. Вместо Сообщить пишем ЗаписьЖурналаРегистрации, придумываем своё имя события, чтобы быстро найти потом, и засовываем туда всё, что плохо лежит.

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

Но журнал регистрации тоже не для всего подходит – например, туда нельзя положить таблицу значений. Поэтому, если время позволяет, можно сделать настоящий временный логгер – что-нибудь типа регистра сведений, в котором будет такая прекрасная вещь, как ХранилищеЗначения. Я обычно создаю регистр со структурой, максимально идентичной журналу регистрации, с добавлением ресурса типа ХЗ – в него уже можно засунуть всё, что душе угодно.

Да, и такой регистр сведений потом проще смотреть – можно написать к нему запрос. И он не будет так тормозить при просмотре, как журнал регистрации. И чистить его проще. И удалить не жалко.

Найди 10 отличий

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

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

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

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

Метод исключения

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

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

Метод половинного деления

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

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

Делим весь отрезок времени пополам. Например, если учёт ведётся с 2011 года, а сейчас – 2021 г., то будут две половинки лет по 5-6. Смотрим расхождения на конец каждой половинки, и быстро понимаем, что на конец 2016 г. расхождений не было – значит, надо искать во второй половинке.

Вторую половинку снова делим пополам. Если расхождение в первой – работаем с ней. И т.д., итерационно. Сколько тут получится итераций? Где-то 10-12 – столько раз надо сформировать отчёт.

Аналогично можно делить всё, что плохо лежит. Например, в нашем «гадком» расширении так можно аккуратно комментировать половину кода, или код половины объектов, и таким образом быстро сужать место поиска.

Допрос

Как в детективах без допроса-то? Иногда одного этого достаточно. Правда, это не всегда возможно, и не каждому нравится с людьми разговаривать – тут уж сами решайте.

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

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

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

Анализ событий

Идём туда, где 1С хранит историю событий – в журнал регистрации и версионирование. Что там смотреть? Что-то связанное с проблемой. Принципиально таких связей две: ссылка и время.

Связь по ссылке понятна – смотрим, что происходило с конкретным документом или документами, связанными с проблемным. Как вариант, можно поиск ссылок сделать – бывает полезно, т.к. прикладные «искалки», вроде структуры подчинённости или связанных документов показывают далеко не всё.

Вторая связь: время. Как в детективах: «что вы делали 5-го числа с 11:00 до 13:00?». Идём в журнал регистрации и смотрим, кто и что делал в указанный промежуток. Особенно пристально смотрим на события, не связанные со стандартной записью данных. Ищем обновления конфигурации БД, долбёж в/из каких-нибудь сервисов, обмены, массовые проведения, подключение/отключение 1Сных сервисов и т.д. Обычно, когда листаешь журнал, что-то обязательно бросится в глаза – какое-то отклонение.

Например, однажды клиент сказал, что «слетело» закрытие месяца в ЕРП с октября. В журнале регистрации нашли, когда сделана запись в журнал заданий закрытия. Фильтранули по периоду, увидели примечательное событие: местный программист вбил логин/пароль интернет-поддержки. Как это могло повлиять?

А легко, это ж ЕРП. Она побежала грузить курсы валют, как раз с октября. Появление курсов спровоцировало необходимость пересчёта курсовых разниц. Ну, дальше понятно.

Сброс

Универсальный метод – вернуть проблемный объект к исходному состоянию. Нужно это для понимания – дело в коде/архитектуре/данных или в каких-то бешеных настройках. Можно сказать, что это – одноитерационная версия метода половинного деления.

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

В формах – аналогично, надо вернуться к стандартной настройке. Не часто, но бывает: пользователь говорит, что форма списка/выбора сильно тормозит. Если тормозит только у него, то тут и к бабке не ходи – сделал себе группировку дин.списка. В отладке при этом вообще ничего не увидишь. Но будет симптом – бешеное количество обращений к серверу.

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

Ну и кеш, разумеется. Куда без него.

Методы тыка

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

Тут важно что: надо не просто тыкать. Надо тыкать по-разному. Цель тыка – понять алгоритм, не видя алгоритма. Меняйте цифры, наполнение табличных частей, даты, режим проведения, текущего пользователя, настройки и т.д. Тогда что-то станет понятно. Или, хотя бы, сузите контекст воспроизведения.

Воспроизведение на типовой

Иногда помогает. Берём демо-базу той же версии, и ручками пробуем воспроизвести проблемную ситуацию. Получается тот же метод половинного деления. Если ситуация воспроизводится, то задача перестаёт быть детективной, и дальше решается отладкой. Если не воспроизводится, то мы понимаем - дело в данных клиента или доработках. Ну или мы криво воспроизвели, но тут уж ничего не поделаешь.

Интуиция

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

Ничем, кроме личного опыта, интуицию не разовьёшь. Поэтому возвращаюсь к исходной рекомендации: решайте детективные задачи своим умом, не пользуйтесь интернетом.

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

См. также

Архитектура решений Программист Платформа 1С v8.3 Бесплатно (free)

В статье расскажу про относительно уникальное явление на рынке. EmplDos - полноценный сервис, который в качестве Backend использует платформу 1С. Речь пойдёт не только о технической и архитектурной стороне вопроса, а ещё и о всех трудностях и граблях, которые пришлось и до сих пор приходится преодолевать на пути к успеху.

14.10.2024    4138    0    comol    28    

28

Кейсы автоматизации Платформа 1С v8.3 1С:Документооборот Бесплатно (free)

Компания «Уралхим» использует 1С:Документооборот не только для хранения и согласования документов, но и для централизованного управления НСИ между 47 системами (не только на 1С); для бэкенда к мобильным приложениям охранников; и в качестве сервиса заказа справок для сотрудников. О деталях реализации нестандартных решений, разработанных в компании «Уралхим» на базе 1С:Документооборот, пойдет речь в статье.

02.08.2024    3557    0    Novattor    1    

16

Кейсы автоматизации Платформа 1С v8.3 Энергетика и ЖКХ Россия Бесплатно (free)

Делимся опытом автоматизации учета башни раздачи воды.

27.12.2023    2229    0    slavik27    7    

15

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

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

11.12.2023    2963    0    Serg_Tangatarov    2    

16

Архитектура решений Программист Бесплатно (free)

Рассмотрим применение архитектурной проверки задач в процессе разработки.

30.10.2023    5700    0    ivanov660    10    

35

Кейсы автоматизации Работа с требованиями Анализ бизнес-процессов Бесплатно (free)

Автоматизировать производственные процессы в 1С:ERP без доработки типовых механизмов очень сложно. А дорабатывать типовые механизмы 1С:ERP не всегда оправданно. Решением может стать технология разработки Рабочих мест, которая позволяет автоматизировать самые сложные участки последовательно – шаг за шагом, процесс за процессом. Расскажем о том, как помочь пользователям вводить большое количество данных, не нарушая порядок ввода и полноту заполнения всех необходимых реквизитов, и как вовлечь сотрудников Заказчика в разработку и тестирование функционала Рабочих мест.

26.10.2023    3013    0    user1754524    15    

17

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

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

29.08.2023    3559    0    ke_almaty    0    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Богатырев Артур 127 25.08.21 10:04 Сейчас в теме
Соответственно, кто решал методом тыка, назывался «консультант» или «аналитик», а владеющий отладкой гордо именовался «программист 1С».

Люблю Ивана за анахронизмы.

кой-то баланс между быстрым результатом и личной прокачкой соблюдать надо.

Иван вполне кратко и доходчиво обьяснил обычные способы поиска ответов на вопросы и решения ошибок.
lunjio; vakham; +2 Ответить
2. Senator_I 201 25.08.21 11:02 Сейчас в теме
Из своего опыта - больше решать приходилось аналитических задач по данным в базе. Точно иногда чувствуешь себя детективом:

- Что делали?
- Ничего!
- А вот это кто сделал?
- Ах да, это мы делали.
user933862; nekit_rdx; charmillion; user605780_L.Alexander8; Jeka44; torbeev; mysm; Krasnyj; rpgshnik; vakham; AleksandrLeshkov; +11 Ответить
3. Octopus 338 25.08.21 11:40 Сейчас в теме
(2) вколи ей сыворотку правды
сурово произнес админ
и мы узнаем что нажала
и почему оно само (с)
user933862; CHSN8; Jeka44; alalsl; shard; mikeA; Ptrv4; Krasnyj; rpgshnik; Yashazz; vakham; aytana; Senator_I; AleksandrLeshkov; +14 Ответить
23. user1534961 25.08.21 19:14 Сейчас в теме
(3) "Ты не одна, какой пассаж..."(с)
4. Aftee 25.08.21 12:10 Сейчас в теме
(2) О это чувство :) расследование определенно стоит того.
Senator_I; +1 Ответить
5. tindir 25.08.21 13:20 Сейчас в теме
"с помощью проходилки" - лови фидошника! =)
6. Igorro82IT 77 25.08.21 13:53 Сейчас в теме
Если цель - разобраться в работе алгоритма - такие детективы полезны и важны для прокачки,
а в случаях когда цель - найти виновного - такие противны - схожи с ковырянием в грязном белье..
nekit_rdx; Albert_2008; lunjio; ElStar; +4 Ответить
7. 1c-intelligence 12852 25.08.21 13:56 Сейчас в теме
(6) так две цели. И виновного нашел, и мышцу прокачал.
8. Stylo 25.08.21 14:20 Сейчас в теме
(7) виновен всегда сам разработчик.
9. &rew 52 25.08.21 14:23 Сейчас в теме
Еще выгрузка в дт потом разворачивание на файловой или на своем серве, кофеек и "ночь. Улица. Фонарь...."
10. 1c-intelligence 12852 25.08.21 14:24 Сейчас в теме
(9) да, но это уже не детектив.
11. Yashazz 4796 25.08.21 14:53 Сейчас в теме
(10) ЖР повис но всё понятно
опять бухгалтер виноват
труп оборотки контур мелом
и крыжики летят на юг
Dnki; user605780_L.Alexander8; &rew; RustIG; СергейК; Krasnyj; +6 Ответить
12. 1c-intelligence 12852 25.08.21 14:59 Сейчас в теме
(11)
Хоть как зови. Хоть детективом,
Придурочный дегенерат.
Должно быть чётко и красиво.
И так, чтоб я - не виноват.
teplova_ok; Dnki; olya1990; user605780_L.Alexander8; CHSN8; СергейК; Krasnyj; +7 Ответить
13. Yashazz 4796 25.08.21 15:03 Сейчас в теме
(12) Я свят и светел, поглядите,
Душой и дебиторкой чист!
А виноват во всём вредитель
Злой саботажник программист!
teplova_ok; Dnki; user605780_L.Alexander8; CHSN8; &rew; vshish; СергейК; Krasnyj; +8 Ответить
14. 1c-intelligence 12852 25.08.21 15:07 Сейчас в теме
(13)
Да ладно, мозги мне не пудри!
Я программистов всех люблю!
А вот тебя - за белы кудри
И в унитазе утоплю!
Dnki; user605780_L.Alexander8; CHSN8; СергейК; +4 Ответить
15. Yashazz 4796 25.08.21 15:12 Сейчас в теме
(14) Кто глуп, безграмотен, нечестен,
Неправедно руководит -
Грядёт во славу НДСа
Вам полный... внешний аудит!

А я во цвете лет и кода
Погибну, штрафами сражён...
Оцените, спустя лишь годы,
Как я всё делал хорошо!
Dnki; user605780_L.Alexander8; CHSN8; &rew; vshish; RustIG; СергейК; +7 Ответить
30. RustIG 1750 29.08.21 08:10 Сейчас в теме
16. &rew 52 25.08.21 15:33 Сейчас в теме
(15)Увы, оценит только кодер
Душой и кодом светл и чист,
Как ты, недавно, свеж и бодр,
Млодой зеленый программист.
18. Yashazz 4796 25.08.21 16:05 Сейчас в теме
(16) Менеджеров головы поникли,
Кадровик застыл над трудовой:
Не дождавшись премии - а фигли? -
Прост, как исключающее "или",
В вечную страну Запросов-в-Цикле
Уходил программер молодой...
user605780_L.Alexander8; &rew; RustIG; shard; Krasnyj; +5 Ответить
17. alexsey777 25.08.21 15:57 Сейчас в теме
Тот самый случай, когда на своей шкуре испытал все перечисленные методы.
И не потому, что в интернете не хотел искать. Просто в интернете ответов не было, а они были нужны.
20. 1c-intelligence 12852 25.08.21 16:43 Сейчас в теме
(17) необходимость + ограничения. Что может быть лучше.
19. NataVic 23 25.08.21 16:39 Сейчас в теме
Я бы добавила еще раздел Логика
21. 1c-intelligence 12852 25.08.21 16:46 Сейчас в теме
(19) эка вы замахнулись...

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

Это у меня в разделе Интуиция.
smit1c; RustIG; Yashazz; +3 Ответить
22. graphbuh 260 25.08.21 18:25 Сейчас в теме
как это ни странно, на склоне лет обнаружил что этому хорошо учат на курсах 1С, наприме уц3,
Программирование в стандартных типовых решениях системы "1С:Предприятие 8". Основные приемы, использование БСП+расширения
24. aleks.public 25.08.21 21:05 Сейчас в теме
Не метод тыка, а эмпирическое познание через воздействие на объект :D
25. cdiamond 236 26.08.21 08:19 Сейчас в теме
Насчёт допроса уточню. Так как в 99.999% случаев виновато "оно само сломалось", то важно сразу же показательно принять версию допрашиваемого и всячески вербально поддерживать его. Если чувствуете у клиента антипатию к айтишникам то можно произнести несколько крепких словечек в адрес программистов (даже если вы сами программист). В этом случае допрашиваемый испытывает облегчение и может выдать много полезной информации. Можно еще попробовать классический метод "злой и добрый следователь" но тут легко перегнуть палку, это уже перебор
26. Yashazz 4796 26.08.21 19:52 Сейчас в теме
(25) Мой шеф в РГС в подобных случаях цитировал Великого Нгуена: "бить по рукам железными палками". Пользователи быстренько проникались.
27. andryandry 100 28.08.21 10:15 Сейчас в теме
боль и страдания причиняемая мэйнфремом 1С юзерам и прогерам сделали его столь популярным. имхо в другой срене он бы не взлетел
28. JohnGalt 58 28.08.21 11:04 Сейчас в теме
Для отладки и поиска источников изменения регистров в процессе проведения например по партиям добавил в общий модуль функцию получения данных регистров по указанным параметрам и отборам. Чтобы была возможность в любой момент понять записаны ли движения или нет и если записаны то все или не все...
29. RustIG 1750 29.08.21 08:02 Сейчас в теме
Все эти проблемы и способы решения - на грани нервного срыва. Да ещё не понятно как оценивать такие задачи? От этого истерия усиливается.
31. RustIG 1750 29.08.21 08:14 Сейчас в теме
Оставьте свое сообщение