Часовой на страже логов

Публикация № 1178723

Разработка - Инструментарий разработчика

При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

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

Меня зовут Крапивин Андрей, некоторые меня знают по статьям на Инфостарте. Одна из самых популярных – это «Не только автоматизация учета», о том, как мы участвовали в соревновании, сражались с шарпистами и питонистами. Нам надо было написать ботов для космических кораблей и отправить их на сражение. Мы написали их на 1С. 

 

 

Вот пример нашего боя, мы тут синие. Очень скоро мы тут потеряем два корабля, потому что они просто куда-то улетят. Самое интересное, что в этом бою мы победим одним кораблем, а во всем соревновании у нас золотая медаль. 

Вопрос – как это отладить? А вот здесь начинается самое интересное. 

  • Здесь нет пошагового выполнения – программа уже пошла;

  • Нет никаких точек останова;

  • Все, что у нас есть – это отладка через «Сообщить». Мы выводим какие-то данные и на основе их решаем, что же делать дальше. 

 

Как собрать информацию об ошибке в продакшен?

 

 

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

Для отладки надо получить удаленный доступ. Если его дадут – хорошо, но недостаточно. Надо еще найти человека, у которого есть пароль от конфигуратора и надеяться, что включена отладка сервера. 

Чтобы этого избежать и быстро решить проблему, нужно собрать максимальное количество информации, а именно:

  • контекст ошибок;

  • сами ошибки;

  • и, желательно, действия пользователя. 

Об этом чуть подробнее.

 

 

Контекст. На самом деле, все просто. Это:

  • платформа;

  • конфигурация, ее версия (чтобы не тратить время, когда ты человека спрашиваешь: «Какая у вас версия конфигурации», а он отвечает: «8.3.13»)

  • идентификатор клиента;

  • идентификатор пользователя базы данных;

  • любые настройки.

 

 

Дальше собираем ошибки. 

  • самое простое – это просто забрать информацию об ошибке;

  • постараться забрать цепочку исключений или стек вызовов;

  • и знать место возникновения ошибки.

 

 

Действия пользователя – выполняемые человеком запросы, любые действия. Про них часто забывают. Их желательно тоже знать, чтобы потом человека не спрашивать: «Что же ты такое нажал?» Он скажет: «Ничего, оно само».

 

Сбор логов

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

 

 

В прошлом году был хороший доклад Кашафутдинова Тимура «Логирование в приложениях», в котором все технические детали, на самом деле, были разобраны. Если кратко, то:

  • Логировать через «Сообщить» – плохая идея, потому что вряд ли пользователь обрадуется, когда ему на каждое действие будет выводиться «портянка» текста.

  • Писать в файл – тоже не очень хорошая идея, особенно если у вас клиент-серверный контекст.

  • Писать в регистр сведений может быть неудачно, потому что у вас могут быть блокировки (также не надо забывать про режим транзакций).

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

  • Идеальный вариант – если у вас есть какой-то внешний веб-сервис, в который вы эти данные можете отправить. Нам повезло, у нас такой был.

 

 

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

Дальше по таймингу или по возникшему исключению контексты объединяются и отправляются в веб-сервис.

 

Примеры сбора логов

 

 

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

 

 

Вот таким образом мы собираем данные по работе с интерфейсом:

  • нажатия любых кнопок;

  • ввод в поля;

  • флажки/переключатели;

  • диалоги выбора файла и т.д.

 

 

На сервере это выглядит вот так. 

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

«Не удалось провести {{ТипДокумента}} №{{Номер}} от {{Дата}}»

Ключевые данные – ТипДокумента, Номер и Дата уходят дополнительным сообщением, чтобы их потом не пришлось разбирать.

 

 

И самое интересное – как мы работаем с исключениями:

  • мы в обязательном порядке их пишем в журнал регистрации, чтобы эти ошибки потом можно было хоть где-то достать;

  • и стараемся собирать целиком стек вызова этого исключения. 

 

Подходы к логированию

 

 

Какие подходы мы используем при ведении логирования?

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

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

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

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

  • И, конечно же, итерации. Вряд ли вы сразу сделаете идеально. Обязательно что-нибудь пойдет не так. Ничего страшного в этом нет.

 

Анализ логов

Данные мы собрали. Теперь займемся их анализом.

 

Clickhouse

 

 

Первая система, которую мы попытались использовать для анализа, это – Clickhouse (достаточно внезапно, наверное). Просто так получилось, что веб-сервис, который мы используем, умел сразу «из коробки» отправлять данные в Clickhouse. 

 

 

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

 

 

Какие у Clickhouse плюсы и минусы?

Основные плюсы:

  • Аналитика – Clickhouse создан для того, чтобы собирать аналитику: мы можем посчитать, сколько у нас клиентов, какие комбинации клавиш они использовали;

  • SQL-подобные запросы – синтаксис там очень похож на SQL с небольшими доработками;

  • Есть возможность связи таблиц – если у нас в эту же систему идут логи веб-сервиса, мы можем соединить две таблицы и узнать всю картину.

Из минусов:

  • Скорость работы. Clickhouse очень неповоротливый, он любит обрабатывать большие данные – вы ему запрос отдали, он его покрутил, выдал в таблицу результат;

  • У него отсутствуют уведомления, как таковые;

  • Достаточно бедная система визуализации данных – это, в основном, таблица результата и еще две-три диаграммы.

Чтобы компенсировать минусы Clickhouse, его можно использовать совместно с сервисом Redash.

 

 

Вот так выглядит Redash:

  • у него очень большой набор диаграмм;

  • а также хороший сервис уведомлений – он интегрируется с Telegram, с почтой и со Slack.

Но, в любом случае, работать в Clickhouse для анализа логов не очень удобно, поэтому мы использовали следующее решение.

 

Elasticsearch

 

 

Это, конечно, же, Elasticsearch.

 

 

Вот так у него выглядит веб-интерфейс Kibana. 

 

 

Какие у него получились плюсы и минусы?

Плюсы:

  • популярность – это, наверное, самый популярный стек для того, чтобы работать с логами;

  • найти по нему документацию, в том числе, русскоязычную, вообще не составляет никаких проблем – есть и статьи на Инфостарте;

  • достаточно простой формат отправки данных.

Из минусов:

  • по крайней мере, в той версии, которую мы пробовали, отсутствуют какие-то уведомления о событиях (в последних версиях, по-моему, в Kibana есть возможность интегрироваться со Slack и с Telegram);

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

  • отсутствует настройка хоть каких-то прав доступа – у всех, у кого есть доступ в Kibana, есть доступ к вашим логам. Возможно, это плохо.

 

Graylog

 

 

Следующий движок, который мы попробовали – это Graylog. Он достаточно молодой, но набирающий популярность.

 

 

Вот такой у него интерфейс. 

 

 

Какие у него плюсы и минусы? 

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

  • у него очень приятный интерфейс, и он сразу же собирает простенькую аналитику. 

  • также у него есть возможность настроить права доступа.

Из минусов:

  • повторные уведомления. Когда вы получаете любую ошибку, которая возникла у пользователя, это хорошо. Но при групповом перепроведении документов вы получите к себе в Telegram поток сообщений. Даже при том, что у Graylog есть возможность сказать, что вы хотите получать сообщения раз в полчаса, не больше – полчаса пройдет, и вы получите оставшуюся порцию сообщений. 

  • он бесплатный до определенного предела. Как только вы отправите в него слишком много данных, он уже будет просить с вас определенную сумму.

Все эти сервисы достаточно хорошие, мы бы, наверное, на этом и остались – аналитики сидели бы в Clickhouse, вертели бы данные, как хотят, а мы бы в Kibana анализировали, что у нас пошло не так. Но мы чуть-чуть поискали, и нашли сервис Sentry.

 

Sentry

 

 

Sentry – это, как раз «Часовой» (или «Страж»). Чем же он так отличается?

 

 

Во-первых, это трекер ошибок, сервис, который заточен именно на обработку ошибок. Вот такой у него веб-интерфейс.

 

 

У него огромная поддержка языков. 1С там, правда, нет, но – когда нас это останавливало?

 

 

И он OpenSource. Вы можете скачать его по ссылке https://github.com/getsentry/sentry и быстро себе поставить. Он написан на Python, соответственно, его можно доработать. 

Также его можно использовать на сайте https://sentry.io/ – можете там зарегистрироваться, чтобы его «потыкать». 

 

Как передать данные в Sentry?

 

 

Как все это работает?

  • первым делом из всего многообразия логов вам нужно выделить только исключения;

  • далее их нужно отправить в какую-нибудь систему, которая их преобразует в требуемый формат (у нас для этого используется 1С);

  • и после этого отправляете их в Sentry.

 

 

Например, вот так. Это – пример обработки сообщения. Надо выделить:

  • ошибку;

  • пользователя, у которого она возникла;

  • и контекст. 

 

 

После этого просто собираете JSON и отправляете его по HTTP.

 

Важные сущности – Event и Issue.
Уведомление об ошибке

 

 

Теперь возникают две важных сущности Sentry.

  • Первая сущность – это Event (событие). То, что мы отправили в Sentry на предыдущем шаге, это будут, как раз, события. Они должны содержать в себе:

    • сообщения;

    • описание исключений;

    • или описание цепочки исключений. 

  • Sentry анализирует эти три параметра и собирает из них задачу (Issue).

Дополнительно можно отправлять данные:

  • о пользователе;

  • платформе, которой он пользуется;

  • добавлять теги;

  • и любые дополнительные данные.

 

 

Вот так выглядит уведомление об ошибке, которое приходит к нам в Slack.

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

Дальше вы можете эти задачи либо разрешать, либо игнорировать. Например, если ошибка возникла один раз, и вы сейчас ничего с этим делать не хотите, вы просто ставите эту задачу на игнорирование, пока она не возникнет еще 10 раз (или у 10 пользователей).

 

Как анализировать ошибки с помощью Sentry?

 

 

Я думаю, проще разобрать на примере простенькой конфигурации. 

У пользователя возникла ошибка. Как эту ошибку можно анализировать с помощью Sentry? Самое простое – создать задачу, куда отправить текст этой ошибки. 

 

 

Задача в Sentry будет выглядеть вот так. 

В строке заголовка мы уже сразу видим дополнительную аналитику – сколько раз и у каких пользователей возникла эта ошибка.

 

 

Смотрим, что еще здесь есть:

  • ниже выводится описание исключения, которое мы собрали из нашего сообщения об ошибке;

  • справа мы видим два графика, как часто эта ошибка вообще появлялась:

    • за последний месяц;

    • и за последние 24 часа. 

 

 

Что еще можно вытянуть из сообщения об ошибке 1С?

Самое простое – это собрать в качестве данных о событии сведения о пользователе и о среде запуска.

 

 

Сведения о пользователе будут выглядеть вот так.

 

 

О среде запуска – вот так.

 

 

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

 

 

Еще очень полезная информация, которая содержится в информации об ошибке – это строка кода. Отправляем ее тоже, получаем такую картину. 

 

 

Те, у кого 8.3.15, могут для исключения вывести в «Информацию об ошибке» полный стек ее возникновения.

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

  • вы вызываете исключение – обработали на верхнем уровне;

  • потом дописываете информацию на всех следующих уровнях;

  • и результат отправляете в Sentry.

 

 

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

 

Работа с issues

 

 

Хорошо, данные мы отправили. Начинаем с ними работать. 

Задачу можно или разрешить, или проигнорировать:

  • Если мы говорим, что ее разрешаем, тут есть дополнительные условия – мы говорим, что решаем ее прямо сейчас или в следующем релизе. Если мы отметим, что решим задачу в следующем релизе, то до этого релиза нам уведомления приходить не будут. Мы говорим: «В этом релизе мы задачу не решаем, решим ее в следующем», и все, нас сервис больше не уведомляет.

  • Можно проигнорировать, если задача не массовая. Зачем решать проблему у одного пользователя? Пусть задача возникнет у 10 тысяч пользователей, тогда, может быть, будет интересно.

 

Почему Sentry?

 

 

Почему же все-таки стоит пользоваться Sentry? 

  • Сервис Sentry, в отличие от всех остальных, дает фокусировку на ошибках. Никто не полезет в логи, пока не возникнет проблема (если вы не занимаетесь аналитикой). 

  • Он позволяет вытянуть максимальный контекст в короткое сообщение. 

  • И у него хорошая оптимизация хранения данных. То есть, он не хранит всю подряд информацию, если произошло повторное событие – он просто стыкует его в одно.

 

 

И почему еще следует пользоваться Sentry?

У них на главной странице сайта есть надпись: «Серьезно, перестаньте надеяться, что пользователи сообщат вам о своих ошибках».

Могу рассказать пример из практики. Был конец рабочего дня, часов 20. Мне в Slack приходит сообщение, что у пользователя ошибка. Конец рабочего дня – я ничего не стал делать, прихожу на следующий день – там у пользователя уже 15 попыток, но информации от него до сих пор нет. Мы нашли менеджера клиента, позвонили ему, он говорит: «У меня все хорошо». В итоге на службу поддержки клиент обратился только через неделю – к этому моменту у него было уже 150 попыток сделать действие.

 

Что нужно сделать?

 

 

Что нужно, чтобы начать этим пользоваться?

  • Начинайте собирать логи:

    • возьмите библиотеку Logos;

    • пишите данные в журнал регистрации;

    • собирайте технологический журнал.

  • Если вы хотите только искать данные, то можете пользоваться:

    • Elastic Search;

    • или Graylog.

  • Если вам нужна аналитика, то тут вам, скорее всего, поможет:

    • Clickhouse;

    • или, например. Graphite.

  • Если вы хотите аккуратно работать с ошибками, тогда подойдут сервисы:

    • Sentry;

    • Rollback;

    • а также у Google есть сервис для работы с ошибками.

 

Материалы

 

Я постарался собрать материалы, какие есть по логированию. Здесь есть и статьи с Инфостарта, и готовые библиотеки:

А это – мои материалы:

 

Вопросы:

  • Расскажи по поводу действий пользователя – они отображается в Sentry, но это же не часть контекста исключения. Каким образом они собираются, показываются?

  • Эти данные у нас собираются во внешний веб-сервис. И есть специальная база 1С, которая следит за потоком именно ошибок в этом веб-сервисе. Причем, данные у нас разделены – в один поток мы пишем ошибки, а во второй поток – все действия пользователя. Как только эта база находит ошибку, она дополнительно подключается ко второму потоку и забирает из него последние 10 событий по ID пользователя. А потом передает эти данные в Sentry.

  • А как получить стек вызовов для исключения?

  • В платформе 8.3.15 в «Информации об ошибке» есть возможность посмотреть целиком стек ее возникновения. Это – места возникновения ошибки с указанием исходной строки кода. Это то же самое, как вы при отладке в конфигураторе ставите точку останова и там есть кнопка «Стек вызовов». Теперь тот же самый стек вызовов можно увидеть в информации об ошибке при возникновении исключения. Это в 8.3.15 «из коробки».

  • Каждое действие пользователя записывается в 1С?

  • Не в 1С, а в отдельный веб-сервис. 1С здесь, наверное, не потянет. Особенно, если писать в журнал регистрации. А если это сторонний веб-сервис, то почему бы и нет. Каждое действие пользователя (нажатие на кнопку, изменение поля ввода, диалог) складывается в специальные стеки, которые по таймауту отправляются в веб-сервис.

  • Ты показывал куски кода, которым все это отправляется в Sentry – это закрытое решение или все это есть в той базе, которая выложена у тебя на GitHub?

  • База интеграции с Sentry выложена на GitHub, можете ее скачать и посмотреть.

 

****************

Данная статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART EVENT 2019. Больше статей можно прочитать здесь.

В 2020 году приглашаем всех принять участие в 7 региональных митапах, а также юбилейной INFOSTART EVENT 2020 в Москве.

Выбрать мероприятие

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. leemuar 13.01.20 20:19 Сейчас в теме
Спасибо за доклад! У вас хороший разбор достоинств и недостатков продуктов, но не описаны недостатки Sentry.

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

Graylog бесплатен, и также имеет открытый код: https://github.com/Graylog2/graylog2-server. Вы можете его скачивать и разворачивать и использовать на своих серверах без ограничений. Платным по желанию могут быть 2 вещи:
- Enterprise лицензия, дающая некоторые _дополнительные_ плюшки такие как например поддержка и доп аналитические механизмы
- хостинг сервера Graylog разработчиками. Вы избавляетесь от необходимости администрирования и поддержки серверов за некоторую плату

Здесь подробно объясняется, какие доп плюшки дает Enterprise: https://www.graylog.org/products/open-source-vs-enterprise.
Enterprise лицензия необязательна, ею можно пользоваться бесплатно с ограничением не более 5Гб логов в день


Теперь давайте посмотрим на Sentry: https://sentry.io/pricing/
Бесплатная лицензия - ограничение не более 5000 ошибок в месяц, тоже "бесплатно до определенного предела". И предназначена она только для разработки, ее нельзя использовать в готовых коммерческих продуктах. Далее в зависимости от количества логируемых ошибок от 30 до 900 долларов в месяц.

Ну и конечно, как и в случае с Graylog - это цены на хостинг сервиса сторонними людьми. Sentry тоже можно скачать и бесплатно использовать на своих серверах совершенно легально.
JohnyDeath; Алексей_mir2mb; +2 Ответить
4. Scorpion4eg 324 15.01.20 07:54 Сейчас в теме
(1)
но не описаны недостатки Sentry.


Ну и если говорить о недостатках - 1с совсем не Flask, где Sentry интегрируется в 3 строчки. Это долгий и кропотливый процесс. Сначала правильно собрать логи, потом обработать их и отправить.
Но теперь в 8.3.17 эту проблему решить будет проще. На сколько я понимаю будет единая точка обработки всех исключений + стек исключений из 8.3.15. Останется только дополнить сообщение сведения о пользователя или прочей доп. информацией.
Krio2; JohnyDeath; maxx; leemuar; Алексей_mir2mb; +5 Ответить
2. leemuar 13.01.20 20:39 Сейчас в теме
"Из минусов Graylog: повторные уведомления. Когда вы получаете любую ошибку, которая возникла у пользователя, это хорошо. Но при групповом перепроведении документов вы получите к себе в Telegram поток сообщений"

Опять же, при всем уважении - это не минус, вы видимо не до конца разобрались со всеми опциями алертов и настроили алерты на каждое сообщение об ошибке. Aggregation Condition и существующие на маркете Aggregation плагины для алертов вы пробовали?
3. Scorpion4eg 324 14.01.20 07:53 Сейчас в теме
(2) Я очень рад увидеть от вас комментарий! Честно.
Было интересно до доклада пообщаться о логировании.
Да Sentry платный если ошибок больше чем 5000. Но если его использовать в облаке. Я его использую в облаке для навыков Алисы, например.
Если его использовать standalone - бесплатный, кроме допплюшек в виде всяких дашбордов. В этом и было отличие от Graylog - нет никаких 5 гб в сутки.

На счет Aggregation Condition - пробовал. К сожалению, мне не зашло. Именно из-за того, что надо настраивать. В Sentry отправил трейс - если трейс совпадает это одна и та же ошибка.

Я люблю Graylog за само логирование, мне он показался удобнее той же Kibana.
5. maxx 920 15.01.20 12:58 Сейчас в теме
А как логируются действия пользователя по опыту?

Например, у меня большая часть пользователей работает в документе "Заказ покупателя", "Реализация товаров". Ошибки возникают при заполнении данных на форме документов, печатных формах, проведении документа.

Как всё это залогировать? Если в модулях формы, модулях объектах, общих модулях на каждое действие - то это же будет АД потом обновлять на следующий релиз?
6. Scorpion4eg 324 17.01.20 10:55 Сейчас в теме
(5)
А как логируются действия пользователя по опыту


Как это не печально - придется идти на компромисс.

Если нужны действия пользователя - то да, менять форму: попробовать через расширение.
Или, как вариант, делать дамп документа при ошибке.
7. artbear 1206 23.07.20 21:00 Сейчас в теме
(0)
Пользователь запускает приложение, формируется два контекста – клиентский и серверный. Причем, это – стеки сообщений, чтобы не отправлять каждое сообщение, а отправлять их пачками.

Дальше по таймингу или по возникшему исключению контексты объединяются и отправляются в веб-сервис.


Поделись, как это работает более детально.
- Что за тайминг?
- как клиентские данные отправляются?
- фактически у вас некий общий перехватчик исключений верхнего уровня, и при попадании в его блок Исключения генерится отправка в веб-сервис
8. Scorpion4eg 324 24.07.20 16:33 Сейчас в теме
(7) Запускается приложение - подключается обработчик ожидания. Он отправляет накопленные данные раз в 2-3 минуты.

На счет перехватчика. Большая часть клиентских вызовов, в основном кнопки, выполняются в Попытка/Исключение. В исключении обрабатывается стек вызова, добавляется необходимая техническая информация и отправляется в Sentry
Оставьте свое сообщение

См. также

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    3654    comol    21    

Переезд kuzkov.info на Mantis. 1. Установка в облаке

Управление проектом Управление задачами Облачные сервисы, хостинг Групповая разработка Прочие инструменты разработчика Бесплатно (free)

Первая часть учебника по задачнице мантис (mantis), написанная по мотивам переезда kuzkov.info с жиры (jira). В учебнике достаточно подробно и с картинками описана развертка и начальная настройка мантиса в облачном веб-размещении. Также описаны причины переезда на мантис, дано краткое сравнение двух задачниц и общие выводы после переезда (открывашка: jira выключена и забыта).

20.01.2021    265    Steelvan    11    

Как сделать плагин для 1С:EDT для начинающего Java+1C разработчика. Часть 4

EDT Бесплатно (free)

Сборка репозитория P2 на основе исходников плагина 1С:EDT для поставки пользователям.

27.12.2020    354    marmyshev    0    

Как сделать плагин для 1С:EDT для начинающего Java+1C разработчика. Часть 3

EDT Бесплатно (free)

Описание процесса создания UI-плагина для EDT с Quick-Fix по проверке.

08.11.2020    543    marmyshev    0    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    38219    unichkin    74    

Как сделать плагин для 1С:EDT для начинающего Java+1C разработчика. Часть 2

EDT Бесплатно (free)

Описание процесса создания плагина для EDT по валидации с квикфиксом.

07.11.2020    1150    marmyshev    1    

Как сделать плагин для 1С:EDT для начинающего Java+1C разработчика. Часть 1

EDT Бесплатно (free)

Введение в разработку плагинов для 1С:EDT. Цель: показать, что плагины для 1С:EDT можно делать быстро и легко.

17.10.2020    3268    marmyshev    24    

«Варп-двигатель» для «среза последних»

Практика программирования Бесплатно (free)

Решение, позволяющее получить данные, аналогичные "срезу последних" на два порядка быстрее.

10.08.2020    3126    hobi    45    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    31669    tormozit    104    

Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

29.06.2020    10405    WildHare    33    

Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

22.06.2020    10997    WildHare    23    

Не спеша, эффективно и правильно – путь разработки. Часть 1. Парадигма

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

15.06.2020    16395    WildHare    34    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    78982    tormozit    131    

JSON в запросах DaJet QL

Практика программирования Бесплатно (free)

Практические примеры работы с JSON непосредственно в языке запросов. Перенос курсов валют между УТ и БП. Требуется SQL Server 2016 и выше.

24.04.2020    4018    zhichkin    6    

Визионное программирование

Практика программирования Бесплатно (free)

Новый способ программирования и его практическая демонстрация.

22.04.2020    4720    mkalimulin    111    

Установка EDT 2020.2 на Ubuntu 18.04

EDT Россия Бесплатно (free)

Установка EDT 2020.2 на Ubuntu 18.04 Заметки на будущее.

12.04.2020    3067    awk    14    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    49663    tormozit    48    

Использование машинного обучения для решения инцидентов. Практическое применение

Практика программирования Бесплатно (free)

Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

25.02.2020    4447    Repich    9    

Технология разветвлённой разработки, использующая git, ci/cd

CI/CD Git (GitHub, GitLab, BitBucket) Методология управления разработкой EDT 1С:Франчайзи, автоматизация бизнеса Россия Бесплатно (free)

Адаптация и расширение требований к разветвлённой разработке с использованием git и ci/cd, основанное на стандартах 1С

24.02.2020    6417    check2    10    

CI/CD для 1С проектов, унифицировано, с кастомизацией

CI/CD Инструментарий разработчика Бесплатно (free)

Тема CI/CD в связке с 1С не нова, но многих пугает сложность использования и поддержки, необходимость обучения команды. Про то, как унифицировать и упростить поддержку сборочных конвейеров для большого количества решений, в своем докладе на конференции Infostart Event 2019 Inception рассказал начальник отдела компании BIA-Technologies Валерий Максимов.

20.02.2020    6835    theshadowco    12    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    46241    tormozit    74    

О синхронизации ИБ с проектом в EDT

EDT Бесплатно (free)

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

19.02.2020    4173    check2    2    

Использование машинного обучения для решения инцидентов

Практика программирования Бесплатно (free)

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

18.02.2020    7175    Repich    17    

Атака сервера кнопонажималкой

Нагрузочное тестирование Инструментарий разработчика Бесплатно (free)

Чтобы убедиться, что продукт выдержит планируемую нагрузку, необходимо провести нагрузочное тестирование – написать сценарии пользовательских действий и запустить их в несколько потоков, чтобы заранее найти проблемы в бизнес-логике и «узкие места». О том, как упростить написание сценариев тестирования для конфигурации Тест-центр с помощью фреймворка Vanessa Automation на конференции Infostart Event 2019 Inception рассказал ведущий программист компании «ПервыйБИТ» Никита Грызлов.

20.01.2020    6387    nixel    22    

Развитие 1С программиста Промо

Практика программирования Личная эффективность Бесплатно (free)

Делюсь своим опытом и видением развития 1С программиста.

17.10.2018    22223    pashamak    63    

Как управлять качеством кода 1С, используя платформу SonarQube

Рефакторинг и качество кода Инструментарий разработчика Бесплатно (free)

При быстром росте функциональности проводить визуальный Code-Review для обнаружения некачественного кода проблематично. О том, как автоматизировать проверку качества кода 1С с помощью платформы SonarQube на конференции Infostart Event 2019 Inception рассказал ведущий разработчик компании «Командор» Олег Тымко.

30.12.2019    9388    olegtymko    10    

Фреймворк для создания бизнес web-приложений

Прочие инструменты разработчика Бесплатно (free)

Для создания систем, решающих узкие бизнес задачи, использовать 1С бывает нецелесообразно. Хочу представить альтернативу - web фреймворк katejs. Будет интересно также тем, кто интересуется web разработкой на современном javascript.

15.10.2019    5457    nep_i    25    

Приватный блокчейн и 1С популярно

Практика программирования Блокчейн Бесплатно (free)

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

02.09.2019    6347    mkalimulin    140    

LogiCH - хранение и анализ журнала регистрации в сверхбыстрой СУБД ClickHouse Промо

Журнал регистрации Статистика базы данных v8 1cv8.cf Платные (руб)

Конфигурация LogiCH эффективно решает проблему хранения и анализа записей журналов регистрации. Разработка использует столбцовую СУБД ClickHouse, одну из самых быстрых Big Data OLAP СУБД. Любой анализ журнала можно выполнить в одном отчете, в котором доступны все возможности СКД с учетом ограничений RLS. Количество подключаемых баз не ограничено и не влияет на скорость построения анализа.

5000 руб.

28.11.2018    9338    4    4    

Кодогенерация и метагенерация в 1С

Практика программирования Инструментарий разработчика Бесплатно (free)

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    9205    kirovsbis    28    

Отказ от использования хранилищ 1С, переход на Git.

Инструментарий разработчика Разработка Бесплатно (free)

Валерий Максимов в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION делится опытом перехода нескольких команд (более 100 разработчиков) от использования хранилищ 1С на системы контроля версий Git.

25.07.2019    11146    theshadowco    31    

Интеграция сценарного тестирования в процесс разработки

Практика программирования Инструментарий разработчика Бесплатно (free)

Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

08.07.2019    9565    grumagargler    7    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16342    m-rv    2    

Elastic + filebeat + ТЖ 1С

Журнал регистрации Поиск данных Абонемент ($m)

Рассмотрим как можно обрабатывать удобно большой объем информации с простой структурой. Это удобно для анализа логов ТЖ, поскольку типовыми механизмами он невозможен.

1 стартмани

18.06.2019    19107    38    pashamak    32    

Быстрый ввод неудобных символов

Пользователю системы Инструментарий разработчика Бесплатно (free)

Использование Alt-кодов для ввода “[”, “]”, “”, “&”, “#”, “|”

15.04.2019    11848    pparshin    29    

О времени и 1С

Практика программирования Разработка Бесплатно (free)

Основы и особенности работы со временем в 1С. Как избавиться от боли при работе в разных часовых поясах. Что такое момент времени. И другое.

01.04.2019    39819    YPermitin    61    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    20841    m-rv    17    

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф")

Практика программирования ККМ Кассовые операции Кассовые операции Разработка Россия Бесплатно (free)

Пример создания bridge (http api - tcp) для ККТ "Касса №1" ("К1-Ф"). Данная статья будет полезна интеграторам, программистам, тем кто работает (интегрирует, разрабатывает) различное ТО либо железки. Версия и релиз технологической платформы не имеет значения.

17.03.2019    6783    dmarenin    1    

Быстрее чем INSERT! BULK-операции и примеры использования

Производительность и оптимизация (HighLoad) Практика программирования Внешние источники данных Перенос данных из 1C8 в 1C8 Разработка Бесплатно (free)

Microsoft SQL Server поддерживает так называемые BULK-операции, используемые для быстрого изменения больших объемов данных в базе. В статье пойдет речь о практических примерах их использования. Все примеры сделаны в контексте платформы 1С (а как иначе).

09.03.2019    27216    YPermitin    40    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    31850    m-rv    21    

Как писать понятные коммиты

Практика программирования Разработка Россия Бесплатно (free)

Как писать сообщения коммитов так, чтобы потом не было мучительно больно.

06.03.2019    13184    Scorpion4eg    35    

Не только автоматизация учета

О жизни Россия Бесплатно (free)

Сказ о том, как одинэсники с сишарперами и питонистами играли.

28.02.2019    9626    Scorpion4eg    43    

Логируй больше! 1С + UPD + GELF + Graylog

Практика программирования Администрирование данных 1С WEB Разработка v8 Бесплатно (free)

Наличие производительной платформы управления логами - это жизненно важный элемент в ландшафте систем с высокой активностью. Рассмотрим один из подходов логирования активности систем на платформе 1С в Graylog.

26.02.2019    12126    Lars Ulrich    16    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    28727    itriot11    34    

Подготовка ребёнка к ЕГЭ по информатике. Часть шестнадцатая

Практика программирования Разработка Бесплатно (free)

Поиск выигрышной стратегии, завершающая статья.

22.02.2019    5877    vasilev2015    0    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    77935    Serginio    110