Как найти остатки по регистру накопления

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 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С 8.3 — это объект конфигурации, который образует многомерную систему измерений и позволяет накапливать числовые данные в разрезе нескольких измерений. Используется для учета движения средств (денежных, товарно-материальных ценностей, основных средств т. д.).

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

Чтение записей регистра накопления в 1С 8.3:

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

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

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

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

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

Получение остатков по регистру накопления в 1С 8.3:

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

    // Получим остатки «Доска обрезная» на складе «Основной» в организации
    // ООО «Сделай сам» на 31 марта 2020 года (включительно)

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

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

Получение оборотов по регистру накопления в 1С 8.3:

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

    // Пример №1 Посчитаем сколько и каких материалов было заказано за 1 квартал 2020 года в организации ООО «Сделай сам».

Запрос = Новый Запрос;
   
Запрос.Текст =
   
«ВЫБРАТЬ
    |   ЗаказыКонтрагентовОбороты.Материалы,
    |   ЗаказыКонтрагентовОбороты.Организация,
    |   ЗаказыКонтрагентовОбороты.КоличествоОборот
    |ИЗ
    |   РегистрНакопления.ЗаказыКонтрагентов.Обороты(
    |       ДАТАВРЕМЯ(2020, 01, 01, 00, 00, 00),
    |       ДАТАВРЕМЯ(2020, 03, 31, 23, 59, 59), Период,
    |       Организация = &ВыбОрганизация) КАК ЗаказыКонтрагентовОбороты
    |УПОРЯДОЧИТЬ ПО
    |   ЗаказыКонтрагентовОбороты.Материалы»
;Запрос.УстановитьПараметр(«ВыбОрганизация»,Справочники.Организации.НайтиПоНаименованию(«ООО «»Сделай сам»»»));
   
РезультатЗапроса = Запрос.Выполнить();ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока
ВыборкаДетальныеЗаписи.Следующий() Цикл
       
Сообщить(«За 1 кв. 2020 года заказали » + ВыборкаДетальныеЗаписи.КоличествоОборот + » шт. » + ВыборкаДетальныеЗаписи.Материалы);
    КонецЦикла;
// Пример №2 Посчитаем сколько доски обрезной было заказано за каждый месяц в 1 квартале 2020 года в организации «Сделай сам».
   
Запрос = Новый Запрос;
   
Запрос.Текст =
   
«ВЫБРАТЬ
    |   ЗаказыКонтрагентовОбороты.Период,
    |   ЗаказыКонтрагентовОбороты.Материалы,
    |   ЗаказыКонтрагентовОбороты.Организация,
    |   ЗаказыКонтрагентовОбороты.КоличествоОборот
    |ИЗ
    |   РегистрНакопления.ЗаказыКонтрагентов.Обороты(
    |       &НачалоПериода,&КонецПериода,Месяц,
    |       Организация = &ВыбОрганизация И
    |       Материалы = &ВыбМатериалы) КАК ЗаказыКонтрагентовОбороты
    |УПОРЯДОЧИТЬ ПО
    |   ЗаказыКонтрагентовОбороты.Период»
;Запрос.УстановитьПараметр(«НачалоПериода», ‘20200101000000’);
   
Запрос.УстановитьПараметр(«КонецПериода», ‘20200331235959’);
   
Запрос.УстановитьПараметр(«ВыбОрганизация»,Справочники.Организации.НайтиПоНаименованию(«ООО «»Сделай сам»»»));
   
Запрос.УстановитьПараметр(«ВыбМатериалы»,Справочники.Материалы.НайтиПоНаименованию(«Доска обрезная»));
   
РезультатЗапроса = Запрос.Выполнить();ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока
ВыборкаДетальныеЗаписи.Следующий() Цикл
       
Сообщить(«За » + Формат(ВыборкаДетальныеЗаписи.Период, «ДФ=ММММ») + » заказали » +
       
ВыборкаДетальныеЗаписи.КоличествоОборот + » шт. » + ВыборкаДетальныеЗаписи.Материалы);
    КонецЦикла;

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

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

&НаСервере
Процедура ПолучениеОдновременноОстатковИОборотовПоРегиструНакопленияНаСервере()// За получение остатков и оборотов за произвольный период с заданной периодичностью
    // в разрезе аналитики отвечает виртуальная таблица ОстаткиИОбороты, У неё есть параметры:
    // 1. Начало периода (включая)
    // 2. Конец периода (включая)
    // 3. Периодичность (например, Период, Год, Месяц…)
    // 4. Метод дополнения периодов (Движение или ДвиженияИГраницыПериода)
    // 5. Условие (например, Организация = &ВыбОрганизация)

    // Получим начальный остаток, приход, расход и конечный остаток Доски обрезной на всех складах
    // за каждый месяц 2020 года для организации ООО «Сделай сам».

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

    КонецЦикла;

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

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

&НаСервере
Процедура ПоискИПрограммноеИзменениеЗаписиВРегистрНакопленияДокументаНаСервере()// Предположим у нас есть ссылка на проведенный документ Поступление на склад № МРБ-000123
   
ПоступлениеСсылка = Документы.ПоступлениеНаСклад.НайтиПоНомеру(«МРБ-000123», ‘20201231’);// Мы знаем, что этот документ делает следующие записи в регистр накопления «МестоХраненияМатериалов»:
    // Приход [Организация, МестоХранения, Материалы]  [Количество]

    // Наша задача: найти эти записи и изменить их (например, утроим количество поступившего товара)
    // и записать вместо старых.

    // Используем объектную технику получения записей, потому что  мы будем их изменять.

Поступление = ПоступлениеСсылка.ПолучитьОбъект();// Получим набор записей этого документа в регистр «МестоХраненияМатериалов».
   
НаборЗаписей = Поступление.Движения.МестоХраненияМатериалов;// Прочитаем записи из базы данных.
   
НаборЗаписей.Прочитать();
    Для Каждого
Запись Из НаборЗаписей Цикл// Выведем старые значения.
       
Сообщить(Запись.Организация + «, » +Запись.МестоХранения + «, » + Запись.Материалы + » = » + Запись.Количество + «]»);// Утроим количество.
       
Запись.Количество = 3 * Запись.Количество;

    КонецЦикла;

// Добавим новую запись в регистр накопления МестоХраненияМатериалов.
   
НоваяЗапись = НаборЗаписей.Добавить();
   
НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию(«ООО «»Сделай сам»»»);
   
НоваяЗапись.МестоХранения = Справочники.МестоХраненияы.НайтиПоНаименованию(«Основной»);
   
НоваяЗапись.Материалы = Справочники.Материалы.НайтиПоНаименованию(«Доска обрезная»);
   
НоваяЗапись.Период = ТекущаяДата();
   
НоваяЗапись.Количество = 3000;НаборЗаписей.Записать(Истина); // удалим старые записи и запишем вместо них новые

    // Теперь записи регистра МестоХраненияМатериалов по документу № МРБ-000123, отличаются от тех,
    // что были записаны документом при проведении. Чтобы вернуть их к начальному виду — нужно перепровести документ.

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

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

&НаСервере
Процедура СозданиеЗаписиРегистраНакопленияБезПривязкиКДокументуНаСервере()// ВыборкаДетальныеЗаписи регистра накопления обязательно должны быть привязаны к документу,
    // в нашем случае этим документом будет документ «БухСправка»,
   
Операция = Документы.БухСправка.СоздатьДокумент();
   
Операция.Дата = ТекущаяДата();
   
Операция.Организация = Справочники.Организации.НайтиПоКоду(«0000001»);// ООО «Сделай сам» — она у нас одна в справочнике
   
Операция.СуммаОперации = 5000;
   
Операция.Содержание = «Ручная операция по регистру накопления Движение денежных средств»;
   
Операция.Записать(РежимЗаписиДокумента.Запись);// Получаем его набор записей для регистра ДвижениеДенежныхСредств
   
НаборЗаписей = Операция.Движения.ДвижениеДенежныхСредств;
   
Запись = НаборЗаписей.Добавить();
   
Запись.Период = Операция.Дата;
   
Запись.Организация = Операция.Организация;
   
// и т.д. заполняем все нужные поля регистра
   
Запись.Сумма = 5000;
   
НаборЗаписей.Записать(Истина);

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

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

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

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

Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить — сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ
НаСервере
П


17 правил для составления оптимального ЗАПРОСа к данным базы 1С 48
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ


Cообщение: «Не удалось удалить чеки ККМ!» 2
Пользователь с правами Администратор ККМ проводит Закрытие кассовой смены (Z).
Выходит сообщение: » Не удалось удалить чеки ККМ!»
ФР печатает Z -отчет, но Отчет о рознчничных продажах не формируется.
Необходимо дать роли Администратор ККМ прав


Microsift Visual C++ Runtime Library Program …1cv77s.exe abnormal program termination 0
При запуске 1С 7.7 выдает сообщение:
Microsift Visual C++ Runtime Library Program C:Program Files1Cv77BIN1cv77s.exe abnormal program termination
Вариант 1. Обычно это происходит, когда повреждается файл регистрации. Точнее, когда не дописывает


Блокировка записей, невозможно изменить или удалить из регистра. Конфликт блокировок MS SQL + 1C 4
При попытке удалить запись из регистра сведений — получаю ошибку: она заблокирована, ошибка блокировок и т.д. Отключил всех пользователей, перезапустил сервер, пробую удалить — опять ошибка блокировки :( Путем тестов было вяснено, что проблема


Посмотреть все результаты поиска похожих

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

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

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

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

«ВЫБРАТЬ

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

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

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

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

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

|ИЗ

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

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

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

|ГДЕ

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

// Условие).

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

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

//

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

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

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

//

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

Урок 6. Виртуальные таблицы и их использование в конструкторе запросов

Содержание статьи:

Таблицы и поля; Условия; Связи; Объединения / Псевдонимы; Группировка; Виртуальные таблицы; Вложенные запросы (в разработке).

Задача 1: Получить остатки номенклатуры на указанном складе на конец месяца.

Задача 2: Получить актуальную цену на конец месяца по указанной номенклатуре и типу цен.

Новые механизмы: заполнение параметров виртуальных таблиц.

Теоретическая часть урока №6

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

Рассмотрим основные виды виртуальных таблиц 1с для различных объектов метаданных:

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

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

Виртуальные таблицы в конструкторе запросов 1с

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

Открыть параметры виртуальной таблицы

СрезПоследних и СрезПервых

Параметры виртуальной таблицы Срез последних

  • Период. В данном поле необходимо задать параметр, в который будет передана дата, на которую будет осуществляться срез первых, либо срез последних;
  • Условие. Данное поле присутствует практически у всех виртуальных таблиц, в нем задается условие на поля виртуальной таблицы. Данное условие необходимо прописать вручную, либо воспользоваться редактором произвольных выражений, который можно запустить нажав кнопку с тремя точками.
    Условие в параметрах виртуальной таблицы 1с
    ПРИМЕЧЕНИЕ! Если вам необходимо задать условия на поля виртуальной таблицы, делать это необходимо именно в параметрах таблицы, а не на вкладке Условия. Все дело в том, что запрос сначала выбирает данные, учитывая указанные параметры, а уже потом накладывает на него отбор из вкладки Условия. Поэтому условия наложенные в параметрах таблицы отработают быстрее, чем те которые указаны на вкладке Условия. Однако это правило не следует использовать для установки условий на ресурсы регистров, так как в данном случае они не будут отрабатывать также, как условия наложенные на измерения и реквизиты (т.е. если вам необходим отбор по ресурсам регистра, делать это нужно на вкладке Условия).
Остатки в регистре накопления

  • Период. В данном поле необходимо задать параметр, в который будет передана дата или граница, на которую будет осуществляться получение остатков. У таблицы Остатки существует небольшая особенность, если вам необходимо получить остаток на определенную дату, то передать в параметр необходимо эту дату плюс одну секунду, либо границу с типом границы Включая;Пример 1
    Дата = ТекущаяДата();
    Запрос.УстановитьПараметр("Период", Дата + 1);

    Пример 2

    Дата = ТекущаяДата();
    Граница = Новый Граница(Дата, ВидГраницы.Включая);
    
    Запрос.УстановитьПараметр("Период", Граница);
    
Остатки в регистре бухгалтерии

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

  • УсловиеСчета. В данном поле задается условие на поле Счет виртуальной таблицы. В отличии поля Условия, для создания условий доступно только измерение Счет;
  • Субконто. В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться в данной виртуальной таблице. Например, если вы хотите получить остатки по 41 счету бухгалтерского учета, но вам не нужен разрез по складам, то в данный параметр можно передать массив состоящий из одного элемента: Номенклатура из плана видов характеристик ВидыСубконтоХозрасчетные.
    Ном = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура;
    
    Субконто = Новый Массив;
    Субконто.Добавить(Ном);
    
    Запрос.УстановитьПараметр("Субконто", Субконто);

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

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

Параметры виртуальной таблицы Обороты

  • НачалоПериода. Параметр в котором хранится дата начала периода, за который будут браться обороты;
  • КонецПериода. Параметр в котором хранится дата окончания периода, за который будут браться обороты;
  • Периодичность. Определяет группировку по периоду в виртуальной таблице. Если, например, указана периодичность Месяц, то данные в таблице будут сгруппированы по всем измерениям и месяцу, в полях таблицы появится поле Период, в котором будет хранится первый день месяца, в котором было сделано движение регистра. Если оставить поле Периодичность пустым, то периода в полях виртуальной таблицы не будет. Помимо периодичности связанной с временными промежутками есть еще несколько ее типов:
    • Запись. Данные будут выбираться по отдельным записям регистра, точно также как в  полной таблице. В полях появляются Период и Регистратор (документ который сделал данное движение);
    • Регистратор. Данные будут сгруппированы по документу сделавшему движения в регистре. Данная группировка удобна как раз тогда, когда вам необходимо иметь разрез по документам. В полях появляются Период и Регистратор;
    • Период. Данные группируются по измерениям регистра за весь период оборота;
    • Авто. Данные группируются до секунды, в полях появляются Регистратор, ПериодСекунда, …. ПериодГод.
Обороты в регистре бухгалтерии

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

  • МетодДополнения. Метод дополнения периодов, данный параметр определяет за какие периоды будут получены движения регистра. Если указано значение Движения, то будут получены периоды, в которых были движения (обороты не равны нулю), если ДвиженияИГраницыПериода, то за периоды, по которым были движения, плюс начальный и конечный периоды, если на их начало был остаток. Данный параметр имеет смысл только, если Периодичность не равна Период. ДвиженияИГраницыПериода является значением по умолчанию, поэтому если нужен данный метод дополнения, поле можно оставить пустым.
Остатки и обороты в регистре бухгалтерии

Все параметры используемые в данной таблице были описаны в предыдущих пунктах.

Обороты Дебет Кредит

  • УсловиеСчетаДт. В данном поле задается условие на поле СчетДт виртуальной таблицы, это счет левой части бухгалтерской проводки;
  • УсловиеСчетаКт. В данном поле задается условие на поле СчетКт виртуальной таблицы, это счет правой части бухгалтерской проводки;
  • СубконтоДт. В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться для левой (дебетовой) части проводки;
  • СубконтоКт. В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться для правой (кредитовой) части проводки;
Движения с субконто

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

Практическая часть урока №6

В данном разделе нам предстоит решить две задачи по пройденной теме.

Задача 1

Получить остатки номенклатуры на указанном складе на конец месяца.

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

  • Создадим новый запрос;
  • Запустим конструктор запросов;
  • В раздел Таблицы перетащим таблицу Хозрасчетный.Остатки из ветки РегистрыБухгалтерии;
  • Выделим данную таблицу и нажмем кнопку Параметры виртуальной таблицы;
  • В поле Период впишем параметр, в который будет передаваться дата на которую будут браться остатки. Так как мы используем таблицу Остатки, в параметр передадим не дату а границу, с видом Включая;
  • В поле УсловиеСчета вручную или используя редактор произвольных выражений вписываем условие на счет, используя оператор В ИЕРАРХИИ, для того чтобы в запрос попали остатки по всем субсчетам счета 41;
  • В поле Субконто зададим параметр, в который передадим массив субконто. В нашей задаче нам нужны только склады и номенклатура, первым элементом массива зададим вид субконто Склады, а вторым Номенклатура;
  • В поле Условие вручную или используя редактор произвольных выражений наложим отбор на склад, который в нашем случае хранится в поле Субконто1.
  • На этом заполнение параметров виртуальной таблицы завершено, нажимаем кнопку ОК;
  • В раздел Поля перетащим Субконто1, Субконто2 и КоличествоОстаток;
  • Перейдем на вкладку Объединения / Псевдонимы;
  • Зададим псевдонимы для полей Субконто1 и Субконто2, назначим для них Склад и Номенклатура соответственно;
  • Запрос готов, нажимаем кнопку «ОК» в нижней части окна конструктора.

В итоге у нас получится запрос со следующим текстом:

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

Ном = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура;
Склады = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады;

Субконто = Новый Массив;
Субконто.Добавить(Склады);
Субконто.Добавить(Ном);

Граница = Новый Граница(ТекущаяДата(),ВидГраницы.Включая);

Счет41 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41");

Запрос.УстановитьПараметр("Субконто"    , Субконто);
Запрос.УстановитьПараметр("ДатаОстатков", Граница);
Запрос.УстановитьПараметр("Склад"       , Склад);
Запрос.УстановитьПараметр("Счет41"      , Счет41);
Запрос.Текст = 
"ВЫБРАТЬ
|    ХозрасчетныйОстатки.Субконто1 КАК Склад,
|    ХозрасчетныйОстатки.Субконто2 КАК Номенклатура,
|    ХозрасчетныйОстатки.КоличествоОстаток
|ИЗ
|   РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОстатков, 
|       Счет В ИЕРАРХИИ (&Счет41), 
|       &Субконто, 
|       Субконто1 = &Склад) КАК ХозрасчетныйОстатки";
Задача 2

Получить актуальную цену на конец месяца по указанной номенклатуре и типу цен.

  • Создадим новый запрос;
  • Запустим конструктор запросов;
  • В раздел Таблицы перетащим таблицу ЦеныНоменклатуры.СрезПоследних;
  • Выделим данную таблицу и нажмем кнопку Параметры виртуальной таблицы;
  • В поле Период впишем параметр, в который будет передаваться дата на которую будет браться срез последних;
  • В поле Условие вручную или используя редактор произвольных выражений наложим отбор на поля ТипЦен и Номенклатура;
  • В раздел Поля перетащим ресурс Цена;
  • Запрос готов, нажимаем кнопку «ОК» в нижней части окна конструктора.

В итоге у нас получится запрос со следующим текстом:

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

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

Запрос.Текст = 
"ВЫБРАТЬ
|    ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
|    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
|        &Дата,
|        ТипЦен = &ТипЦен
|	 И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних";
  • Язык запросов 1с — структура оператора Выбрать
  • Программная работа с запросами 1с 8

<< Пред. страница   |   След.Страница >>

Странницы: 1 2 3 4 5 6


Понравилась статья? Поделить с друзьями:
  • Как найти основание через синус угла
  • Unable to open the fifa fat file как исправить
  • Украли телефон как найти номер по спутнику
  • Как найти на сколько градусов повысилась температура
  • Не удалось связаться с серверами гугл как исправить