Примеры работы с регистром сведений

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

Чтение данных из регистра сведений

// Чтение данных через запрос
Процедура ПрочитатьДанные()
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    РегистрСведенийКурсыВалют.Валюта КАК Валюта,
    |    РегистрСведенийКурсыВалют.Курс КАК Курс,
    |    РегистрСведенийКурсыВалют.Дата КАК Дата
    |ИЗ
    |    РегистрСведений.КурсыВалют КАК РегистрСведенийКурсыВалют
    |ГДЕ
    |    РегистрСведенийКурсыВалют.Дата = &Дата";
    
    Запрос.УстановитьПараметр("Дата", ТекущаяДата());
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Валюта + " - " + Выборка.Курс);
    КонецЦикла;
КонецПроцедуры

Запись данных в регистр сведений

// Запись одной записи
Процедура ЗаписатьКурсВалюты()
    НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Дата.Установить(ТекущаяДата());
    НаборЗаписей.Прочитать();
    
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию("Доллар США");
    НоваяЗапись.Курс = 75.50;
    НоваяЗапись.Дата = ТекущаяДата();
    
    НаборЗаписей.Записать();
КонецПроцедуры

// Запись нескольких записей
Процедура ЗаписатьНесколькоКурсов()
    НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Дата.Установить(ТекущаяДата());
    НаборЗаписей.Прочитать();
    
    // Добавляем несколько валют
    ВалютаДоллар = Справочники.Валюты.НайтиПоНаименованию("Доллар США");
    ВалютаЕвро = Справочники.Валюты.НайтиПоНаименованию("Евро");
    
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Валюта = ВалютаДоллар;
    НоваяЗапись.Курс = 75.50;
    НоваяЗапись.Дата = ТекущаяДата();
    
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Валюта = ВалютаЕвро;
    НоваяЗапись.Курс = 85.30;
    НоваяЗапись.Дата = ТекущаяДата();
    
    НаборЗаписей.Записать();
КонецПроцедуры

Удаление записей из регистра сведений

Процедура УдалитьКурсыНаДату()
    НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Дата.Установить(ТекущаяДата());
    НаборЗаписей.Прочитать();
    
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();
КонецПроцедуры

// Удаление конкретной записи
Процедура УдалитьКурсВалюты()
    НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Дата.Установить(ТекущаяДата());
    НаборЗаписей.Прочитать();
    
    Для Каждого Запись Из НаборЗаписей Цикл
        Если Запись.Валюта = Справочники.Валюты.НайтиПоНаименованию("Доллар США") Тогда
            НаборЗаписей.Удалить(Запись);
        КонецЕсли;
    КонецЦикла;
    
    НаборЗаписей.Записать();
КонецПроцедуры

Использование менеджера регистра сведений

// Получение последнего курса валюты
Функция ПолучитьПоследнийКурс(Валюта)
    
    МенеджерРегистра = РегистрыСведений.КурсыВалют.СоздатьМенеджер();
    Отбор = Новый Структура("Валюта", Валюта);
    Сортировка = Новый Массив();
    Сортировка.Добавить("Дата Убыв");
    
    Выборка = МенеджерРегистра.Выбрать(Отбор, Сортировка);
    Если Выборка.Следующий() Тогда
        Возврат Выборка.Курс;
    КонецЕсли;
    
    Возврат 0;
КонецФункции

Работа с периодическим регистром сведений

// Получение курса валюты на определенную дату
Функция ПолучитьКурсНаДату(Валюта, ДатаКурса)
    
    МенеджерРегистра = РегистрыСведений.КурсыВалют.СоздатьМенеджер();
    Отбор = Новый Структура;
    Отбор.Вставить("Валюта", Валюта);
    Отбор.Вставить("Дата", ДатаКурса);
    
    Выборка = МенеджерРегистра.Выбрать(Отбор);
    Если Выборка.Следующий() Тогда
        Возврат Выборка.Курс;
    Иначе
        // Попробуем найти ближайший предыдущий курс
        Отбор.Удалить("Дата");
        Сортировка = Новый Массив();
        Сортировка.Добавить("Дата Убыв");
        ПараметрыПолучения = Новый Структура("Дата", ДатаКурса);
        
        Выборка = МенеджерРегистра.Выбрать(Отбор, Сортировка, ПараметрыПолучения);
        Если Выборка.Следующий() Тогда
            Возврат Выборка.Курс;
        КонецЕсли;
    КонецЕсли;
    
    Возврат 0;
КонецФункции

Пример использования временных таблиц для работы с регистром

// Сложный пример с использованием временных таблиц
Процедура ОбновитьКурсыВалют()
    
    // Создаем временную таблицу для новых курсов
    ВременнаяТаблица = Новый ТаблицаЗначений;
    ВременнаяТаблица.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
    ВременнаяТаблица.Колонки.Добавить("Курс", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 4)));
    
    // Заполняем временную таблицу
    НоваяСтрока = ВременнаяТаблица.Добавить();
    НоваяСтрока.Валюта = Справочники.Валюты.НайтиПоНаименованию("Доллар США");
    НоваяСтрока.Курс = 75.50;
    
    НоваяСтрока = ВременнаяТаблица.Добавить();
    НоваяСтрока.Валюта = Справочники.Валюты.НайтиПоНаименованию("Евро");
    НоваяСтрока.Курс = 85.30;
    
    // Обновляем регистр сведений
    НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Дата.Установить(ТекущаяДата());
    НаборЗаписей.Прочитать();
    
    НаборЗаписей.Очистить();
    
    Для Каждого Строка Из ВременнаяТаблица Цикл
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Валюта = Строка.Валюта;
        НоваяЗапись.Курс = Строка.Курс;
        НоваяЗапись.Дата = ТекущаяДата();
    КонецЦикла;
    
    НаборЗаписей.Записать();
КонецПроцедуры

Использование виртуальных таблиц регистра сведений

// Пример использования виртуальной таблицы остатков
Процедура ПолучитьКурсыНаДаты()
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    КурсыВалютОстатки.Валюта КАК Валюта,
    |    КурсыВалютОстатки.Курс КАК Курс,
    |    КурсыВалютОстатки.Дата КАК Дата
    |ИЗ
    |    РегистрСведений.КурсыВалют.Остатки КАК КурсыВалютОстатки
    |ГДЕ
    |    КурсыВалютОстатки.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";
    
    Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));
    Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(ТекущаяДата()));
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Дата + ": " + Выборка.Валюта + " - " + Выборка.Курс);
    КонецЦикла;
КонецПроцедуры

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

Поделиться с друзьями
Smirnov code
Добавить комментарий