База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как разбить текущую строку табличной части по периодам из таблицы?
- В этой теме 1 ответ, 2 участника, последнее обновление 4 дня, 3 часа назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
30 апреля 2026 в 12:13 #36901
Извини не закончил предыдущий вопрос. Создал ТабМес — ТаблицаЗначений с колонками «ДатН» и «ДатК» с разбивкой по периодам. Теперь необходимо в тч Услуги в текущей строке заполнить первый период Д_нач и Д_кон. Добавить копию текущей записи в тч Услуги и заполнить новые данные второго периода и так далее.
-
30 апреля 2026 в 12:13 #36902
Понятно, у вас есть ТабМес — ТаблицаЗначений с колонками «ДатН» и «ДатК», где разбит период на месячные интервалы. Нужно для текущей строки табличной части Услуги:
— В текущей строке заполнить Д_нач и Д_кон из первой строки ТабМес
— Для каждой следующей строки ТабМес добавить копию текущей строки в табличную часть и заполнить Д_нач и Д_кон из соответствующих строк ТабМесВот пример кода, который это делает:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940// Объект - текущий документОбъект = ЭтаФорма.Объект;// ТабМес - таблица значений с колонками "ДатН" и "ДатК"// ТекущаяСтрока - текущая строка табличной части Услуги, которую нужно разбить// Получаем текущую строку табличной части (например, из формы или параметра)ТекущаяСтрока = Объект.Услуги.ТекущаяСтрока(); // или как у вас реализованоЕсли ТекущаяСтрока = Неопределено ТогдаСообщить("Не выбрана строка табличной части для разбивки");Возврат;КонецЕсли;Если ТабМес.Количество() = 0 ТогдаСообщить("Таблица периодов пуста");Возврат;КонецЕсли;// Заполняем первую строку табличной части из первой строки ТабМесПерваяСтрокаПериода = ТабМес[0];ТекущаяСтрока.Д_нач = ПерваяСтрокаПериода.ДатН;ТекущаяСтрока.Д_кон = ПерваяСтрокаПериода.ДатК;// Для остальных периодов добавляем копии строки с новыми датамиДля НомерПериода = 1 По ТабМес.Количество() - 1 ЦиклНоваяСтрока = Объект.Услуги.Добавить();// Копируем значения из текущей строки (кроме дат)НоваяСтрока.Контрагент = ТекущаяСтрока.Контрагент;НоваяСтрока.ДоговорКА = ТекущаяСтрока.ДоговорКА;НоваяСтрока.Услуга = ТекущаяСтрока.Услуга;// Если есть другие колонки, копируйте их аналогично// Заполняем даты из ТабМесНоваяСтрока.Д_нач = ТабМес[НомерПериода].ДатН;НоваяСтрока.Д_кон = ТабМес[НомерПериода].ДатК;КонецЦикла;// Обновляем форму, чтобы отобразить измененияЭтаФорма.Обновить();Если у вас нет метода ТекущаяСтрока(), то нужно получить текущую строку табличной части из формы, например:
1С (Код)1ТекущаяСтрока = ЭтаФорма.Элементы.ТабличноеПолеУслуги.ТекущаяСтрока;Или передать строку в процедуру параметром.
Если в табличной части много колонок, можно сделать копирование через цикл по колонкам, кроме дат:
1С (Код)12345Для Каждого Колонка Из Объект.Услуги.Колонки ЦиклЕсли Колонка.Имя <> "Д_нач" И Колонка.Имя <> "Д_кон" ТогдаНоваяСтрока[Колонка.Имя] = ТекущаяСтрока[Колонка.Имя];КонецЕсли;КонецЦикла;Так будет универсально.
Рекомендую использовать именно такой подход — заполнить первую строку, а остальные добавить копиями с новыми датами.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.