gifts2017

Выбор месяца (периода) на управляемой форме

Опубликовал Андрей Лео (Leo_A) в раздел Программирование - Практика программирования

Выбор месяца из списка выбора на управляемой форме с корректным отображением после выбора

Как отобразить выбранную дату в произвольном формате? Пока не столкнулся с проблемой - не подумал бы, что такое на управляемой форме типовыми средствами сделать нельзя. Единственный выход, который я нашел - это добавление реквизита формы с типом "Строка" и обработка события "НачалоВыбораИзСписка".

&НаКлиенте

Процедура ПериодСНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
[МодульКлиент].НачалоВыбораИзСпискаПредставленияПериодаРегистрации(Элемент, СтандартнаяОбработка, Объект.ПериодС, ЭтаФорма);
КонецПроцедуры

Саму же процедуру НачалоВыбораИзСпискаПредставленияПериодаРегистрации помещаем в какой-нибудь общий модуль для которого установлен вызов с клиента.

Процедура НачалоВыбораИзСпискаПредставленияПериодаРегистрации(Элемент, СтандартнаяОбработка, ПериодРегистрации, ЭтаФорма, НачальноеЗначение = Неопределено) Экспорт

СтандартнаяОбработка = Ложь;

Если НачальноеЗначение = Неопределено Тогда
НачальноеЗначение = ПериодРегистрации;
КонецЕсли;

СписокВыбора = Новый СписокЗначений;
НачалоТекущегоГода = НачалоГода(НачальноеЗначение);
НачалоПрошлогоГода = НачалоГода(НачалоТекущегоГода - 1);
СписокВыбора.Добавить(НачалоПрошлогоГода, (Формат(НачалоПрошлогоГода, "ДФ='yyyy'") + "..."));
НачалоМесяцаЗаполнения = НачалоТекущегоГода;
ЭлементПоУмолчанию = Неопределено;
Для а = 1 По 12 Цикл
ДобавленныйЭлемент = СписокВыбора.Добавить(НачалоМесяцаЗаполнения, ДатаКакМесяцПредставление(НачалоМесяцаЗаполнения));
Если НачальноеЗначение = НачалоМесяцаЗаполнения Тогда
ЭлементПоУмолчанию = ДобавленныйЭлемент;
КонецЕсли;
НачалоМесяцаЗаполнения = ДобавитьМесяц(НачалоМесяцаЗаполнения, 1);
КонецЦикла;
НачалоСледующегоГода = КонецГода(НачалоТекущегоГода) + 1;
СписокВыбора.Добавить(НачалоСледующегоГода, (Формат(НачалоСледующегоГода, "ДФ='yyyy'") + "..."));

ВыбранныйЭлемент = ЭтаФорма.ВыбратьИзСписка(СписокВыбора, Элемент, ЭлементПоУмолчанию);

Если ВыбранныйЭлемент = Неопределено Тогда
Возврат;
ИначеЕсли Год(ВыбранныйЭлемент.Значение) <> Год(НачальноеЗначение) Тогда
НачалоВыбораИзСпискаПредставленияПериодаРегистрации(Элемент, СтандартнаяОбработка, ПериодРегистрации, ЭтаФорма, ВыбранныйЭлемент.Значение);
Возврат;
КонецЕсли;

ПериодРегистрации = ВыбранныйЭлемент.Значение;
Элемент.ВыделенныйТекст = ДатаКакМесяцПредставление(ПериодРегистрации);

КонецПроцедуры

Функция ДатаКакМесяцПредставление(ДатаДата) Экспорт
Возврат Формат(ДатаДата, "ДФ='ММММ гггг'");
КонецФункции

ну и чтобы при открытии формы у нас восстанавливалось представление периодов в наших полях - в событии "ПриОткрытии" устанавляваем представления в наши строковые реквизиты формы:

ПериодС = [МодульКлиент].ДатаКакМесяцПредставление(Объект.ПериодС);;
ПериодПо = [МодульКлиент].ДатаКакМесяцПредставление(Объект.ПериодПо);;

 

 

Скачать файлы

Наименование Файл Версия Размер
Пример выбора периода 70
.epf 6,38Kb
25.07.12
70
.epf 6,38Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Алексей Прилепский (IamAlexy) 25.07.12 08:05
достаточно просто открыть БП3 и посмотреть как там в отчетах построена работа с периодами.
2. Алексей Гафуров (Alex_grem) 25.07.12 08:55
Полностью согласен с IamAlexy. Нечего изобретать велосипед
3. Андрей Лео (Leo_A) 25.07.12 10:32
Да, БП3 это пожалуй единственная конфа, в которую я не подумал заглянуть, спасибо за наводку... Но на самом деле 2 общих модуля, перечисление и общая форма - это немного больше, чем 2 процедуры, которые можно и не выносить в общие модули для локальной обработки.
4. Stepan Shipitsyn (Stepan_1c) 21.10.12 15:45
делал сегодня нечто подобное - я не один такой :)
5. Павел Никифоров (Lyns_owner) 21.10.12 15:50
Это давно реализовано до вас. Ставьте копирайты, а лучше не вообще не занимайтесь копипастом.
6. Андрей Лео (Leo_A) 21.10.12 17:06
(5) Lyns_owner, реализовано может и давно, но поиск мне почему-то не выдал достойного результата, решение данной задачи тоже весьма не очевидное на первый взгляд, поэтому и опубликовал его здесь. Дайте ка ссылочку откуда это скопировано, а то больно голословно выглядит ваш комментарий...
Кроме того, существование похожих публикации не делает мою публикацию хуже - это не основание понижать ее рейтинг. © Lyns_owner
7. Павел Никифоров (Lyns_owner) 22.10.12 17:43
(6) Leo_A, =)) Улыбнуло. А кто говорил про статью? Открой ЗУП - там почти в любом документе увидишь свой ПериодРегистрации.

З.Ы. убрал минус. Его отсутствие будем считать компенсацией за потраченное время на публикацию.
8. Leo Z (Leon99) 22.10.12 18:04
9. Андрей Лео (Leo_A) 22.10.12 18:34
(7) Lyns_owner, одно дело период регистрации в ЗУП, на неуправляемом приложении, а другое дело управляемая форма - это не одно и тоже, хотя и очень похоже. А про ЗУП я знаю...
10. Андрей Лео (Leo_A) 22.10.12 18:36
(8) Leon99, как уже писал в 3-м сообщении, в БП3 слишком навороченный механизм, для простого выбора месяца...
11. Павел Никифоров (Lyns_owner) 23.10.12 02:29
12. Илья Хайбуллин (KuJIT) 17.12.14 17:13
А чем не устраивает "СтандартныйПериод"?
13. Андрей Лео (Leo_A) 20.12.14 21:17
(12) всем устраивает, а как это относится к данной публикации?