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

  Маркет42 - Место для твоих разработок  

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

Я
   GhostTM

12.10.11 — 16:04

Данные:

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

Измерения: Склад, Товар

Ресурсы: Количество, Сумма

Реквизиты: КодОперации

Задача:

Надо построить отчет по складу, что бы в строках был товар, а в колонках коды операций, т.е. таблица типа:

Товар    НачОст  Пришло  Вернули  Продали  Списали КонОст

При обращении к виртуальной таблице ОстаткиИОбороты не могу получить КодОперации.

Нужен совет как реализовать отчет.

  

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

   Irbis

1 — 12.10.11 — 16:06

обращаться к другой таблице

   shuhard

2 — 12.10.11 — 16:06

(0) обращайся к физическим записям,

в виртуальных таблицах реквизитов нет

   MORRoz

3 — 12.10.11 — 16:06

Реквизиты можно получить только из реальной таблицы.

Варианты:

1. Отчет по реальной таблице

2. Изменять структуру регистров. (например добавить оборотный, у которого КодОперации будет измерением) — и делать отчет по нему

   GhostTM

4 — 12.10.11 — 16:19

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

   ssh2006

5 — 12.10.11 — 16:21

«Чувствую прийдется делать запрос к остаткам» — в вт остатков реквизита ты также не увидишь

   shuhard

6 — 12.10.11 — 16:21

(4) если Заказчика устроят тормоза — то так,

если нет срочно клепать оборотный Рг

  

GhostTM

7 — 12.10.11 — 16:27

(6) Оборотный регистр не совсем спасает, все равно прийдется вязать с остатками, ибо нужны начальный и конечный остаток

Сейчас попробую сделать так как написал в (4)

Если не получится, то буду рисовать оборотный, хотя не хочется дублировать записи

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 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;	
 
    НаборЗаписей.Записать(Истина);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере
  1. Требуется в запросе получить реквизит регистра накопления:
    через выборку его не видит.
    Получилось через набор записей с отбором по регистратору, но при наличии одинаковых записей в одном регистраторе выдается последнее.
    Помогите или добить набор записей или подскажите другой способ. :unsure:


  2. lazy

    Offline

    lazy
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29

    Физически не ощущаю проблемы.

    ВЫБРАТЬ
    ТоварыНаСкладах.КодОперации,
    ТоварыНаСкладах.Склад,
    ТоварыНаСкладах.Номенклатура,
    ТоварыНаСкладах.ХарактеристикаНоменклатуры,
    ТоварыНаСкладах.СерияНоменклатуры,
    ТоварыНаСкладах.Качество,
    ТоварыНаСкладах.Количество
    ИЗ
    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    

    Здесь КодОперации — реквизит регистра накопления ТоварыНаСкладах. Успешно выдается при выполнении запроса…

  3. Забыл уточнить: регистр накопления обороты)


  4. lazy

    Offline

    lazy
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29

    Хм, не интересовался таким делом, но подозреваю, что тебе придется расчитывать все это дело через группировки.
    Т.е. обращаемся непосредственно к таблице регистра, и группируем по интересующим нас измерениям и реквизитам. Через виртуальные таблицы это кажется сделать не поулчится. Т.е. нечто вроде:

    ВЫБРАТЬ
    Затраты.Подразделение,
    Затраты.СтатьяЗатрат КАК СтатьяЗатрат,
    Затраты.КодОперации,
    СУММА(Затраты.Сумма) КАК Сумма,
    Затраты.СписаниеПартий
    ИЗ
    РегистрНакопления.Затраты КАК Затраты
    ГДЕ
    Затраты.Период МЕЖДУ &ДатаНач И &ДатаКон
    
    СГРУППИРОВАТЬ ПО
    Затраты.Подразделение,
    Затраты.СтатьяЗатрат,
    Затраты.КодОперации,
    Затраты.СписаниеПартий
    
    УПОРЯДОЧИТЬ ПО
    СтатьяЗатрат
    
  5. Лана. Пока забыли. Есть запрос

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

    Этот запрос выбирает из регистра записи по условиям (даты, организация, счет).
    Вопрос: Почему он выдает кроме строк подходящих по условию еще и другие строки, которые не подходят. Неправильные строки он выдает пустыми т.е. в отчет добавляется пустая строка. Анализ показал что количество пустых строк вроде как равно всем не попавшим в условие + группирвки какието по ходу.
    Написал сам не пойму что, но может кто подскажет что.


  6. LordKim

    Offline

    LordKim
    Опытный в 1С

    Регистрация:
    11 мар 2008
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26


    Это:

    |ИЗ
    |    РегистрНакопления.ВнеоборотныеАктивы.ОстаткиИОбороты(&НачДата, &КонДата, Запись, ,
    "+?(пусто(Организация),"","Организация = &Организация И ")+"
    |    "+?(пусто(Капвлож),"","ВнеоборотныйАктив = &Капвлож И ")+"СчетКВ в Иерархии (&СчетКВ) ) 
    КАК ВнеоборотныеАктивыОстаткиИОбороты
    
    
    

    Попробуй заменить на это:

    |ИЗ
    |    РегистрНакопления.ВнеоборотныеАктивы.ОстаткиИОбороты(&НачДата, &КонДата, Запись)
    |ГДЕ
    |    СчетКВ в Иерархии (&СчетКВ)
    |    "+?(пусто(Капвлож), "", "И ВнеоборотныйАктив = &Капвлож")+" 
    |    "+?(пусто(Организация), "", "И Организация = &Организация")+" 
    КАК ВнеоборотныеАктивыОстаткиИОбороты
    
    
    
  7. Спасибо, но нет. От того что вынесли условие ниче не изменилось, да и так делать не рекомендуют. Что то другое…


  8. LordKim

    Offline

    LordKim
    Опытный в 1С

    Регистрация:
    11 мар 2008
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26

    Не рекомендуют?)
    Кто? Где? Можно почитать рекомендации?


  9. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    LordKim,
    Использование условий в ГДЕ и в параметрах вирт таблиц — это разные вещи. В 99,9% случаев нужно использовать условия в параметрах.


  10. LordKim

    Offline

    LordKim
    Опытный в 1С

    Регистрация:
    11 мар 2008
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26

    Почему?
    Дай тему или параметры для поиска, почитаю)


  11. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    Первый запрос:

    "ВЫБРАТЬ
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки"
    
    
    

    Второй запрос:

    "ВЫБРАТЬ
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки
    ГДЕ
    ТоварыНаСкладахОстатки.Номенклатура = &Номенклатура"
    
    
    

    В первом варианте накладывается фильтр на таблицу остатков, после чего выдается остаток по фильтру.
    Во втором варианте сначала выбирается ВСЯ таблица остатков и только потом накладывается фильтр и получается остаток.

    В случае больших таблиц разница во времени исполнения может достигать несколько ДЕСЯТКОВ порядков. В частности, я сталкивался со случаями, когда первый запрос выполнялся за 0.02 секунды, когда второй выполнялся за 18…

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


  12. BabySG

    Offline

    BabySG
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    18
    Баллы:
    29

    :unsure:
    Akuji,
    Сорри за оффтоп :)


  13. LordKim

    Offline

    LordKim
    Опытный в 1С

    Регистрация:
    11 мар 2008
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Данные: Есть регистр накопления Измерения: Склад, Товар Ресурсы: Количество, Сумма Задача: Надо построить отчет по складу, что бы в строках был товар, а в колонках коды операций, т.е. таблица типа: Товар    НачОст  Пришло  Вернули  Продали  Списали КонОст При обращении к виртуальной таблице ОстаткиИОбороты не могу получить КодОперации. Нужен совет как реализовать отчет.

обращаться к другой таблице

обращайся к физическим записям, в виртуальных таблицах реквизитов нет

Реквизиты можно получить только из реальной таблицы. Варианты: 1. Отчет по реальной таблице 2. Изменять структуру регистров. (например добавить оборотный, у которого КодОперации будет измерением) — и делать отчет по нему

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

«Чувствую прийдется делать запрос к остаткам» — в вт остатков реквизита ты также не увидишь

если Заказчика устроят тормоза — то так, если нет срочно клепать оборотный Рг

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

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

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

Ответ: Никак!
Или доступны итоги ресурсов по измерениям, или физические записи без итогов, но с реквизитами.
Если реквизиты нужны в таблице итогов, то это ошибка — реквизит нужно переделать в измерение.


Комментировать

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

В процессе работы таких документов может быть довольно большое количество. Здесь речь может идти не о сотнях документов, а о тысячах и десятках тысяч. Естественно, построение отчетов и прочих данных из такого количества документов является очень долгим, трудоемким и неэффективным.

Только представьте себе, что при оформлении продажи какого-либо товара бухгалтер сидит и ждет, пока программа проверит ранее внесенные документы и рассчитает, хватает ли остатка на складе для списания.

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

список регистров в древе метаданных

Содержание

  • Вид регистра накопления
  • Данные регистров накопления
    • Измерения
      • Свойства измерений
    • Ресурсы
    • Реквизиты
    • Стандартные реквизиты
    • Агрегаты
  • Движения по регистрам накопления

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

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.

Связаться с нами можно по телефону +7 499 350 29 00.

Услуги и цены можно увидеть по ссылке.

Будем рады помочь Вам!

Как было сказано ранее, регистры накопления могут позволять быстро получать остатки и обороты. На этот функционал непосредственно вид регистра. Его можно изменить на вкладке «Основные» формы редактирования конкретного регистра.

вид регистра накопления в 1С

  • Оборотные регистры накопления позволяют получить только обороты за какой-то определенный промежуток времени. Получение остатков в таком случае не представляется возможным. Регистр накопления с видом «Обороты» создает в системе только одну виртуальную таблицу – оборотов.
  • Регистры накопления с видом «Остатки» дают возможность разработчику получить и остатки и обороты. В данном случае будут создаваться уже три виртуальные таблицы: остатков, оборотов, остатков и оборотов. Примером такого регистра может выступать регистр остатков ТМЦ на складах, движения денежных средств по расчетным счетам организации.

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

Данные регистров накопления

Измерения

Под измерениями регистров накопления подразумеваются некие разрезы, в которых в дальнейшем вы сможете получить информацию. В нашем случае в качестве измерений регистра «ВыпускПродукции» являются: организация, заказ, спецификация, подразделение и другие.

В любой момент мы сможем получить остатки, например, по всей организации в целом, по конкретному заказу.

измерения ресурсы и реквизиты

Свойства измерений

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

В том случае, если вы планируете в дальнейшем устанавливать отбор по какому-либо измерению достаточно часто. В нашем случае для организации индексирование мы применять не будем.

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

свойства измерения

Ресурсы

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

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

Реквизиты

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

Стандартные реквизиты

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

стандартные реквизиты

список

Агрегаты

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

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

Движения по регистрам накопления

У любого регистра накопления может быть один и несколько регистраторов. В качестве регистратора выступает документ, при проведении которого формируется соответствующая запись в регистре накопления.

Просмотреть список регистраторов накопления можно на одноименной вкладке формы самого регистра. В данном примере движения по регистру «ВыпускПродукции» могут формироваться при проведении четырех различных документов.

регистраторы

В самих документах, которые являются регистраторами, список регистров, по которым они совершают движения, расположен на вкладке «Движения». Здесь так же доступен конструктор движений, который поможет в создании таких процедур (проведения и отмены проведения). Сопоставление данных документа и регистра производятся на сравнении типов данных.

список регистров в документе

Понравилась статья? Поделить с друзьями:
  • 1с как проверить есть ли реквизит табличной части
  • 1с как проверить существование реквизита на форме
  • 1с как программно изменить реквизит в справочнике
  • 1с как удалить дополнительный реквизит программно
  • 1с настройка страховых взносов для малого бизнеса