Часто для удобства пользователей требуется сделать выбор месяца на форме. Как это реализовать для управляемых форм читайте далее
Допустим у нас есть реквизит справочника/документа/обработки «МесяцПроведения» с типом «Дата», в котором мы будем хранить выбранный месяц
Для начала надо создать реквизит формы «Месяц» с типом Строка.
Затем добавить элемент формы (поле) «Месяц», у которого будет путь к данным «Месяц» и установлена галочка «РежимВыбораИзСписка»
И добавим событие «ПриИзменении» созданному элементу со следующим кодом:
1 2 3 4 5 6 7 8 9 10 11 |
Если Месяц <> "" Тогда Если СтрДлина(Месяц)=4 Тогда СформироватьСписокВыбораМесяца(Число(Месяц)); Объект.МесяцПроведения = НачалоМесяца(Дата(Число(Месяц), 1, 1)); Месяц = Формат(Объект.МесяцПроведения, "ДФ='MMMM yyyy'"); Иначе НомМесяца = (Найти("янвфевмарапрмайиюниюлавгсеноктноядек",Нрег(Лев(Месяц,3)))+2)/3; //получаем номер месяца ВыбрГод = Число(Прав(Месяц, 4)); Объект.МесяцПроведения = НачалоМесяца(Дата(ВыбрГод, НомМесяца, 1)); КонецЕсли; КонецЕсли; |
Ага. Мы видим, что в коде присутствует непонятная функция «СформироватьСписокВыбораМесяца». Ее нам тоже нужно добавить в модуль формы:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
&НаКлиенте Процедура СформироватьСписокВыбораМесяца(Год) Элементы.Месяц.СписокВыбора.Очистить(); Элементы.Месяц.СписокВыбора.Добавить(Формат(Год-1, "ЧГ=0")); Для к = 1 По 12 Цикл СформДата = Дата(Год, к, 1); Наим = Формат(СформДата, "ДФ = ММММ_гггг"); Наим = СтрЗаменить(Наим, "_", " "); Элементы.Месяц.СписокВыбора.Добавить(Наим); КонецЦикла; Элементы.Месяц.СписокВыбора.Добавить(Формат(Год+1, "ЧГ=0")); КонецПроцедуры |
Уже почти все готово. Осталось только при открытии формы подставлять тот месяц, который мы храним в реквизите «МесяцПроведения»
Для этого создаем событие формы «ПриОткрытии» со следующим кодом:
1 2 3 4 5 6 |
Месяц = Формат(Объект.МесяцПроведения, "ДФ='MMMM yyyy'"); Если Год(Объект.МесяцПроведения) = 1 Тогда СформироватьСписокВыбораМесяца(Год(ТекущаяДата())); Иначе СформироватьСписокВыбораМесяца(Год(Объект.МесяцПроведения)); КонецЕсли; |
Теперь запускаем 1С и проверяем.