1C-Code → Основы 1С → Первая программа: код, который что-то делает
С нуля, без единого допущения. Что такое код, как он выполняется и как заставить его говорить.
Глава 1 из 36 · чтение примерно 18 минут
Если вы никогда не программировали — начните отсюда. Эта глава не предполагает никаких знаний вообще, даже что такое «команда» и «выполнить».
Если вы уже писали код на другом языке, пролистайте до врезки «Чем 1С отличается от привычного»: остальное будет знакомо.
Программа — это список указаний, записанных так, чтобы их могла выполнить машина. Не описание того, что должно получиться, а именно последовательность шагов.
Разница важная. Если сказать человеку «посчитай сумму заказа», он разберётся сам. Машине нужно расписать: взять цену, взять количество, перемножить, показать результат. Каждый шаг отдельно и в правильном порядке.
Видов шагов немного. Всё остальное — их сочетания.
Одно указание называется командой или оператором. Каждая команда заканчивается точкой с запятой — как предложение точкой.
Команды выполняются сверху вниз, строго по очереди. Пока не закончится первая, вторая не начнётся. Это кажется очевидным, но именно отсюда берётся половина ошибок новичка: обратились к тому, что появится строкой ниже.
Сообщить("Здравствуйте");
| Часть | Что означает |
|---|---|
Сообщить | имя команды — она показывает текст человеку |
( | открывающая скобка: дальше идёт то, что команде передают |
"Здравствуйте" | текст в двойных кавычках — то, что надо показать |
) | закрывающая скобка: передавать больше нечего |
; | конец команды |
Сообщить — самая полезная команда для новичка. Она ничего не считает и не меняет, а просто показывает то, что ей дали. Когда непонятно, что происходит в программе, выводят значения и смотрят.
Упражнение 1. Первая программа
Напишите команду, которая выведет текст Привет. Текст — в двойных кавычках, в конце точка с запятой.
Решается в тренажёре: код запускается и проверяется сразу.
Три частые ошибки на старте
Забыли точку с запятой. Программа не поймёт, где кончается одна команда и начинается другая, и сообщит об ошибке — часто указав на СЛЕДУЮЩУЮ строку. Если ошибка «непонятно на что», посмотрите строкой выше.
Забыли закрыть кавычку. Программа будет считать текстом всё до конца строки и тоже не поймёт, что произошло.
Скобки не парные. Сколько открыли, столько и закройте. Это самая частая ошибка в длинных выражениях.
Упражнение 2. Две команды подряд
Выведите два сообщения подряд: сначала Первое, потом Второе. Каждая команда — на своей строке.
Решается в тренажёре: код запускается и проверяется сразу.
Две косые черты // означают, что всё до конца строки — записка для читающего. Программа её пропускает.
Комментарии нужны не чтобы пересказать код словами. Строка // выводим приветствие рядом с Сообщить("Привет") не сообщает ничего нового. Полезный комментарий объясняет почему: почему именно так, почему не иначе, чего здесь опасаться.
// Проверка связи перед запуском обмена:
// без неё обмен падает на середине и данные остаются наполовину
Сообщить("Проверяю связь");
| Часть | Что означает |
|---|---|
// | начало комментария — до конца строки |
две строки подряд | так пишут пояснение к целому куску кода |
что объясняет | не «что делает строка», а зачем она здесь |
Программе всё равно, сколько пробелов вы поставили. Сообщить( "Привет" ) и Сообщить("Привет") — одно и то же.
Людям — не всё равно. Отступы показывают вложенность: что внутри чего. Когда дойдём до условий и циклов, вы увидите, что без отступов код читать невозможно. Заведите привычку сразу: один шаг вложенности — одна табуляция.
Чем 1С отличается от привычного
Если вы знаете другой язык, вот что здесь по-другому:
if, а Если; не while, а Пока. Английские варианты тоже работают, но в реальном коде их не пишут;Сообщить и СООБЩИТЬ — одно и то же. Имена переменных тоже;{ }, а Если … КонецЕсли;. Длиннее, зато видно, что именно закрылось;Передать можно и число, и результат вычисления. А тексты склеиваются знаком «плюс»: "Ито" + "го" даёт «Итого».
Сообщить(250); // просто число
Сообщить(250 * 4); // сначала посчитается, потом выведется
Сообщить("Итого: " + Строка(1000)); // текст плюс число, превращённое в текст
| Часть | Что означает |
|---|---|
250 * 4 | выражение считается ДО вывода — на экран попадёт 1000 |
+ | между текстами — склейка, а не сложение |
Строка(1000) | превращает число в текст, чтобы его можно было приклеить |
зачем Строка | чтобы не зависеть от порядка — почему, в следующей врезке |
Плюс смотрит на то, что стоит СЛЕВА
Это правило стоит запомнить сразу, потому что оно несимметричное и на нём спотыкаются годами.
"Итого: " + 1000 — работает. Слева текст, значит плюс склеивает, и число само превращается в текст: «Итого: 1000».
1000 + "Итого: " — ошибка. Слева число, значит плюс складывает, и теперь уже текст пытается превратиться в число. «Итого: » числом не является, и программа прекращает работу.
Отсюда привычка писать Строка(…) явно: тогда обе части — текст, и порядок слагаемых ничего не ломает.
Упражнение 3. Посчитать и показать
Выведите результат умножения 250 на 4. Не пишите 1000 руками — пусть посчитает программа.
Решается в тренажёре: код запускается и проверяется сразу.
Упражнение 4. Текст и число вместе
Выведите строку Сумма: 1000. Число посчитайте как 250 * 4 и приклейте к тексту через Строка(…).
Решается в тренажёре: код запускается и проверяется сразу.
Сообщение об ошибке говорит, где смотреть, и читать его надо буквально. «Ожидалось )» значит, что скобку забыли закрыть. «Переменная не определена» — что имя написано с опечаткой или строка стоит раньше, чем нужно.
В тренажёре ошибки показывают номер строки. Непонятное сообщение — повод написать нам.
Упражнение 5. Почините код
В этом коде две ошибки: не закрыта скобка и пропущена точка с запятой. Найдите и исправьте так, чтобы вывелось Готово.
Решается в тренажёре: код запускается и проверяется сразу.
Первые недели половина времени уходит на чтение ошибок, и почти все они — из короткого списка. Разобравшись в нём один раз, вы перестанете их бояться.
| Сообщение | Что случилось | Куда смотреть |
|---|---|---|
| Переменная не определена | обратились к имени, которого нет | опечатка в имени или строка, где оно создаётся, идёт ниже |
| Ожидается … | нарушен синтаксис: не хватает скобки, кавычки, «Тогда» | указанная строка и та, что перед ней |
| Метод объекта не обнаружен | у значения нет такого метода | опечатка в имени метода — или в переменной лежит не то, что вы думали |
| Преобразование значения … невозможно | число ждали, а пришёл текст | то, что пришло в переменную, а не строка с ошибкой |
| Деление на ноль | делитель оказался нулём | откуда взялся делитель — а не сама формула |
| Индекс находится за границами | обратились к элементу, которого нет | почти всегда ошибка на единицу |
Место ошибки и причина ошибки — разные строки
Сообщение показывает, где программа споткнулась, а не где ошиблись вы. Деление на ноль происходит в формуле, а виноват запрос строкой выше, вернувший пусто.
Поэтому первый вопрос по ошибке — не «что не так в этой строке», а «откуда в ней взялось это значение». Отсюда и начинается отладка, которой посвящена отдельная глава.
Второе: в настоящей 1С перед текстом ошибки идёт путь вроде {Обработка.ЗагрузкаЦен.МодульОбъекта(42)}. Число в скобках — номер строки, и это первое, на что смотрят.
Сообщить — не единственная команда вывода, и в рабочем коде их различают.
Сообщить("текст") — строка в списке сообщений внизу формы. Не перебивает работу, их может быть много подряд. Это основной способ сказать «в документе не хватает склада».
Предупреждение("текст") — окно, которое нужно закрыть. Останавливает человека, поэтому им не злоупотребляют: три предупреждения подряд — это три лишних щелчка.
Вопрос(…) — окно с вариантами ответа, когда надо спросить «записать изменения?».
В тренажёре работает Сообщить: остальные требуют настоящей формы, которую браузеру показывать негде.
Сообщения не показываются по одному
Важная мелочь, которая удивляет: Сообщить внутри серверного кода не показывает текст немедленно. Сообщения копятся и показываются, когда управление вернётся к человеку.
Поэтому «сообщения не появились» обычно значит не то, что код до них не дошёл, а то, что операция ещё не закончилась — или закончилась падением, и показывать их стало некому.
Вы умеете писать команды, выводить значения и читать ошибки. Это фундамент — дальше всё строится на нём.
Следующая глава — про переменные: как дать значению имя и работать с ним, а не с конкретным числом. Именно с этого код перестаёт быть списком фиксированных действий и начинает решать задачи.
Читать про код и писать код — разные умения. В тренажёре к этой главе идут упражнения: вы пишете решение, оно запускается на настоящем интерпретаторе 1С и проверяется сразу, без установки платформы.