Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PlugFox/ef692cfd790f2ce346339b5e7ddb68b3 to your computer and use it in GitHub Desktop.
Save PlugFox/ef692cfd790f2ce346339b5e7ddb68b3 to your computer and use it in GitHub Desktop.
Программное формирование дат в динамическом списке
////////////////////////////////////////////////////////////////////////////////
#Область Отбор_в_платежном_календаре
&НаКлиенте
Процедура УстановитьОтборНаКлиенте(Элемент)
// Нельзя выбирать слишком большие периоды
Период.ДатаОкончания = Мин(ДобавитьМесяц(Период.ДатаНачала, 1), Период.ДатаОкончания);
СформироватьПлатежныйКалендарь();
КонецПроцедуры // УстановитьОтборНаКлиенте()
#КонецОбласти
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#Область Сформировать_платежный_календарь
&НаСервере
Процедура СформироватьПлатежныйКалендарь()
ПлатежныйКалендарь.ТекстЗапроса = СформироватьТекстЗапросаПлатежногоКалендаря(Период.ДатаНачала, Период.ДатаОкончания);
УстановитьОтбор();
ВынестиКолонкиДинамическогоСписка(Период.ДатаНачала, Период.ДатаОкончания);
КонецПроцедуры // СформироватьПлатежныйКалендарь()
&НаСервереБезКонтекста
Функция СформироватьТекстЗапросаПлатежногоКалендаря(ДатаНачала, ДатаОкончания)
ТекстЗапроса = "
|ВЫБРАТЬ
| Статьи.Ссылка КАК Ссылка
| , Сумма(ВЫБОР КОГДА График.ПоступлениеСписание = ЗНАЧЕНИЕ(Перечисление.ТипыДвиженияДенежныхСредств.Поступление)
| ТОГДА График.Сумма * КурсыВалют.Курс
| ИНАЧЕ -График.Сумма * КурсыВалют.Курс
| КОНЕЦ) КАК Сумма
| , Количество(1) КАК Количество
| %1
|ИЗ
| Справочник.СтатьиДвиженияДенежныхСредств КАК Статьи
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикПлатежей КАК График
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
| ПО КурсыВалют.Валюта = График.Валюта
| ПО График.СтатьяДвиженияДенежныхСредств = Статьи.Ссылка
|ГДЕ
| График.ДатаПлатежа МЕЖДУ &ДатаН И &ДатаО
|{ГДЕ
| ВЫБОР КОГДА &Юнит = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
| ТОГДА ИСТИНА ИНАЧЕ График.Подразделение = &Юнит КОНЕЦ
| И ВЫБОР КОГДА &Счет = ЗНАЧЕНИЕ(Справочник.БанковскиеСчетаОрганизаций.ПустаяСсылка)
| ТОГДА ИСТИНА ИНАЧЕ График.БанковскийСчетКасса = &Счет КОНЕЦ
|}
|СГРУППИРОВАТЬ ПО
| Статьи.Ссылка";
// Сформируем поля даты +
Дата = ДатаНачала;
ПоляПоДням = "";
Пока Дата < ДатаОкончания Цикл
ПоляПоДням = ПоляПоДням + СтрШаблон("// День: %1.%2.%3
| , ДАТАВРЕМЯ(%3, %2, %1) КАК Дата%3%2%1
| , Сумма(ВЫБОР
| КОГДА График.ДатаПлатежа <> ДАТАВРЕМЯ(%3, %2, %1)
| ТОГДА 0
| КОГДА График.ПоступлениеСписание = ЗНАЧЕНИЕ(Перечисление.ТипыДвиженияДенежныхСредств.Поступление)
| ТОГДА График.Сумма * КурсыВалют.Курс
| ИНАЧЕ -График.Сумма * КурсыВалют.Курс
| КОНЕЦ) КАК Сумма%3%2%1
| , Сумма(ВЫБОР
| КОГДА График.ДатаПлатежа = ДАТАВРЕМЯ(%3, %2, %1)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК Количество%3%2%1
|"
, Формат(Дата, "ДФ=dd")
, Формат(Дата, "ДФ=MM")
, Формат(Дата, "ДФ=yyyy"));
Дата = Дата + 86400; // Добавим день
КонецЦикла;
// Сформируем поля даты -
ТекстЗапроса = СтрШаблон(ТекстЗапроса, ПоляПоДням);
Возврат ТекстЗапроса;
КонецФункции // СформироватьТекстЗапросаПлатежногоКалендаря()
&НаСервере
Процедура УстановитьОтбор()
ПлатежныйКалендарь.Параметры.УстановитьЗначениеПараметра("ДатаН", Период.ДатаНачала);
ПлатежныйКалендарь.Параметры.УстановитьЗначениеПараметра("ДатаО", Период.ДатаОкончания);
ПлатежныйКалендарь.Параметры.УстановитьЗначениеПараметра("Юнит", Юнит);
ПлатежныйКалендарь.Параметры.УстановитьЗначениеПараметра("Счет", Счет);
КонецПроцедуры // УстановитьОтбор()
&НаСервере
Процедура ВынестиКолонкиДинамическогоСписка(ДатаНачала, ДатаОкончания)
// Сформируем колонки даты +
КорневаяГруппа = Элементы.ПлатежныйКалендарьПоДням;
Дата = ДатаНачала;
ПоляПоДням = "";
НастройкиГруппы = Новый Структура("Группировка,ОтображатьВШапке,ОтображатьЗаголовок,ГоризонтальноеПоложениеВШапке,РастягиватьПоГоризонтали,Ширина,Группировка"
, ГруппировкаКолонок.Вертикальная
, Истина
, Истина
, ГоризонтальноеПоложениеЭлемента.Центр
, Ложь
, 3
, ГруппировкаКолонок.Горизонтальная);
НастройкиПоля = Новый Структура("ОтображатьВШапке,ОтображатьВПодвале,ПоложениеЗаголовка,РастягиватьПоГоризонтали,Ширина"
, Ложь
, Ложь
, ПоложениеЗаголовкаЭлементаФормы.Нет
, Ложь
, 3);
ЦветБуднего = Новый Цвет(255, 255, 255);
ЦветВыходного = Новый Цвет(255, 200, 200);
Пока Дата < ДатаОкончания Цикл
ШаблонПоля = Формат(Дата, "ДФ=yyyyMMdd");
ПредставлениеГруппы = СтрШаблон("%1 г. (%2)"
, Формат(Дата, "ДФ='d MMM yyyy'") // Число
, Формат(Дата, "ДФ=ддд")); // День недели
Группа = Элементы.Добавить("Группа" + ШаблонПоля, Тип("ГруппаФормы"), КорневаяГруппа);
Группа.Заголовок = ПредставлениеГруппы;
Группа.ЦветФонаЗаголовка = ?(ДеньНедели(Дата) > 5, ЦветВыходного, ЦветБуднего);
ЗаполнитьЗначенияСвойств(Группа, НастройкиГруппы);
//ПолеКоличество = Элементы.Добавить("Количество" + ШаблонПоля, Тип("ПолеФормы"), Группа);
//ПолеКоличество.ПутьКДанным = "ПлатежныйКалендарь.Количество" + ШаблонПоля;
//ЗаполнитьЗначенияСвойств(ПолеКоличество, НастройкиПоля);
ПолеСумма = Элементы.Добавить("Сумма" + ШаблонПоля, Тип("ПолеФормы"), Группа);
ПолеСумма.ПутьКДанным = "ПлатежныйКалендарь.Сумма" + ШаблонПоля;
ПолеСумма.ЦветФона = ?(ДеньНедели(Дата) > 5, ЦветВыходного, ЦветБуднего);
ЗаполнитьЗначенияСвойств(ПолеСумма, НастройкиПоля);
Дата = Дата + 86400; // Добавим день
КонецЦикла;
// Сформируем колонки даты -
КонецПроцедуры // ВынестиКолонкиДинамическогоСписка()
#КонецОбласти
////////////////////////////////////////////////////////////////////////////////
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment