Регистр накопления обороты отбор по реквизиту

Реквизит в запросе регистра накопления

Я
   severbap

08.12.09 — 11:10

Как получить что хранится в реквизите регистра накопления через запрос и можно ли в запросе поставить отбор по этому реквизиту? У кого-нибудь есть простой и понятный пример?

  

Партнерская программа EFSOL Oblako

   Михей

1 — 08.12.09 — 11:13

ВЫБРАТЬ

     Регистр.Измерение

ИЗ

    РегистрНакопления.ТвойРегистр КАК Регистр

ГДЕ

     Регистр.ТвойРеквизит = &ТвойРеквизит

   IronDemon

2 — 08.12.09 — 11:15

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ПартииТоваровНаСкладах.Склад,
   СУММА(ПартииТоваровНаСкладах.Стоимость) КАК Стоимость
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
ГДЕ
   ПартииТоваровНаСкладах.Период МЕЖДУ &НачПериода И &КонПериода
   И ПартииТоваровНаСкладах.КодОперации В(&КодОперации)

СГРУППИРОВАТЬ ПО
   ПартииТоваровНаСкладах.Склад

   Loyt

3 — 08.12.09 — 11:19

(0) Не используй виртуальные таблицы, используй таблицу «РегистрНакопления.НазваниеРегистра». Он там будет, можно использовать так же, как и измерение.

   severbap

4 — 08.12.09 — 11:33

Михей у тебя будет Регистр.<?>ТвойРеквизит = &ТвойРеквизит — поле не найдено!

   Михей

5 — 08.12.09 — 11:36

(4) чего это?

   IronDemon

6 — 08.12.09 — 11:38

(4) Это твой первый запрос?

   severbap

7 — 08.12.09 — 11:40

Вот допустим у меня регистр накопления: измерение Номенклатура, ресурс Количество, реквизит Контрагент.

Запрос=Новый Запрос;

Запрос.Текст=

«ВЫБРАТЬ

| Регистр.КоличествоКонечныйОстаток

|ИЗ

| РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты КАК Регистр»;

РезультатЗапроса=Запрос.Выполнить();

Для Каждого Партия Из РезультатЗапроса Цикл

   Сообщить(Строка(Партия.Контрагент));

КонецЦикла;

Будет ошибка итератора!!!

   73

8 — 08.12.09 — 11:44

-Содержание справки

-1С Предприятие

 -Встроенный язык

  -Работа с запросами

    -Выполнение и работа с запросами во встроенном языке

      -Основные приемы работы

   severbap

9 — 08.12.09 — 11:44

Запрос=Новый Запрос;

Запрос.Текст=

«ВЫБРАТЬ

|    Регистр.КоличествоКонечныйОстаток

|ИЗ

|    РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты КАК Регистр

| ГДЕ

| Регистр.Контрагент = &Контрагент»;

Запрос.УстановитьПараметр(«Контрагент»,Контрагент);

РезультатЗапроса=Запрос.Выполнить();

Для Каждого Партия Из РезультатЗапроса Цикл

   Сообщить(Строка(Партия.КоличествоКонечныйОстаток));

КонецЦикла;

Регистр.<?>Контрагент = &Контрагент»; — поле не найдено! — как предложил михей!

   Ненавижу 1С

10 — 08.12.09 — 11:46

(9) конечно, откуда в партиях контрагент?

   hhhh

11 — 08.12.09 — 11:47

(9) чукча не читатель, чукча писатель? Сравни свой запрос с запросом михея и найди 10 отличий.

   severbap

12 — 08.12.09 — 11:50

hhhh — мой последний проверь и результат такой же!

   severbap

13 — 08.12.09 — 11:54

Запрос=Новый Запрос;

Запрос.Текст=

«ВЫБРАТЬ

| Регистр.Номенклатура

|ИЗ

| РегистрНакопления.ПартииНоменклатуры КАК Регистр

|ГДЕ

| Регистр.Контрагент = &Контрагент»;

Запрос.УстановитьПараметр(«Контрагент»,Контрагент);

РезультатЗапроса=Запрос.Выполнить();

Для Каждого Партия Из РезультатЗапроса Цикл

   Сообщить(Строка(Партия.Номенклатура));

КонецЦикла;

ИТЕРАТОР не определен!

   Михей

14 — 08.12.09 — 11:56

(13) у результатзапроса его и нету, выборку сделай

   severbap

15 — 08.12.09 — 11:57

Михей как?

   Михей

16 — 08.12.09 — 11:57

Запрос=Новый Запрос;

Запрос.Текст=

«ВЫБРАТЬ

| Регистр.Номенклатура

|ИЗ

| РегистрНакопления.ПартииНоменклатуры КАК Регистр

|ГДЕ

| Регистр.Контрагент = &Контрагент»;

Запрос.УстановитьПараметр(«Контрагент»,Контрагент);

РезультатЗапроса=Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

   Сообщить(Строка(Выборка.Номенклатура));

КонецЦикла;

   severbap

17 — 08.12.09 — 12:00

Реально — выводит номенклатуру!

   severbap

18 — 08.12.09 — 12:01

Как тогда получить ресурсы (остатки)?

   Михей

19 — 08.12.09 — 12:02

(18) есе тебе по реквизиту отбор нужен и еще остатки то тока через ЖПО

   severbap

20 — 08.12.09 — 12:03

?????

   Михей

21 — 08.12.09 — 12:04

примерно так

ВЫБРАТЬ

    СУММА(ВЫБОР    

       КОГДА Регистр.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА

            Регистр.Количество

        ИНАЧЕ

            — Регистр.Количество

    КОНЕЦ) КАК КоличествоКонечныйОстаток

ИЗ

    РегистрНакопления.ТвойРегистр КАК Регистр

ГДЕ

     Регистр.ТвойРеквизит = &ТвойРеквизит

   severbap

22 — 08.12.09 — 12:09

Запрос=Новый Запрос;

Запрос.Текст=

«ВЫБРАТЬ

|СУММА(ВЫБОР КОГДА Регистр.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА Регистр.Количество ИНАЧЕ -Регистр.Количество КОНЕЦ) КАК Количество

|ИЗ

| РегистрНакопления.ПартииНоменклатуры КАК Регистр

|ГДЕ

| Регистр.Контрагент = &Контрагент»;

Запрос.УстановитьПараметр(«Контрагент»,Контрагент);

РезультатЗапроса=Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

   Сообщить(Строка(Выборка.Количество));

КонецЦикла;

Выводит правильно!!!

СПАСИБО!!!!!!!!!!!!!!!!! ОГРОМНОЕ!!!!!!!

   severbap

23 — 08.12.09 — 12:10

А улучшить его никак нельзя?

   Михей

24 — 08.12.09 — 12:11

(23) вряд ли, ты ж по реквизиту хочешь, а в разрезе него остатки не хранятся

   severbap

25 — 08.12.09 — 12:13

Да, у нас просто перекинули два измерения в реквизиты (Поставщик, документПрихода) в регистре ПартииНоменклатуры!

Так что я все поправлять буду! Теперь я понял как!

   hhhh

26 — 08.12.09 — 12:37

(25) это они лоханулись.

   severbap

27 — 08.12.09 — 12:52

Теперь полностью ничего не получается вытащить кроме как одно количество!!!

Как исправить?

   severbap

28 — 08.12.09 — 12:58

Исправил:

Запрос=Новый Запрос;

Запрос.Текст=

«ВЫБРАТЬ

|    СУММА(ВЫБОР

|            КОГДА Регистр.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

|                ТОГДА Регистр.Количество

|            ИНАЧЕ -Регистр.Количество

|        КОНЕЦ) КАК Количество,

|    Регистр.Номенклатура,

|    Регистр.ДокументПрихода

|ИЗ

|    РегистрНакопления.ПартииНоменклатуры КАК Регистр

|ГДЕ

|    Регистр.Контрагент = &Контрагент

|    И Регистр.Период МЕЖДУ &ДатаНачала И &ДатаКонца

|

|СГРУППИРОВАТЬ ПО

|    Регистр.Номенклатура,

|    Регистр.ДокументПрихода»;

Запрос.УстановитьПараметр(«Контрагент»,Контрагент);

Запрос.УстановитьПараметр(«ДатаНачала», НачалоДня(НачПериода));

Запрос.УстановитьПараметр(«ДатаКонца», КонецДня(КонПериода));

РезультатЗапроса=Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

   Сообщить(Строка(Выборка.ДокументПрихода));

КонецЦикла;

  

severbap

29 — 08.12.09 — 13:12

как насчет прихода и расхода?

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

/// Как прочитать записи регистра накопления в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьЗаписиРегистраНакопленияНаСервере()
 
    // Получим все записи регистра накопления ЗаказыКлиентов
    // по организации ООО "Ромашка" за 1 квартал 2014 года,
    // упорядочив их по возрастанию даты.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗаказыКлиентов.Период,
        |   ЗаказыКлиентов.Регистратор,
        |   ЗаказыКлиентов.НомерСтроки,
        |   ЗаказыКлиентов.Активность,
        |   ЗаказыКлиентов.Контрагент,
        |   ЗаказыКлиентов.Номенклатура,
        |   ЗаказыКлиентов.Количество
        |ИЗ
        |   РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
        |ГДЕ
        |   ЗаказыКлиентов.Активность = Истина И
        |   ЗаказыКлиентов.Организация = &ВыбОрганизация И
        |   ЗаказыКлиентов.Период МЕЖДУ &НачДата И &КонДата
        |УПОРЯДОЧИТЬ ПО
        |   ЗаказыКлиентов.Период";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    // начальная дата - 1 января 2014 года
    Запрос.УстановитьПараметр("НачДата", '20140101000000');
    // конечная дата - 31 марта 2014 года 23 часа 59 минут 59 секунд
    Запрос.УстановитьПараметр("КонДата", '20140331235959');
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "[" + Записи.Период + "] " +
            Записи.Номенклатура + " " +
            Записи.Количество + " шт." +
            " (" + Записи.Регистратор + ")"
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить обороты по регистру накопления в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьОборотыПоРегиструНапопленияНаСервере()
 
    // За получение оборотов по регистру накопления за произвольный период
    // с заданной периодичностью в различных разрезах аналитики отвечает
    // виртуальная таблица Обороты,
    // у неё есть следующие параметры:
    // 1. Начало периода (включая)
    // 2. Конец периода (включая)
    // 3. Периодичность (например, Период, Запись, Год, Месяц...)
    // 4. Условие (например, Организация = &ВыбОрганизация)
 
    // Пример №1
    Сообщить("Пример №1");
 
    // Посчитаем сколько и каких продуктов было заказано за 1 квартал
    // 2014 года в организации ООО "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗаказыКлиентовОбороты.Номенклатура,
        |   ЗаказыКлиентовОбороты.Организация,
        |   ЗаказыКлиентовОбороты.КоличествоОборот
        |ИЗ
        |   РегистрНакопления.ЗаказыКлиентов.Обороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 03, 31, 23, 59, 59),
        |       Период,
        |       Организация = &ВыбОрганизация
        |   ) КАК ЗаказыКлиентовОбороты
        |УПОРЯДОЧИТЬ ПО
        |   ЗаказыКлиентовОбороты.Номенклатура";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "За 1 кв. 2014 года заказали " + 
            Записи.КоличествоОборот + " шт. " +
            Записи.Номенклатура
        );
    КонецЦикла;
 
    // Пример №2
    Сообщить("Пример №2");
 
    // Посчитаем сколько бананов было заказано за каждый месяц
    // в 1 квартале 2014 года в организации "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗаказыКлиентовОбороты.Период,
        |   ЗаказыКлиентовОбороты.Номенклатура,
        |   ЗаказыКлиентовОбороты.Организация,
        |   ЗаказыКлиентовОбороты.КоличествоОборот
        |ИЗ
        |   РегистрНакопления.ЗаказыКлиентов.Обороты(
        |       &НачПериод,
        |       &КонПериод,
        |       Месяц,
        |       Организация = &ВыбОрганизация И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЗаказыКлиентовОбороты
        |УПОРЯДОЧИТЬ ПО
        |   ЗаказыКлиентовОбороты.Период";
 
    Запрос.УстановитьПараметр("НачПериод", '20140101000000');
    Запрос.УстановитьПараметр("КонПериод", '20140331235959');
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "За " + Формат(Записи.Период, "ДФ=ММММ") +
            " заказали " + Записи.КоличествоОборот + " шт. " +
            Записи.Номенклатура            
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить остатки по регистру накопления в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьОстаткиПоРегиструНакопленияНаСервере()    
 
    // За получение остатков по регистру накопления в разрезе
    // аналитики отвечает виртуальная таблица Остатки,
    // у неё есть следующие параметры:
    // 1. Период, на который считаем остатки, исключая саму дату.
    //    Если нужны остатки на дату включительно - используем
    //    тип Граница (см. пример ниже).
    // 2. Условие (например, Организация = &ВыбОрганизация)
 
    // Получим остатки бананов на основном складе в организации
    // ООО "Ромашка" на 31 марта 2014 года (включительно)
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗапасыЕдыОстатки.Склад,
        |   ЗапасыЕдыОстатки.Номенклатура,
        |   ЗапасыЕдыОстатки.Организация,
        |   ЗапасыЕдыОстатки.КоличествоОстаток
        |ИЗ
        |   РегистрНакопления.ЗапасыЕды.Остатки(
        |       &ВыбДата,
        |       Склад = &ВыбСклад И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЗапасыЕдыОстатки";
 
    Запрос.УстановитьПараметр("ВыбДата", 
        Новый Граница('20140331235959', ВидГраницы.Включая)
    );
    Запрос.УстановитьПараметр("ВыбСклад",
        Справочники.Склады.НайтиПоНаименованию("Основной")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );    
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
        Сообщить(
            "Остатки " + " " + Записи.Номенклатура +
            " на складе " + Записи.Склад + " на дату " +
            "31.03.2014 (включительно) " +
            " составляют " + Записи.КоличествоОстаток + " шт.");
    КонецЦикла;
 
КонецПроцедуры
 
/// Как получить сразу остатки и обороты по регистру
/// накопления в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПолучитьСразуОстаткиИОборотыПоРегиструНакопленияНаСервере()
 
    // За получение остатков и оборотов за произвольный период
    // с заданной периодичностью в разрезе аналитики отвечает
    // виртуальная таблица ОстаткиИОбороты, у неё есть параметры:
    // 1. Начало периода (включая)
    // 2. Конец периода (включая)
    // 3. Периодичность (например, Период, Год, Месяц...)
    // 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода)
    // 5. Условие (например, Организация = &ВыбОрганизация)
 
    // Для примера получим начальный остаток, приход, расход и конечный остаток
    // банана на всех складах за каждый месяц 2014 года для
    // организация ООО "Ромашка".
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗапасыЕдыОстаткиИОбороты.Период,
        |   ЗапасыЕдыОстаткиИОбороты.Номенклатура,
        |   ЗапасыЕдыОстаткиИОбороты.Организация,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоНачальныйОстаток,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоОборот,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоПриход,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоРасход,
        |   ЗапасыЕдыОстаткиИОбороты.КоличествоКонечныйОстаток
        |ИЗ
        |   РегистрНакопления.ЗапасыЕды.ОстаткиИОбороты(
        |       ДАТАВРЕМЯ(2014, 01, 01, 00, 00, 00),
        |       ДАТАВРЕМЯ(2014, 12, 31, 23, 59, 59),
        |       Месяц, ДвиженияИГраницыПериода,
        |       Организация = &ВыбОрганизация И
        |       Номенклатура = &ВыбНоменклатура
        |   ) КАК ЗапасыЕдыОстаткиИОбороты
        |УПОРЯДОЧИТЬ ПО
        |   ЗапасыЕдыОстаткиИОбороты.Период";
 
    Запрос.УстановитьПараметр("ВыбОрганизация",
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""")
    );
    Запрос.УстановитьПараметр("ВыбНоменклатура",
        Справочники.Номенклатура.НайтиПоНаименованию("Банан")
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл
      Сообщить(
        Формат(Записи.Период, "ДФ=ММММ") + " [" +
        Записи.Номенклатура + "] " + "нач. остаток " +
        Записи.КоличествоНачальныйОстаток + " приход " +
        Записи.КоличествоПриход + ", расход " +
        Записи.КоличествоРасход + " кон. остаток " +
        Записи.КоличествоКонечныйОстаток
      );
  КонецЦикла;
 
КонецПроцедуры
 
/// Как найти и изменить программно записи в регистр накопления
/// документа (регистратора) в 1с 8.3, 8.2
 
&НаСервере
Процедура КакНайтиИИзменитьЗаписиДокументаНаСервере()
 
    // Предположим у нас есть ссылка на проведенный документ
    // поступления еды № ВМБП-000002
 
    ПоступлениеСсылка =
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231'
        );
 
    // Мы значем, что этот документ делает следующие записи
    // в регистр накопления "ЗапасыЕды":
    // Приход [Организация, Склад, Номенклатура]  [Количество]
 
    // Наша задача: найти эти записи и изменить
    // их (например, удвоим количество поступившего товара)
    // и записать вместо старых.
 
    // Используем объектную технику получения записей,
    // ведь мы будем их изменять.
 
    Поступление = ПоступлениеСсылка.ПолучитьОбъект();
 
    // Получим набор записей этого документа в регистр "ЗапасыЕды".
    НаборЗаписей = Поступление.Движения.ЗапасыЕды;
 
    // Прочитаем записи из базы данных.
    НаборЗаписей.Прочитать();
 
    Для Каждого Запись Из НаборЗаписей Цикл
 
        // Выведем старые значения.
        Сообщить(
            "[" + Запись.Организация + ", " +
            Запись.Склад + ", " +
            Запись.Номенклатура + "] " +
            "[" + Запись.Количество + "]"
        );
 
        // Удвоим количество.
        Запись.Количество = 2 * Запись.Количество;
 
    КонецЦикла;
 
    // Добавим новую запись в регистр накопления.
 
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Организация =
        Справочники.Организации.НайтиПоНаименованию("ООО ""Ромашка""");
    НоваяЗапись.Склад =
        Справочники.Склады.НайтиПоНаименованию("Основной");
    НоваяЗапись.Номенклатура =
        Справочники.Номенклатура.НайтиПоНаименованию("Банан");
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.Количество = 1000;
 
    // Разом запишем набор записей.
    НаборЗаписей.Записать(
        Истина // удалим старые записи и запишем вместо них новые
    );
 
    // Теперь записи регистра ЗапасыЕды по документу № ВМБП-000002,
    // отличаются от тех, что были записаны документом при проведении.
    // Чтобы вернуть их к начальному виду - нужно
    // перепровести документ.
 
КонецПроцедуры
 
/// Как прочитать записи документа в регистр накопления
/// запросом в 1с 8.3, 8.2
 
&НаСервере
Процедура КакПрочитатьЗаписиДокументаЗапросомНаСервере()
 
    // Этот приём используется, если не требуется изменять
    // найденные записи.
 
    // Предположим у нас есть ссылка на проведенный документ
    // поступления еды № ВМБП-000002
 
    ПоступлениеСсылка =
        Документы.ПоступлениеЕды.НайтиПоНомеру(
            "ВМБП-000002", '20141231'
        );
 
    // Мы значем, что этот документ делает записи
    // в регистр накопления "ЗапасыЕды".    
    // Прочитаем эти записи запросом.
 
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗапасыЕды.Период,
        |   ЗапасыЕды.Регистратор,
        |   ЗапасыЕды.НомерСтроки,
        |   ЗапасыЕды.Активность,
        |   ЗапасыЕды.ВидДвижения,
        |   ЗапасыЕды.Склад,
        |   ЗапасыЕды.Номенклатура,
        |   ЗапасыЕды.Организация,
        |   ЗапасыЕды.Количество
        |ИЗ
        |   РегистрНакопления.ЗапасыЕды КАК ЗапасыЕды
        |ГДЕ
        |   ЗапасыЕды.Регистратор = &ВыбРегистратор
        |УПОРЯДОЧИТЬ ПО
        |   ЗапасыЕды.НомерСтроки";
 
    Запрос.УстановитьПараметр(
        "ВыбРегистратор",
        ПоступлениеСсылка
    );
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Записи = РезультатЗапроса.Выбрать();
 
    Пока Записи.Следующий() Цикл        
        Сообщить(
            "[" + Записи.Организация + ", " +
            Записи.Склад + ", " +
            Записи.Номенклатура + "] " +
            "[" + Записи.Количество + "]"
        );
    КонецЦикла;
 
КонецПроцедуры
 
/// Как создать записи регистра накопления без привязки
/// к документу в 1с 8.3, 8.2
 
&НаСервере
Процедура КакСоздатьЗаписиБезДокументаНаСервере()
 
    // В нашей тестовой конфигурации нет документа
    // "ОперацияБух", который присутствует в бухгалтерской базе.
 
    Сообщить("Этот пример нельзя выполнить в этой базе.");
    Возврат;
 
    // Записи регистра накопления обязательно
    // должны быть привязаны к документу, в данном случае
    // этим документом будет документ "ОперацияБух",
    // задуманный как раз для ручных операций.
 
    Операция = Документы.ОперацияБух.СоздатьДокумент();
    Операция.Дата = ТекущаяДата();
    Операция.Организация =
        Справочники.Организации.НайтиПоНаименованию("Милькин В. В. ИП");
    Операция.СуммаОперации = 1000;	
    Операция.Содержание = "Ручная операция по регистру накопления ИПДоходы";	
    Операция.Записать(РежимЗаписиДокумента.Запись);
 
    // Затем получаем его набор записей для регистра ИПДоходы
    НаборЗаписей = Операция.Движения.ИПДоходы;
    Запись = НаборЗаписей.Добавить();
    Запись.Период = Операция.Дата;
    Запись.Организация = Операция.Организация;
    // и т.д. заполняем все нужные поля регистра
    Запись.Сумма = 1000;	
 
    НаборЗаписей.Записать(Истина);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Процедура КакПолучитьОборотыРегистраНакопленияОборотовЗаПериод()

ОрганизацияПоУмолчанию = БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию(«ОсновнаяОрганизация»);

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ

| РеализацияУслугОбороты.Организация,

| РеализацияУслугОбороты.СчетРасходов,

| РеализацияУслугОбороты.НоменклатурнаяГруппа,

| РеализацияУслугОбороты.Подразделение,

| РеализацияУслугОбороты.СуммаОборот

|ИЗ

| РегистрНакопления.РеализацияУслуг.Обороты(

| &НачалоПериода, &КонецПериода

| ) КАК РеализацияУслугОбороты

|ГДЕ

| РеализацияУслуг.Организация = &ВыбОрганизация»;

Запрос.УстановитьПараметр(«ВыбОрганизация», ОрганизацияПоУмолчанию);

Запрос.УстановитьПараметр(«НачалоПериода», ‘20170101’);

Запрос.УстановитьПараметр(«КонецПериода», ‘20171231’);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Сообщить(ВыборкаДетальныеЗаписи.СуммаОборот);

КонецЦикла;

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

// Параметры таблицы Обороты(НачалоПериода, КонецПериода, Периодичность,

// Условие).

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

// ЗарплатаКВыплате — регистр накопления остатков

//

// Измерения: Организация, ФизическоеЛицо, СтатьяФинансирования,

// СтатьяРасходов, Сотрудник, Подразделение,

// ПериодВзаиморасчетов, ХарактерВыплаты

//

// Ресурсы: СуммаКВыплате

Регистр накопления

Регистры накопления — это прикладные объекты конфигурации. Они составляют основу механизма учета движения средств (финансов, товаров, материалов и т. д.), который позволяет автоматизировать такие направления, как складской учет, взаиморасчеты, планирование.

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

Структура

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

Измерения регистра описывают разрезы, в которых хранится информация, а в ресурсах регистра накапливаются нужные числовые данные. Например, для регистра ТоварныеЗапасы, который имеет следующую структуру:


Регистр накопления

записи, производящие изменение ресурсов регистра в базе данных, будут выглядеть следующим образом:


Регистр накопления

Поскольку регистр накопления служит для накопления числовых значений, каждая запись выполняет изменение хранимых ресурсов — движение. Движения, в общем случае, могут либо добавлять некоторые приращения к хранимым ресурсам, либо отнимать их. Если должно выполняться увеличение хранимых ресурсов, — такое движение называется движением прихода («+»), если уменьшение хранимых ресурсов — движением расхода («-»).

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


Регистр накопления

Связь с регистратором

Изменение состояния регистра накопления происходит, как правило, при проведении документа. Поэтому каждая запись регистра связана с определенным документом — регистратором, номером строки этого документа, и датой — периодом:


Регистр накопления

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

Состав документов, которые могут создавать записи в регистре накопления, задается разработчиком в процессе создания прикладного решения:


Регистр накопления

Конструктор движений

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

Уникальность записей

Система обеспечивает контроль уникальности записей, хранящихся в регистре накопления. Благодаря этому в регистре накоплений не может находиться двух записей, относящихся к одной и той же строке одного и того же документа.

Регистры остатков и регистры оборотов

Существует два вида регистров накопления: регистры накопления остатков и регистры накопления оборотов. Регистр накопления остатков позволяет хранить как итоговые значения ресурсов — остатки, так и изменения этих ресурсов — обороты. Регистр накопления оборотов является более «специализированным» видом регистра накопления и позволяет хранить только изменения ресурсов — обороты.

Существование регистра накопления оборотов связано с тем, что при автоматизации экономической деятельности существует большое количество ситуаций, когда требуется накапливать только обороты, а значения остатков не имеют смысла. Типичным примером использования регистра накопления оборотов является регистр Выручка и себестоимость продаж, хранящий информацию об объемах продаж:


Регистр накопления

Поскольку регистр накопления оборотов не накапливает остатки ресурсов, для него не имеет смысла «направление» движения ресурсов (приход или расход); накапливается только величина изменения ресурсов. Поэтому все записи регистра накопления оборотов отмечены одинаковыми пиктограммами.

Агрегаты

Для оборотных регистров накопления платформа поддерживает специальный механизм агрегатов, который позволяет значительно ускорить получение данных из регистров, содержащих большое количество записей — сотни тысяч и миллионы записей. Подробнее… 

Форма списка и форма набора записей

Для того чтобы пользователь мог просматривать данные, содержащиеся в регистре накопления, система поддерживает форму представления регистра накопления — форму списка. Она позволяет выполнять сортировку и отбор отображаемой информации по нескольким критериям.

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

Функциональные возможности регистра накопления

Основными функциональными возможностями, которые предоставляет регистр накопления разработчику, являются:

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

Смотрите также:

Для того чтобы получить в запросе обороты регистра накопления, следует использовать специальную виртуальную таблицу регистра, которая так и называется — Обороты. В параметрах данной виртуальной таблицы задается две даты, первая из которых — начало периода за который будут браться обороты, вторая — его окончание. В следующем параметре задается периодичность группировки записей. Например, если выбрать День, то все записи регистра за конкретный день, по уникальному набору измерений, объединятся в одну, при этом ресурсы просуммируются. В последнем параметре можно задать произвольное условие, используя измерения регистра и параметры переданные в запрос. Например можно задать отбор по организации.

Параметры виртуальной таблицы обороты регистра накопления

Обороты регистра накопления — пример

Рассмотрим пример написания запроса, берущего обороты по регистру накопления. Для примера возьмем регистр ВыручкаИСебестоимостьПродаж из конфигурации Управление торговлей, редакция 11.

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода",  КонецМесяца(ТекущаяДата()));

Запрос.Текст = 
"ВЫБРАТЬ
|    ВыручкаСcПродажОбороты.Подразделение,
|    ВыручкаСcПродажОбороты.Менеджер,
|    ВыручкаСcПродажОбороты.Склад,
|    ВыручкаСcПродажОбороты.КоличествоОборот,
|    ВыручкаСcПродажОбороты.СуммаВыручкиОборот
|ИЗ
|    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
|        &НачалоПериода, 
|        &КонецПериода, 
|        Период, 
|        ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента) КАК ВыручкаСcПродажОбороты";

Выборка = Запрос.Выполнить().Выбрать();

Отметим, что выполнить запрос в конфигурациях использующих управляемое приложение можно только на сервере.


Отбор из регистра накопления по значению поля

Автор Ка3ак, 10 мая 2016, 14:34

0 Пользователей и 1 гость просматривают эту тему.

Как из регистра накопления ВыработкаОСОбороты, выбрать записи в которых в поле ПараметрВыработки значение «Топливо»


Помогли — Скажи спасибо! Решил сам — поделись решением!
:)


:D, отбор по параметру я делал, просто я не очень пойму как реализовать отбор по определенному значению)


|вашрегистр.вашеполе = &Поле
Запрос.УстановитьПараметр(«Поле»,НужноеЗначение);

Помогли — Скажи спасибо! Решил сам — поделись решением!
:)


Аа то есть параметру нужно было задать нужное значение) спасибо большое)



Понравилась статья? Поделить с друзьями:

Другие крутые статьи на нашем сайте:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии