Всем привет.
Данная статья написана по моему выступлению на Infostart Event 2022, на котором я рассказал об инструментах и «лайфхаках», которые использую в своей работе и которые, как мне кажется, помогают сделать работу разработчика 1С проще, удобнее, а главное, эффективней. Возможно, некоторые вещи покажутся вам очевидными или совсем простыми. Но часто я вижу, как разработчики пренебрегают ими, а ведь именно такие «мелочи» и делают нашу жизнь проще.
Кому больше нравится видео-формат, предлагаю посмотреть запись доклада:
Ну а любителем текста добро пожаловать под кат.
О чем статья?
Свой первый код за деньги на платформе 1С я написал в далеком 2008 году и вот уже 15 лет этим и продолжаю заниматься. За это время я побывал, как мне кажется, во всех состояниях типового 1С-ника: от программиста-стажера до начальника отдела разработки. Работал «инхаус» на предприятии, долго проработал в крупном интеграторе. А сейчас занимаюсь продуктовой разработкой.
Мне повезло, практически всегда я работал в больших командах в окружении других программистов 1С. Я постоянно перенимал у них какой-то опыт, но иногда мне казалось, что они выполняют что-то не так удобно или не так эффективно как, мне кажется, можно было бы это делать.
И вот на каких-то таких рассуждениях и родилась идея данной статьи-доклада. Она ориентирована прежде всего на начинающих или, может быть, мидл-разработчиков. Но очень надеюсь, что и матерые зубры 1С-разработки тоже смогут для себя что-то почерпнуть или, более того, расскажут в комментариях о каких-то своих приемах. Итак, поехали!
Конфигуратор жив?
Современной и прогрессивной средой разработки в настоящее время считается 1С:EDT. И когда речь заходит про удобство разработки, чаще всего упоминается именно она.
Но и старый добрый конфигуратор все равно не стоит списывать со счетов. Поэтому, уж простите, но каких-то прорывных новых вещей в этой статье, увы, не будет.
Я работаю в том числе и в 1С:EDT, но, признаюсь честно, моим основным и любимым инструментом в работе все еще остается конфигуратор, как, наверное, и для подавляющего большинства разработчиков 1С.
Я всегда работал и работаю с большими конфигурациями типа 1С:ERP, 1С:УХ, 1С:ERPУХ. К сожалению, для них 1С:EDT проигрывает в скорости работы конфигуратору. Кроме того, по работе мне очень часто приходится разворачивать присланные «детешники», сравнивать конфигурации, быстро что-то править и объединять. И ключевое слово здесь «быстро».
Помимо GIT мы работаем и через хранилище конфигураций 1C – я работал в командах 20+ разработчиков, хранилище используем через сервер хранилища конфигураций, разработка идет плотная, каких-то особых проблем не наблюдаем.
Поэтому далее будет грустная статья (надеюсь, что нет) от старовера 1С-ника. Если кого-то разочаровал, прошу прощения.
Расширение конфигуратора 1С
Когда речь заходит про удобную работу в конфигураторе, часто вспоминают 2 проекта:
Первый из них – это Снегопат. Когда-то давно я пользовался им, покупал подписку. Но по ряду причин перестал. Во-первых, работая в интеграторе я 90% времени программировал на серверах клиентов. Там бывает проблематично вообще установить что-то, что не прошло проверку службой безопасности. Также непонятно, как в этом случае соблюдается условие лицензионного соглашения по использованию.
Кроме того, не оперативно осуществлялась поддержка версий платформы и, если ничего не изменилось, до сих пор не поддерживается 64-разрядная платформа. Ну а в 32-х разрядном конфигураторе сейчас уже вообще в больших конфигурациях не поразрабатываешь. Складывается ощущение, что проект скорее мертв, чем жив. Его сейчас даже купить уже нельзя. А жаль, инструмент на самом деле был очень удобный.
Второе расширение конфигуратора – TurboConf, я его как-то купил на распродаже Инфостарта. Интересный продукт, облегчает жизнь по многим аспектам. Этот проект плюс-минус развивается, выходят новые релизы. Но у меня он все равно не прижился по тем же примерно причинам. Таскать по разным серверам разных клиентов подобные инструменты бывает затруднительно.
Но если у вас есть свое стабильное рабочее место, обратите внимание на эти расширения конфигуратора. TurboConf, кстати, работает и в 1С:EDT. У обоих продуктов есть триальные версии для ознакомления.
Но а мне пришлось научиться работать в голом конфигураторе. Давайте посмотрим, что из этого старичка еще можно выжать?
Запуск конфигуратора
Начнем, как ни странно, с... запуска. Средний разработчик заходит в конфигуратор примерно так: ищет пользователя в списке, вводит пароль, потом вводит данные хранилища.
И хорошо если часть этой информации подтянулись из кэша, но бывает, что надо пойти и вспомнить, где хранятся все эти пути. Я стараюсь минимизировать количество бесполезных действий в своей работе. Поэтому давайте просто пропишем один раз данные входа и данные подключения к хранилищу в параметрах запуска, например, вот так:
Можно добавить еще что-то, к примеру флаг TestManager, если вы занимаетесь автоматизированным тестированием. И все, забудем навсегда об этих назойливых окнах. Сохраним список баз и подключим его при входе.
Стоит однако отметить, что такой способ запуска годится только если вы работаете на своей машине, т. к. на терминальных серверах файл с настройками может быть прочитан даже если установить на него настройки безопасности. Но, что более важно, параметры запуска будут отображаться в диспетчере задач в колонке «Путь».
Настройка параметров конфигуратора
Итак, конфигуратор запустился. Сразу же переходим на закладу «Сервис» – «Параметры».
Тут, на самом деле, есть много чего интересного. Я расскажу о тех настройках, которые изменены у меня относительно стандартных. Не обязательно все что использую я подойдет вам, и наоборот, используемый вами функционал может быть не нужен мне.
Итак, на первой вкладке «Общие» я обычно сразу убираю флаги «Делать проверку при удалении» и «Заменять при переименовании». При работе в больших конфигурациях эти вещи занимают много времени. Ну и к тому же если я реально что-то удаляю или переименовываю, то я точно понимаю, зачем я это делаю и сам проведу все нужные проверки.
На вкладке «Тексты» я убираю «Перетаскивание текста», т. к. этим механизмом не пользуюсь, но иногда что-то цепляю мышкой случайно. А также, чтобы не оставлять нужных невидимых символов в конце строк, я запрещаю перемещение курсора в конце строк.
Многие разработчики пользуются отображением пробелов и табуляций. Тут уже по желанию, конечно. Я пользуюсь. Единственное, я меняю символ табуляции с «ёлочек» на символ «|».
Ну и чтобы не сильно напрягать глаза, ведь работаешь с текстом весь день, я ставлю бОльший шрифт текстов – обычно меняю на 12.
На вкладке «Модули» - «Редактирование» можно настроить свою цветовую схему для модулей, опять же с тем, чтобы минимизировать нагрузку на глаза.
Вот несколько примеров взятых из соответствующих статей.
Но в конфигураторе, к сожалению, полностью темную схему сделать никак нельзя, так как все остальное у вас светлое, и это сильно контрастирует.
Многие разработчики используют известную в мире разработки цветовую схему «Solarized», она и вправду очень приятная для глаз. Попробуйте, вот она:
Но самые главные настрой цветов почему-то запрятаны и отключены.
Если установить цвета для «Текущего идентификатора» и «Выбранного идентификатора», например я ставлю серый и оранжевый:
То у нас в коде начнут подсвечиваться выбранные идентификаторы. Мне кажется, это есть в всех средах разработки всех языков. Почему у нас это по умолчанию отключено, я не знаю.
Затем идем в «Прочее» и устанавливаем для этих конструкций серый цвет.
Сравните стандартный вариант и доработанный. По моему, второй намного приятнее и специальные символы совсем не мешают читать и писать основной код.
Кроме того, на данной вкладке в поле «Автозамена» я ставлю «Включить». Как это используется покажу чуть позже. А также ставлю шрифт модулей побольше, также 12. С десяткой за день уж сильно глаза устают.
Здесь же переходим на вкладку «Группировка».
Наверняка вы знаете, что циклы и условия тоже можно группировать. И почему-то это тоже по умолчанию отключено. Ставим нужные флаги.
И теперь мы можем сворачивать и разворачивать циклы и условия в модулях. Кажется, что это очень удобно.
Ну и здесь я ставлю автоматическое сворачивание групп для областей. Если у вас большие модули, и вы, как и рекомендует фирма 1С, весь код размещаете внутри определенных областей, то открывая общий модуль вы сразу видите его структуру без лишних листаний.
Вот примерно так это сразу выглядит:
Я этим давно пользуюсь, мне кажется, что так удобнее.
Переходим на закладку «Запуск 1С:Предприятие».
Не все знают, что если в параметрах запуска прописать «РежимОтладки», то там где должны запускаться фоновые задания, они запускаться не будут, а код будет выполняться в том же сеансе.
Это невероятно полезно при отладке, т. к. отладка фоновых заданий – то еще веселое мероприятие. А оказывается, что прописав здесь вот такое заклинание, отладка фоновых превращается… в обычную отладку. Ставлю сразу и навсегда.
Работает данный ключ только для фоновых заданий запущенных через подсистему "Длительные операции" БСП.
Наконец, может быть стоит рассказать, что в конфигураторе есть возможность подключения внешних программ для сравнения и объединения модулей.
Когда-то давно, работая в поддержке мне приходилось часто обновлять доработанные конфигурации наших клиентов, и я пользовался бесплатной, но очень функциональной программной KDiff3. Не утверждаю, что она лучшая. Но по крайней мере она единственная из данного списка может выполнять автоматическое трехстороннее объединение. То есть при обновлении конфигурации поставщика вам вручную нужно будет обработать только конфликты, а все остальные модули объединятся автоматически.
Сейчас у меня таких задач нет, и я давно ей не пользовался, но быть может вам эта информация пригодится.
Шаблоны текста
Параметры мы настроили, переходим к шаблонам текста. Про них все знают, но мало кто ими пользуется. Но это и понятно: на мой взгляд, шаблоны текста в конфигураторе сделаны крайне неудобно.
Во первых, вызываются шаблоны по не самой удобной комбинации Ctrl+Q. Но ладно, это мы победили поставив в параметрах автозамены значение включить. Теперь шаблоны вызываются сами автоматически после нажатия пробела.
Но стало не намного удобнее, т. к. теперь выскакивает какое-то окно, где надо что-то выбрать, потом еще одно окно, и еще одно. Эти окна куда-то все время съезжают, поле для ввода маленькое.
В общем, шаблоны больше бесят, чем помогают.
Я предлагаю в настройке шаблонов отключить совсем все стандартные шаблоны и добавить свои, аналогичные стандартным, но на свой вкус и цвет.
Это может работать, например, как-то так:
Горячие клавиши
Следующая, опять таки, всем известная и очевидная вещь – горячие клавиши.
Часть из них обозначена в соответствующих пунктах меню. Если вдруг в какой-то ситуации вы идете мышкой в меню и что-то там пытаетесь выбрать – есть смысл раз и навсегда запомнить нужную комбинацию клавиш и в дальнейшем использовать уже ее.
Первое время возможно будет неудобно, но со-временем вы выучите все основные комбинации, и работа станет сильно комфортнее.
В меню есть не все комбинации клавиш, все описаны в справке в соответствующем разделе.
На самом деле, там очень много интересного. Практически любое действие в конфигураторе которое можно выполнить мышкой, можно сделать и с клавиатуры: переключение по всем окнам, вкладкам, вызов всех меню и т. д. Все это существенно экономит время.
Ну и кроме стандартных для редактора текста комбинаций, про которые тоже не все знают или знают, но не используют, есть и некоторые уникальные, типа Ctrl+«-», Ctrl+Alt+P и т. д.
В общем, если вы не пользуетесь горячими клавишами, или пользуетесь, но не всеми, я вам крайне рекомендую пройти этот начальный порог неудобства и затем, я уверен, вы ощутите все преимущества.
Слепой метод печати
Ничто так не упрощает ввод текста и не экономит время, как метод слепой печати.
Тут также необходимо сначала потратить некоторые временные и, скажем так, волевые усилия на овладевание данным навыком. Я в свое время проходил тренажер Соло, еще тогда 7-ой редакции. Не настаиваю что это лучший тренажер, их очень много разных.
Но сейчас, я думаю, что те затраты - это моя лучшая инвестиция в жизни. В общем, если вы еще не умеете в слепую печатать, очень рекомендую научиться.
Мультибуфер
Еще один крутой инструмент, который сильно помогает в работе – это мультибуфер. Когда-то я пользовался внешними программами для мультибуфера, их много разных. Но когда данная функция появилась в Windows 10, перешел на нее. Вполне себе удобно.
Называется функция «Журнал буфера обмена», включается в настройках.
Либо при первом нажатии на комбинацию Win+V. И теперь при нажатии той же комбинации Win+V, появляется окошко, где перечислены 25 последних сохраненных в буфер значений.
Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах.
В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др.
Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.
Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.
Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
Кстати, платный Турбоконф 6-ая сильно улучшенная версия сегодня вышла и вместе с ней ИР адаптер. Поэтому теперь большинство функций ИР доступны прямо из конфигуратора.
(6) Разработчики ERP запускают закрытие месяца платформенным методом "ФоновыеЗадания.Выполнить". Это ответ на вопрос "кто". Ответа на вопрос "зачем" у меня, к сожалению, нет. :-)
(6) Например, когда надо запустить 1000 фоновых заданий, но не сразу, а партиями, по 20. И подождать, пока очередная двадцатка завершится, перед запуском следующей. Или не ждать, когда завершатся все, а добавлять новые, когда предыдущие завершаются. Балансировка нагрузки, одним словом. Код показать?
(11) Это вообще не связанные вещи. Режим отладки заставляет выполняться фоновые задания в том же сеансе без запуска отдельного фонового сеанса, что соответственно упрощает отладку. Но ключ -debug при этом конечно нужен.
Я уже думал что за 2 года уи в тулкит преобразились, а нет. Спасибо! Но я перешёл на использование ИР через расширение.
Внешняя обработка не может словить на сервере запрос.
Недавно открыл для себя автозамену с типовыми шаблонами. Удобнее чем самому писать.
Подсветка меня и так устраивает. Но может подумаю удобнее. Статью плюсую!
(24) вы не поняли. Внешняя обработка ир не может словить запрос на сервере из-за галочек компиляции модуля.
А расширение ир ловит. Да плюс ко всему оно видно только первому админу, который вошёл в программу, т.е. только нам.
Добрый день, спасибо за статью. Пару замечаний \ мыслей хотел бы добавить:
1) Не Снегопа*д*, а Снегопа*т*
2) В разделе "Запуск конфигуратора" я бы упомянул StartManager 3) Мультибуфер - попробуйте бесплатный ClipDiary. По сравнению с виндовым это как word vs wordpad...
4) ИР только в ОФ - ничего подобного, весьма удобно ими пользоваться и в управляемом режиме, как расширением. Все есть, все работает - отложенная отладка запросов / схем компоновки, с последующим анализом через разбивку запроса на отдельные подзапросы и т.п. Здесь ложка дегтя в том, что требуется поддержка толстого клиента конфой. Многие на него забивают, поэтому с ИР дружить не выходит. А лучше действовать по стандартам, корректно настраивая / оформляя модули: тогда и код становится более простым, и толстый клиент доступен. Кроме того так попросту интереснее.
5) Запуск с параметром "РежимОтладки" - спорная на самом деле вещь.. Активно использую именно фоновый запуск при разработке, потому что это (внезапно) удобно. Если стартануть долгий \ ресурсоемкий по своей природе алгоритм, то его можно легко и просто скинуть после достижения цели отладочного запуска. А при запуске непосредственном придется прерывать рантайм, т.е. перезапускать базу - такое себе.. Особенно при разработке, когда надо часто перезапускать отладку. Уточню - речь о перезапуске внешних отчетов / обработок. Понятно, что при доработке конфы рантайм все-равно придется прерывать для принятия изменений. Но если действовать по алгоритму разработки встроенных модулей через внешние - хотя бы так, как это описано в текущей статье - то можно все делать в текущем сеансе, без перезапуска ИБ. Главное не забыть потом избавится от отладочного кода) Но это прям тема для отдельного обсуждения.
Без особых проблем анализировал фоновое обновление ключей в "производительном" RLS - с моей т.з. удобнее именно через фон это смотреть. Потому что в том же сеансе если нужно процесс скинул, и без перезапуска базы снова запустил.
Минусы такой отладки есть, но все решаемо:
- мерцание при наличии параллельно работающих ФЗ - если речь о разработке в копии - отключаем все регламенты
- мерцание из-за параллельно работающего глобального обработчика ожидания - бывает что вместо останова в нужном месте останавливается где-то в модуле длительных операций. Бывает не так часто, надо продолжить отладку (F5), и если точка останова уже в задании пройдена - то перезапустить исполнение.
А при запуске непосредственном придется прерывать рантайм, т.е. перезапускать базу - такое себе..
Есть лайфхак, как быстро прервать любой затянувшийся процесс.
В конфигураторе Отладка - Остановить. Процесс приостанавливается в любом месте. Ищем по строкам вниз любую объектную переменную, например Массив. Через Вычислить выражение присваиваем ей значение " ". И запускаем Продолжить отладку (F5). Процесс тут же останавливается с исключением.
(34) знаю, еще до того как в платформе сделали возможность изменять локальные переменные для такого использовалась отладочная функция ДУ (https://kb.mista.ru/article.php?id=105) Но можно вот так забивать себе голову продумывая "что-же там обнулить, чтобы процесс прервать". А можно сделать фоновый запуск и нажать "Отмена" в режиме предприятия, и не мучиться лишний раз. И запрос к БД например через изменение переменной не прервешь.
Тут кстати еще момент - если в коде допущен контекст невосстановимой ошибки, то это приведет к выбросу рантайма. При фоновом запуске - к завершению только ФЗ, причем зачастую с записью стека в журнал регистрации.
(35) Да, очень полезная функция, до сих пор ДУ использую. Например когда нужно выполнить процедуру в окне отладки. Или вызвать остановку по ошибке до самой ошибки (стандартная "Остановка по ошибке" не всегда подходит)
К сожалению, эти ключи устанавливают параметры подключения для всех хранилищ, к которым подключена конфигурация разработчика. Таким образом, если база подключена так же к хранилищу расширения, то эти ключи только мешают.