База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как разбить текущую строку табличной части по периодам из таблицы? › Ответ в теме: Как разбить текущую строку табличной части по периодам из таблицы?
Понятно, у вас есть ТабМес — ТаблицаЗначений с колонками «ДатН» и «ДатК», где разбит период на месячные интервалы. Нужно для текущей строки табличной части Услуги:
— В текущей строке заполнить Д_нач и Д_кон из первой строки ТабМес
— Для каждой следующей строки ТабМес добавить копию текущей строки в табличную часть и заполнить Д_нач и Д_кон из соответствующих строк ТабМес
Вот пример кода, который это делает:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// Объект - текущий документ Объект = ЭтаФорма.Объект; // ТабМес - таблица значений с колонками "ДатН" и "ДатК" // ТекущаяСтрока - текущая строка табличной части Услуги, которую нужно разбить // Получаем текущую строку табличной части (например, из формы или параметра) ТекущаяСтрока = Объект.Услуги.ТекущаяСтрока(); // или как у вас реализовано Если ТекущаяСтрока = Неопределено Тогда Сообщить("Не выбрана строка табличной части для разбивки"); Возврат; КонецЕсли; Если ТабМес.Количество() = 0 Тогда Сообщить("Таблица периодов пуста"); Возврат; КонецЕсли; // Заполняем первую строку табличной части из первой строки ТабМес ПерваяСтрокаПериода = ТабМес[0]; ТекущаяСтрока.Д_нач = ПерваяСтрокаПериода.ДатН; ТекущаяСтрока.Д_кон = ПерваяСтрокаПериода.ДатК; // Для остальных периодов добавляем копии строки с новыми датами Для НомерПериода = 1 По ТабМес.Количество() - 1 Цикл НоваяСтрока = Объект.Услуги.Добавить(); // Копируем значения из текущей строки (кроме дат) НоваяСтрока.Контрагент = ТекущаяСтрока.Контрагент; НоваяСтрока.ДоговорКА = ТекущаяСтрока.ДоговорКА; НоваяСтрока.Услуга = ТекущаяСтрока.Услуга; // Если есть другие колонки, копируйте их аналогично // Заполняем даты из ТабМес НоваяСтрока.Д_нач = ТабМес[НомерПериода].ДатН; НоваяСтрока.Д_кон = ТабМес[НомерПериода].ДатК; КонецЦикла; // Обновляем форму, чтобы отобразить изменения ЭтаФорма.Обновить(); |
Если у вас нет метода ТекущаяСтрока(), то нужно получить текущую строку табличной части из формы, например:
|
1 |
ТекущаяСтрока = ЭтаФорма.Элементы.ТабличноеПолеУслуги.ТекущаяСтрока; |
Или передать строку в процедуру параметром.
Если в табличной части много колонок, можно сделать копирование через цикл по колонкам, кроме дат:
|
1 2 3 4 5 |
Для Каждого Колонка Из Объект.Услуги.Колонки Цикл Если Колонка.Имя <> "Д_нач" И Колонка.Имя <> "Д_кон" Тогда НоваяСтрока[Колонка.Имя] = ТекущаяСтрока[Колонка.Имя]; КонецЕсли; КонецЦикла; |
Так будет универсально.
Рекомендую использовать именно такой подход — заполнить первую строку, а остальные добавить копиями с новыми датами.