1С 8.3 Выбор месяца из списка - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Выбор месяца из списка

Данные > Примеры кода 1С > 1С 8.3 Дата и время
Когда на форме отчета, обработки, документа достаточно выбирать отрезок периода кратный месяцу, можно применить данную реализация двух выпадающих меню в формате месяц_год. На скриншоте видно, как созданный отчет по данному примеру быстрого и удобного решает задачу выбора временного промежутка - начального и конечного месяца и года.
Выбор двух реквизитов месяц_год из списка на форме в 1С 8.3 (от MaxCell):
&НаКлиенте
Процедура СформироватьСписокВыбора(ВыбГод, Элемент)

   Элементы[Элемент].СписокВыбора.Очистить();
   Элементы[Элемент].СписокВыбора.Добавить(Формат(ВыбГод-1, "ЧГ=0"));
   Для НомерМесяца = 1 По 12 Цикл
       Элементы[Элемент].СписокВыбора.Добавить(СтрЗаменить(Формат(Дата(ВыбГод, НомерМесяца, 1), "ДФ = ММММ_гггг"), "_", " "));
   КонецЦикла;
   Элементы[Элемент].СписокВыбора.Добавить(Формат(ВыбГод+1, "ЧГ=0"));

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

&НаКлиенте
Процедура МесяцОбработкаВыбора(Элемент, ВыбЗначение, СтандартнаяОбработка) // при изменении полей ввода НачДата, КонДата

   СтандартнаяОбработка = Ложь;
   Если ВыбЗначение <>  "" Тогда
       Если СтрДлина(ВыбЗначение) = 4 Тогда
           ВыборГод = Число(ВыбЗначение);
           СформироватьСписокВыбора(ВыборГод, Элемент.Имя); // в модуле формы

           ДопПараметры = Новый Структура;
           ДопПараметры.Вставить("Имя_Элемента", Элемент.Имя);
           Оповещение = Новый ОписаниеОповещения("ВыборГода", ЭтаФорма, ДопПараметры);
           ЭтаФорма.ПоказатьВыборИзСписка(Оповещение, Элемент.СписокВыбора, Элемент);
       Иначе
           ЭтаФорма[Элемент.Имя] = ВыбЗначение;
           НомерМесяца = Элемент.СписокВыбора.Индекс(Элемент.СписокВыбора.НайтиПоЗначению(ВыбЗначение));
           ВыборГод = Число(Прав(ВыбЗначение, 4));
           Объект[Элемент.Имя] = Дата(ВыборГод, НомерМесяца, 1);
       КонецЕсли;
   Иначе
       Объект[Элемент.Имя] = Неопределено;
   КонецЕсли;

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

&НаКлиенте
Процедура ВыборГода(Результат, ДопПараметры) Экспорт

   Если Результат = Неопределено Тогда
       Возврат;
   КонецЕсли;

   Значение_Результат = Результат.Значение;
   Имя_Элемента = ДопПараметры.Имя_Элемента;;
   Поле_Элемента = Элементы[Имя_Элемента];

   Если Значение_Результат <>  "" Тогда
       Если СтрДлина(Значение_Результат) = 4 Тогда
           ВыборГод = Число(Значение_Результат);
           СформироватьСписокВыбора(ВыборГод, Имя_Элемента);

           Оповещение = Новый ОписаниеОповещения("ВыборГода", ЭтаФорма, ДопПараметры);
           ЭтаФорма.ПоказатьВыборИзСписка(Оповещение, Поле_Элемента.СписокВыбора, Поле_Элемента);
       Иначе
           ЭтаФорма[Имя_Элемента] = Значение_Результат;
           НомерМесяца = Поле_Элемента.СписокВыбора.Индекс(Поле_Элемента.СписокВыбора.НайтиПоЗначению(Значение_Результат));
           ВыборГод = Число(Прав(Значение_Результат, 4));
           Объект[Имя_Элемента] = Дата(ВыборГод, НомерМесяца, 1);
       КонецЕсли;
   Иначе
       Объект[Имя_Элемента] = Неопределено;
   КонецЕсли;

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)

   // у полей ввода НачДата, КонДата устанавливаем РежимВыбораИзСписка
   СтандартнаяДатаОтчета = ТекущаяДата();

   СформироватьСписокВыбора(Год(СтандартнаяДатаОтчета),"НачДата");
   СформироватьСписокВыбора(Год(СтандартнаяДатаОтчета),"КонДата");

   Объект.НачДата = НачалоМесяца(СтандартнаяДатаОтчета); // тип "Дата", состав: только дата
   Объект.КонДата = ДобавитьМесяц(Объект.НачДата,3);     // тип "Дата", состав: только дата
   НачДата = СтрЗаменить(Формат(Объект.НачДата, "ДФ = ММММ_гггг"), "_", " "); // тип "Строка"
   КонДата = СтрЗаменить(Формат(Объект.КонДата, "ДФ = ММММ_гггг"), "_", " "); // тип "Строка"

КонецПроцедуры
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 07.12.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому