Как найти значения в регистре сведений

(5)
Функция ПроверитьЗаполнениеКатегории(ДокОснование,Категория) экспорт
// проверяет стоит ли категория в документе    
// док основание тип документ
//параметры Докоснование ссылка на документ
//параметры категория строка с названием типа проверки категории
// возвращает булево

Кат = Справочники.КатегорииОбъектов.НайтиПоНаименованию(категория);
//дописывать здесь    

   //РС = Регистрысведений.КатегорииОбъектов;

   Док = ДокОснование.Ссылка;    
   Запрос = новый Запрос;
   Запрос.УстановитьПараметр(«Док»,Док);
   Запрос.УстановитьПараметр(«Категория»,Кат);

       Запрос.Текст =
   «ВЫБРАТЬ
   |    КатегорииОбъектов.Объект,
   |    КатегорииОбъектов.Категория
   |ИЗ
   |    РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
   |ГДЕ
   |    КатегорииОбъектов.Объект = &Док
   |    И КатегорииОбъектов.Категория = &категория»;
   результат = Запрос.Выполнить().Выгрузить();

         если результат.Количество()= 0 тогда
   ЕстьКатегория = ложь;

       иначе  ЕстьКатегория = истина;

   КонецЕсли;

    возврат ЕстьКатегория;    
       КонецФункции

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

/// Как прочитать записи регистра сведений
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьЗаписиРегистраСведенийНаСервере()
 
    // Прочитаем все записи регистра сведений "ЦенаНаЕдуДляКлиентов"
    // для организации ООО "Ромашка", упорядоченные по дате.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦенаНаЕдуДляКлиентов.Период,
        |   ЦенаНаЕдуДляКлиентов.Регистратор,
        |   ЦенаНаЕдуДляКлиентов.НомерСтроки,
        |   ЦенаНаЕдуДляКлиентов.Активность,
        |   ЦенаНаЕдуДляКлиентов.Номенклатура,
        |   ЦенаНаЕдуДляКлиентов.Контрагент,
        |   ЦенаНаЕдуДляКлиентов.Организация,
        |   ЦенаНаЕдуДляКлиентов.Цена
        |ИЗ
        |   РегистрСведений.ЦенаНаЕдуДляКлиентов КАК ЦенаНаЕдуДляКлиентов
        |ГДЕ
        |   ЦенаНаЕдуДляКлиентов.Активность = Истина И
        |   ЦенаНаЕдуДляКлиентов.Организация = &ВыбОрганизация
        |УПОРЯДОЧИТЬ ПО
        |   ЦенаНаЕдуДляКлиентов.Период";
 
    Запрос.УстановитьПараметр(
        "ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
 
        Сообщить(
            "[" + Записи.Период + "] " +
            Записи.Контрагент + " " +
            Записи.Номенклатура + " " +
            Записи.Цена + " руб."
        );
 
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить наиболее поздние записи (срез последних)
/// регистра сведений на указанную дату (включительно)
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьНаиболееПоздниеЗаписиРегистраСведенийНаСервере()
 
    // За возможности выборки наиболее поздних записей регистра
    // сведений (среза последних) в разрезе заданной аналитики
    // отвечает виртуальная таблица СрезПоследних.
    // У неё есть следующие параметры:
    // 1. Период (включительно)
    // 2. Условие (например, Организация = &ВыбОрганизация)    
 
    // Получим цены на бананы для каждого контрагента
    // на конец 1 квартала 2014 года (включительно)
    // по организации ООО "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Период,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Активность,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Номенклатура,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Контрагент,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Организация,
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Цена
        |ИЗ
        |   РегистрСведений.ЦенаНаЕдуДляКлиентов.СрезПоследних(
        |       ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59),
        |       Активность = Истина И
        |       Организация = &ВыбОрганизация И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЦенаНаЕдуДляКлиентовСрезПоследних
        |УПОРЯДОЧИТЬ ПО
        |   ЦенаНаЕдуДляКлиентовСрезПоследних.Контрагент";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.Контрагент + ", " + Записи.Период + "] " +            
            Записи.Номенклатура + " " +
            Записи.Цена + " руб."
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить наиболее ранние записи (срез первых)
/// регистра сведений на указанную дату (включительно)
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьНаиболееРанниеЗаписиРегистраСведенийНаСервере()    
 
    // За возможности выборки наиболее ранних записей регистра
    // сведений (среза первых) в разрезе заданной аналитики
    // отвечает виртуальная таблица СрезПервых.
    // У неё есть следующие параметры:
    // 1. Период (включительно)
    // 2. Условие (например, Организация = &ВыбОрганизация)    
 
    // ! Нужно внимательно вдуматься. СрезПервых получает по каждой
    // комбинации измерений наиболее раннюю запись, но НЕ БОЛЕЕ
    // РАННЮЮ, чем указанная дата.    
 
    // Получим самые первые цены, которые были установлены на бананы
    // для каждого контрагента в 2014 году (включительно)
    // по организации ООО "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Период,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Активность,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Номенклатура,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Контрагент,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Организация,
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Цена
        |ИЗ
        |   РегистрСведений.ЦенаНаЕдуДляКлиентов.СрезПервых(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       Активность = Истина И
        |       Организация = &ВыбОрганизация И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЦенаНаЕдуДляКлиентовСрезПервых
        |УПОРЯДОЧИТЬ ПО
        |   ЦенаНаЕдуДляКлиентовСрезПервых.Контрагент";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.Контрагент + ", " + Записи.Период + "] " +
            Записи.Номенклатура + " " +
            Записи.Цена + " руб."
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как найти и изменить програмно записи в регистр сведений
/// документа в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиИИзменитьЗаписиДокументаНаСервере()
 
    // Предположим, у нас есть ссылка на проведенный документ
    // "Установка цен на еду" № ВМБП-000001
 
    УстановкаЦенСсылка =
        Документы.УстановкаЦенНаЕдуДляКлиентов.НайтиПоНомеру(
            "ВМБП-000001", '20141231'
        );
 
    // Мы знаем, что этот документ делает записи в регистр
    // сведений "ЦенаНаЕдуДляКлиентов":
    // [Организация, Контрагент, Номенклатура] [Цена]
 
    // Наша задача: найти эти записи и изменит их (например, удвоим
    // цену) и записать вместо старых.
 
    // Используем объектную технику получения записей,
    // ведь мы будем их изменять.
 
    УстановкаЦен = УстановкаЦенСсылка.ПолучитьОбъект();
 
    // Получим набор записей этого документа в регистр
    // "ЦенаНаЕдуДляКлиентов"
 
    НаборЗаписей = УстановкаЦен.Движения.ЦенаНаЕдуДляКлиентов;
 
    // Прочитаем записи из базы данных.
 
    НаборЗаписей.Прочитать();
 
    Для Каждого Запись Из НаборЗаписей Цикл
 
        // Выведем старые значения.
        Сообщить(
            "[" + Запись.Организация + ", " +
            Запись.Контрагент + ", " + 
            Запись.Номенклатура + "] " +
            "[" + Запись.Цена + "]"
        );
 
        Запись.Цена = Запись.Цена * 2;
 
    КонецЦикла;
 
    // Добавим новую запись.
 
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.Организация = 
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""");
    НоваяЗапись.Контрагент =
        Справочники.Контрагенты.НайтиПоНаименованию("Петров Ю.В.");
    НоваяЗапись.Номенклатура =
        Справочники.Номенклатура.НайтиПоНаименованию("Банан");
    НоваяЗапись.Цена = 500;    
 
    // Разом запишем набор записей.
    НаборЗаписей.Записать(
        Истина // Удалим старые записи и запишем вместо них новые.
    );
 
    // Теперь записи регистра "ЦенаНаЕдуДляКлиентов" для документа
    // № ВМБП000001, отличаются от тех, что были записаны
    // документом при проведении. Чтобы вернуть их к начальному виду
    // нужно заново провести документ.
 
КонецПроцедуры
 
/// Как прочитать записи документа в регистр сведений запросом
/// в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьЗаписиДокументаЗапросомНаСервере()    
 
    // Этот прием используется, если не требуется изменять
    // найденные записи.
 
    // Предположим, у нас есть ссылка на проведенный документ
    // "Установка цен на еду" № ВМБП-000001
 
    УстановкаЦенСсылка =
        Документы.УстановкаЦенНаЕдуДляКлиентов.НайтиПоНомеру(
            "ВМБП-000001", '20141231'
        );
 
    // Мы знаем, что этот документ делает записи в регистр
    // сведений "ЦенаНаЕдуДляКлиентов".
    // Прочитаем эти записи запросом.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦенаНаЕдуДляКлиентов.Период,
        |   ЦенаНаЕдуДляКлиентов.Регистратор,
        |   ЦенаНаЕдуДляКлиентов.НомерСтроки,
        |   ЦенаНаЕдуДляКлиентов.Активность,
        |   ЦенаНаЕдуДляКлиентов.Номенклатура,
        |   ЦенаНаЕдуДляКлиентов.Контрагент,
        |   ЦенаНаЕдуДляКлиентов.Организация,
        |   ЦенаНаЕдуДляКлиентов.Цена
        |ИЗ
        |   РегистрСведений.ЦенаНаЕдуДляКлиентов КАК ЦенаНаЕдуДляКлиентов
        |ГДЕ
        |   ЦенаНаЕдуДляКлиентов.Регистратор = &ВыбРегистратор
        |УПОРЯДОЧИТЬ ПО
        |   ЦенаНаЕдуДляКлиентов.НомерСтроки";
 
    Запрос.УстановитьПараметр(
        "ВыбРегистратор",
        УстановкаЦенСсылка
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.Организация + ", " +
            Записи.Контрагент + ", " + 
            Записи.Номенклатура + "] " +
            "[" + Записи.Цена + "] <" +
            Записи.Регистратор + ">"
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как создать записи в регистр сведений без привязки к
/// документу в 1с 8.3, 8.2
 
&НаСервере
Процедура КакСоздатьЗаписиБезПривязкиКДокументуНаСервере()
 
    // Создавать записи в регистре сведений без привязки
    // к документу можно только для регистров, у которых
    // выбран режим записи "Независимый". В нашей конфигурации
    // таким регистром является "КурсВалют".    
    // Если бы мы захотели проделать такую же штуку для
    // регистра "ЦенаНаЕдуДляКлиентов", то нам бы пришлось
    // воспользоваться документом "ОперацияБух" или им подобным
    // для ручных операций (см. аналогичный пример в регистрах
    // накопления).
 
    // Пример №1.
 
    // Для единичных записей удобно пользоваться менеджером
    // записей.
 
    НоваяЗапись = РегистрыСведений.КурсВалют.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = '20140101';
    НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию("Доллар");
    НоваяЗапись.Курс = 30;
    НоваяЗапись.Записать(
        Истина // замещать, если уже есть запись с такими же измерениями
        // и таким же периодом
    );
 
    // Пример №2.
 
    // При помощи менеджера можно также легко
    // менять или удалять единичные записи.
    // Найдём, изменим, а затем удалим созданную запись.
 
    Выборка = РегистрыСведений.КурсВалют.Выбрать('20140101', '20140101');
    Если Выборка.Следующий() Тогда
        Запись = Выборка.ПолучитьМенеджерЗаписи();
        // изменим
        Запись.Прочитать();
        Запись.Курс = 25;
        // запишем
        Запись.Записать(Истина);
        // и тут же удалим
        Запись.Удалить();
    КонецЕсли;
 
    // Пример №3.
 
    // Если нужно изменить сразу много записей - 
    // удобнее всего использовать набор записей.
 
    // Запишем курсы валют за первые 3 дня 2014 года.
 
    Доллар = Справочники.Валюты.НайтиПоНаименованию("Доллар");
 
    НаборЗаписей = РегистрыСведений.КурсВалют.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Валюта.Установить(Доллар);    
 
    Запись01 = НаборЗаписей.Добавить();
    Запись01.Период = '20140101';
    Запись01.Валюта = Доллар;
    Запись01.Курс = 30;
 
    Запись02 = НаборЗаписей.Добавить();
    Запись02.Период = '20140102';
    Запись02.Валюта = Доллар;
    Запись02.Курс = 40;
 
    Запись03 = НаборЗаписей.Добавить();
    Запись03.Период = '20140103';
    Запись03.Валюта = Доллар;
    Запись03.Курс = 60;
 
    // Запишем весь набор разом.
 
    НаборЗаписей.Записать(
        Истина // затрём все другие записи по 
        // доллару (мы установили его в отборе)
    );
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

 +9 

   

Распечатать

1С 8.x : Как выбрать записи из регистра сведений?

Код 1C v 8.х

  //ВНИМАНИЕ !!! 
// В качестве полей для отбора могут задаваться измерения или реквизиты, для которых
// в конфигураторе признак индексирования установлен в значение "Индексировать" или
// установлен признак "Ведущее". Вид сравнения может быть только Равно.

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

// КРАТКИЙ ВАРИАНТ
ВыборкаОКЛАД = РегистрыСведений.ПлановыеНачисленияРаботниковОрганизаций.Выбрать(Результат.Период,ТекДата,Новый Структура("Сотрудник", Результат.Сотрудник));
СумОкл=0;
Пока ВыборкаОКЛАД.Следующий() Цикл
СумОкл=СумОкл+ВыборкаОКЛАД.Показатель1;
КонецЦикла;

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

Существует несколько видов регистров в 1С:

  • Накопления, хранящие остатки или обороты в числовом виде;
  • Расчета, хранящие виды расчетов и сами расчеты, обычно используются для расчета зарплаты;
  • Бухгалтерии с данными о бухгалтерских расчетах в виде Дт-Кт;
  • Регистры сведений.

Планшет

Приглашаем на
бесплатный вебинар!

06 июня в 11:00 мск

1 час

На последних мы остановимся поподробнее, поскольку они позволяют компилировать данные из БД по разрезам измерений. Например, в «Ценыноменклатуры» хранятся данные для конкретной номенклатуры и характеристики по определенному виду цен.

Рис.1 Регистр «Ценыноменклатуры»
Рис.1 Регистр «Ценыноменклатуры»

Характеристики

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

Рис.2 Периодичность и режим записи
Рис.2 Периодичность и режим записи

Если попытаться создать две записи в пределах одного периода, программа выдаст ошибку «Запись с такими ключевыми полями существует!» и не даст произвести запись в базу данных.

Также можно указать режим записи. Первый с «Подчинением регистратору», при котором записи будут регистрироваться документами и в каждой из них будет указан документ-регистратор. Если выбирать второй – независимый режим, то данные регистрируются не регистратором, а добавляются, например, непосредственно из списка или как обработка.

Рис.3 Режимы записи
Рис.3 Режимы записи

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

Запись в регистр сведений 1С

Строки в регистре с периодом и регистратором, содержащие информацию о ресурсах в разрезе измерений, называются записями.

Чтобы добавить запись в регистр используются или менеджер записей, или набор записей. Если у записей в регистре имеется общий ключ, то необходимо использовать НаборЗаписей. А для записи одной единственной записи, если в регистре все записи уникальны, необходимо использовать МенеджерЗаписи.

Пример записи при использовании объекта РегистрСведенийНаборЗаписей.

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


	НоваяЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
	НоваяЗапись.Валюта =     Справочники.Валюты.НайтиПоНаименованию(«USD»);
	НоваяЗапись.Период = Дата(31,12,2016);
	НоваяЗапись.Курс = 100;
	НоваяЗапись.Кратность = 1;
	НоваяЗапись.Записать();
	

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

Если записать без отбора данные в подчиненны регистр, возникнет ошибка.

Пример записи с использованием набора записей в подчиненный регистратору регистр сведений ЦеныНоменклатуры:


	НовыйНаборЗаписей =     РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
	НовыйНаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
	НоваяЗаписьНабора = НовыйНаборЗаписей.Добавить();
	НоваяЗаписьНабора.Период = Ссылка.Дата;
	НоваяЗаписьНабора.Номенклатура = Ссылка.Номенклатура;
	НоваяЗаписьНабора.Цена = Ссылка.Цена;
	НовыйНаборЗаписей.Записать();
	

Пример записи через менеджер записи:


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

Поиск и чтение в регистре сведений

Чтобы найти в регистре сведений запись и прочитать ее, нужна помощь запросов. Например, нам надо получить цены, внесенные определенным регистратором:


	ВЫБРАТЬ
              ЦеныНоменклатуры.Номенклатура,
              ЦеныНоменклатуры.Цена
	ИЗ
              РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
	ГДЕ
              ЦеныНоменклатуры.Регистратор = &Регистратор
	

Изменение и удаление записей

Чтобы удалить запись регистра сведений, например, все курсы валюты EUR, воспользуйтесь следующим кодом:


	СтруктураОтбора = новый Структура("Валюта",     Справочники.Валюты.НайтиПоНаименованию("EUR"));
        	Выборка = РегистрыСведений.КурсыВалют.Выбрать(,,СтруктураОтбора);
        	Пока Выборка.Следующий() Цикл
                    	МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи();
                    	Выборка.ПолучитьМенеджерЗаписи().Удалить();
        	КонецЦикла;
	

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


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

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

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

  • Измерения регистра сведений описывают разрезы, в которых хранится информация
  • Ресурсы регистра сведений соответственно хранят саму информацию

Чтение записи регистра сведений в 1С 8.3:

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

    КонецЦикла;

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

Поиск и программное изменение записи документа в регистр сведений в 1С 8.3:

&НаСервере
Процедура ПоискИИзменениеЗаписи()УстановкаЦенСсылка = Документы.УстановкаЦен.НайтиПоНомеру(«ПТО-00000001», ‘20201231’);
   
УстановкаЦен = УстановкаЦенСсылка.ПолучитьОбъект();// Получение набора записей документа Установка цен № ПТО-00000001 от 31.12.20 в регистр «ЦеныРеализации»
   
НаборЗаписей = УстановкаЦен.Движения.ЦеныРеализации;// Чтение набора записей из базы данных.
   
НаборЗаписей.Прочитать();

    Для Каждого

Запись Из НаборЗаписей Цикл// Получение старых значений
       
Сообщить(» по » + Запись.Организация + «, » + Запись.Контрагент + «, » + Запись.Номенклатура + » = » + Запись.Цена);
       
// Проведение удорожания на 30%
       
Запись.Цена = Запись.Цена + (Запись.Цена * (30/100));

    КонецЦикла;

// Добавление новой записи
   
НоваяЗапись = НаборЗаписей.Добавить();
   
НоваяЗапись.Период = ТекущаяДата();
   
НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию(«ОАО «»Гипермаркет АЗИЯ»»»);
   
НоваяЗапись.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(«ООО «»БелИмпортТорг»»»);
   
НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(«Молоко 3,2%»);
   
НоваяЗапись.Цена = 3;// Замещение старых записей и запись новых
   
НаборЗаписей.Записать(Истина);

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

Чтение записи документа в регистре сведений запросом в 1С 8.3:

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

    КонецЦикла;

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

Получение наиболее ранних записей регистра сведений через срез первых на дату в 1С 8.3:

&НаСервере
Процедура ПолучениеНаиболееРаннихЗаписей()// Параметры виртуальной таблицы СрезПервых:
    // 1. Период (включительно)
    // 2. Условие (например, Организация = &ВыбОрганизация)

    // Получение цен на Молоко 3,2% для каждого контрагента на начало 2 квартала 2020 года (включительно)
    // по организации ОАО «Гипермаркет АЗИЯ».

Запрос = Новый Запрос;
   
Запрос.Текст =
   
«ВЫБРАТЬ
    |   ЦеныРеализацииСрезПервых.Период,
    |   ЦеныРеализацииСрезПервых.Активность,
    |   ЦеныРеализацииСрезПервых.Номенклатура,
    |   ЦеныРеализацииСрезПервых.Контрагент,
    |   ЦеныРеализацииСрезПервых.Организация,
    |   ЦеныРеализацииСрезПервых.Цена
    |ИЗ
    |   РегистрСведений.ЦеныРеализации.СрезПервых(
    |       ДАТАВРЕМЯ(2020, 04, 01, 00, 00, 00),
    |       Активность = Истина И
    |       Организация = &ВыбОрганизация И
    |       Номенклатура = &ВыбНоменклатура) КАК ЦеныРеализацииСрезПервых
    |УПОРЯДОЧИТЬ ПО
    |   ЦеныРеализацииСрезПервых.Контрагент»
;Запрос.УстановитьПараметр(«ВыбОрганизация»,Справочники.Организации.НайтиПоНаименованию(«ОАО «»Гипермаркет АЗИЯ»»»));
   
Запрос.УстановитьПараметр(«ВыбНоменклатура»,Справочники.Номенклатура.НайтиПоНаименованию(«Молоко 3,2%»));
   
РезультатЗапроса = Запрос.Выполнить();Записи = РезультатЗапроса.Выбрать();
    Пока
Записи.Следующий() ЦиклСообщить(«за » + Записи.Период + » на » +Записи.Номенклатура + » » + Записи.Контрагент + » = » +Записи.Цена + » руб.»);

    КонецЦикла;

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

Получение наиболее поздних записей регистра сведений через срез последних на дату в 1С 8.3:

&НаСервере
Процедура ПолучениеНаиболееПозднихЗаписей()// Параметры виртуальной таблицы СрезПоследних:
    // 1. Период (включительно)
    // 2. Условие (например, Организация = &ВыбОрганизация)

    // Получение цен на Молоко 3,2% для каждого контрагента на конец 2 квартала 2020 года (включительно)
    // по организации ОАО «Гипермаркет АЗИЯ».

Запрос = Новый Запрос;
   
Запрос.Текст =
   
«ВЫБРАТЬ
    |   ЦеныРеализацииСрезПоследних.Период,
    |   ЦеныРеализацииСрезПоследних.Активность,
    |   ЦеныРеализацииСрезПоследних.Номенклатура,
    |   ЦеныРеализацииСрезПоследних.Контрагент,
    |   ЦеныРеализацииСрезПоследних.Организация,
    |   ЦеныРеализацииСрезПоследних.Цена
    |ИЗ
    |   РегистрСведений.ЦеныРеализации.СрезПоследних(
    |       ДАТАВРЕМЯ(2020, 06, 30, 23, 59, 59),
    |       Активность = Истина И
    |       Организация = &ВыбОрганизация И
    |       Номенклатура = &ВыбНоменклатура
    |   ) КАК ЦеныРеализацииСрезПоследних
    |УПОРЯДОЧИТЬ ПО
    |   ЦеныРеализацииСрезПоследних.Контрагент»
;Запрос.УстановитьПараметр(«ВыбОрганизация»,Справочники.Организации.НайтиПоНаименованию(«ОАО «»Гипермаркет АЗИЯ»»»));
   
Запрос.УстановитьПараметр(«ВыбНоменклатура»,Справочники.Номенклатура.НайтиПоНаименованию(«Молоко 3,2%»));
   
РезультатЗапроса = Запрос.Выполнить();Записи = РезультатЗапроса.Выбрать();
    Пока
Записи.Следующий() ЦиклСообщить(«за » + Записи.Период + » на » +Записи.Номенклатура + » » + Записи.Контрагент + » = » +Записи.Цена + » руб.»);

    КонецЦикла;

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

Создание записи в регистре сведений без привязки к документу в 1С 8.3:

&НаСервере
Процедура СозданиеЗаписиБезПривязкиКДокументу()// Создание записи в регистре сведений без привязки к документу можно только для регистров,
    // в свойствах которых установлен режим записи «Независимый».

    // Создание записи — для единичных записей лучше использовать «Менеджер Записей»

НоваяЗапись = РегистрыСведений.КурсВалют.СоздатьМенеджерЗаписи();
   
НоваяЗапись.Период = ‘20200401’;
   
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоНаименованию(«Евро»);
   
НоваяЗапись.Курс = 2.8010;
   
НоваяЗапись.Записать(Истина); // Замещение — если уже есть запись с такими же измерениями и таким же периодом

    // Поиск, изменение и удаление созданной запись на дату

Выборка = РегистрыСведений.КурсВалют.Выбрать(‘20200401’, ‘20200401’);
    Если
Выборка.Следующий() ТогдаЗапись = Выборка.ПолучитьМенеджерЗаписи();
       
Запись.Прочитать();
       
Запись.Курс = 2.8020;// Изменение курса Евро
       
Запись.Записать(Истина);// Запись курса Евро
       
Запись.Удалить();// Удаление курса ЕвроКонецЕсли;// Для группового изменения записей лучше использовать «Набор Записей»
   
Евро = Справочники.Валюты.НайтиПоНаименованию(«Евро»);НаборЗаписей = РегистрыСведений.КурсВалют.СоздатьНаборЗаписей();
   
НаборЗаписей.Отбор.Валюта.Установить(Евро);Запись_1 = НаборЗаписей.Добавить();
   
Запись_1.Период = ‘20200401’; // 01 апреля 2020 г.
   
Запись_1.Валюта = Евро;
   
Запись_1.Курс = 2.8446;Запись_2 = НаборЗаписей.Добавить();
   
Запись_2.Период = ‘20200402’; // 02 апреля 2020 г.
   
Запись_2.Валюта = Евро;
   
Запись_2.Курс = 2.8478;Запись_3 = НаборЗаписей.Добавить();
   
Запись_3.Период = ‘20200403’; // 03 апреля 2020 г.
   
Запись_3.Валюта = Евро;
   
Запись_3.Курс = 2.8320;Запись_4 = НаборЗаписей.Добавить();
   
Запись_4.Период = ‘20200404’; // 04 апреля 2020 г.
   
Запись_4.Валюта = Евро;
   
Запись_4.Курс = 2.7943;Запись_5 = НаборЗаписей.Добавить();
   
Запись_5.Период = ‘20200405’; // 05 апреля 2020 г.
   
Запись_5.Валюта = Евро;
   
Запись_5.Курс = 2.7797;// Запись сразу всего набора
   
НаборЗаписей.Записать(Истина); // Замещение — если уже есть запись с такими же измерениями и таким же периодомКонецПроцедуры

💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Регистры сведений:

Copyright©, «Программист 1С в г.Минске», 05.04.2020

Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник

Понравилась статья? Поделить с друзьями:
  • Как найти какую либо информацию в интернете
  • При загрузке высококачественной версии этого видео произошла ошибка как исправить
  • Как составить договор для реализации товара
  • Как найти концентрацию вещества в процентах
  • Как составить договор купли продажи квартиры самостоятельно образец 2022 года образец заполнения