База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в 1С сформировать таблицу месяцев с произвольными началом и концом периода?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 неделя, 2 дня назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
28 апреля 2026 в 15:45 #36853
ТабМес структура 1 строка ДатН 15.01.23 ДатК 31.01.23 2 строка ДатН 01.02.23 ДатК 28.02.23 3 строка ДатН 01.03.23 ДатК 31.03.23 и т.д. …. ДатН 01.10.23 ДатК 05.10.23
-
28 апреля 2026 в 15:45 #36854
Вот пример кода 1С, который формирует ТаблицуЗначений с колонками ДатН и ДатК, где каждая строка — период месяца в заданном диапазоне, при этом первый месяц начинается с произвольной даты (например, 15.01.2023), а последний месяц заканчивается на произвольной дате (например, 05.10.2023):
1С (Код)12345678910111213141516171819202122232425262728293031323334353637Процедура СформироватьТаблицуМесяцев(ДатаНач, ДатаКон, ТабМес)// ТабМес - ТаблицаЗначений с колонками "ДатН" и "ДатК"ТабМес.Очистить();ТекДатаНач = ДатаНач;ТекДатаКон = КонецМесяца(ТекДатаНач);Пока ТекДатаНач <= ДатаКон ЦиклНоваяСтрока = ТабМес.Добавить();НоваяСтрока.ДатН = ТекДатаНач;// Для последнего месяца ограничиваем ДатК датой окончания диапазонаЕсли ТекДатаКон > ДатаКон ТогдаНоваяСтрока.ДатК = ДатаКон;ИначеНоваяСтрока.ДатК = ТекДатаКон;КонецЕсли;// Переходим к следующему месяцуТекДатаНач = ТекДатаКон + 1;ТекДатаКон = КонецМесяца(ТекДатаНач);КонецЦикла;КонецПроцедуры// Пример вызова:ТабМес = Новый ТаблицаЗначений;ТабМес.Колонки.Добавить("ДатН", Новый ОписаниеТипов("Дата"));ТабМес.Колонки.Добавить("ДатК", Новый ОписаниеТипов("Дата"));СформироватьТаблицуМесяцев(Дата(2023,1,15), Дата(2023,10,5), ТабМес);// Теперь ТабМес содержит строки:// 1: ДатН = 15.01.2023, ДатК = 31.01.2023// 2: ДатН = 01.02.2023, ДатК = 28.02.2023// 3: ДатН = 01.03.2023, ДатК = 31.03.2023// ...// N: ДатН = 01.10.2023, ДатК = 05.10.2023Объяснение:
— Начинаем с заданной начальной даты (например, 15.01.2023).
— Для каждого месяца вычисляем конец месяца функцией КонецМесяца.
— Для последнего месяца, если конец месяца выходит за пределы конечной даты, ставим ДатК равной конечной дате.
— Переходим к следующему месяцу, устанавливая начало следующего периода на следующий день после текущего конца месяца.Такой подход универсален и позволяет задать любой произвольный диапазон с частичным первым и последним месяцем.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.