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

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

Если вы только начинаете осваивать , рекомендуем сначала ознакомиться с базовыми понятиями: что такое измерения, ресурсы и реквизиты регистра. Для опытных разработчиков будут полезны нюансы работы с ЗаписьРегистра, транзакциями и особенностями записей с отрицательными остатками.

📊 Какой регистр вы чаще используете в работе?
Регистр накопления
Регистр сведений
Регистр бухгалтерии
Регистр расчета
Не работаю с регистрами

1. Типы регистров в 1С: когда и какой использовать

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

  • 📊 Регистр накопления — для учета остатков (например, товаров на складе) или оборотов (продажи за период). Поддерживает корректировку остатков и движения документами.
  • 📝 Регистр сведений — хранит справочную информацию (курсы валют, цены номенклатуры, графики работы). Может быть периодическим (с привязкой к дате) или непериодическим.
  • 💰 Регистр бухгалтерии — для бухгалтерских проводок (дебет/кредит). Всегда привязан к плану счетов и требует указания субконто.

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

Тип регистра Пример использования Особенности записи
Регистр накопления (остатков) Учет товаров на складе Требует указания количества и партии. Поддерживает отрицательные остатки (если разрешено в настройках).
Регистр накопления (оборотов) Продажи по контрагентам Записи всегда привязаны к периоду. Нет понятия "остаток" — только приход/расход.
Регистр сведений (периодический) Курсы валют ЦБ РФ Данные актуальны на определенную дату. При добавлении новой записи старая автоматически "закрывается".
Регистр бухгалтерии Проводка по оплате от покупателя Обязательно указание счета, субконто и суммы. Поддерживает корреспонденцию счетов.

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

⚠️ Внимание: В конфигурациях на базе БП 3.0 или УТ 11 некоторые регистры могут иметь дополнительные ограничения (например, запрет на ручное редактирование). Проверьте права пользователя в Администрирование → Настройки пользователей.

2. Способы создания записей: от ручного ввода до программного кода

Добавить запись в регистр можно четырьмя основными способами. Выбор зависит от задачи, частоты операции и ваших прав в системе:

  • Через документ — самый безопасный метод. Запись создаётся автоматически при проведении (например, Поступление товаров формирует движения в регистре ТоварыНаСкладах).
  • ✏️ Ручной ввод — подходит для разовых операций. Доступен через Операции → Регистры → [Название регистра].
  • 🖥️ Обработка загрузки — для массового импорта данных (например, остатков при старте учета).
  • 💻 Программный код — гибкий, но требует знаний 1С:Предприятие. Используется для нестандартных задач.

Рассмотрим каждый способ подробнее, начиная с самого простого.

2.1. Создание записи через документ

Это стандартный механизм, который не требует дополнительных действий. Например, при создании документа Реализация товаров:

  1. Откройте раздел Продажи → Реализация товаров.
  2. Создайте новый документ и заполните табличную часть (номенклатура, количество, цена).
  3. Нажмите Провести. Система автоматически сформирует движения в регистрах:
    • 📦 ТоварыНаСкладах — списание со склада.
    • 💰 ВзаиморасчетыСКонтрагентами — задолженность покупателя.

Преимущество метода: гарантированная корректность (система сама проверяет остатки, права доступа и т.д.). Недостаток — ограниченная гибкость (нельзя добавить запись в произвольный регистр).

2.2. Ручной ввод записи

Если документ не подходит (например, нужно скорректировать остатки после инвентаризации), используйте ручной ввод:

  1. Перейдите в Операции → Регистры → [Выберите регистр].
  2. Нажмите Создать или Добавить (в зависимости от конфигурации).
  3. Заполните поля:
    • 📅 Период (для регистров накопления/бухгалтерии).
    • 🏷️ Измерения (склад, номенклатура, контрагент и т.д.).
    • 📊 Ресурсы (количество, сумма).
  • Сохраните запись кнопкой Записать и закрыть.
  • ⚠️ Внимание: При ручном вводе в регистр бухгалтерии система не проверяет корреспонденцию счетов! Ошибка в дебете/кредите приведёт к неверному балансу. Всегда используйте Проверка проводок после добавления.

    Указан корректный период (не будущая дата)

    Заполнены все обязательные измерения

    Ресурсы (количество, сумма) имеют логичные значения

    Для регистра бухгалтерии проверена корреспонденция счетов-->

    2.3. Программное создание записи

    Для автоматизации или нестандартных задач используйте встроенный язык. Пример кода для добавления записи в регистр накопления ТоварыНаСкладах:

    Процедура СоздатьЗаписьВРегистре()
    

    // Создаем объект для записи

    Запись = РегистрыНакопления.ТоварыНаСкладах.СоздатьМенеджерЗаписи();

    // Устанавливаем период

    Запись.Период = ТекущаяДата();

    // Заполняем измерения

    Запись.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");

    Запись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Стул офисный");

    // Устанавливаем ресурсы (приход 10 штук)

    Запись.Количество = 10;

    // Записываем с контролем уникальности

    Запись.Записать(Истина); // Истина - проверять уникальность

    Сообщить("Запись успешно добавлена!");

    КонецПроцедуры

    Ключевые моменты:

    • 🔹 Для регистров сведений используйте РегистрыСведений.[Имя].СоздатьМенеджерЗаписи().
    • 🔹 Для регистров бухгалтерииРегистрыБухгалтерии.[Имя].СоздатьМенеджерЗаписи() + указание Дт/Кт.
    • 🔹 Параметр Истина в методе Записать() включает проверку на дубли.
    💡

    Если нужно добавить запись с отрицательным остатком, предварительно проверьте настройку регистра в конфигураторе: РегистрНакопления → Свойства → Разрешить отрицательные остатки.

    3. Частые ошибки и как их избежать

    Даже опытные пользователи сталкиваются с проблемами при работе с регистрами. Вот наиболее распространённые ошибки и способы их решения:

    Ошибка Причина Решение
    Запись не сохраняется Не заполнены обязательные измерения или ресурсы. Проверьте Свойства регистра в конфигураторе на предмет обязательных реквизитов.
    Отрицательный остаток не проводится В настройках регистра запрещены отрицательные значения. Измените свойство РазрешитьОтрицательныеОстатки или используйте документ Корректировка записей регистров.
    Дублирующиеся записи При программном добавлении не указана проверка уникальности. Используйте Записать(Истина) или предварительно очищайте старые данные.
    Запись не отображается в отчетах Неверно указан период или измерения. Проверьте фильтры в отчете и сравните с данными в регистре через Все функции → Регистры.

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

    Процедура ЗаписатьДанныеБезопасно()
    

    НачатьТранзакцию();

    Попытка

    // Код добавления записей

    Запись1.Записать();

    Запись2.Записать();

    ЗафиксироватьТранзакцию();

    Исключение

    ОтменитьТранзакцию();

    Сообщить("Ошибка: " + ОписаниеОшибки());

    КонецПопытки;

    КонецПроцедуры

    ⚠️ Внимание: В 1С:Предприятие 8.3.20+ при работе с регистрами бухгалтерии через код обязательно указывайте ПометкаУдаления = Ложь для новых записей, иначе они могут быть проигнорированы при построении отчетов.

    4. Практический пример: корректировка остатков товаров

    Рассмотрим типовую задачу: на складе по факту осталось 15 стульев, а в системе значится 10. Нужно скорректировать остатки в регистре ТоварыНаСкладах.

    Способ 1: Через документ "Оприходование товаров"

    1. Создайте документ Оприходование товаров (Склад → Оприходование).
    2. Укажите склад Основной склад и добавьте строку с номенклатурой Стул офисный, количеством 5.
    3. Проведите документ. Система автоматически добавит запись в регистр.

    Способ 2: Ручная корректировка

    1. Откройте Операции → Регистры → ТоварыНаСкладах.
    2. Найдите существующую запись по стулу (фильтр по номенклатуре).
    3. Измените ресурс Количество с 10 на 15 или добавьте новую запись с приходом +5.

    Способ 3: Программный код

    Если корректировок много, напишите обработку:

    Процедура КорректировкаОстатков()
    

    Запись = РегистрыНакопления.ТоварыНаСкладах.СоздатьМенеджерЗаписи();

    Запись.Период = ТекущаяДата();

    Запись.Склад = Справочники.Склады.ОсновнойСклад;

    Запись.Номенклатура = Справочники.Номенклатура.СтулОфисный;

    Запись.Количество = 15; // Новое значение

    Запись.Записать();

    КонецПроцедуры

    Что будет если не указать период в записи регистра накопления?

    В регистрах накопления период обязателен. Если его не указать, система либо подставит текущую дату (в ручном режиме), либо выдаст ошибку (в коде). Для регистров оборотов период определяет, к какому интервалу относится движение (день/месяц).

    5. Работа с регистрами сведений: особенности и примеры

    Регистры сведений отличаются от накопления тем, что хранят состояние данных на определённую дату, а не движения. Классический пример — КурсыВалют.

    5.1. Добавление курса валюты

    Чтобы вручную добавить курс доллара на заданную дату:

    1. Откройте Справочники и настройки → Валюты → Курсы валют.
    2. Нажмите Создать и укажите:
      • 📅 Дату (например, 01.06.2026).
      • 💱 Валюту (USD).
      • 💰 Курс (например, 90.50).
      • 📌 Множитель (обычно 1).
  • Сохраните запись.
  • 5.2. Программная запись в регистр сведений

    Пример кода для массовой загрузки курсов из файла:

    Процедура ЗагрузитьКурсыИзФайла(ПутьКФайлу)
    

    ТаблицаДанных = ПолучитьДанныеИзФайла(ПутьКФайлу); // Предполагаем, что функция возвращает таблицу с колонками Дата, Валюта, Курс

    Для Каждого Строка Из ТаблицаДанных Цикл

    Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

    Запись.Период = Строка.Дата;

    Запись.Валюта = Справочники.Валюты.НайтиПоКоду(Строка.Валюта);

    Запись.Курс = Строка.Курс;

    Запись.Записать();

    КонецЦикла;

    КонецПроцедуры

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

    6. Регистры бухгалтерии: проводки и субконто

    Регистры бухгалтерии — основа для формирования бухгалтерских отчетов (баланс, оборотно-сальдовая ведомость). Здесь критично правильно указать:

    • 📌 Счет дебет/кредит (например, 62.01 — расчёты с покупателями).
    • 🏷️ Субконто (контрагент, договор, номенклатура).
    • 💰 Сумма и валюта.

    6.1. Создание проводки через документ

    В документе Поступление на расчетный счет:

    1. Укажите контрагента и сумму.
    2. В табличной части Проводки проверьте автоматическое формирование:
      • Дт 51 (расчетный счет) — Кт 62.01 (покупатель).
  • Проведите документ.
  • 6.2. Ручное добавление проводки

    Если нужно внести исправительную запись:

    1. Откройте Операции → Ручные операции.
    2. Создайте новую операцию и добавьте проводку:
      • Дт 91.02 (прочие расходы) — Кт 60.01 (поставщик) на сумму 1000 руб.
  • Укажите субконто (например, контрагент ООО "Поставщик").
  • Проведите операцию.
  • ⚠️ Внимание: В 1С:Бухгалтерии 3.0 при ручном вводе проводок отключена проверка на корреспонденцию счетов по умолчанию. Включите её в настройках учетной политики, чтобы избежать ошибок в балансе.

    7. Оптимизация работы с регистрами: советы экспертов

    Чтобы ускорить работу и избежать типичных проблем, следуйте этим рекомендациям:

    • 🔍 Используйте отборы: При просмотре регистра всегда задавайте фильтры (по складу, номенклатуре, периоду), чтобы не грузить лишние данные.
    • 📊 Проверяйте остатки: Перед корректировкой запускайте отчет Анализ состояния регистров накопления (Отчеты → Стандартные).
    • 🔄 Автоматизируйте рутину: Для регулярных операций (например, ежемесячная загрузка курсов валют) создайте Регламентное задание.
    • 🛡️ Резервируйте данные: Перед массовыми изменениями в регистрах делайте резервную копию базы через Администрирование → Выгрузить информационную базу.

    Для программистов:

    • 🖥️ Используйте Запрос для массовых операций вместо циклов по записям — это ускорит выполнение в 10-100 раз.
    • 📈 Для анализа данных применяйте виртуальные таблицы регистров (например, РегистрНакопления.ТоварыНаСкладах.Остатки).
    • 🔧 При отладке включайте Журнал регистрации (Сервис → Журнал регистрации), чтобы отследить, какие документы формируют движения.
    💡

    Для ускорения работы с большими регистрами (более 100 000 записей) используйте серверные процедуры и временные таблицы. Это снизит нагрузку на клиентское приложение.

    8. FAQ: Ответы на частые вопросы

    Можно ли удалить запись из регистра?

    Да, но с оговорками:

    • 🗑️ В регистрах накопления используйте документ Корректировка записей регистров или программно вызовите Запись.Удалить().
    • 📅 В регистрах сведений достаточно создать новую запись с той же датой — старая перезапишется.
    • 💰 В регистрах бухгалтерии удаление проводок не рекомендуется. Вместо этого введите Сторно (обратную проводку).

    Важно: Удаление записей может нарушить целостность данных. Всегда делайте резервную копию перед массовыми изменениями.

    Почему после добавления записи в регистр она не видна в отчете?

    Причин может быть несколько:

    1. 📅 Неверный период: В отчете установлен фильтр по дате, не включающий вашу запись.
    2. 🔍 Отборы: В настройках отчета исключены определенные измерения (например, склад).
    3. 🔄 Непроведенный документ: Если запись создавалась через документ, проверьте его статус.
    4. 💻 Кэш: Обновите отчет (F5) или перезапустите 1С.

    Для диагностики откройте регистр напрямую через Все функции → Регистры и проверьте наличие записи.

    Как добавить запись в регистр, если нет прав на редактирование?

    Варианты решений:

    • 🔑 Попросите администратора выдать права через Администрирование → Настройки пользователей → Права (нужны права на Редактирование или Администрирование регистра).
    • 📄 Используйте документ, который имеет право на проведение (например, Корректировка записей регистров).
    • 🖥️ Напишите обработку с повышенными правами (требуется доступ к конфигуратору).
    ⚠️ Внимание: Изменение прав пользователей может нарушить политику безопасности. Всегда согласовывайте такие действия с ответственным за ИТ.
    Чем отличается регистр накопления от регистра бухгалтерии?

    Основные различия:

    Критерий Регистр накопления Регистр бухгалтерии
    Назначение Учет количественных показателей (товары, деньги). Формирование бухгалтерских проводок (дебет/кредит).
    Структура Измерения + ресурсы (количество, сумма). Счет Дт/Кт + субконто + сумма.
    Связь с планом счетов Нет. Обязательна.
    Отрицательные значения Разрешены (если настроено). Запрещены (исключение — сторно).
    Как перенести записи из одного регистра в другой?

    Для переноса данных между регистрами:

    1. 📝 Ручной перенос: Экспортируйте данные из исходного регистра в Excel через Файл → Сохранить как, затем импортируйте в целевой регистр.
    2. 🖥️ Обработка переноса: Напишите код, который читает записи из одного регистра и добавляет в другой. Пример:
      Выборка = РегистрыНакопления.ИсходныйРегистр.Выбрать();
      

      Пока Выборка.Следующий() Цикл

      Запись = РегистрыНакопления.ЦелевойРегистр.СоздатьМенеджерЗаписи();

      Запись.Период = Выборка.Период;

      Запись.Склад = Выборка.Склад;

      // ... копирование остальных полей

      Запись.Записать();

      КонецЦикла;

    3. 🔄 Типовая обработка: В некоторых конфигурациях (например, УТ 11) есть готовые обработки для переноса данных между регистрами.

    Важно: При переносе проверяйте соответствие типов данных (например, в исходном регистре поле может быть Число, а в целевом — Строка).