Все об 1С8 - просто и доступно

Добавить в Избранное  Сделать Стартовой  Написать письмо

Главная Статьи Вопрос-ответ Экспресс-справочник Гостевая книга
Экспресс-справочник
Справочники
Документы
Регистры сведений
Регистры накоплений
Регистры расчета
Регистр бухгалтерии
Отчеты
Обработки
Работа с запросами

Регистры сведений

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

    Пока РезультатЗапроса.Следующий() Цикл
        Сообщить(
            Строка(ВыборкаДетальныеЗаписи.Период) + " " +
            ВыборкаДетальныеЗаписи.Номенклатура + " " +
            ВыборкаДетальныеЗаписи.ТипЦен + " " +
            ВыборкаДетальныеЗаписи.Цена
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как сделать отбор движений регистра сведений по регистратору
/// в 1с 8.3, 8.2
 
Процедура ВыборкаДвиженийРегистраПоРегистратору()
 
    // отберем движения по регистру сведений первого попавшегося
    // документа "Установка цен номенклатуры"
    ВыбДок = Документы.УстановкаЦенНоменклатуры.Выбрать();
 
    Если ВыбДок.Следующий() Тогда
 
        ВыбРег = РегистрыСведений.ЦеныНоменклатуры.ВыбратьПоРегистратору(
            СсылкаНаДокумент);
 
        Пока ВыбРег.Следующий() Цикл
            Сообщить(ВыбРег.Номенклатура.Наименование + " " +ВыбРег.Цена);
        КонецЦикла;
 
    КонецЕсли;
 
КонецПроцедуры
 
// Периодический регистр сведений КурсыВалют
// Измерения: Валюта
// Ресурсы: Курс, Кратность
 
/// Как добавить новую записи регистра сведений в 1с 8.3, 8.2
/// Как изменить/удалить существующую запись регистра сведений 
/// в 1с 8.3, 8.2
 
Процедура ДобавитьИзменитьИлиУдалитьЗаписьРегистраСведений()
 
    // добавление новой записи
    НоваяЗапись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.Курс = 50;
    НоваяЗапись.Кратность = 1.0;
  
    Выборка = РегистрыСведений.КурсыВалют.Выбрать('20150101', 
        '20151231');
    Пока Выборка.Следующий() Цикл
 
        // изменение существующей
        МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи();
        МенеджерЗаписи.Прочитать();
        МенеджерЗаписи.Курс = 25;
        МенеджерЗаписи.Записать();
 
        // удаление существующей
        //Выборка.ПолучитьМенеджерЗаписи().Удалить();
 
    КонецЦикла;
 
КонецПроцедуры
 
/// Как работать с набором записей регистра сведений в 1с 8.3, 8.2
 
Процедура РаботаСНаборомЗаписейРегистраСведений()
 
    НаборКурсов = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();    
    НаборКурсов.Отбор.Период.Установить(ТекущаяДата());
    НаборКурсов.Прочитать();
 
    Если НаборКурсов.Количество() = 0 Тогда
        НовыйКурс = НаборКурсов.Добавить();        
        НовыйКурс.Период = ТекущаяДата();
    ИначеЕсли НаборКурсов.Количество() = 1 Тогда
        НовыйКурс = НаборКурсов[0];
    КонецЕсли;
 
    НовыйКурс.Курс = 0;
    НовыйКурс.Кратность = 1;
 
    НаборКурсов.Записать();
 
КонецПроцедуры