Многие программисты, знакомые с версией 7.7 и желающие освоить версию 8, спрашивают, куда делись периодические реквизиты справочников и периодические константы. А если их нет, то какой механизм их заменяет? В 1С:Предприятии 8 для хранения истории изменения значений предназначены периодические регистры сведений.
Вообще регистры сведений предназначены для хранения информации, развернутой по комбинации измерений. Главное отличие периодического регистра сведений от обычного заключается в том, что в нем присутствует дополнительное системное измерение "Период", имеющее тип "дата". Это позволяет получать не только текущие сведения об объекте, но также на любой момент времени.
Для периодического реквизита при создании указывается свойство "Периодичность" из следующих возможных значений:
- в пределах секунды,
- в пределах дня,
- в пределах месяца,
- в пределах квартала,
- в пределах года,
- по позиции регистратора (доступен, если режим записи у регистра — «Подчинение регистратору»).
Обратите внимание, что тип ресурса сведений может быть как примитивный (число, строка, дата, булево), так и ссылочный (СправочникСсылка, ДокументСсылка, ПеречислениеСсылка и т.д.). Более того, в регистре сведений можно хранить даже картинки и другие неструктурированные сведения, поскольку можно создать ресурс типа "ХранилищеЗначения".
Самый простой пример периодического регистра сведений — КурсыВалют. Этот регистр сведений хранит курсы всех валют на каждый день.
Подробная информация о структуре регистра сведений КурсыВалют приведена в следующей таблице:
Измерения: Валюты тип "СправочникСсылка.Валюты", ведущее, запрет незаполненных значений
Ресурсы: Курс тип "число", длина 15, точность 4, неотрицательное
Кратность тип "число", длина 10, точность 0, неотрицательное
Периодичность В пределах дня
Режим записи Независимый
Данные в этот регистр сведений можно вводить вручную с помощью формы списка.
ВНИМАНИЕ. В регистр сведений с определенной периодичностью, не равной "По позиции регистратору", нельзя ввести две записи с одинаковым набором измерений и периодом, т.е. нельзя ввести два курса одной валюты в один день. Если периодичность записи регистра имеет значение "По позиции регистратора", то ключ уникальности записи также содержит и ссылку на документ-регистратор, т.е. в таком регистре не может существовать две записи с одинаковым набором измерений, периодом и регистратором. Это неотъемлемое свойство регистра сведений, отличающее его от остальных регистров.Добавление новых записей в регистр сведений, а также перебор имеющихся записей производится стандартным для всех регистров способом. В данном разделе мы рассмотрим только самое важное
Возвращает в виде структуры значения ресурсов одной записи регистра, соответствующей указанным значениям всех (!) измерений регистра и периоду.ПолучитьПоследнее (<Конец периода>, <Отбор>)
Этот метод возвращает актуальное значение ресурсов, действовавшее на заданную дату. Если он не находит запись в регистре по данной комбинации измерений точно на заданный период, то возвращается структура, содержащая значения ресурсов ближайшей более поздней записи.ПолучитьПервое (<Начало периода>, <Отбор>)
Этот метод действует аналогично методу ПолучитьПоследнее, но если записи на данный момент не находится, то возвращается структура, содержащая значения ресурсов ближайшей более ранней записи.СрезПоследних (<Конец периода>, <Отбор>)
Эти методы аналогичны методам ПолучитьПоследнее и ПолучитьПервое соответственно , но при их использовании, как правило, не указывается одно или несколько измерений. В результате возвращается не структура, как в предыдущих случаях, а таблица значений, заполненная данными найденных записей регистра сведений.
ВалютаОтбор = Новый Структура("Валюта", ВыбВалюта);
СтруктураКурсКратность = РегистрыСведений.КурсыВалют.Получить(ВыбДата, ВалютаОтбор);
Если СтруктураКурсКратность.Курс = 0 Тогда
Сообщить("Курс точно на эту дату не указан!");
Иначе
Сообщить("Курс валюты:" + СокрЛП(СтруктураКурсКратность.Курс) + ", кратность: " + СокрЛП(СтруктураКурсКратность.Кратность));
КонецЕсли;
ВалютаОтбор = Новый Структура("Валюта", ВыбВалюта);
СтруктураКурсКратность = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ВыбДата, ВалютаОтбор);
Сообщить("Актуальный курс на заданную дату: " + СтруктураКурсКратность.Курс);
тзДанные = РегистрыСведений.КурсыВалют.СрезПоследних(ВыбДата, );
Для Каждого Стр Из тзДанные Цикл
Сообщить("Для валюты " + Строка(Стр.Валюта) + " курс на заданную дату: " + Строка(Стр.Курс) + ", кратность: " + Строка(Стр.Кратность));
КонецЦикла;
ОтборТипЦен = Новый Структура("ТипЦен", Перечисления.ТипыЦен.Оптовая);
тзДанные = РегистрыСведений.ЦеныКомпании.СрезПоследних(ВыбДата, ОтборТипЦен);
Для Каждого Стр Из тзДанные Цикл
Сообщить("Для номенклатуры " + Строка(Стр.Номенклатура) + " оптовая цена: " + Строка(Стр.Цена));
КонецЦикла;
ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют
ВЫБРАТЬ Валюта, Курс
ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ВыбДата, Валюта = &ВыбВалюта);
ВЫБРАТЬ Валюта, Курс
ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ВыбДата);
ВЫБРАТЬ Номенклатура, Цена
ИЗ РегистрСведений.ЦеныКомпании.СрезПоследних(&ВыбДата, ТипЦен=&ВыбТипЦен);
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua