Регистры сведений в 1С:Предприятие — это один из ключевых объектов конфигурации, который хранит данные о состоянии системных параметров, справочников или документов на определённую дату. Без корректного заполнения этих регистров невозможно обеспечить актуальность отчётности, корректную работу механизмов расчётов или интеграцию с другими системами. Однако многие пользователи сталкиваются с трудностями: где найти регистр, как добавить в него записи вручную или программно, и почему иногда данные "не сохраняются".
Эта статья поможет разобраться во всех нюансах — от базовых принципов до продвинутых приёмов работы с регистрами сведений. Мы рассмотрим ручное заполнение через интерфейс 1С, автоматизацию с помощью встроенного языка, а также типичные ошибки, которые приводят к потере данных или некорректной работе системы. Особое внимание уделено практическим примерам для бухгалтерских конфигураций (например, 1С:Бухгалтерия 8.3) и торговых решений (1С:Управление торговлей).
Что такое регистр сведений и зачем он нужен
Регистр сведений — это объект конфигурации 1С, предназначенный для хранения данных, которые могут изменяться во времени. В отличие от справочников, где информация статична (например, список контрагентов), регистры фиксируют динамические параметры: курсы валют, цены номенклатуры, остатки на складах или настройки пользователей. Главная особенность — возможность привязки записи к конкретной дате, что позволяет отслеживать историю изменений.
Примеры использования регистров сведений:
- 💰 Курсы валют — хранение актуальных и исторических значений для пересчёта сумм в иностранной валюте.
- 📦 Цены номенклатуры — фиксация стоимости товаров по разным типам цен (оптовая, розничная, дилерская).
- 👥 Настройки пользователей — сохранение индивидуальных параметров интерфейса или прав доступа.
- ⚙️ Системные параметры — например, путь к файлам обмена или адреса API для интеграций.
Регистры бывают двух типов:
- Независимые — хранят данные сами по себе (например, курсы валют).
- Подчинённые — привязаны к документам или справочникам (например, цены номенклатуры для конкретного склада).
⚠️ Внимание: Если регистр сведений используется в расчётах (например, для определения себестоимости), его неправильное заполнение может привести к искажению финансовых отчётов. Всегда проверяйте актуальность данных перед закрытием периода.
Как найти регистр сведений в интерфейсе 1С
Прежде чем заполнять регистр, его нужно найти. В зависимости от конфигурации путь к регистрам может отличаться, но общая логика одинакова:
- Откройте 1С:Предприятие в режиме
1С:Предприятие(не путать с конфигуратором!). - Перейдите в меню
Все функции(обычно доступно через кнопку с тремя точками или клавишуF1→ "Все функции"). - В дереве объектов найдите папку
Регистры сведений. В некоторых конфигурациях она может называтьсяСправочники и регистрыили скрываться за вкладкойАдминистрирование. - Выберите нужный регистр (например,
Курсы валютилиЦены номенклатуры).
Если регистра нет в списке, возможно:
- 🔍 Он скрыт настройками ролей (проверьте права пользователя).
- 🛠️ Это подчинённый регистр — его можно открыть только из документа или справочника, которому он подчинён.
- 📂 Регистр создан в другой конфигурации (например, в 1С:ЗУП, а вы ищете в 1С:Бухгалтерии).
Для ускорения поиска используйте поиск по названию (комбинация Ctrl+F в окне "Все функции"). Если регистр всё равно не находится, проверьте его наличие в конфигураторе (Конфигуратор → Объекты конфигурации → Регистры сведений).
Ручное заполнение регистра сведений через интерфейс
Самый простой способ добавить запись — сделать это вручную. Рассмотрим процесс на примере регистра Курсы валют в 1С:Бухгалтерии 8.3:
- Откройте регистр через
Все функции → Регистры сведений → Курсы валют. - Нажмите кнопку
Создать(илиДобавить, в зависимости от версии). - Заполните поля:
Валюта— выберите из справочника (например,USD).Дата— укажите дату, с которой действует курс.Курс— введите числовое значение (например,92.50).Кратность— обычно1(сколько единиц иностранной валюты соответствует 1 рублю).
Записать и закрыть.Для подчинённых регистров (например, Цены номенклатуры) алгоритм аналогичен, но сначала нужно открыть справочник или документ, которому регистр подчинён. Например:
- Откройте справочник
Номенклатура. - Выберите нужный товар и перейдите на вкладку
Цены(илиДополнительно → Цены). - Добавьте новую запись с указанием типа цены (
Оптовая,Розничная) и её значения. - 🔄 Периодичность — если регистр периодический, одна дата может содержать несколько записей (например, разные курсы валют для разных валют).
- 🔒 Блокировки — при одновременной работе нескольких пользователей используйте транзакции (
НачатьТранзакцию()), чтобы избежать конфликтов. - ⚡ Производительность — для массовых операций лучше использовать
Объект.Записать()в пакетном режиме, а не по одной записи.
Выбрана правильная дата действия курса/цены|
Значение введено в корректном формате (например, не "92,50", а "92.50")|
Проверена уникальность записи (нет дублей на ту же дату)|
Сохранение подтверждено без ошибок-->
⚠️ Внимание: В некоторых конфигурациях (например, 1С:УТ 11) при ручном изменении цен может срабатывать механизм контроля минимальной наценки. Если новая цена ниже допустимой, система выдаст ошибку. В этом случае требуется либо скорректировать цену, либо получить права на её принудительное изменение.
Программное заполнение регистра сведений на встроенном языке
Для автоматизации заполнения регистров используют встроенный язык 1С. Это актуально при массовом внесении данных, интеграции с внешними системами или создании обработок. Рассмотрим базовые примеры.
Пример 1: Добавление записи в независимый регистр
Допустим, нужно добавить курс доллара на текущую дату в регистр КурсыВалют:
Процедура ЗаполнитьКурсДоллара()
Регистр = РегистрыСведений.КурсыВалют;
НоваяЗапись = Регистр.СоздатьМенеджерЗаписи();
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию("Доллар США");
НоваяЗапись.Дата = ТекущаяДата();
НоваяЗапись.Курс = 92.50;
НоваяЗапись.Кратность = 1;
НоваяЗапись.Записать();
КонецПроцедуры
Пример 2: Массовое заполнение цен номенклатуры
Если нужно обновить цены для всех товаров определённой группы:
Процедура ОбновитьЦеныНоменклатуры()
Регистр = РегистрыСведений.ЦеныНоменклатуры;
ТипЦены = Справочники.ТипыЦен.НайтиПоНаименованию("Оптовая");
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтотОбъект.Группа = Справочники.ГруппыНоменклатуры.Товары Тогда
НоваяЗапись = Регистр.СоздатьМенеджерЗаписи();
НоваяЗапись.Номенклатура = Выборка.Ссылка;
НоваяЗапись.ТипЦен = ТипЦены;
НоваяЗапись.Цена = Выборка.СтандартнаяЦена * 1.1; // Увеличиваем на 10%
НоваяЗапись.Дата = ТекущаяДата();
НоваяЗапись.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для работы с подчинёнными регистрами используйте метод ПолучитьМенеджерЗаписи() с указанием владельца. Например, для регистра ЦеныПоставщиков, подчинённого справочнику Контрагенты:
Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
МенеджерЗаписи = РегистрыСведений.ЦеныПоставщиков.ПолучитьМенеджерЗаписи(Контрагент);
Перед массовым заполнением регистра сделайте резервную копию базы. Ошибка в коде может привести к дублированию записей или потере актуальных данных.
Особенности программного заполнения
При работе с регистрами через код учитывайте:
Типичные ошибки при заполнении регистров сведений
Даже опытные пользователи 1С допускают ошибки, которые приводят к сбоям в работе системы. Вот наиболее распространённые из них:
| Ошибка | Причина | Как исправить |
|---|---|---|
| Дублирование записей на одну дату | Отсутствует контроль уникальности при ручном/программном вводе | Перед записью проверять наличие записи на дату с помощью Регистр.НайтиПоРеквизиту() |
| Неверный формат данных (например, "92,50" вместо "92.50") | Региональные настройки системы (разделитель дробной части) | Использовать Число(Значение) для приведения к числовому формату |
| Запись не сохраняется без ошибок | Не хватает прав или блокировка другими пользователями | Проверять права ролей в конфигураторе или использовать транзакции |
| Искажение отчётов после изменения регистра | Не учтена периодичность — новая запись перекрыла старую | Проверять приоритет записей (поле Период или НомерСтроки) |
Одна из самых коварных ошибок — несоответствие периодов. Например, если в регистре ЦеныНоменклатуры для товара есть запись на 01.01.2026 с ценой 1000 рублей и запись на 01.02.2026 с ценой 1200 рублей, то при запросе цены на 15.01.2026 система вернёт 1000, а не 1200. Это логично, но часто забывается при ручном вводе.
Что делать, если запись "исчезла" после сохранения?
Причины могут быть разными:
1. Автоматическая очистка — в некоторых конфигурациях старые записи удаляются по регламентному заданию (проверьте настройки очистки).
2. Транзакционный откат — если сохранение проходило в транзакции, которая была отменена.
3. Права доступа — запись могло удалить другое привилегированное действие (например, обработка закрытия месяца).
Чтобы восстановить данные, проверьте журнал регистрации или резервную копию.
Продвинутые приёмы: обмен данными и интеграции
Регистры сведений часто используются для интеграции 1С с другими системами: сайтами, 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");
КонецПроцедуры
⚠️ Внимание: При интеграции с внешними системами учитывайте форматы данных. Например, даты в 1С и Excel могут интерпретироваться по-разному (особенно если используются региональные настройки с другим разделителем). Всегда проверяйте результат выгрузки на тестовых данных.
Контроль и анализ данных в регистрах сведений
После заполнения регистра важно убедиться, что данные корректны и не содержат ошибок. Для этого используйте встроенные инструменты 1С:
Отчёты по регистру
В большинстве конфигураций есть стандартные отчёты для анализа регистров. Например:
- 📊 Анализ курсов валют — показывает динамику изменения курсов за период.
- 📈 Движения номенклатуры — отображает, как менялись цены по товарам.
- 🔍 Поиск дублей — помогает найти записи с одинаковыми реквизитами.
- Перейдите в
Отчёты → Стандартные отчёты. - Выберите отчёт, связанный с нужным регистром (например,
Анализ регистра сведений). - Настройте отбор по датам, валютам или другим реквизитам.
Чтобы открыть отчёт:
Запросы для проверки данных
Для сложного анализа используйте язык запросов 1С. Пример запроса для поиска дублирующихся курсов валют:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КурсыВалют.Валюта КАК Валюта,
| КурсыВалют.Дата КАК Дата,
| КОЛИЧЕСТВО(*) КАК Количество
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|СГРУППИРОВАТЬ ПО
| КурсыВалют.Валюта,
| КурсыВалют.Дата
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(*) > 1";
Результат = Запрос.Выполнить();
Если запрос возвращает строки, значит, в регистре есть дубли. Их нужно удалить вручную или с помощью обработки.
Регулярно проверяйте регистры сведений на наличие дублей и устаревших записей. Это предотвратит ошибки в расчётах и ускорит работу системы.
FAQ: Частые вопросы по работе с регистрами сведений
Как удалить ошибочную запись из регистра сведений?
Удалить запись можно двумя способами:
- Вручную: откройте регистр, найдите нужную запись и нажмите
Удалить(илиПометить на удаление, если используется помеченное удаление). - Программно: используйте метод
Удалить()для менеджера записи:Запись = РегистрыСведений.КурсыВалют.НайтиПоРеквизиту(Новый Структура("Валюта, Дата", Валюта, Дата));Запись.Удалить();
⚠️ Важно: В некоторых конфигурациях удаление записей блокируется настройками (например, если регистр используется в закрытых периодах). В этом случае потребуются права администратора.
Можно ли восстановить удалённую запись из регистра?
Если в конфигурации включено помеченное удаление, запись можно восстановить:
- Откройте регистр в режиме "Все записи" (обычно есть флажок "Показывать помеченные на удаление").
- Найдите нужную запись и снимите пометку удаления (кнопка
Отменить удаление).
Если удаление было физическим (без пометки), восстановить запись можно только из резервной копии базы.
Почему при добавлении записи в регистр выдаётся ошибка "Нарушение уникальности"?
Эта ошибка означает, что в регистре уже есть запись с таким же набором уникальных реквизитов (например, валюта + дата для курсов валют). Решения:
- Проверьте, не дублируете ли вы существующую запись (возможно, она скрыта фильтром).
- Если дубль не нужен, удалите его.
- Если дубль нужен (например, разные курсы для одной валюты на одну дату), проверьте структуру регистра — возможно, отсутствует реквизит, который должен различать записи (например,
ТипКурса).
Как перенести данные из одного регистра сведений в другой?
Для переноса данных между регистрами используйте:
- Обработку выгрузки/загрузки: создайте обработку, которая читает данные из исходного регистра и записывает их в целевой.
- Универсальный обмен: если регистры в разных базах, используйте формат XML или JSON для обмена.
- Запрос + программная запись:
Выборка = РегистрыСведений.ИсходныйРегистр.Выбрать();Пока Выборка.Следующий() Цикл
НоваяЗапись = РегистрыСведений.ЦелевойРегистр.СоздатьМенеджерЗаписи();
НоваяЗапись.Реквизит1 = Выборка.Реквизит1;
НоваяЗапись.Записать();
КонецЦикла;
⚠️ При переносе учитывайте соответствие типов данных и периодичность регистров.
Как запретить пользователям редактировать регистр сведений?
Ограничить доступ к регистру можно через:
- Роли: в конфигураторе откройте роль пользователя (
Администрирование → Пользователи и права → Роли) и снимите флажки на редактирование регистра. - Права доступа: для конкретного регистра установите ограничения в свойствах объекта конфигурации.
- Программную блокировку: в модуле регистра добавьте проверку прав перед записью:
Процедура ПередЗаписью(Отказ)Если НЕ Пользователь.ИмеетРоль("Администратор") Тогда
Сообщить("Редактирование регистра запрещено!");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры