1C-CodeОсновы 1С → Первая программа: код, который что-то делает

Первая программа: код, который что-то делает

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

Глава 1 из 36 · чтение примерно 18 минут

Если вы никогда не программировали — начните отсюда. Эта глава не предполагает никаких знаний вообще, даже что такое «команда» и «выполнить».

Если вы уже писали код на другом языке, пролистайте до врезки «Чем 1С отличается от привычного»: остальное будет знакомо.

Что такое программа

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

Разница важная. Если сказать человеку «посчитай сумму заказа», он разберётся сам. Машине нужно расписать: взять цену, взять количество, перемножить, показать результат. Каждый шаг отдельно и в правильном порядке.

Видов шагов немного. Всё остальное — их сочетания.

Команда, точка с запятой, порядок

Одно указание называется командой или оператором. Каждая команда заканчивается точкой с запятой — как предложение точкой.

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

Первая настоящая команда

Сообщить("Здравствуйте");
ЧастьЧто означает
Сообщитьимя команды — она показывает текст человеку
(открывающая скобка: дальше идёт то, что команде передают
"Здравствуйте"текст в двойных кавычках — то, что надо показать
)закрывающая скобка: передавать больше нечего
;конец команды

Сообщить — самая полезная команда для новичка. Она ничего не считает и не меняет, а просто показывает то, что ей дали. Когда непонятно, что происходит в программе, выводят значения и смотрят.

Упражнение 1. Первая программа

Напишите команду, которая выведет текст Привет. Текст — в двойных кавычках, в конце точка с запятой.

Решается в тренажёре: код запускается и проверяется сразу.

Три частые ошибки на старте

Забыли точку с запятой. Программа не поймёт, где кончается одна команда и начинается другая, и сообщит об ошибке — часто указав на СЛЕДУЮЩУЮ строку. Если ошибка «непонятно на что», посмотрите строкой выше.

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

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

Упражнение 2. Две команды подряд

Выведите два сообщения подряд: сначала Первое, потом Второе. Каждая команда — на своей строке.

Решается в тренажёре: код запускается и проверяется сразу.

Комментарии: заметки для человека

Две косые черты // означают, что всё до конца строки — записка для читающего. Программа её пропускает.

Комментарии нужны не чтобы пересказать код словами. Строка // выводим приветствие рядом с Сообщить("Привет") не сообщает ничего нового. Полезный комментарий объясняет почему: почему именно так, почему не иначе, чего здесь опасаться.

Код с комментариями

// Проверка связи перед запуском обмена:
// без неё обмен падает на середине и данные остаются наполовину
Сообщить("Проверяю связь");
ЧастьЧто означает
//начало комментария — до конца строки
две строки подрядтак пишут пояснение к целому куску кода
что объясняетне «что делает строка», а зачем она здесь

Пробелы и отступы

Программе всё равно, сколько пробелов вы поставили. Сообщить( "Привет" ) и Сообщить("Привет") — одно и то же.

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

Чем 1С отличается от привычного

Если вы знаете другой язык, вот что здесь по-другому:

Сообщить умеет не только текст

Передать можно и число, и результат вычисления. А тексты склеиваются знаком «плюс»: "Ито" + "го" даёт «Итого».

Разные способы вывести

Сообщить(250);                    // просто число
Сообщить(250 * 4);                // сначала посчитается, потом выведется
Сообщить("Итого: " + Строка(1000)); // текст плюс число, превращённое в текст
ЧастьЧто означает
250 * 4выражение считается ДО вывода — на экран попадёт 1000
+между текстами — склейка, а не сложение
Строка(1000)превращает число в текст, чтобы его можно было приклеить
зачем Строкачтобы не зависеть от порядка — почему, в следующей врезке

Плюс смотрит на то, что стоит СЛЕВА

Это правило стоит запомнить сразу, потому что оно несимметричное и на нём спотыкаются годами.

"Итого: " + 1000работает. Слева текст, значит плюс склеивает, и число само превращается в текст: «Итого: 1000».

1000 + "Итого: "ошибка. Слева число, значит плюс складывает, и теперь уже текст пытается превратиться в число. «Итого: » числом не является, и программа прекращает работу.

Отсюда привычка писать Строка(…) явно: тогда обе части — текст, и порядок слагаемых ничего не ломает.

Упражнение 3. Посчитать и показать

Выведите результат умножения 250 на 4. Не пишите 1000 руками — пусть посчитает программа.

Решается в тренажёре: код запускается и проверяется сразу.

Упражнение 4. Текст и число вместе

Выведите строку Сумма: 1000. Число посчитайте как 250 * 4 и приклейте к тексту через Строка(…).

Решается в тренажёре: код запускается и проверяется сразу.

Как читать ошибку

Сообщение об ошибке говорит, где смотреть, и читать его надо буквально. «Ожидалось )» значит, что скобку забыли закрыть. «Переменная не определена» — что имя написано с опечаткой или строка стоит раньше, чем нужно.

В тренажёре ошибки показывают номер строки. Непонятное сообщение — повод написать нам.

Упражнение 5. Почините код

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

Решается в тренажёре: код запускается и проверяется сразу.

Сообщения об ошибках: их четыре вида

Первые недели половина времени уходит на чтение ошибок, и почти все они — из короткого списка. Разобравшись в нём один раз, вы перестанете их бояться.

Что говорит 1С и что это значит

СообщениеЧто случилосьКуда смотреть
Переменная не определенаобратились к имени, которого нетопечатка в имени или строка, где оно создаётся, идёт ниже
Ожидается …нарушен синтаксис: не хватает скобки, кавычки, «Тогда»указанная строка и та, что перед ней
Метод объекта не обнаружену значения нет такого методаопечатка в имени метода — или в переменной лежит не то, что вы думали
Преобразование значения … невозможночисло ждали, а пришёл текстто, что пришло в переменную, а не строка с ошибкой
Деление на нольделитель оказался нулёмоткуда взялся делитель — а не сама формула
Индекс находится за границамиобратились к элементу, которого нетпочти всегда ошибка на единицу

Место ошибки и причина ошибки — разные строки

Сообщение показывает, где программа споткнулась, а не где ошиблись вы. Деление на ноль происходит в формуле, а виноват запрос строкой выше, вернувший пусто.

Поэтому первый вопрос по ошибке — не «что не так в этой строке», а «откуда в ней взялось это значение». Отсюда и начинается отладка, которой посвящена отдельная глава.

Второе: в настоящей 1С перед текстом ошибки идёт путь вроде {Обработка.ЗагрузкаЦен.МодульОбъекта(42)}. Число в скобках — номер строки, и это первое, на что смотрят.

Чем ещё можно сказать что-то человеку

Сообщить — не единственная команда вывода, и в рабочем коде их различают.

Сообщить("текст") — строка в списке сообщений внизу формы. Не перебивает работу, их может быть много подряд. Это основной способ сказать «в документе не хватает склада».

Предупреждение("текст") — окно, которое нужно закрыть. Останавливает человека, поэтому им не злоупотребляют: три предупреждения подряд — это три лишних щелчка.

Вопрос(…) — окно с вариантами ответа, когда надо спросить «записать изменения?».

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

Сообщения не показываются по одному

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

Поэтому «сообщения не появились» обычно значит не то, что код до них не дошёл, а то, что операция ещё не закончилась — или закончилась падением, и показывать их стало некому.

Что дальше

Вы умеете писать команды, выводить значения и читать ошибки. Это фундамент — дальше всё строится на нём.

Следующая глава — про переменные: как дать значению имя и работать с ним, а не с конкретным числом. Именно с этого код перестаёт быть списком фиксированных действий и начинает решать задачи.

Как закрепить

Читать про код и писать код — разные умения. В тренажёре к этой главе идут упражнения: вы пишете решение, оно запускается на настоящем интерпретаторе 1С и проверяется сразу, без установки платформы.

Открыть эту главу в тренажёре

Переменные: где программа хранит данные