1С программирование с нуля: основы разработки на платформе 1С:Предприятие

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

1. Введение в 1С:Предприятие и подготовка рабочего окружения

Введение в 1С:Предприятие и подготовка рабочего окружения

1С:Предприятие — одна из самых распространённых платформ для автоматизации учёта и управления в компаниях. В этом курсе мы будем изучать разработку на 1С:Предприятии: как устроена платформа, из чего состоит прикладное решение (конфигурация), как подготовить окружение и создать свою первую информационную базу для экспериментов.

Что такое 1С:Предприятие

Важно сразу разделить два понятия:

  • Платформа 1С:Предприятие — это технологическая основа (движок), которая умеет хранить данные, выполнять код, показывать формы, печатать отчёты, работать с пользователями и правами.
  • Конфигурация — это прикладное решение (то, что именно автоматизируется): справочники, документы, отчёты, обработчики событий, формы, роли и т.д.
  • Примеры известных конфигураций:

  • 1С:Бухгалтерия
  • 1С:Управление торговлей
  • 1С:Зарплата и управление персоналом
  • В рамках курса мы будем создавать учебную конфигурацию, чтобы понять основы.

    > Ключевая идея: платформа — это «двигатель», конфигурация — это «приложение» на этом двигателе.

    Из каких частей состоит рабочая среда 1С-разработчика

    Обычно вам нужны следующие компоненты:

  • Платформа 1С:Предприятие (клиент + инструменты)
  • Информационная база (где хранятся данные и описание прикладного решения)
  • Конфигуратор (режим разработки)
  • Режим 1С:Предприятие (режим работы пользователей)
  • Режимы запуска: Конфигуратор и 1С:Предприятие

    Платформа позволяет открыть одну и ту же информационную базу в разных режимах.

  • Конфигуратор — здесь создают и изменяют конфигурацию: добавляют справочники, документы, формы, пишут код, обновляют структуру базы.
  • 1С:Предприятие — здесь запускают уже готовое решение и выполняют сценарии как пользователь: вводят документы, смотрят отчёты.
  • Для новичка важно запомнить:

  • Если вы проектируете — вам в Конфигуратор.
  • Если вы проверяете результат — вам в 1С:Предприятие.
  • Что такое информационная база

    Информационная база (ИБ) — это место, где хранится:

  • структура данных (например, какие есть справочники и документы)
  • прикладной код (модули)
  • пользовательские данные (элементы справочников, документы, движения и т.д.)
  • Информационные базы бывают разных типов. На старте курса чаще всего используют файловую базу: она проще в развёртывании.

    Файловая и клиент-серверная база

    | Характеристика | Файловая база | Клиент-серверная база | |---|---|---| | Где хранятся данные | В файле на диске | В СУБД (например, MS SQL / PostgreSQL) | | Сложность старта | Низкая | Выше (нужны сервер 1С и настройка СУБД) | | Типичный сценарий | Учёба, прототипы, небольшие решения | Средние и крупные системы, много пользователей | | Масштабирование | Ограничено | Лучше подходит для нагрузки |

    Для обучения мы будем ориентироваться на файловую ИБ, а к серверному варианту вернёмся позже, когда появится база.

    Клиенты 1С: тонкий, толстый и веб

    Платформа поддерживает разные варианты запуска пользовательского режима:

  • Тонкий клиент — наиболее распространённый вариант для работы пользователей (современный стандарт).
  • Толстый клиент — содержит больше функциональности на стороне клиента; в учебных целях может встречаться, но в реальной жизни используется не всегда.
  • Веб-клиент — работа через браузер (зависит от настроек публикации на веб-сервере).
  • На старте достаточно понять: для разработки и проверки обычно хватает стандартной установки платформы и запуска базы локально.

    Где брать официальную информацию

    Документация и материалы по платформе:

  • Портал 1С:Предприятие 8
  • ИТС 1С (справочники и документация)
  • В курсе мы будем опираться на практику и объяснять термины, но полезно сразу привыкать сверяться с официальными источниками.

    Подготовка рабочего окружения

    Ниже — практический, безопасный путь для новичка: поставить платформу, создать учебную базу, убедиться, что вы можете открывать её в Конфигураторе и в режиме 1С:Предприятие.

    Что нужно заранее

  • Компьютер на Windows (в большинстве учебных сценариев так проще)
  • Дистрибутив платформы 1С:Предприятие 8.x (обычно 8.3)
  • Права на установку программ
  • Если в вашей компании установка выполняется централизованно, попросите администратора установить платформу и дать вам доступ к тестовой базе.

    Установка платформы

    Точный порядок шагов зависит от версии дистрибутива, но в общем случае вы делаете следующее:

  • Запускаете установщик платформы.
  • Выбираете установку компонентов.
  • Устанавливаете клиентские компоненты (чтобы запускать 1С:Предприятие).
  • Устанавливаете компоненты разработки (чтобы был доступен Конфигуратор).
  • После установки в системе обычно появляется ярлык или пункт меню для запуска списка информационных баз.

    Создание учебной информационной базы

    Дальше создадим пустую учебную базу.

  • Откройте список информационных баз (стартовое окно 1С).
  • Нажмите Добавить.
  • Выберите создание новой информационной базы.
  • Выберите вариант Создание информационной базы без конфигурации (пустая).
  • Укажите тип базы Файловая.
  • Укажите папку, где будет лежать база.
  • Дайте базе понятное имя, например Учебная_Разработка.
  • После этого база появится в списке. Теперь проверьте запуск в двух режимах.

    Проверка запуска в Конфигураторе

  • В списке баз выделите Учебная_Разработка.
  • Выберите запуск Конфигуратор.
  • Убедитесь, что Конфигуратор открылся без ошибок.
  • Если вы открыли пустую базу, вы увидите дерево конфигурации без прикладных объектов — это нормально.

    Проверка запуска в режиме 1С:Предприятие

  • Закройте Конфигуратор.
  • В списке баз выделите Учебная_Разработка.
  • Запустите 1С:Предприятие.
  • Для пустой базы пользовательский режим будет выглядеть минимально — нам важно лишь убедиться, что запуск работает.

    Типичные ошибки на старте и как их понимать

    Ниже — частые ситуации, с которыми сталкиваются новички.

  • База не запускается из-за блокировки
  • Недостаточно прав на папку файловой базы
  • Открыли базу в режиме 1С:Предприятие, но ожидали увидеть инструменты разработки
  • Открыли Конфигуратор, но не понимаете, где “программа”
  • Как правильно мыслить:

  • Если проблема про папку/файл — это часто права доступа Windows или расположение базы.
  • Если не видите объектов — возможно, база пустая (без конфигурации) или вы не там смотрите.
  • Если нужно создать объект — это делается в Конфигураторе.
  • Мини-чеклист готовности к курсу

    Перед тем как идти дальше, убедитесь, что:

  • платформа 1С установлена
  • вы создали файловую учебную ИБ
  • база открывается в Конфигураторе
  • база открывается в режиме 1С:Предприятие
  • !Схема показывает различие между платформой, конфигуратором, пользовательским режимом и информационной базой

    Что будет дальше

    В следующей статье мы начнём создавать прикладное решение: познакомимся с тем, что такое объекты конфигурации, как они устроены и чем отличаются основные виды (например, справочники и документы). На практике вы сделаете первые объекты в своей учебной базе и увидите результат в режиме 1С:Предприятие.

    2. Конфигурация и метаданные: объекты, свойства, связи

    Конфигурация и метаданные: объекты, свойства, связи

    В прошлой статье вы установили платформу, создали учебную информационную базу и научились открывать её в двух режимах: Конфигуратор (разработка) и 1С:Предприятие (пользовательская работа). Теперь разберёмся, из чего именно состоит прикладное решение в 1С и как оно описывается через метаданные.

    Главная цель статьи: научиться «читать» дерево конфигурации, понимать назначение объектов (справочники, документы, регистры), их свойства и связи между ними.

    Конфигурация, метаданные и база данных

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

  • Конфигурация — набор описаний прикладных объектов (что хранить, как вводить, что показывать, какие права, какой код выполнять).
  • Метаданные — структурированное описание этих объектов: типы объектов, их реквизиты, табличные части, формы, команды, роли и т.д.
  • База данных — физическое хранилище данных пользователей (элементы справочников, документы, движения регистров), структура которого формируется на основе метаданных.
  • Важно разделять:

  • В Конфигураторе вы меняете описание (метаданные).
  • После изменений часто нужно выполнить Обновить конфигурацию базы данных, чтобы платформа создала или изменила таблицы хранения.
  • В режиме 1С:Предприятие вы видите результат: интерфейс, справочники, документы, отчёты.
  • > Упрощённая формула: метаданные задают структуру и поведение, база данных хранит пользовательские данные.

    Полезная отправная точка по платформе и разделам документации: Портал 1С:Предприятие 8.

    Где находятся метаданные в Конфигураторе

    В Конфигураторе есть дерево конфигурации. Именно оно и есть «карта» вашего будущего решения.

    Обычно в дереве вы увидите (в учебной базе — как минимум эти разделы):

  • Общие
  • Справочники
  • Документы
  • Регистры сведений и регистры накопления
  • Перечисления
  • Отчёты и обработки
  • Роли (права доступа)
  • !Схема показывает, где в Конфигураторе искать метаданные и свойства объекта

    Объект метаданных: из чего он состоит

    Любой прикладной объект (например, справочник или документ) в 1С можно понимать как сущность с несколькими «слоями»:

  • Свойства объекта — общие настройки (имя, синоним, использование, иерархия, нумерация и т.д.).
  • Данные объекта — то, что хранится:
  • - Реквизиты (поля) - Табличные части (строки)
  • Представление пользователю:
  • - Формы (как вводить и смотреть) - Команды (что можно сделать) - Макеты (печатные формы, шаблоны)
  • Поведение (логика):
  • - Модули и обработчики событий

    Важные термины, которые дальше будут постоянно встречаться:

  • Имя — техническое имя объекта (используется в коде).
  • Синоним — человеко-понятное название (то, что видит пользователь в интерфейсе).
  • Реквизит — отдельное поле данных (например, ДатаРождения, Комментарий, Сумма).
  • Тип реквизита — какие значения могут храниться (строка, число, дата, ссылка на справочник, перечисление и т.д.).
  • Справочники: «списки сущностей»

    Справочник — это объект метаданных для хранения относительно постоянных данных: номенклатуры, контрагентов, сотрудников, складов.

    Что есть у справочника

  • Элементы справочника — основные записи.
  • Иногда есть группы (если включена иерархия) — для классификации элементов.
  • Почти всегда есть реквизиты, которые дополняют элемент.
  • Ключевые свойства справочника

  • Иерархический — можно ли заводить группы и строить дерево.
  • Подчинённый (владельцы) — можно ли сделать справочник зависимым от другого объекта (например, «Контактные лица» подчинены «Контрагенту»).
  • Представление — как элемент будет отображаться в ссылках и списках.
  • Что такое «ссылка» на справочник

    Когда вы выбираете контрагента в документе, в документе обычно хранится не «текст названия», а ссылка на элемент справочника.

    Это даёт важные преимущества:

  • единый источник данных (переименовали контрагента в справочнике — везде стало актуально)
  • целостность (нельзя выбрать то, чего нет)
  • удобство связей и поиска
  • Документы: «события хозяйственной жизни»

    Документ фиксирует факт операции: поступление товара, реализация, перемещение, начисление зарплаты.

    Что есть у документа

  • Шапка документа — реквизиты документа (например, контрагент, склад, договор).
  • Табличные части — строки (например, список товаров с количеством и ценой).
  • Проведение — механизм, который превращает документ в движения по регистрам (если документ «движущий»).
  • Номер и дата

    У документа по умолчанию есть базовые поля (платформа хранит их сама):

  • Дата
  • Номер
  • Настройки нумерации задаются в свойствах документа (например, уникальность в пределах года).

    Формы документа

    Документ обычно имеет формы:

  • форма объекта (ввод и редактирование)
  • форма списка
  • Платформа умеет генерировать формы автоматически, но разработчик может их доработать.

    Регистры: «хранилища учёта»

    Регистры — это специальные объекты метаданных для хранения учётных данных.

    Регистр сведений

    Регистр сведений хранит факты/значения параметров:

  • цена товара на дату
  • статус клиента
  • курсы валют
  • Состав регистра:

  • Измерения — «по каким разрезам» храним (например, Номенклатура, Дата).
  • Ресурсы — «что храним как значение» (например, Цена).
  • Иногда реквизиты — дополнительные поля, не являющиеся ни измерениями, ни ресурсами.
  • Регистр накопления

    Регистр накопления хранит количественно-суммовой учёт и остатки, обычно в логике прихода/расхода:

  • остатки товаров на складе
  • взаиморасчёты с контрагентами
  • Ключевая идея: документ при проведении делает движения (записи) в регистре накопления, а платформа затем может считать остатки.

    !Диаграмма показывает связь документа, проведения и движений по регистрам

    Перечисления и константы: справочные типы для логики

    Перечисления

    Перечисление — набор фиксированных значений, которые удобно использовать в реквизитах и в коде.

    Примеры:

  • ВидыОплаты: Наличные, Карта, Безнал
  • СтатусыЗаказа: Новый, ВРаботе, Завершён, Отменён
  • Плюсы перечислений:

  • нельзя «ошибиться в тексте»
  • удобно сравнивать в коде
  • значения единообразны во всей системе
  • Константы

    Константа — одно значение «на всю базу».

    Примеры:

  • ставка НДС по умолчанию
  • валюта управленческого учёта
  • Связи между объектами: как всё склеивается в систему

    Метаданные важны не только тем, что описывают отдельные сущности, но и тем, что задают связи.

    Связи через типы реквизитов

    Самая распространённая связь — когда реквизит одного объекта имеет тип:

  • ссылка на справочник
  • ссылка на документ
  • перечисление
  • Пример: в документе «Заказ» реквизит Контрагент имеет тип СправочникСсылка.Контрагенты.

    Связи через подчинение (владельца)

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

    Пример: справочник «КонтактныеЛица» подчинён справочнику «Контрагенты». Тогда контактные лица удобно хранить и отбирать в контексте конкретного контрагента.

    Связи через проведение и регистры

    Это связь уровня «бизнес-логики»:

  • документ описывает событие
  • проведение превращает событие в движения по регистрам
  • регистры становятся основой для отчётов и контроля остатков
  • Формы, команды и роли как связи «пользователь ↔ данные»

  • Форма связывает объект с интерфейсом (как пользователь вводит/видит данные).
  • Команды связывают сценарии (что можно сделать на форме).
  • Роли связывают пользователей с доступами (кто что может видеть и менять).
  • Где живёт код: модули и события

    В 1С логика обычно пишется в модулях. На старте важно знать, что модули бывают «привязаны» к объектам.

    Частые места, где появляется код:

  • Модуль объекта (например, документа) — логика самого объекта, обработка событий записи, проведения.
  • Модуль формы — логика интерфейса (реакция на нажатия, изменение полей).
  • Общие модули — общая библиотека процедур/функций для повторного использования.
  • Событийная модель (упрощённо): платформа вызывает ваш код в ответ на действия пользователя или системы.

    Примеры событий:

  • перед записью
  • при изменении реквизита на форме
  • при проведении
  • Мини-практика: первые метаданные в учебной базе

    Сделайте в вашей учебной ИБ несколько объектов, чтобы «пощупать» метаданные.

  • Создайте справочник Номенклатура.
  • Добавьте реквизиты:
  • - Артикул (Строка) - ЕдиницаИзмерения (Строка)
  • Создайте документ ПоступлениеТоваров.
  • В документ добавьте реквизит шапки Склад (пока можно Строка, позже заменим на справочник).
  • Добавьте табличную часть Товары с реквизитами:
  • - Номенклатура (СправочникСсылка.Номенклатура) - Количество (Число) - Цена (Число)
  • Выполните Обновить конфигурацию базы данных.
  • Запустите режим 1С:Предприятие и убедитесь, что объекты появились в интерфейсе, и вы можете вводить элементы справочника и документ.
  • Если какие-то пункты пока выглядят непривычно — это нормально: в следующих темах мы отдельно разберём формы, типы данных и начнём писать код.

    Главное, что нужно унести из статьи

  • Конфигурация в 1С описывается метаданными: объектами, их свойствами, данными и логикой.
  • Справочники — для «сущностей», документы — для «событий», регистры — для «учёта».
  • Связи чаще всего строятся через типы реквизитов (ссылки), подчинение и проведение документов в регистры.
  • Изменения метаданных нужно применять к базе данных через обновление конфигурации БД.
  • В следующей теме логично перейти к типам данных, формам и первым простым сценариям на встроенном языке: чтобы метаданные начали «оживать» за счёт кода и правил поведения.

    3. Основы языка 1С: типы данных, операторы, модули

    Основы языка 1С: типы данных, операторы, модули

    В прошлых статьях вы подготовили рабочее окружение, создали учебную информационную базу и познакомились с метаданными: справочниками, документами, регистрами и их реквизитами. Теперь сделаем следующий шаг: разберём встроенный язык 1С (часто его называют BSL), на котором пишется логика объектов и форм.

    Цель статьи — дать базовый набор знаний, чтобы вы могли:

  • читать простой код в модулях
  • писать элементарные проверки и вычисления
  • понимать, где именно в конфигурации живёт код и когда он выполняется
  • Где «живёт» код в 1С

    В 1С код размещается в модулях. Модуль — это текст программы, привязанный к конкретному месту конфигурации.

    Основные модули, с которыми вы столкнётесь в учебных задачах:

  • Модуль объекта (у документа, справочника) — логика конкретного экземпляра (например, проверка перед записью документа).
  • Модуль менеджера (у документа, справочника) — логика уровня «коллекции» (например, общие процедуры создания или поиска).
  • Модуль формы — реакции интерфейса на действия пользователя (нажатия, изменения полей).
  • Общий модуль — библиотека функций и процедур для повторного использования.
  • !Схема, показывающая какие бывают модули и как пользовательские действия приводят к выполнению кода

    Важно: изменение кода в модуле не меняет структуру таблиц базы данных. Но если вы меняли метаданные (реквизиты, табличные части), то по-прежнему нужно выполнять Обновить конфигурацию базы данных.

    Общие принципы языка 1С

    Регистр символов и идентификаторы

  • Ключевые слова языка (например, Если, Для, КонецЕсли) не чувствительны к регистру.
  • Имена переменных и процедур в коде на практике тоже обычно пишут без привязки к регистру, но хороший стиль — придерживаться единого оформления.
  • Комментарии

    Есть два основных вида комментариев:

    Переменные

    Переменная появляется в момент первого присваивания:

    Отдельное объявление переменной не обязательно (это отличает 1С от многих других языков).

    Типы данных: что может храниться в переменных

    Встроенный язык 1С динамически типизирован: тип значения определяется тем, что сейчас лежит в переменной.

    Простые (скалярные) типы

    | Тип | Пример | Где встречается | |---|---|---| | Строка | "ABC" | наименование, комментарии, артикул | | Число | 10, 12.5 | количество, цена, сумма | | Дата | ТекущаяДата() | даты документов, период | | Булево | Истина, Ложь | флаги: проведён/не проведён, активен/не активен |

    Пример простых вычислений и конкатенации:

    Специальные значения: Неопределено и Null

  • Неопределено — означает «значение не задано в терминах 1С». Часто используется для проверки незаполненных переменных, реквизитов, результатов поиска.
  • Null — используется реже; обычно встречается при интеграциях (например, внешние источники/COM), и как начинающему разработчику вам чаще будет достаточно Неопределено.
  • Пример проверки:

    Практическое правило для новичка: в типовых проверках в 1С чаще проверяют заполненность через ЗначениеЗаполнено().

    Ссылочные типы: «ссылка», «объект», «менеджер»

    Когда вы создавали реквизит типа СправочникСсылка.Номенклатура, вы столкнулись с ключевой идеей 1С: данные часто хранятся не строкой, а ссылкой.

    У одного и того же прикладного объекта есть разные «представления» на уровне типов:

  • СправочникСсылка.Номенклатура — ссылка на элемент справочника (лёгкая, хранится в реквизитах и табличных частях).
  • СправочникОбъект.Номенклатура — сам объект (с реквизитами), который можно записать.
  • СправочникМенеджер.Номенклатура — «точка входа» для работы со справочником в целом (создать элемент, найти, выбрать).
  • Пример (общая логика, без привязки к форме):

    Здесь:

  • Справочники.Номенклатура — менеджер
  • СоздатьЭлемент() возвращает объект
  • Ссылка возвращает ссылку
  • Коллекции: массив, структура, соответствие, таблица значений

    Это «рабочие лошадки» прикладного кода.

    Массив — упорядоченный список значений.

    Структура — набор пар ключ-значение (ключ — строка).

    Соответствие — тоже ключ-значение, но ключ может быть не только строкой.

    ТаблицаЗначений — табличная структура в памяти (похожа на «мини-таблицу»).

    Операторы и управляющие конструкции

    Присваивание

    Арифметика и сравнения

    Часто используются:

  • +, -, *, /
  • =, <>, <, >, <=, >=
  • Пример:

    Логические операции

  • И — логическое «и»
  • ИЛИ — логическое «или»
  • НЕ — логическое отрицание
  • Условный оператор Если

    Базовая форма:

    Расширенная форма:

    Циклы

    Для — когда заранее известен диапазон:

    Пока — когда условие контролирует завершение:

    Для каждого — самый частый вариант при обходе коллекций:

    Процедуры и функции

  • Процедура — выполняет действия, но не возвращает результат.
  • Функция — возвращает значение через Возврат.
  • Примеры:

    Передача параметров и Знач

    Если вы передаёте в процедуру изменяемый объект (например, массив или таблицу значений), изменения могут быть видны снаружи, потому что фактически вы работаете с тем же объектом.

    Ключевое слово Знач помогает передать копию значения.

    На старте достаточно запомнить: если вы меняете коллекцию внутри процедуры и видите «неожиданные изменения», посмотрите, не нужно ли использовать Знач.

    Обработка ошибок: Попытка ... Исключение

    Ошибки могут возникать при записи, при делении, при доступе к отсутствующему реквизиту. Базовая конструкция:

    Это не «замена правильной логики», а способ корректно обработать редкие сбои (например, внешние интеграции или ошибки ввода).

    Клиент и сервер: почему важен контекст выполнения

    В 1С часть кода выполняется на компьютере пользователя (клиент), а часть — на сервере 1С (или в серверной части платформы даже в файловой базе). Это влияет на:

  • скорость работы
  • доступность данных
  • возможность показывать сообщения и взаимодействовать с формой
  • Чтобы управлять местом выполнения, используют директивы компиляции (аннотации):

  • &НаКлиенте — код выполняется на клиенте (обычно обработчики формы).
  • &НаСервере — код выполняется на сервере.
  • &НаСервереБезКонтекста — серверный код без доступа к контексту формы (часто безопаснее и переиспользуемее).
  • Пример: обработчик кнопки в форме (клиент) вызывает вычисление на сервере.

    На старте полезно держать в голове простое правило:

  • всё, что связано с интерфейсом формы (кнопки, поля, сообщения пользователю), — чаще клиент
  • всё, что связано с данными, записью, поиском, тяжёлыми расчётами, — чаще сервер
  • Как это связано с объектами конфигурации из прошлой темы

    Вы уже создали справочник Номенклатура и документ ПоступлениеТоваров. Теперь вы можете добавлять «поведение».

    Примеры того, что обычно делают кодом на начальном уровне:

  • в документе перед записью проверять заполненность шапки и строк
  • автоматически рассчитывать сумму строки Количество * Цена
  • запрещать проведение, если условия не соблюдены
  • на форме реагировать на изменение реквизита и пересчитывать итоги
  • Пример простой проверки в модуле объекта документа (идея, не привязана к конкретной структуре вашего документа):

    Здесь появляются сразу несколько ключевых вещей:

  • событие объекта (платформа сама вызывает процедуру в нужный момент)
  • управляющие конструкции Если и Для каждого
  • переменная Отказ, которой можно запретить запись
  • Как быстро ориентироваться в ошибках компиляции

    Когда вы пишете код в модуле, конфигуратор проверяет синтаксис. Типичные ошибки новичков:

  • забыли КонецЕсли или КонецЦикла
  • перепутали кавычки в строке
  • опечатались в имени реквизита
  • используете переменную, которая в этом модуле не существует (например, пытаетесь обратиться к элементам формы из серверного кода)
  • Практика: после небольших изменений чаще делайте проверку и запуск, чтобы легче находить источник ошибки.

    Главное, что нужно унести из статьи

  • Код 1С пишется во встроенном языке и хранится в модулях.
  • Язык динамически типизирован: тип значения определяется тем, что лежит в переменной.
  • Базовые типы: строка, число, дата, булево; важны Неопределено и проверки заполненности.
  • Ключевые конструкции: Если, циклы Для, Пока, Для каждого, процедуры и функции.
  • В 1С важно понимать контекст выполнения (клиент/сервер) и директивы &НаКлиенте, &НаСервере.
  • Дальше логично переходить к более предметной практике: обработчикам событий объектов и форм, а также к тому, как аккуратно работать с реквизитами справочников и документов в коде.

    Для общей навигации по платформе используйте официальный портал: Портал 1С:Предприятие 8.

    4. Формы и интерфейс: управляемые формы, события, команды

    Формы и интерфейс: управляемые формы, события, команды

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

    Цель этой статьи — чтобы вы могли:

  • уверенно отличать форму списка от формы объекта
  • понимать разницу между реквизитами формы и реквизитами объекта
  • создавать простую кнопку-команду и писать обработчик
  • правильно выбирать, где писать код: в модуле формы, объекта, общем модуле
  • Для общей навигации по платформе и терминологии полезен официальный портал: Портал 1С:Предприятие 8.

    Что такое управляемые формы

    Управляемая форма — это стандартный механизм построения интерфейса в современных конфигурациях 1С. Платформа сама управляет жизненным циклом формы, отрисовкой элементов и вызывает ваш код в нужные моменты.

    У формы есть несколько ключевых частей:

  • Реквизиты формы — данные, с которыми работает форма (например, текущий выбранный склад на форме, итоги, фильтры, флажки)
  • Элементы формы — то, что видит пользователь: поля ввода, таблицы, кнопки, группы, страницы
  • Команды — действия, которые можно выполнить (нажатие кнопки, пункт меню)
  • События — моменты, когда платформа вызывает ваш код (например, форма открылась, реквизит изменился, нажата команда)
  • Важно: форма — это не просто “окно”. Это объект, который связывает интерфейс и данные.

    Какие формы бывают и зачем они нужны

    На старте чаще всего встречаются формы двух типов.

  • Форма списка — показывает список элементов справочника или список документов
  • Форма объекта — открывает конкретный элемент справочника или конкретный документ для просмотра и редактирования
  • Пример на ваших объектах из прошлых статей:

  • справочник Номенклатура:
  • - форма списка: список товаров - форма объекта: карточка товара
  • документ ПоступлениеТоваров:
  • - форма списка: список поступлений - форма объекта: конкретное поступление (шапка и табличная часть)

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

    Реквизиты объекта и реквизиты формы: в чём разница

    Новички часто путают, где именно лежат данные.

  • Реквизиты объекта — это данные, которые хранятся в базе (реквизиты справочника, документа, строки табличной части)
  • Реквизиты формы — это данные “для работы формы” (например, временные вычисления, параметры отбора, вспомогательные поля)
  • Ключевое отличие:

  • реквизит объекта имеет смысл с точки зрения хранения
  • реквизит формы имеет смысл с точки зрения интерфейса и сценария работы
  • Практический пример:

  • в документе ПоступлениеТоваров реквизит Склад в шапке — это реквизит объекта (он должен сохраниться)
  • реквизит формы ПоказыватьТолькоНулевыеЦены — это реквизит формы (пользователь включил фильтр на время работы)
  • Если вы поместите “временный” флажок в объект, он начнёт сохраняться в базу и “засорять” данные. Если же вы попытаетесь хранить важные реквизиты документа только в форме, они пропадут после закрытия.

    Модуль формы: где пишется интерфейсная логика

    У каждой формы есть модуль формы — в нём обычно пишут код, который:

  • реагирует на действия пользователя
  • управляет доступностью и видимостью элементов
  • вызывает серверные процедуры для чтения/записи/расчётов
  • Типовые ситуации, когда нужен модуль формы:

  • пользователь изменил поле Цена в строке табличной части — нужно пересчитать Сумма
  • пользователь нажал кнопку РассчитатьИтог — нужно посчитать общий итог по строкам
  • при открытии формы нужно заполнить реквизиты формы значениями по умолчанию
  • События формы: когда платформа вызывает ваш код

    Событие — это заранее определённый момент в жизни формы или элемента формы, когда платформа вызывает вашу процедуру.

    Условно события можно разделить на группы.

  • События жизненного цикла формы
  • События изменения данных
  • События команд
  • События жизненного цикла формы

    Вы будете часто встречать такие сценарии:

  • форма создаётся (можно подготовить данные)
  • форма открывается (можно настроить интерфейс)
  • Точные названия событий и их состав зависят от версии платформы и типа формы, но общая идея одна: часть кода выполняется на сервере при создании, а часть — на клиенте при взаимодействии.

    Практическое правило:

  • подготовка данных, чтение из базы, заполнение таблиц — чаще сервер
  • управление элементами формы, реакции на ввод, сообщения пользователю — чаще клиент
  • События изменения данных

    Самое полезное для новичка событие — при изменении реквизита.

    Пример: пересчёт суммы строки табличной части.

    Предположим, в табличной части Товары у вас есть Количество и Цена, а вы хотите поддерживать реквизит Сумма.

    В модуле формы можно сделать так:

    Смысл примера:

  • события ...ПриИзменении срабатывают, когда пользователь изменил значение
  • вы не дублируете расчёт в двух местах, а выносите его в общую процедуру
  • Если у вас пока нет реквизита Сумма, вы можете добавить его в табличную часть документа как реквизит объекта. Это будет удобнее, чем держать сумму только “на экране”.

    Команды: как пользователь запускает действия

    Команда — это описанное действие, которое может быть доступно на форме как:

  • кнопка
  • пункт меню
  • элемент командной панели
  • Команда обычно имеет обработчик в модуле формы.

    Пример команды: “Рассчитать итог документа”

    Допустим, вы хотите кнопку, которая считает общую сумму по табличной части и показывает её пользователю.

  • В форме добавляете реквизит формы ИтогСумма (тип число).
  • Добавляете команду РассчитатьИтог.
  • Добавляете кнопку на форму, привязанную к команде.
  • Пишете обработчик команды.
  • Код в модуле формы:

    Обратите внимание на важную деталь:

  • Объект в форме объекта документа — это сам редактируемый документ
  • обращение Объект.Товары означает, что вы работаете с данными документа, а не с временной таблицей
  • Если вы создадите отдельную таблицу значений на форме и будете считать по ней, легко получить рассинхронизацию: пользователь поменял строку, но вы считаете по старому набору.

    Разделение логики: форма, объект, общий модуль

    Чтобы конфигурация росла без хаоса, важно с самого начала привыкать разделять ответственность.

    Что писать в модуле формы

    В модуле формы обычно оставляют:

  • реакции на действия пользователя
  • пересчёты “на лету”
  • вызов серверных функций
  • управление элементами формы (видимость, доступность)
  • Что писать в модуле объекта

    В модуле объекта документа или справочника обычно пишут:

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

    Что писать в общем модуле

    Общий модуль — хорошее место для:

  • повторно используемых функций расчёта
  • общих процедур (например, форматирование, валидация, сервисные методы)
  • Практическая польза: вы не копируете одинаковый код по разным формам.

    Клиент и сервер в формах: как не “сломать” выполнение

    Управляемые формы почти всегда работают в модели “клиент вызывает сервер”.

    Типичная схема:

  • пользователь нажал кнопку
  • сработала клиентская процедура (может обращаться к элементам формы)
  • она вызвала серверную функцию (читает базу, делает расчёт)
  • результат вернулся на клиент и показан на форме
  • !Схема потока выполнения команды в управляемой форме: клиент → сервер → клиент

    Мини-правила, которые экономят часы отладки:

  • всё, что трогает Элементы формы, должно быть на клиенте
  • всё, что активно читает данные, выполняет запросы и тяжёлые вычисления, лучше на сервере
  • если вы хотите вынести расчёт “в библиотеку”, делайте серверную функцию &НаСервереБезКонтекста, чтобы она не зависела от формы
  • Элементы формы: видимость и доступность

    Частый интерфейсный сценарий: в зависимости от условий скрывать поле или запрещать редактирование.

  • Видимость — элемент видно или нет
  • Доступность — элемент можно редактировать или он “серый”
  • Пример: если пользователь не выбрал склад, запретим проведение (или, в учебном варианте, просто подсветим, что нужно заполнить).

    Примечание: конкретные имена элементов (КомандаПровести) зависят от того, как вы назвали кнопку/элемент в форме.

    Как связать форму с метаданными из прошлых тем

    В прошлой статье про метаданные вы создавали справочник и документ. Теперь полезно “приземлить” это на интерфейс.

    Для объекта метаданных (справочник/документ) обычно есть цепочка:

  • Метаданные задают реквизиты и табличные части
  • Платформа (или вы) создаёт формы
  • Форма отображает реквизиты через элементы
  • Пользователь меняет значения
  • События формы вызывают ваш код
  • При записи и проведении включается логика объекта
  • Эта цепочка — основа практически любой прикладной задачи в 1С.

    Типичные ошибки новичков в формах

    Ниже — самые частые проблемы и как о них думать.

  • Пытаются в &НаСервере обратиться к Элементы формы
  • Делают важную проверку только в форме, но забывают про запись “в обход формы”
  • Хранят временные параметры интерфейса в реквизитах объекта и получают “мусорные” данные в базе
  • Дублируют один и тот же расчёт в нескольких обработчиках вместо общей процедуры
  • Если вы видите странное поведение, полезная диагностика:

  • где выполняется код (клиент/сервер)
  • к чему обращается код (объект/форма/элементы)
  • когда вызывается код (какое событие)
  • Главное из статьи

  • Управляемая форма — основной интерфейсный механизм 1С: реквизиты формы, элементы, команды и события.
  • Команды запускают действия пользователя; обработчики обычно находятся в модуле формы.
  • Проверки “целостности данных” лучше дублировать на уровне объекта (например, ПередЗаписью), чтобы правила работали всегда.
  • Важно разделять клиентский код (интерфейс) и серверный код (данные и тяжёлые операции).
  • В следующем шаге курса обычно переходят к более “данным” вещам: запросам, выборкам, заполнению табличных частей, а также к более строгим правилам проведения документов и движений по регистрам. Это даст ощущение полноценного прикладного решения: интерфейс → документ → движения → отчёт.

    5. Данные в 1С: справочники, документы, регистры и проведение

    Данные в 1С: справочники, документы, регистры и проведение

    В предыдущих темах вы создали учебную базу, познакомились с метаданными (справочники, документы, регистры), освоили основы языка 1С и научились работать с управляемыми формами, событиями и командами.

    Теперь соберём это в одну из главных “прикладных” идей 1С: пользователь вводит данные в справочники и документы, а учёт и контроль выполняются через регистры, которые заполняются при проведении документов.

    !Общая картина: мастер-данные в справочниках, события в документах, учёт в регистрах через проведение

    Как в 1С обычно устроены данные

    В большинстве прикладных решений данные логически делятся на три слоя.

  • Справочники: относительно постоянные сущности (что это такое).
  • Документы: события и операции (что произошло).
  • Регистры: учётные “таблицы фактов” (какой получился результат и как его анализировать).
  • Эти слои связаны так.

  • В документе в реквизитах и табличных частях чаще всего хранятся ссылки на элементы справочников.
  • При проведении документ формирует движения и записывает их в регистры.
  • Отчёты и проверки обычно строятся по данным регистров, а не по списку документов.
  • Справочники как мастер-данные

    Справочник хранит “справочную” информацию, которую многократно используют в разных местах.

    Типовые примеры.

  • Номенклатура: товары/услуги.
  • Склады: места хранения.
  • Контрагенты: клиенты и поставщики.
  • Почему это важно.

  • В документе вы храните ссылку на номенклатуру, а не строку с её названием.
  • Если поменять наименование товара в справочнике, оно корректно отобразится везде.
  • Что важно помнить разработчику.

  • Справочник задаёт “единый источник истины” для сущности.
  • Проверки целостности справочника (например, обязательность реквизита) лучше делать на уровне объекта (например, в ПередЗаписью).
  • Документы как события

    Документ фиксирует факт операции.

  • Поступление товара.
  • Реализация товара.
  • Перемещение.
  • Структура документа обычно такая.

  • Шапка: общие реквизиты (дата, номер, склад, контрагент).
  • Табличные части: строки (товары, количества, цены).
  • Документ может быть.

  • Записан: существует как запись в базе (можно открыть и редактировать).
  • Проведён: дополнительно отразился в учёте через движения по регистрам.
  • Практическая логика.

  • Запись отвечает на вопрос: “документ введён и сохранён?”
  • Проведение отвечает на вопрос: “документ повлиял на учёт?”
  • Регистры как основа учёта

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

    В учебной практике чаще всего начинают с двух типов.

  • Регистр накопления: остатки и обороты (приход/расход).
  • Регистр сведений: значения параметров (например, цена на дату).
  • Регистр накопления

    Регистр накопления используют, когда нужно считать.

  • Остатки товаров.
  • Обороты (сколько пришло и сколько ушло).
  • Термины регистра накопления.

  • Измерения: разрезы учёта (по чему группируем).
  • Ресурсы: что накапливаем (количество, сумма).
  • Вид движения: приход или расход.
  • Пример учебного регистра накопления ТоварыНаСкладах.

  • Измерения: Склад, Номенклатура.
  • Ресурсы: Количество, Сумма.
  • Смысл.

  • Документ “Поступление” делает приход.
  • Документ “Реализация” делает расход.
  • Остаток на складе рассчитывается платформой по данным регистра.
  • Регистр сведений

    Регистр сведений используют, когда нужно хранить “значение параметра”, часто с привязкой ко времени.

    Примеры.

  • Цена номенклатуры на дату.
  • Курс валют на дату.
  • Статус клиента.
  • Термины регистра сведений.

  • Измерения: по чему различаем записи (например, номенклатура).
  • Ресурсы: что является значением (например, цена).
  • Периодичность: нужно ли хранить историю по датам.
  • Пример учебного регистра сведений ЦеныНоменклатуры.

  • Измерения: Номенклатура.
  • Ресурсы: Цена.
  • Периодичность: по времени (если хотите историю цен).
  • Проведение документа: что это такое

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

    Важно разделять.

  • Документ хранит “как ввели операцию”.
  • Регистры хранят “как операция повлияла на учёт”.
  • При проведении обычно происходит следующее.

  • Платформа вызывает обработчик проведения документа (в модуле объекта документа).
  • В обработчике вы формируете наборы записей движений по нужным регистрам.
  • Платформа записывает движения.
  • После этого отчёты и проверки могут опираться на актуальные остатки.
  • Почему нельзя строить учёт “только по документам”

    Если пытаться получать остатки, суммируя табличные части документов “на лету”, быстро появляются проблемы.

  • Сложные отборы и группировки начинают тормозить.
  • Нужно учитывать отмены, исправления, разные виды операций.
  • Возникает риск “разъехать” с логикой отчётов.
  • Регистры — стандартный путь в 1С: документы пишут факты, регистры дают быстрый и единый источник для анализа.

    Практическая мини-модель для учебной базы

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

    Что создаём в метаданных

  • Справочник Номенклатура (у вас уже есть).
  • Справочник Склады (если у вас в документе Склад пока строка, лучше заменить на ссылку на справочник).
  • Документ ПоступлениеТоваров (у вас уже есть).
  • Регистр накопления ТоварыНаСкладах.
  • Структура регистра ТоварыНаСкладах.

  • Измерения: Склад (СправочникСсылка.Склады), Номенклатура (СправочникСсылка.Номенклатура).
  • Ресурсы: Количество (Число), Сумма (Число).
  • Как выглядит проведение в коде

    Проведение настраивается в документе.

  • В свойствах документа включают возможность проведения.
  • В модуле объекта документа реализуют обработчик проведения.
  • Ниже пример для учебной логики поступления: на каждую строку табличной части создаём движение прихода в регистр накопления.

    Что здесь важно понять.

  • ОбработкаПроведения — стандартная точка входа: платформа вызывает её сама при проведении.
  • Движения — это “контейнер” наборов записей по регистрам для текущего документа.
  • Добавить() создаёт запись движения.
  • ВидДвиженияНакопления.Приход означает увеличение остатков.
  • Измерения (Склад, Номенклатура) задают разрез, ресурсы (Количество, Сумма) — то, что учитываем.
  • > Важно: если документ потом перепроводят или отменяют проведение, платформа корректно перезаписывает/удаляет движения, чтобы учёт оставался согласованным.

    Отмена проведения и перепроведение

    Проведение — не “навсегда”. Пользователь может изменить документ и снова провести его.

    Что происходит концептуально.

  • При перепроведении платформа пересоздаёт движения так, чтобы они соответствовали текущему состоянию документа.
  • При отмене проведения движения удаляются из регистров, а документ остаётся записанным.
  • Почему это удобно.

  • Учёт автоматически подстраивается под изменения.
  • Разработчику не нужно вручную “искать старые движения и удалять”, если он использует стандартный механизм движений документа.
  • Как получать результаты учёта

    Данные регистров обычно читают.

  • Для отчётов и аналитики.
  • Для контроля (например, запретить расход, если не хватает остатка).
  • На старте важно запомнить: проверки остатков делаются по регистру накопления, а не по документам.

    Когда вы дойдёте до темы запросов, вы будете строить выборки по регистрам и получать остатки/обороты. Сейчас достаточно понимать направление.

  • Документ при проведении пишет движения.
  • Регистр хранит факты.
  • Запросы и отчёты читают регистр.
  • Официальные материалы и навигация по платформе: Портал 1С:Предприятие 8.

    Типичные ошибки новичков при работе с данными и проведением

  • Пишут проверки только в форме, а документ можно провести программно или из другой формы.
  • Хранят “учёт” в документе, а потом пытаются считать остатки по документам.
  • Забывают включить запись движений и удивляются, что в регистре пусто (Записывать = Истина).
  • Не обновляют конфигурацию базы данных после добавления регистра/измерений/ресурсов.
  • Путают реквизиты документа и измерения регистра: в регистр должны попадать именно те данные, по которым вы хотите анализировать остатки.
  • Главное из статьи

  • Справочники — мастер-данные (сущности), на которые ссылаются документы.
  • Документы — события, которые фиксируют операцию.
  • Регистры — учётные данные для анализа и контроля.
  • Проведение — механизм, который превращает документ в движения по регистрам.
  • Следующий логичный шаг после этой темы — научиться читать данные регистров: запросы, получение остатков, заполнение табличных частей по данным учёта и построение простых отчётов.

    6. Запросы и отчёты: язык запросов 1С и СКД

    Запросы и отчёты: язык запросов 1С и СКД

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

    В 1С это обычно делается двумя ключевыми инструментами:

  • Язык запросов 1С (получение данных из базы: отборы, группировки, соединения)
  • СКД (система компоновки данных) — механизм сборки отчётов из наборов данных, группировок, ресурсов и настроек
  • > Упрощённо: запрос достаёт данные, СКД красиво и настраиваемо показывает их пользователю.

    Для ориентира по терминологии и платформенным разделам используйте официальный ресурс: Портал 1С:Предприятие 8.

    !Общая картина, откуда берутся данные отчёта и какие этапы они проходят

    Зачем нужны запросы, если есть документы и регистры

    Когда пользователь вводит документ, данные оказываются в двух местах:

  • в самом документе (как ввели операцию)
  • в регистрах (как операция повлияла на учёт)
  • Отчёты почти всегда строят по регистрам, потому что:

  • в регистрах данные уже приведены к аналитике (измерения и ресурсы)
  • проще получать остатки и обороты
  • запросы к регистрам обычно быстрее и логически правильнее, чем «просуммировать все документы»
  • В учебной базе у вас уже есть подходящая модель:

  • документ ПоступлениеТоваров
  • регистр накопления ТоварыНаСкладах (измерения: Склад, Номенклатура; ресурсы: Количество, Сумма)
  • Дальше мы научимся получать:

  • остатки товаров по складам
  • обороты за период
  • простые сводные отчёты
  • Язык запросов 1С: что это и где используется

    Запрос в 1С — это объект платформы, который выполняет текст запроса на языке запросов 1С и возвращает результат.

    Где запросы встречаются чаще всего:

  • в обработчиках (заполнение табличных частей, проверки)
  • в отчётах (в том числе внутри СКД)
  • в фоновых заданиях и регламентных операциях
  • Язык запросов похож на SQL по смыслу, но:

  • использует свои ключевые слова на русском (ВЫБРАТЬ, ГДЕ, СГРУППИРОВАТЬ ПО)
  • умеет работать со специальными источниками данных 1С (например, виртуальные таблицы регистров)
  • работает с типами 1С (ссылки на справочники, документы, перечисления)
  • Базовая структура запроса

    Скелет запроса выглядит так:

    Не все части обязательны. Часто достаточно ВЫБРАТЬ и ИЗ.

    Пример: вывести номенклатуру

    Если у вас есть справочник Номенклатура, можно получить список элементов запросом:

    Термины, которые важно понимать:

  • Справочник.Номенклатура — таблица, связанная со справочником
  • КАК — псевдоним (короткое имя для обращения)
  • Ссылка — ключевой идентификатор элемента справочника (ссылка на объект)
  • Выполнение запроса в коде (BSL)

    Минимальный шаблон выполнения запроса:

    Что здесь происходит:

  • Запрос.Текст — текст запроса (часто пишут многострочно через |)
  • Выполнить() — выполнение на стороне сервера (обычно)
  • Выбрать() — получение выборки строк результата
  • Следующий() — переход к следующей строке
  • Параметры запроса

    Параметры нужны, чтобы:

  • не склеивать строки вручную
  • делать запрос переиспользуемым
  • безопасно подставлять значения
  • Пример: выбрать номенклатуру по артикулам (если у вас есть реквизит Артикул).

    Правило: параметр в тексте пишется как &Имя, а в коде задаётся через УстановитьПараметр.

    Соединения (JOIN): как связать данные

    Соединения нужны, когда данные лежат в разных источниках.

    Типичный пример: документ в табличной части хранит ссылку на номенклатуру, а вы хотите вывести её дополнительные реквизиты.

    Чаще всего используют:

  • ВНУТРЕННЕЕ СОЕДИНЕНИЕ — строки попадают в результат только если есть соответствие
  • ЛЕВОЕ СОЕДИНЕНИЕ — строки слева сохраняются, даже если соответствия справа нет
  • Пример (схематично): получить строки табличной части документа и наименование номенклатуры.

    Идея запроса важнее конкретных деталей: табличная часть — отдельный источник данных, а справочник присоединяется по ссылке.

    Итоги и группировки: СУММА, СГРУППИРОВАТЬ ПО

    Когда строят отчёт, чаще всего нужны агрегаты:

  • СУММА(Поле) — сумма
  • КОЛИЧЕСТВО(Поле) — количество значений
  • МАКСИМУМ(Поле), МИНИМУМ(Поле)
  • Пример: посчитать сумму поступлений по номенклатуре (логически).

    Здесь:

  • СГРУППИРОВАТЬ ПО задаёт «разрез отчёта»
  • агрегаты считают итог в рамках каждой группы
  • Виртуальные таблицы регистров: остатки и обороты

    Самая прикладная часть запросов в 1С — чтение регистров через виртуальные таблицы.

    Для регистра накопления обычно важны две виртуальные таблицы:

  • ...Остатки(...) — остатки на момент времени
  • ...Обороты(...) — обороты за период
  • Остатки товаров на дату

    Схема запроса для остатков по регистру ТоварыНаСкладах:

    Пояснения:

  • &Момент — дата, на которую нужны остатки
  • поля вида КоличествоОстаток и СуммаОстаток платформа формирует автоматически
  • ГДЕ ... <> 0 часто используют, чтобы не показывать нулевые позиции
  • Пример выполнения в коде:

    Обороты за период

    Обороты удобны, когда нужно «пришло/ушло за период».

    Пояснения:

  • &Начало и &Конец задают период
  • поля вида КоличествоПриход, КоличествоРасход платформа формирует для регистра накопления
  • Важно: точный набор полей и параметры виртуальной таблицы зависят от вида регистра и настроек, но общий принцип один: остатки и обороты читаются через виртуальные таблицы, а не через «физические таблицы движений».

    СКД: что это такое и почему её любят в 1С

    Система компоновки данных (СКД) — это механизм, который позволяет собрать отчёт так, чтобы:

  • данные брались из одного или нескольких наборов данных (обычно запросов)
  • были доступны группировки, итоги, поля, отборы
  • пользователь мог настраивать отчёт без переписывания кода
  • СКД обычно выбирают, когда нужен отчёт «как в типовых конфигурациях»:

  • варианты отчёта
  • быстрые отборы
  • группировки по измерениям
  • итоги по ресурсам
  • !Как СКД превращает запрос в настраиваемый отчёт

    Основные понятия СКД (простыми словами)

  • Набор данных — источник строк (чаще всего запрос)
  • Поля — колонки, доступные в отчёте
  • Ресурсы — числовые показатели, по которым обычно считаются итоги (например, Количество, Сумма)
  • Группировки — как «свернуть» данные (например, по Складу, затем по Номенклатуре)
  • Отбор — фильтр (например, только один склад)
  • Параметры — значения, которые передаются в запрос (например, НачалоПериода и КонецПериода)
  • Настройки пользователя — то, что пользователь может менять в форме отчёта
  • Практический сценарий: отчёт «Остатки товаров на складах» на СКД

    Ниже логика шагов без привязки к конкретным именам кнопок (они могут отличаться по версии платформы и шаблону отчёта).

    Что нужно подготовить в конфигурации

  • регистр накопления ТоварыНаСкладах уже должен быть заполнен движениями (после проведения поступлений)
  • создайте объект Отчёт (например, ОстаткиТоваров)
  • в отчёте создайте Схему компоновки данных
  • Набор данных (запрос)

    В СКД добавьте набор данных типа Запрос и используйте идею запроса остатков (с параметром Момент).

    В запросе сделайте поля:

  • Склад
  • Номенклатура
  • Количество
  • Сумма
  • Параметр отчёта

    Добавьте параметр (например, Момент) и свяжите его с параметром &Момент в запросе.

    Типичное поведение:

  • если пользователь не вводит дату, можно подставлять текущую
  • если отчёт «на дату», параметр один
  • если отчёт «за период», параметров два: начало и конец
  • Настройка ресурсов и группировок

  • Количество и Сумма отметьте как ресурсы (чтобы СКД могла считать итоги)
  • сделайте группировку:
  • - сначала по Склад - внутри — по Номенклатура

    Форма отчёта

    Когда вы используете СКД, платформа обычно генерирует форму отчёта, где:

  • есть поля параметров
  • есть кнопка сформировать
  • есть настройка отчёта (отборы/группировки)
  • Смысл: разработчик задаёт «скелет» отчёта, а пользователь может менять представление в пределах разрешённых настроек.

    Когда писать отчёт запросом в коде, а когда использовать СКД

    Запрос + код (без СКД) подходит, когда

  • нужно быстро получить данные для обработки
  • нужно программно заполнить табличную часть документа
  • отчёт очень специфичный по выводу и не требует пользовательских настроек
  • СКД подходит, когда

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

  • если вы делаете отчёт для пользователя — почти всегда начинайте со СКД
  • если вы делаете выборку для логики (проверка, заполнение) — чаще пишите запрос в коде
  • Типичные ошибки новичков в запросах и отчётах

  • Считывают остатки «по движениям» и вручную суммируют, вместо Остатки()
  • Делают отборы строкой в запросе (конкатенацией), вместо параметров
  • Путают, где нужно читать данные: документ или регистр
  • В СКД не помечают числовые поля как ресурсы и удивляются отсутствию итогов
  • Делают важные ограничения только в интерфейсе отчёта, забывая, что данные можно получить и иначе (если речь про права и безопасность — это отдельная тема)
  • Главное из темы

  • Язык запросов 1С — стандартный способ получать данные из базы с отборами, группировками и соединениями.
  • Для регистров накопления ключевой инструмент — виртуальные таблицы Остатки() и Обороты().
  • СКД превращает запрос в настраиваемый отчёт с группировками, ресурсами, отборами и вариантами.
  • Обычно: регистры наполняются проведением документов, а отчёты читают регистры запросами и выводят через СКД.
  • 7. Отладка и практика: обработка ошибок, производительность, мини-проект

    Отладка и практика: обработка ошибок, производительность, мини-проект

    До этого момента вы уже умеете создавать метаданные (справочники, документы, регистры), писать код в модулях, работать с управляемыми формами, проводить документы и получать данные запросами и через СКД. Теперь важный шаг, который отделяет «код, который иногда работает» от прикладного решения: отладка, корректная обработка ошибок и базовая производительность.

    Эта тема практическая: мы разберём, как искать причины проблем, как правильно сообщать об ошибках пользователю, и как не «убить» скорость работы неудачным кодом. В конце — мини-проект, который свяжет весь курс в единую схему.

    !Общая схема «интерфейс → логика → данные → отчёт»

    Как мыслит разработчик при отладке

    Отладка в 1С почти всегда начинается с ответа на три вопроса:

  • Где выполняется код: клиент или сервер.
  • Когда он выполняется: событие формы, запись объекта, проведение, формирование отчёта.
  • Над чем он работает: реквизиты формы, реквизиты объекта, движения, регистры, результат запроса.
  • Если вы системно отвечаете на эти вопросы, большинство «магических» ошибок становится предсказуемыми.

    Виды ошибок в 1С и как их отличать

    Пользовательские ошибки (валидация)

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

  • не заполнен обязательный реквизит
  • отрицательное количество
  • попытка списать больше, чем есть на складе
  • Такие ошибки ожидаемы. Их нужно показывать пользователю понятным языком и не записывать/не проводить документ.

    Ошибки разработчика (логика/контекст)

    Это ошибки, которые возникают из-за кода:

  • обращение к несуществующему реквизиту
  • попытка на сервере обратиться к Элементы формы
  • деление на ноль
  • Такие ошибки часто проявляются как исключения выполнения.

    Ошибки данных и среды

    Это проблемы, которые зависят от окружения:

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

    Как правильно «останавливать» запись и проведение

    В 1С есть несколько механизмов, и важно применять их по назначению.

    Отказ = Истина в событиях объекта

    Когда платформа вызывает событие (например, ПередЗаписью или ОбработкаПроведения), она передаёт параметр Отказ. Если поставить Отказ = Истина, платформа:

  • прекращает запись/проведение
  • остаётся в управляемом сценарии (пользователь продолжает работу)
  • Пример: проверка перед записью документа.

    Когда это уместно:

  • любые ожидаемые пользовательские ошибки
  • бизнес-правила (обязательные реквизиты, диапазоны значений)
  • ВызватьИсключение и Попытка...Исключение

    Исключение удобно, когда:

  • вы хотите прервать выполнение «глубоко» внутри функции
  • вы оборачиваете рискованный код и хотите дать более понятное сообщение
  • Пример: вы вызываете серверную функцию из формы, и хотите корректно показать пользователю проблему.

    Практическое правило:

  • для правил предметной области чаще используйте Отказ = Истина в стандартных событиях
  • для неожиданных ситуаций и «защитного кода» используйте Попытка...Исключение
  • Инструменты отладки, которые реально помогают

    Сообщения как быстрый способ локализовать проблему

    На старте самый простой инструмент — Сообщить().

  • быстро проверить, доходит ли выполнение до точки
  • вывести значения переменных
  • Но не превращайте код в «лес сообщений». Хорошая практика — временно добавлять сообщения и убирать после исправления.

    Отладчик в Конфигураторе

    Встроенный отладчик позволяет:

  • ставить точку останова
  • выполнять код пошагово
  • смотреть значения переменных
  • Важно помнить про контекст:

  • если процедура выполняется на сервере, отладка идёт в серверном контексте
  • если это обработчик формы на клиенте, вы видите клиентские значения и доступ к Элементы
  • Журнал регистрации (для поиска «что случилось»)

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

    Подробности зависят от настроек и прав, но сама идея полезна: на практике многие расследования начинаются с журнала регистрации.

    Ориентир по платформе и администрированию: Портал 1С:Предприятие 8.

    Производительность: что чаще всего тормозит в учебных решениях

    Лишние клиент-серверные вызовы

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

    Плохой подход (идея):

  • для каждой строки табличной части вызвать серверную функцию и сделать отдельный запрос
  • Хороший подход:

  • собрать список номенклатуры
  • сделать один запрос
  • вернуть результат структурой/соответствием
  • Запрос в цикле вместо одного запроса

    Самая частая ошибка новичков:

  • цикл по строкам
  • внутри цикла Новый Запрос, Выполнить()
  • Это почти всегда можно переписать в один запрос с группировкой или с отбором по списку.

    Чтение «всего» вместо чтения «нужного»

    Если вам нужен остаток только по одному складу и конкретным товарам, не надо получать остатки по всем складам и всей номенклатуре.

    В запросах используйте:

  • параметры &Склад, &СписокНоменклатуры
  • отборы в ГДЕ
  • Неправильное место выполнения (клиент вместо сервера)

    Вычисления и запросы лучше выполнять на сервере:

  • на сервере доступна база данных и запросы
  • клиентский код должен в основном управлять интерфейсом
  • Поэтому полезная архитектурная привычка:

  • в форме оставить «нажатие кнопки» и получение результата
  • расчёт и запросы вынести в &НаСервереБезКонтекста (если не нужен доступ к форме)
  • Шаблон «быстрой» серверной проверки остатков

    Ниже — типовой подход: проверить, хватает ли остатков для списания, и сделать это одним запросом.

    Сценарий:

  • есть документ РеализацияТоваров (расход)
  • он списывает товар со склада
  • перед проведением нужно убедиться, что остатка достаточно
  • Идея данных

  • табличная часть документа: Товары(Номенклатура, Количество, Цена)
  • регистр накопления: ТоварыНаСкладах (измерения: Склад, Номенклатура; ресурс: Количество)
  • Пример серверной функции проверки

    Что делает функция:

  • готовит список номенклатуры из табличной части
  • одним запросом получает остатки по регистру
  • возвращает соответствие Номенклатура → КоличествоОстаток
  • Дальше в проведении вы сравниваете требуемое количество с остатком.

    Мини-проект: «Приход и расход товаров + остатки + отчёт»

    Цель мини-проекта — собрать полный цикл:

  • ввод справочников
  • ввод и проведение документов
  • контроль ошибок (валидация и исключения)
  • чтение регистра запросом
  • отчёт на СКД
  • Что делаем в конфигурации

  • Справочник Номенклатура (у вас уже есть).
  • Справочник Склады.
  • Документ ПоступлениеТоваров (приход, у вас уже есть).
  • Документ РеализацияТоваров (расход, создаёте).
  • Регистр накопления ТоварыНаСкладах (у вас уже есть или создаёте).
  • Отчёт ОстаткиТоваров на СКД (из прошлой темы можно переиспользовать).
  • Документ расхода и проведение

    Логика проведения РеализацияТоваров:

  • проверить заполненность склада и строк
  • проверить, что остатка достаточно
  • записать движения расхода в регистр
  • Схема проведения:

    Ключевой момент мини-проекта:

  • проверка остатков делается через регистр (запросом), а не по документам
  • проверка выполняется одним запросом на все строки (это уже шаг к производительности)
  • Отчёт «Остатки товаров»

    Сделайте отчёт на СКД, который показывает остатки на дату:

  • параметры: Момент
  • набор данных: запрос к РегистрНакопления.ТоварыНаСкладах.Остатки(&Момент, )
  • группировки: Склад, затем Номенклатура
  • ресурсы: Количество, Сумма
  • Этим отчётом вы проверяете, что:

  • поступление увеличивает остаток
  • реализация уменьшает остаток
  • при попытке списать больше остатка проведение запрещается
  • Типичные ошибки в конце курса и как их исправлять

  • Правила сделаны только в форме: переносите ключевые проверки в модуль объекта (в запись/проведение).
  • Проверка остатков запросом в цикле: переписывайте на один запрос по списку.
  • Серверный код трогает элементы формы: разделяйте на клиент (интерфейс) и сервер (данные).
  • Не обновили конфигурацию базы данных после изменения метаданных: выполняйте обновление перед тестированием.
  • Что в итоге вы уже умеете

    После мини-проекта у вас складывается базовый набор навыков «младшего 1С-разработчика»:

  • проектирование простых объектов метаданных
  • формы и обработчики событий
  • запись и проведение документов
  • движения по регистрам
  • запросы к виртуальным таблицам Остатки() и вывод через СКД
  • обработка ожидаемых ошибок через Отказ и защитная обработка через Попытка...Исключение
  • первые принципы производительности: меньше вызовов, меньше запросов, больше работы «пакетом»
  • Для дальнейшего роста вам пригодятся углубления в стандарты разработки, права, блокировки и более сложные запросы. Ориентир по платформе: Портал 1С:Предприятие 8.