Андрей Соколов

Разработчик, департамент 1С, «КОРУС Консалтинг»

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

Но не обошлось и без ложки дёгтя. В нашем случае это спецсимволы. Вот эти самые: «&», «#», квадратные скобки «[ ]», угловые «<>». Они-то ладно, мышечная память быстро осваивает ввод через Alt. Но вот ЕСТЬNULL. Считали, сколько клавиш надо нажать, чтобы набрать ЕСТЬNULL в стандартной раскладке? А сколько раз его нужно использовать в среднестатистическом запросе с соединениями? Это как будто маленькая пытка.

В этой статье расскажу, как я победил-таки ЕСТЬNULL и больше не трачу на это свои драгоценные секунды жизни.

Что я сделал?

Дополнял картину мой собственный «зоопарк» подключений. Работал я во франче, как водится с десятком компаний, и часто прыгал между удаленными рабочими столами. Ставить дополнительный софт на удаленные терминалы и клиентские машины? Просьбы «а поставьте программку…» часто заканчивались «мальчик, иди отсюда». А покупать скриптовую клавиатуру не хотелось.

Тогда меня спас AutoHotkey. Portable-версия, файл настроек с одной строкой и готово: «естьнал» превращается в «ЕСТЬNULL». Без вникания, «а что он там ещё может».

В начале этого года вместо зоопарка клиентских удаленных рабочих столов появился один, свой, родной (ну, почти). Так я вернулся к местами забытой, но не потерявшей актуальности раскладке «Чистова». Для тех, кто не в теме: это такая раскладка клавиатуры, где спец символы вводятся нажатием AltGr (правый Alt) + их место в английской раскладке. А еще завезены такие фичи, как «Alt+X» >> XML. Написав десяток интеграционных потоков - вспоминаешь добрым словом разработчиков платформы, сделавших методы XMLСтрока и XMLЗначение. Только вот спустя полгода сожительства с ней, при запуске проекта и переезде на новый «уютный» рабочий стол услышал забытое, но привычное «Мы не поставим это». А руки-то ее уже просят, уже привыкли!

Затащила старая добрая классика — AutoHotkey снова в деле. Как водится, не было бы счастья, да несчастье помогло: наконец-то, я разобрался в механике работы скриптов — даже навайбшкодил и теперь тешу свое ОКР — у меня есть горячие клавиши, выравнивающие текст по знакам равно и запятой по центру.

Что еще полезного у AutoHotKey

Вообще возможности AutoHotKey позволяют подтянуть нашу скажем там «слегка устаревшую» IDE, доступную из коробки, к мало-мальски приемлемому уровню. Подвесить часто используемые модули программного интерфейса на горячие клавиши, реализовать замену сигнатуры метода (преобразовывая процедуры в функции и наоборот), оборачивать строки кода в условия и циклы. Скажете «это все умеет и TurboConf» — и конечно будете правы — но только отчасти. TurboConf все-таки существует и развивается на платной основе: не все ваши клиенты будут готовы его себе поставить.

В случае же с AutoHotKey — таскаете с собой один файлик, содержимое и функциональность которого ограничены только вашей фантазией.

Кстати, а вот кусок скрипта, который сделан в AutoHotKey
#Requires AutoHotkey v2.0

<^>!х::SendText "["

<^>!ъ::SendText "]"

<^>!б::SendText "<"

<^>!ю::SendText ">"

<^>!\::SendText "|"

<^>!ч::SendText "XML"

<^>!о::SendText "JSON"

<^>!в::SendText "XDTO"

<^>!т::SendText "NULL"

<^>!р::SendText "HTTP"

<^>!2::SendText "@"

<^>!3::SendText "#"

<^>!4::SendText "$"

<^>!6::SendText "^"

<^>!7::SendText "&"

<^>!9::SendText "{"

<^>!0::SendText "}"

; Файл: align_equals.ahk

; Горячая клавиша: Ctrl+Alt+A

StrRepeat(s, n) {

    if (n <= 0)

        return ""

    res := ""

    i := 0

    while (i < n) {

        res .= s

        i++

    }

    return res

}

^!ф:: {

    ClipSaved := ClipboardAll()

    A_Clipboard := ""

    Send("^c")

    if !ClipWait(0.3) {

        MsgBox "Не удалось скопировать текст."

        return

    }

    text := A_Clipboard

    lines := StrSplit(text, "`n") ; разделяем по LF (возможно есть CR в конце строк)

    ; Ищем максимальную позицию "="

    maxPos := 0

    for line in lines {

        line := StrReplace(line, "`r", "") ; убираем CR если есть

        pos := InStr(line, "=")

        if (pos > maxPos)

            maxPos := pos

    }

    newText := ""

    for line in lines {

        line := StrReplace(line, "`r", "")

        pos := InStr(line, "=")

        if (pos) {

            left  := RTrim(SubStr(line, 1, pos - 1))

            right := LTrim(SubStr(line, pos + 1))

            padding := maxPos - StrLen(left) - 1

            if (padding < 0)

                padding := 0

            newLine := left . StrRepeat(" ", padding) . " = " . right

        } else {

            newLine := line

        }

        newText .= newLine "rn"

    }

    A_Clipboard := RTrim(newText, "rn")

    Send("^v")

    Sleep 100

    A_Clipboard := ClipSaved

}

Вместо вывода

О чем вообще этот спич? Цените своё время. Накопленное время, которые вы тратите на ввод ЕСТЬNULL или на поиски угловой скобки за год, можно потратить на оптимизацию запроса, изучение новой фичи или просто на кофе с коллегами. Автоматизация мелочей делает нашу жизнь не только проще, но и приятнее. В этом мой рецепт прост: автоматизируй все, что раздражает, и не стесняйся делиться лайфхаками. Никогда не знаешь, чей следующий день ты сделаешь легче.

И кстати: респект разработчикам 1С:Элемент! Там спецсимволы через Alt поддерживаются из коробки. Уж не знаю, взято это из Theia, или кто-то так же устал от них, как я ?

Комментарии (0)


  1. Irit_LS
    19.09.2025 10:45

    Открою секрет. В запросах можно вводить ISNULL, запрос будет валидный в любом написании


    1. vis_inet
      19.09.2025 10:45

      Почему во всех типовых так не пишут?


      1. Irit_LS
        19.09.2025 10:45

        Ответ на поверхности - конструктор запроса автоматом меняет ISNULL на ЕСТЬNULL. Потому и не отображается. Но использовать конструкцию можно.


        1. asg128
          19.09.2025 10:45

          А в чём экономия, если всё остальное вокруг на русской раскладке?


          1. valm0unt
            19.09.2025 10:45

            Не нужно менять раскладку на полуслове


  1. CzarOfScripts
    19.09.2025 10:45

    А редактор не понимает, что если ввели "если", то можно дополнить как "null"?

    Советую изучить inputHook, там в конце документации должны быть примеры с автокомплитом.


  1. Vladimir_III
    19.09.2025 10:45

    Я чере ahk большую цепочку действий автоматизировал, а мой друг (эникейщик) так вообще алгоритмы на часы работы писал и уходил чай пить


  1. YarRyabinin
    19.09.2025 10:45

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

    Постоянно мотаюсь по разным офисам, файл своего шаблона всегда на флешке.