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

09.11.16

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Выбора месяца из списка
.epf 6,69Kb ver:1.0
4
4 Скачать (1 SM) Купить за 1 850 руб.
ВыборМесяца_1.1(БезМодальности)
.epf 6,80Kb ver:1.1
15
15 Скачать (1 SM) Купить за 1 850 руб.

В обработке у нас  реквизит формы (УФ) "Дата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 Управляемые формы 1C:Бухгалтерия Платные (руб)

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

5000 руб.

14.01.2016    55604    17    23    

43

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    19918    28    6    

44

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    17039    YA_418728146    8    

170

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

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

2 стартмани

22.08.2023    4422    75    progmaster    11    

4

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

05.07.2022    7910    kalyaka    6    

33

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

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

3600 руб.

29.04.2022    14404    2    10    

13

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

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

6000 руб.

18.01.2022    10292    1    2    

6

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    11684    AtamanovYS    19    

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