Первые шаги разработчика 1С: среда, язык, метаданные и отладка
Содержание
Программирование в 1С выглядит так: вы открываете базу в режиме «Конфигуратор», в дереве слева создаёте объекты (справочник, документ, регистр), а в их модулях пишете код на встроенном языке с русскими ключевыми словами — Если … Тогда, Для Каждого … Из … Цикл, КонецПроцедуры. Большую часть программы вы не пишете, а собираете мышью из метаданных. Код нужен для логики: проверки, проведение документов, расчёты, запросы к данным.
Начать проще всего с учебной версии платформы и пустой конфигурации. За первый вечер реально создать справочник «Товары», документ «Приход» и регистр остатков, который этот документ заполняет. Это и есть минимальная рабочая программа на 1С.
С чего начать программировать в 1С: что установить
Для старта не нужен сервер и покупная лицензия. Достаточно трёх вещей.
- 🧩 Учебная версия платформы 1С:Предприятие 8.3. Бесплатная, ставится на обычный компьютер. Ограничена по объёму данных и не предназначена для коммерческой работы, но язык и конфигуратор в ней те же.
- 📁 Пустая информационная база. В окне запуска нажмите
Добавить→Создание новой информационной базы→Создание информационной базы без конфигурации. Получите чистый лист. - 📘 Учебник с практикой. Классика — «1С:Предприятие 8.3. Практическое пособие разработчика» (М. Г. Радченко, Е. Ю. Хрусталёва). Книга ведёт от пустой базы до работающей конфигурации.
Дальше путь обычно такой:
| Этап | Что осваиваете | Ориентир по времени |
|---|---|---|
| 1 | Конфигуратор, справочники, документы, регистры | 2–4 недели |
| 2 | Встроенный язык, модули, обработчики событий | 1–2 месяца |
| 3 | Язык запросов, отчёты на СКД | 1–2 месяца |
| 4 | Типовые конфигурации (БП, ЗУП, УТ), доработки через расширения | от полугода |
Сроки примерные и зависят от того, сколько часов в неделю вы занимаетесь. Подтвердить базовый уровень можно экзаменом «1С:Профессионал» по платформе.
Сразу создайте вторую базу из демо-конфигурации типового решения. Смотреть, как устроена готовая «Бухгалтерия», полезно параллельно с учебником: видно, как те же приёмы выглядят в реальном продукте.
Как выглядит среда разработки: Конфигуратор и EDT
Конфигуратор
Это основной инструмент. Запуск: окно запуска 1С → выбрать базу → кнопка Конфигуратор. Затем Конфигурация → Открыть конфигурацию.
Что вы видите на экране:
- 🌳 Дерево конфигурации слева — все объекты базы по группам: Общие, Константы, Справочники, Документы, Регистры и так далее.
- ⚙️ Палитра свойств — имя, синоним, типы реквизитов, настройки выбранного объекта.
- 📝 Окно объекта — вкладки «Данные», «Формы», «Команды», «Макеты», «Прочее». С вкладок открываются модули и редактор форм.
- 🖊️ Редактор модуля — текстовое окно с подсветкой синтаксиса и контекстной подсказкой по
Ctrl+Пробел.
Изменения в дереве сначала попадают в конфигурацию, а не в базу. Чтобы база получила новую структуру, выполните Конфигурация → Обновить конфигурацию базы данных (клавиша F7). Новичков это сбивает с толку: код написан, а в пользовательском режиме ничего не поменялось.
Справочник по всем объектам и методам языка — Справка → Синтаксис-помощник. Открывайте его постоянно: там описан каждый метод, его параметры и где он доступен — на клиенте или на сервере.
1С:EDT
1C:Enterprise Development Tools — вторая среда, построенная на Eclipse. Работает с конфигурацией как с набором файлов, поэтому удобна для командной разработки и хранения кода в Git.
| Критерий | Конфигуратор | EDT |
|---|---|---|
| Порог входа | Низкий | Выше: проект, рабочая область, связь с базой |
| Требования к компьютеру | Скромные | Нужно больше памяти |
| Командная работа | Хранилище конфигурации | Git, ветки, слияния |
| Проверка кода | Базовая | Встроенные проверки по стандартам |
Для обучения начинайте с конфигуратора. На EDT переходят, когда появляется команда и нужен контроль версий.
Объекты метаданных: на чём держится любая программа 1С
В обычном языке программирования вы сами описываете таблицы, классы и формы. В 1С это делают объекты метаданных. Создали справочник — платформа сама построила таблицу в базе, форму списка, форму элемента и права доступа к нему.
Основные виды объектов:
| Объект | Что хранит | Пример |
|---|---|---|
| Справочник | Списки однотипных элементов | Номенклатура, Контрагенты |
| Документ | Факт хозяйственной операции с датой | Поступление товаров |
| Перечисление | Фиксированный набор значений | Виды оплаты |
| Регистр сведений | Значения в разрезе измерений, часто по датам | Курсы валют, цены |
| Регистр накопления | Остатки и обороты | Остатки товаров на складах |
| Регистр бухгалтерии | Проводки по плану счетов | Хозрасчётный |
| Отчёт, Обработка | Вывод данных, сервисные действия | Ведомость, загрузка из файла |
| Общий модуль | Код, доступный из разных мест | Процедуры расчёта |
Главная связка, которую нужно понять с самого начала: документ → движения → регистр → отчёт. Документ при проведении записывает строки в регистр. Отчёт читает регистр, а не перебирает документы. Так устроены все типовые конфигурации.
В рабочей базе типовой конфигурации не правьте объекты напрямую. Доработки делают в расширении конфигурации — тогда обновления типового решения ставятся без ручного сравнения и объединения.
Синтаксис встроенного языка 1С: как выглядит код
Язык похож на смесь Pascal и Visual Basic, только с русскими словами. У каждого ключевого слова есть английский вариант (Если — If, Процедура — Procedure), но в типовых конфигурациях пишут по-русски.
Базовые правила:
- 🔤 Регистр букв не важен:
СуммаиСУММА— одна переменная. - ➖ Каждый оператор заканчивается точкой с запятой.
- 💬 Комментарий начинается с
//. - 🔄 Типизация динамическая: тип переменной определяется присвоенным значением.
- 📅 Строки в двойных кавычках, даты в одинарных:
'20260101'.
Пример процедуры и функции:
// Возвращает сумму со скидкой
Функция СуммаСоСкидкой(Сумма, ПроцентСкидки) Экспорт
Если ПроцентСкидки <= 0 Тогда
Возврат Сумма;
ИначеЕсли ПроцентСкидки >= 100 Тогда
Возврат 0;
Иначе
Возврат Окр(Сумма * (100 - ПроцентСкидки) / 100, 2);
КонецЕсли;
КонецФункции
Процедура ПоказатьИтог()
Итог = СуммаСоСкидкой(1500, 10);
Сообщить("К оплате: " + Формат(Итог, "ЧДЦ=2"));
КонецПроцедуры
Здесь СуммаСоСкидкой(1500, 10) вернёт 1350. Число склеивается со строкой через Формат: форматная строка ЧДЦ=2 выводит ровно два знака после запятой, и на экране будет «1 350,00».
Циклы и обработка ошибок:
Итого = 0;
Для Каждого Строка Из Объект.Товары Цикл
Итого = Итого + Строка.Сумма;
КонецЦикла;
Попытка
НовыйЭлемент.Записать();
Исключение
Сообщить("Не удалось записать: " + ОписаниеОшибки());
КонецПопытки;
Кроме Для Каждого есть цикл со счётчиком Для Сч = 1 По 10 Цикл и цикл с условием Пока … Цикл. Универсальные коллекции — Массив, Структура, Соответствие, ТаблицаЗначений — создаются через Новый.
Где живёт код: модули и обработчики событий
В 1С нет одной точки входа вроде main(). Код лежит в модулях и срабатывает на события: открыли форму, записали элемент, провели документ.
Основные модули:
- 📄 Модуль объекта — события записи и проведения конкретного документа или элемента.
- 🗂️ Модуль менеджера — действия с объектом в целом, без конкретного экземпляра.
- 🪟 Модуль формы — реакция на действия пользователя: нажатие кнопки, изменение поля.
- 🧰 Общие модули — процедуры, которые вызываются из разных мест.
- 🚀 Модуль сеанса и модуль управляемого приложения — код при старте сеанса и при запуске клиента.
Самый показательный пример — проведение документа. Обработчик ОбработкаПроведения в модуле объекта формирует движения по регистру накопления:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого СтрокаТЧ Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = СтрокаТЧ.Номенклатура;
Движение.Количество = СтрокаТЧ.Количество;
КонецЦикла;
КонецПроцедуры
Писать этот код вручную не обязательно. На закладке «Движения» документа есть Конструктор движений: выбираете регистр, сопоставляете поля, и конструктор вставляет готовый обработчик. Затем его дорабатывают.
Параметр Отказ — способ остановить действие. Установили Отказ = Истина — документ не проведётся, а пользователь увидит ваше сообщение.
Клиент и сервер в коде 1С: директивы компиляции
В управляемом приложении код формы делится на клиентский и серверный. Клиент показывает форму и реагирует на клики. Сервер работает с базой данных. Перед каждой процедурой модуля формы ставится директива:
| Директива | Где выполняется | Доступ к данным формы |
|---|---|---|
&НаКлиенте | На компьютере пользователя | Есть |
&НаСервере | На сервере | Есть, форма передаётся на сервер |
&НаСервереБезКонтекста | На сервере | Нет, только переданные параметры |
&НаКлиентеНаСервереБезКонтекста | Там, откуда вызвали | Нет |
Пример: кнопка на форме считает сумму по базе.
&НаКлиенте
Процедура ПосчитатьСумму(Команда)
Сумма = СуммаПоКонтрагентуНаСервере(Объект.Контрагент);
Сообщить("Сумма: " + Формат(Сумма, "ЧДЦ=2"));
КонецПроцедуры
&НаСервереБезКонтекста
Функция СуммаПоКонтрагентуНаСервере(Контрагент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(СУММА(Док.СуммаДокумента), 0) КАК Сумма
|ИЗ
| Документ.ПриходТовара КАК Док
|ГДЕ
| Док.Контрагент = &Контрагент
| И Док.Проведен";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Возврат Выборка.Сумма;
КонецФункции
Каждый вызов с клиента на сервер — это сетевое обращение. Правило практика: один серверный вызов на одно действие пользователя. Пять вызовов подряд в обработчике кнопки — заметная задержка у пользователя на удалённом подключении.
&НаСервереБезКонтекста предпочтительнее &НаСервере, когда данные формы не нужны: на сервер не передаётся вся форма, вызов легче.
Для общих модулей место выполнения задают флажками в свойствах: «Клиент (управляемое приложение)», «Сервер», «Вызов сервера». Флажок «Вызов сервера» разрешает вызывать процедуры модуля с клиента.
Запросы к данным в 1С
Читать данные из базы правильно запросами, а не перебором объектов. Язык запросов похож на SQL, но со своими особенностями: русские слова (ВЫБРАТЬ, ИЗ, ГДЕ, СГРУППИРОВАТЬ ПО), обращение к реквизитам через точку и виртуальные таблицы регистров.
Пример: остатки товаров на дату, только отрицательные.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату) КАК Остатки
|ГДЕ
| Остатки.КоличествоОстаток < 0";
Запрос.УстановитьПараметр("НаДату", ТекущаяДатаСеанса());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Номенклатура) + ": " + Формат(Выборка.Количество, "ЧГ=0"));
КонецЦикла;
Виртуальная таблица Остатки считает остатки на дату сама, без суммирования приходов и расходов. У регистров накопления есть ещё Обороты и ОстаткиИОбороты.
Текст запроса удобно собирать в Конструкторе запроса: щёлкните правой кнопкой внутри строки текста запроса в модуле и выберите конструктор. Он показывает таблицы, поля, связи и условия на вкладках, а на выходе вставляет готовый текст.
Три ошибки, которые замедляют конфигурацию сильнее всего:
- 🐢 Запрос в цикле. Сто строк — сто обращений к базе. Соберите параметры в массив и сделайте один запрос с условием
В (&Список). - 🔗 Чтение через точку от ссылки в коде.
Документ.Контрагент.ИННна сервере читает из базы весь объект контрагента. Получайте нужные поля в запросе. - 📦 Отбор по измерениям в
ГДЕвместо параметров виртуальной таблицы. Условие лучше ставить в параметре самой таблицыОстатки(&НаДату, Склад = &Склад): платформа отфильтрует до расчёта.
Отчёты в 1С строят на системе компоновки данных (СКД). В схеме пишется тот же запрос, а группировки, отборы и оформление пользователь настраивает сам, без программиста.
Отладка и тестирование конфигурации
Отладчик
В конфигураторе отладка запускается через Отладка → Начать отладку (F5): открывается пользовательский режим, подключённый к отладчику. Основные клавиши:
- 🔴
F9— поставить или снять точку останова на строке. - ⏭️
F10— шаг через: выполнить строку целиком. - ⤵️
F11— шаг с заходом внутрь вызываемой процедуры. - 🧮
Shift+F9— вычислить выражение: посмотреть значение переменной, содержимое таблицы значений или результат запроса.
Когда выполнение остановилось на точке останова, окно «Вычислить выражение» показывает переменные и позволяет раскрыть коллекции. Окно «Стек вызовов» показывает цепочку процедур, которая привела к этой строке.
Для поиска медленных мест есть Отладка → Замер производительности. Включаете замер, выполняете действие, выключаете — получаете список строк с числом вызовов и временем выполнения. Сразу видно, какой запрос или цикл съедает секунды.
Тестирование
Ручная проверка — проводите документы в пользовательском режиме и смотрите движения через отчёт или форму регистра. Для регулярных проверок используют инструменты автотестов:
- ✅ Vanessa Automation — сценарные тесты на языке Gherkin: «Дано… Когда… Тогда…». Тест кликает по формам как пользователь.
- 🧪 YAxUnit — модульные тесты для EDT: проверяют отдельные функции общих модулей.
Начинающему достаточно отладчика и привычки проверять каждую процедуру на краевых случаях: пустая табличная часть, нулевая сумма, незаполненная ссылка.