Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 мар 2025, 22:33

Разбить строки табличной части документа по месяцам

Автор Maksim86, 26 янв 2025, 14:49

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

Maksim86

Приветствую Вас, уважаемые участники форума.
Имеется следующая задача:
Грaница периода действия для регистрa расчетa с периодом действия не может пересекать границу периода регистра. В этом случае нужно автоматически раздробить введенную оператором строку табличной части с таким расчетом, чтобы в каждой строке период действия укладывался в период регистра. Например, пользователь ввел период действия с 10 августа по 20 сентября, в этом случае строку табличной части нужно разбить на две:
1) с 10 августа по 31 августа;
2) с 1 сентября по 20 сентября, с тем же видом расчета.

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

Afinogen

 B) то есть данные в строках  будут одни и теже только разными будут начало и конец периода?


Maksim86

Цитата: Afinogen от 27 янв 2025, 15:11то есть данные в строках  будут одни и теже только разными будут начало и конец периода?
Да, именно так.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск