Организация выбора месяца из списка (универсально + НЕ модально )

09.11.16

Разработка - Работа с интерфейсом

Пришлось столкнуться с такой проблемой, как выбор месяца из ниспадающего списка (с элементами вида "НазваниеМесяца Год") с возможностью изменения года. Хочу предложить универсальный вариант реализации данного механизма на основе механизма http://infostart.ru/public/167549/ ЗЫ: основные отличия: - вместо "НачалоВыбораИзСписка" работаем с "ОбработкаВыбора" без модальности - Обратное преобразование в дату не только на русском - Универсальность процедур. Одна функция выбирается в нескольких полях.

Скачать исходный код

Наименование Файл Версия Размер
Выбора месяца из списка
.epf 6,69Kb
4
.epf 1.0 6,69Kb 4 Скачать
ВыборМесяца_1.1(БезМодальности)
.epf 6,80Kb
15
.epf 1.1 6,80Kb 15 Скачать

В обработке у нас  реквизит формы (УФ) "Дата1" с типом "Строка" (установлено "РежимВыбораИзСписка"), куда и будет вписываться название месяца и год, и реквизит обработки с таким же именем, но с типом "Дата", где собствено и будет храниться дата для использования...

При открытии формы необходимо сформировать список выбора (по умолчанию, на текущий год) и запольнить реквизит текущим месяцем:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    СформироватьСписокВыбораМесяца(Год(ТекущаяДата()),"Дата1");
    СформироватьСписокВыбораМесяца(Год(ТекущаяДата()),"Дата2");
    
    Объект.Дата1     = НачалоМесяца(ТекущаяДата());
    Объект.Дата2     = ДобавитьМесяц(Объект.Дата1,1);
    
    Дата1           = СтрЗаменить(Формат(Объект.Дата1, "ДФ = ММММ_гггг"), "_", " ");
    Дата2           = СтрЗаменить(Формат(Объект.Дата2, "ДФ = ММММ_гггг"), "_", " ");

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

Собственно процедура "СформироватьСписокВыбораМесяца":

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

Ну и собственно сама процедура выбора (процедура универсальная, подключать можно к нескольким реквизитам):

&НаКлиенте
Процедура МесяцОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
     СтандартнаяОбработка = Ложь;
	
	Если ВыбранноеЗначение <>  "" Тогда
		
		Если СтрДлина(ВыбранноеЗначение) = 4 Тогда

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

Для ухода от модальности вызываем процедуру "Обработчик_ВыборГода":

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

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

Реализация выбора месяца из выпадающего списка выбора

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61971    43    59    

81

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54599    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    16849    21    4    

35

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2233    25    progmaster    8    

3

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3867    kalyaka    4    

29

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12228    1    5    

10

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    8901    1    2    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. trntv 25 14.11.16 13:27 Сейчас в теме
Для универсальности рекомендую переписать и отказаться от ВыбратьИзСписка в пользу ПоказатьВыборИзСписка, так как в современных конфигурациях идет отказ от модальности.
igorkosmos; +1
2. igorkosmos 8 15.11.16 10:59 Сейчас в теме
(1) hashpnd, Большое человеческое сп =) Изучил вопрос, переписал под новые веяния =)
+
3. agent00mouse 253 03.10.17 09:33 Сейчас в теме
Хо - хо, Камрад, Сам запилил, аналог. по этому же источнику в основе. Только с привязкой к конкретному элементу.
+
4. agent00mouse 253 03.10.17 11:34 Сейчас в теме
Отучим от пустых значений

		Если СтрДлина(ВыбранноеЗначение) = 4 Тогда

		    ВыбрГод = Число(ВыбранноеЗначение);
	        СформироватьСписокВыбораМесяца(ВыбрГод, Элемент.Имя);
			//Добавлено
			ЭтаФорма[Элемент.Имя] = Элементы[Элемент.Имя].СписокВыбора[1].Значение;
			Объект[Элемент.Имя] = НачалоМесяца(Дата(ВыбрГод, 1, 1));


и далее

		Если СтрДлина(ВыбранноеЗначение) = 4 Тогда

		    ВыбрГод					= Число(ВыбранноеЗначение);
	        СформироватьСписокВыбораМесяца(ВыбрГод, Элемент_Имя);
			//Добавлено
			ЭтаФорма[Элемент_Имя]	= Элементы[Элемент_Имя].СписокВыбора[1].Значение;
			Объект[Элемент_Имя]		= НачалоМесяца(Дата(ВыбрГод, 1, 1));
igorkosmos; +1
5. sergey781 16.04.20 15:15 Сейчас в теме
написал вот такой метод в https://forum.infostart.ru/forum9/topic121616/
отказался от ПоказатьВыборИзСписка, т.к. он вызывается уже нестандартно и список выбора становится корявым, нет начального значения, отказался от доп. строкового реквизита и прочее...
+
Оставьте свое сообщение