Регистры сведений в 1С:Предприятие — это один из ключевых объектов конфигурации, который хранит данные о состоянии системных параметров, справочников или документов на определённую дату. Без корректного заполнения этих регистров невозможно обеспечить актуальность отчётности, корректную работу механизмов расчётов или интеграцию с другими системами. Однако многие пользователи сталкиваются с трудностями: где найти регистр, как добавить в него записи вручную или программно, и почему иногда данные "не сохраняются".

Эта статья поможет разобраться во всех нюансах — от базовых принципов до продвинутых приёмов работы с регистрами сведений. Мы рассмотрим ручное заполнение через интерфейс , автоматизацию с помощью встроенного языка, а также типичные ошибки, которые приводят к потере данных или некорректной работе системы. Особое внимание уделено практическим примерам для бухгалтерских конфигураций (например, 1С:Бухгалтерия 8.3) и торговых решений (1С:Управление торговлей).

Что такое регистр сведений и зачем он нужен

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

Примеры использования регистров сведений:

  • 💰 Курсы валют — хранение актуальных и исторических значений для пересчёта сумм в иностранной валюте.
  • 📦 Цены номенклатуры — фиксация стоимости товаров по разным типам цен (оптовая, розничная, дилерская).
  • 👥 Настройки пользователей — сохранение индивидуальных параметров интерфейса или прав доступа.
  • ⚙️ Системные параметры — например, путь к файлам обмена или адреса API для интеграций.

Регистры бывают двух типов:

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

Как найти регистр сведений в интерфейсе 1С

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

  1. Откройте 1С:Предприятие в режиме 1С:Предприятие (не путать с конфигуратором!).
  2. Перейдите в меню Все функции (обычно доступно через кнопку с тремя точками или клавишу F1 → "Все функции").
  3. В дереве объектов найдите папку Регистры сведений. В некоторых конфигурациях она может называться Справочники и регистры или скрываться за вкладкой Администрирование.
  4. Выберите нужный регистр (например, Курсы валют или Цены номенклатуры).

Если регистра нет в списке, возможно:

  • 🔍 Он скрыт настройками ролей (проверьте права пользователя).
  • 🛠️ Это подчинённый регистр — его можно открыть только из документа или справочника, которому он подчинён.
  • 📂 Регистр создан в другой конфигурации (например, в 1С:ЗУП, а вы ищете в 1С:Бухгалтерии).
📊 Как часто вы работаете с регистрами сведений в 1С?
Ежедневно
Несколько раз в неделю
Редко, по необходимости
Никогда не работал

Для ускорения поиска используйте поиск по названию (комбинация Ctrl+F в окне "Все функции"). Если регистр всё равно не находится, проверьте его наличие в конфигураторе (Конфигуратор → Объекты конфигурации → Регистры сведений).

Ручное заполнение регистра сведений через интерфейс

Самый простой способ добавить запись — сделать это вручную. Рассмотрим процесс на примере регистра Курсы валют в 1С:Бухгалтерии 8.3:

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

    1. Откройте справочник Номенклатура.
    2. Выберите нужный товар и перейдите на вкладку Цены (или Дополнительно → Цены).
    3. Добавьте новую запись с указанием типа цены (Оптовая, Розничная) и её значения.
    4. Выбрана правильная дата действия курса/цены|

      Значение введено в корректном формате (например, не "92,50", а "92.50")|

      Проверена уникальность записи (нет дублей на ту же дату)|

      Сохранение подтверждено без ошибок-->

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

      Программное заполнение регистра сведений на встроенном языке

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

      Пример 1: Добавление записи в независимый регистр

      Допустим, нужно добавить курс доллара на текущую дату в регистр КурсыВалют:

      Процедура ЗаполнитьКурсДоллара()
      

      Регистр = РегистрыСведений.КурсыВалют;

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

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

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

      НоваяЗапись.Курс = 92.50;

      НоваяЗапись.Кратность = 1;

      НоваяЗапись.Записать();

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

      Пример 2: Массовое заполнение цен номенклатуры

      Если нужно обновить цены для всех товаров определённой группы:

      Процедура ОбновитьЦеныНоменклатуры()
      

      Регистр = РегистрыСведений.ЦеныНоменклатуры;

      ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Оптовая");

      Выборка = Справочники.Номенклатура.Выбрать();

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

      Если Выборка.ЭтотОбъект.Группа = Справочники.ГруппыНоменклатуры.Товары Тогда

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

      НоваяЗапись.Номенклатура = Выборка.Ссылка;

      НоваяЗапись.ТипЦен = ТипЦены;

      НоваяЗапись.Цена = Выборка.СтандартнаяЦена * 1.1; // Увеличиваем на 10%

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

      НоваяЗапись.Записать();

      КонецЕсли;

      КонецЦикла;

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

      Для работы с подчинёнными регистрами используйте метод ПолучитьМенеджерЗаписи() с указанием владельца. Например, для регистра ЦеныПоставщиков, подчинённого справочнику Контрагенты:

      Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
      

      МенеджерЗаписи = РегистрыСведений.ЦеныПоставщиков.ПолучитьМенеджерЗаписи(Контрагент);

      💡

      Перед массовым заполнением регистра сделайте резервную копию базы. Ошибка в коде может привести к дублированию записей или потере актуальных данных.

      Особенности программного заполнения

      При работе с регистрами через код учитывайте:

      • 🔄 Периодичность — если регистр периодический, одна дата может содержать несколько записей (например, разные курсы валют для разных валют).
      • 🔒 Блокировки — при одновременной работе нескольких пользователей используйте транзакции (НачатьТранзакцию()), чтобы избежать конфликтов.
      • Производительность — для массовых операций лучше использовать Объект.Записать() в пакетном режиме, а не по одной записи.

    Типичные ошибки при заполнении регистров сведений

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

    Ошибка Причина Как исправить
    Дублирование записей на одну дату Отсутствует контроль уникальности при ручном/программном вводе Перед записью проверять наличие записи на дату с помощью Регистр.НайтиПоРеквизиту()
    Неверный формат данных (например, "92,50" вместо "92.50") Региональные настройки системы (разделитель дробной части) Использовать Число(Значение) для приведения к числовому формату
    Запись не сохраняется без ошибок Не хватает прав или блокировка другими пользователями Проверять права ролей в конфигураторе или использовать транзакции
    Искажение отчётов после изменения регистра Не учтена периодичность — новая запись перекрыла старую Проверять приоритет записей (поле Период или НомерСтроки)

    Одна из самых коварных ошибок — несоответствие периодов. Например, если в регистре ЦеныНоменклатуры для товара есть запись на 01.01.2026 с ценой 1000 рублей и запись на 01.02.2026 с ценой 1200 рублей, то при запросе цены на 15.01.2026 система вернёт 1000, а не 1200. Это логично, но часто забывается при ручном вводе.

    Что делать, если запись "исчезла" после сохранения?

    Причины могут быть разными:

    1. Автоматическая очистка — в некоторых конфигурациях старые записи удаляются по регламентному заданию (проверьте настройки очистки).

    2. Транзакционный откат — если сохранение проходило в транзакции, которая была отменена.

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

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

    Продвинутые приёмы: обмен данными и интеграции

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

    Импорт курсов валют из ЦБ РФ

    Для автоматического обновления курсов можно использовать обработку загрузки данных с сайта Центрального банка. Пример кода для загрузки XML-файла с курсами:

    Процедура ЗагрузитьКурсыЦБ()
    

    URL = "https://www.cbr.ru/scripts/XML_daily.asp";

    Данные = ПолучитьДанныеИзИнтернета(URL); // Используйте HTTPСоединение или WebЗапрос

    Если НЕ Данные = Неопределено Тогда

    XMLДокумент = Новый ДокументDOM;

    XMLДокумент.ЗагрузитьСтроку(Данные);

    ДатаКурсов = ЗначениеВСтрокуВнутр(XMLДокумент.ChildNodes[1].Attributes.GetNamedItem("Date").Value);

    Регистр = РегистрыСведений.КурсыВалют;

    Для Каждого Узел Из XMLДокумент.ChildNodes[1].ChildNodes Цикл

    Если Узел.NodeName = "Valute" Тогда

    КодВалюты = Узел.ChildNodes[0].Text;

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

    Если Валюта <> Неопределено Тогда

    Курс = Заменить(Узел.ChildNodes[4].Text, ",", ".");

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

    НоваяЗапись.Валюта = Валюта;

    НоваяЗапись.Дата = ДатаКурсов;

    НоваяЗапись.Курс = Курс;

    НоваяЗапись.Кратность = Узел.ChildNodes[2].Text;

    НоваяЗапись.Записать();

    КонецЕсли;

    КонецЕсли;

    КонецЦикла;

    КонецЕсли;

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

    Экспорт цен номенклатуры в Excel

    Если нужно выгрузить данные регистра в Excel для анализа:

    Процедура ЭкспортироватьЦеныВExcel()
    

    Таблица = Новый ТаблицаЗначений;

    Таблица.Колонки.Добавить("Номенклатура");

    Таблица.Колонки.Добавить("ТипЦены");

    Таблица.Колонки.Добавить("Цена");

    Таблица.Колонки.Добавить("Дата");

    Выборка = РегистрыСведений.ЦеныНоменклатуры.Выбрать();

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

    НоваяСтрока = Таблица.Добавить();

    НоваяСтрока.Номенклатура = Выборка.Номенклатура.Наименование;

    НоваяСтрока.ТипЦены = Выборка.ТипЦен.Наименование;

    НоваяСтрока.Цена = Выборка.Цена;

    НоваяСтрока.Дата = Выборка.Период;

    КонецЦикла;

    Экспорт = Новый ЭкспортВExcel;

    Экспорт.УстановитьДанные(Таблица);

    Экспорт.Выгрузить("D:\ЦеныНоменклатуры.xlsx");

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

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

    Контроль и анализ данных в регистрах сведений

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

    Отчёты по регистру

    В большинстве конфигураций есть стандартные отчёты для анализа регистров. Например:

    • 📊 Анализ курсов валют — показывает динамику изменения курсов за период.
    • 📈 Движения номенклатуры — отображает, как менялись цены по товарам.
    • 🔍 Поиск дублей — помогает найти записи с одинаковыми реквизитами.
    • Чтобы открыть отчёт:

      1. Перейдите в Отчёты → Стандартные отчёты.
      2. Выберите отчёт, связанный с нужным регистром (например, Анализ регистра сведений).
      3. Настройте отбор по датам, валютам или другим реквизитам.

      Запросы для проверки данных

      Для сложного анализа используйте язык запросов . Пример запроса для поиска дублирующихся курсов валют:

      Запрос = Новый Запрос;
      

      Запрос.Текст =

      "ВЫБРАТЬ

      | КурсыВалют.Валюта КАК Валюта,

      | КурсыВалют.Дата КАК Дата,

      | КОЛИЧЕСТВО(*) КАК Количество

      |ИЗ

      | РегистрСведений.КурсыВалют КАК КурсыВалют

      |СГРУППИРОВАТЬ ПО

      | КурсыВалют.Валюта,

      | КурсыВалют.Дата

      |ИМЕЮЩИЕ

      | КОЛИЧЕСТВО(*) > 1";

      Результат = Запрос.Выполнить();

      Если запрос возвращает строки, значит, в регистре есть дубли. Их нужно удалить вручную или с помощью обработки.

      💡

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

      FAQ: Частые вопросы по работе с регистрами сведений

      Как удалить ошибочную запись из регистра сведений?

      Удалить запись можно двумя способами:

      1. Вручную: откройте регистр, найдите нужную запись и нажмите Удалить (или Пометить на удаление, если используется помеченное удаление).
      2. Программно: используйте метод Удалить() для менеджера записи:
        Запись = РегистрыСведений.КурсыВалют.НайтиПоРеквизиту(Новый Структура("Валюта, Дата", Валюта, Дата));
        

        Запись.Удалить();

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

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

      Если в конфигурации включено помеченное удаление, запись можно восстановить:

      1. Откройте регистр в режиме "Все записи" (обычно есть флажок "Показывать помеченные на удаление").
      2. Найдите нужную запись и снимите пометку удаления (кнопка Отменить удаление).

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

    Почему при добавлении записи в регистр выдаётся ошибка "Нарушение уникальности"?

    Эта ошибка означает, что в регистре уже есть запись с таким же набором уникальных реквизитов (например, валюта + дата для курсов валют). Решения:

    • Проверьте, не дублируете ли вы существующую запись (возможно, она скрыта фильтром).
    • Если дубль не нужен, удалите его.
    • Если дубль нужен (например, разные курсы для одной валюты на одну дату), проверьте структуру регистра — возможно, отсутствует реквизит, который должен различать записи (например, ТипКурса).
    Как перенести данные из одного регистра сведений в другой?

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

    1. Обработку выгрузки/загрузки: создайте обработку, которая читает данные из исходного регистра и записывает их в целевой.
    2. Универсальный обмен: если регистры в разных базах, используйте формат XML или JSON для обмена.
    3. Запрос + программная запись:
      Выборка = РегистрыСведений.ИсходныйРегистр.Выбрать();
      

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

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

      НоваяЗапись.Реквизит1 = Выборка.Реквизит1;

      НоваяЗапись.Записать();

      КонецЦикла;

    ⚠️ При переносе учитывайте соответствие типов данных и периодичность регистров.

    Как запретить пользователям редактировать регистр сведений?

    Ограничить доступ к регистру можно через:

    1. Роли: в конфигураторе откройте роль пользователя (Администрирование → Пользователи и права → Роли) и снимите флажки на редактирование регистра.
    2. Права доступа: для конкретного регистра установите ограничения в свойствах объекта конфигурации.
    3. Программную блокировку: в модуле регистра добавьте проверку прав перед записью:
      Процедура ПередЗаписью(Отказ)
      

      Если НЕ Пользователь.ИмеетРоль("Администратор") Тогда

      Сообщить("Редактирование регистра запрещено!");

      Отказ = Истина;

      КонецЕсли;

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