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

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

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

&НаКлиенте

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

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

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

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

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

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

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

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

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

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

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

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

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



 

22 Comments

  1. IamAlexy

    достаточно просто открыть БП3 и посмотреть как там в отчетах построена работа с периодами.

    Reply
  2. Alex_grem

    Полностью согласен с IamAlexy. Нечего изобретать велосипед

    Reply
  3. Leo_A

    Да, БП3 это пожалуй единственная конфа, в которую я не подумал заглянуть, спасибо за наводку… Но на самом деле 2 общих модуля, перечисление и общая форма — это немного больше, чем 2 процедуры, которые можно и не выносить в общие модули для локальной обработки.

    Reply
  4. Stepan_1c

    делал сегодня нечто подобное — я не один такой 🙂

    Reply
  5. Lyns_owner

    Это давно реализовано до вас. Ставьте копирайты, а лучше не вообще не занимайтесь копипастом.

    Reply
  6. Leo_A

    (5) Lyns_owner, реализовано может и давно, но поиск мне почему-то не выдал достойного результата, решение данной задачи тоже весьма не очевидное на первый взгляд, поэтому и опубликовал его здесь. Дайте ка ссылочку откуда это скопировано, а то больно голословно выглядит ваш комментарий…

    Кроме того, существование похожих публикации не делает мою публикацию хуже — это не основание понижать ее рейтинг. © Lyns_owner

    Reply
  7. Lyns_owner

    (6) =)) Улыбнуло. А кто говорил про статью? Открой ЗУП — там почти в любом документе увидишь свой ПериодРегистрации.

    З.Ы. убрал минус. Его отсутствие будем считать компенсацией за потраченное время на публикацию.

    Reply
  8. Leon99

    (1) IamAlexy, согласен +1

    Reply
  9. Leo_A

    (7) Lyns_owner, одно дело период регистрации в ЗУП, на неуправляемом приложении, а другое дело управляемая форма — это не одно и тоже, хотя и очень похоже. А про ЗУП я знаю…

    Reply
  10. Leo_A

    (8) Leon99, как уже писал в 3-м сообщении, в БП3 слишком навороченный механизм, для простого выбора месяца…

    Reply
  11. Lyns_owner

    (9) Конечно знаешь 😉

    Reply
  12. KuJIT

    А чем не устраивает «СтандартныйПериод»?

    Reply
  13. Leo_A

    (12) всем устраивает, а как это относится к данной публикации?

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

    Жесть 🙂

    Если продолжать в том же духе то можно создать функцию

    Функция Сложение(А,Б) Экспорт
    Возврат А+Б;
    КонецФункции
    Reply
  15. nporrep

    (15)На самом деле такой подход положительно влияет на скорость разработки.

    Проще набрать ДатаК, нажать Ctrl+Space и Enter, чтобы получить в коде имя функции, чем каждый раз прописывать в параметре функции Формат форматную строку.

    Reply
  16. YanTsys

    (16) Спасибо за идею, теперь понятны плюсы этого подхода 🙂

    Reply
  17. Leo_A

    (15) Скорость разработки думаю тут не главная причина данного подхода. Главным в данном случае является то, что если клиент захочет видеть например не «Декабрь 2017», а «Дек 2017», то нам нужно в одной функции поменять форматную строку и мы получим изменения во всех местах использующих вызов этой функции. Но тут нужно опять же руководствоваться здравым смыслом. Если эта функция будет вызываться единожды в одном месте конфигурации, то конечно же это скорее излишество. Данный код был взят из типовой конфигурации 1С и представлен как есть, в их решении действительно была необходимость данного подхода, в вашем случае — решать вам.

    Reply
  18. 🅵🅾️🆇

    (15)

    Если продолжать в том же духе то можно создать функцию

    Мимо использую функции Инк(Число, Размер = 1) и Дек(Число, Размер = 1)

    Reply
  19. user805602

    Так непонятно написано.

    Reply
  20. user805602

    Какой вид реквизита? Как реквизит на форме называется?

    Reply
  21. user805602

    Какие свойства , каких полей, надо установить, чтобы был такой вид?

    Reply
  22. Leo_A

    (22) Здравствуйте, если Вам важен именно такой вид и описание для Вас непонятно — можно скачать обработку, там разобраться проще.

    Если важен выбор периода и не важно какой при этом будет вид у элементов управления — используйте поле с типом «Стандартный период».

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *