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); // тип "Дата", состав: только дата
НачДата = СтрЗаменить(Формат(Объект.НачДата, "ДФ = ММММ_гггг"), "_", " "); // тип "Строка"
КонДата = СтрЗаменить(Формат(Объект.КонДата, "ДФ = ММММ_гггг"), "_", " "); // тип "Строка"
КонецПроцедуры
Процедура СформироватьСписокВыбора(ВыбГод, Элемент)
Элементы[Элемент].СписокВыбора.Очистить();
Элементы[Элемент].СписокВыбора.Добавить(Формат(ВыбГод-1, "ЧГ=0"));
Для НомерМесяца = 1 По 12 Цикл
Элементы[Элемент].СписокВыбора.Добавить(СтрЗаменить(Формат(Дата(ВыбГод, НомерМесяца, 1), "ДФ = ММММ_гггг"), "_", " "));
КонецЦикла;
Элементы[Элемент].СписокВыбора.Добавить(Формат(ВыбГод+1, "ЧГ=0"));
КонецПроцедуры
&НаКлиенте
Процедура МесяцОбработкаВыбора(Элемент, ВыбЗначение, СтандартнаяОбработка) // при изменении полей ввода НачДата, КонДата
СтандартнаяОбработка = Ложь;
Если ВыбЗначение <> "" Тогда
Если СтрДлина(ВыбЗначение) = 4 Тогда
ВыборГод = Число(ВыбЗначение);
СформироватьСписокВыбора(ВыборГод, Элемент.Имя); // в модуле формы
ДопПараметры = Новый Структура;
ДопПараметры.Вставить("Имя_Элемента", Элемент.Имя);
Оповещение = Новый ОписаниеОповещения("ВыборГода", ЭтаФорма, ДопПараметры);
ЭтаФорма.ПоказатьВыборИзСписка(Оповещение, Элемент.СписокВыбора, Элемент);
Иначе
ЭтаФорма[Элемент.Имя] = ВыбЗначение;
НомерМесяца = Элемент.СписокВыбора.Индекс(Элемент.СписокВыбора.НайтиПоЗначению(ВыбЗначение));
ВыборГод = Число(Прав(ВыбЗначение, 4));
Объект[Элемент.Имя] = Дата(ВыборГод, НомерМесяца, 1);
КонецЕсли;
Иначе
Объект[Элемент.Имя] = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыборГода(Результат, ДопПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Значение_Результат = Результат.Значение;
Имя_Элемента = ДопПараметры.Имя_Элемента;;
Поле_Элемента = Элементы[Имя_Элемента];
Если Значение_Результат <> "" Тогда
Если СтрДлина(Значение_Результат) = 4 Тогда
ВыборГод = Число(Значение_Результат);
СформироватьСписокВыбора(ВыборГод, Имя_Элемента);
Оповещение = Новый ОписаниеОповещения("ВыборГода", ЭтаФорма, ДопПараметры);
ЭтаФорма.ПоказатьВыборИзСписка(Оповещение, Поле_Элемента.СписокВыбора, Поле_Элемента);
Иначе
ЭтаФорма[Имя_Элемента] = Значение_Результат;
НомерМесяца = Поле_Элемента.СписокВыбора.Индекс(Поле_Элемента.СписокВыбора.НайтиПоЗначению(Значение_Результат));
ВыборГод = Число(Прав(Значение_Результат, 4));
Объект[Имя_Элемента] = Дата(ВыборГод, НомерМесяца, 1);
КонецЕсли;
Иначе
Объект[Имя_Элемента] = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// у полей ввода НачДата, КонДата устанавливаем РежимВыбораИзСписка
СтандартнаяДатаОтчета = ТекущаяДата();
СформироватьСписокВыбора(Год(СтандартнаяДатаОтчета),"НачДата");
СформироватьСписокВыбора(Год(СтандартнаяДатаОтчета),"КонДата");
Объект.НачДата = НачалоМесяца(СтандартнаяДатаОтчета); // тип "Дата", состав: только дата
Объект.КонДата = ДобавитьМесяц(Объект.НачДата,3); // тип "Дата", состав: только дата
НачДата = СтрЗаменить(Формат(Объект.НачДата, "ДФ = ММММ_гггг"), "_", " "); // тип "Строка"
КонДата = СтрЗаменить(Формат(Объект.КонДата, "ДФ = ММММ_гггг"), "_", " "); // тип "Строка"
КонецПроцедуры
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник