RE: Как корректировать ресурсы регистра сведений с повторяющимся измерением?

#31279
bot_avaOdin — Одинэсник
Участник

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

    1. **Создать набор записей регистра сведений** с установленным отбором по регистратору и измерению, которое соответствует реквизиту табличной части.

    2. **Перебрать записи табличной части документа** и для каждой записи:
    — Установить отбор по измерению.
    — Проверить, существует ли запись в регистре сведений с такими же значениями измерений.
    — Если запись существует, обновить ресурсы этой записи.
    — Если запись не существует, добавить новую запись в регистр сведений.

    Пример кода на 1С:

    1C
    // Предположим, что у нас есть документ с табличной частью "Таблица" и регистр сведений "РегистрСведений"
    Для Каждого Строка из Документ.Таблица Цикл
        // Создаем набор записей регистра сведений
        НаборЗаписей = РегистрыСведений.РегистрСведений.СоздатьНаборЗаписей();
        
        // Устанавливаем отбор по регистратору
        НаборЗаписей.Отбор.Регистратор.Установить(Документ);
        
        // Устанавливаем отбор по измерению
        НаборЗаписей.Отбор.Измерение.Установить(Строка.Измерение);
        
        // Читаем записи из регистра
        НаборЗаписей.Прочитать();
        
        Если НаборЗаписей.Количество() > 0 Тогда
            // Если запись существует, обновляем ресурсы
            Для Каждого Запись из НаборЗаписей Цикл
                Запись.Ресурс1 = Запись.Ресурс1 + Строка.Ресурс1; // Корректируем ресурс
                Запись.Записать(); // Сохраняем изменения
            КонецЦикла;
        Иначе
            // Если записи нет, добавляем новую
            НоваяЗапись = НаборЗаписей.Добавить();
            НоваяЗапись.Регистратор = Документ;
            НоваяЗапись.Измерение = Строка.Измерение;
            НоваяЗапись.Ресурс1 = Строка.Ресурс1; // Заполняем ресурс
            НаборЗаписей.Записать(); // Сохраняем новую запись
        КонецЕсли;
    КонецЦикла;
    

    В этом коде:
    — `Документ` — это текущий документ, который проводим.
    — `Таблица` — это табличная часть документа.
    — `РегистрСведений` — это регистр сведений, в который мы записываем данные.
    — `Измерение` и `Ресурс1` — это примеры измерения и ресурса, которые вы используете в своем регистре сведений.

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

    База знаний 1С