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

10.12.14

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

Рисовал отчёт за период - "Месяц", и решил сделать выборку из ниспадающего списка на форме.
Нагуглил решение на этом сайте, но оно было под УФ, и получение именно даты из поля выбора на форме реализовано было как-то не по мне, слишком много кода. Я так и не разобрался :)
Переделал по своему и выкладываю сюда вам, в надежде заработать немного поинтов :)
Не знаю, нужно в таком случае тут указывать ссылку или нет, но укажу.. http://infostart.ru/public/167549/

Чтобы сделать такой выпадающий список, нужно добавить реквизит с типом значения - "Дата"

Добавление реквизита

Но на форму не добавляйте его при помощи визарда, так как он добавит вам "Поле ввода", а просто сами вручную добавьте на форму элемент - "Поле выбора".

Добавление поля выбора

...и привяжите его к вашему реквизиту.

Привязка поля выбора к реквизиту

  Сам список мы будем заполнять при открытии формы, а вот реализацю смены года будем делать в момент обработки выбора.

Добавление события в модуль формы

Итак, событие мы привязали к процедуре в модуле формы. Сам список формируется следующей процедурой:

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

Формирование списка мы будем вызывать из процедуры "При открытии", чтобы список сразу был заполнен, и текущий месяц был уже выбран..

Процедура ПриОткрытии()

	СформироватьСписокВыбораМесяца(Год(ТекущаяДата()));
	Месяц = ЭлементыФормы.Месяц.СписокВыбора[Месяц(ТекущаяДата())].Значение;
	
КонецПроцедуры

И так-же будем формировать список заного каждый раз, когда переходим на другой год в момент выбора

Процедура МесяцОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	Пока СтрДлина(ВыбранноеЗначение) = 4 Цикл
		СформироватьСписокВыбораМесяца(?(ТипЗнч(ВыбранноеЗначение) = Тип("ЭлементСпискаЗначений"),ВыбранноеЗначение.Представление,ВыбранноеЗначение));
		ВыбранноеЗначение = ЭтаФорма.ВыбратьИзСписка(Элемент.СписокВыбора, Элемент);
	КонецЦикла;
	
	ВыбранноеЗначение = ?(ТипЗнч(ВыбранноеЗначение) = Тип("ЭлементСпискаЗначений"),ВыбранноеЗначение.Значение,ВыбранноеЗначение);
	
КонецПроцедуры

Не нужно больше ничего выдумывать, в реквизите - "Месяц" у нас уже хранится дата начала выбранного месяца :)

Ну в общем-то и всё :) Надеюсь не сильно утомил.. Может, кому-нибудь, да помогу ^_______^

Период Список выбора Выбор месяца

См. также

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

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

5000 руб.

14.01.2016    55630    17    23    

43

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

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

6000 руб.

16.01.2015    63946    45    60    

83

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

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

2400 руб.

29.06.2020    19937    28    6    

44

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

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

20.08.2024    23482    mrXoxot    44    

130

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

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    12033    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    18361    1228    elcoan    53    

125

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

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

3 стартмани

10.04.2023    12890    167    acces969    31    

126

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

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

1 стартмани

05.07.2022    7993    kalyaka    6    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. molodoi1sneg 18 10.12.14 08:01 Сейчас в теме
Нужно было заглянуть в типовые конфигурации(ЗУП,УПП1.3), поискать реквизит "ПериодРегистрации".

Велосипед знатный.
user1004898; +1 Ответить
2. CepeLLlka 76 10.12.14 08:33 Сейчас в теме
А как заглянуть? Они денег стоят так-то..
16. admin 19.05.23 10:33 Сейчас в теме
(2) Незнание типовых механизмов может стоить еще дороже
3. LuxVeritatis 10.12.14 09:24 Сейчас в теме
В ЗУПе 2.5 раздел "процедуры и функции для обеспечения ввода даты как месяца" модуля "работа с диалогами". На других конфигурацих скорее всего примерно также, как написали выше ищите ПериодРегистрации)

Реквизит ПериодРегистрации - тип Дата. Поле ввода - тип Строка
Если коротко и вырезать лишнее будет примерно:
Процедура ПериодРегистрацииПриИзменении(Элемент)
	РаботаСДиалогами.ДатаКакМесяцПодобратьДатуПоТексту(Элемент.Значение, ПериодРегистрации);
	Элемент.Значение = РаботаСДиалогами.ДатаКакМесяцПредставление(ПериодРегистрации);
КонецПроцедуры

Процедура ПериодРегистрацииНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
	РаботаСДиалогами.НачалоВыбораИзСпискаПредставленияПериодаРегистрации(Элемент, СтандартнаяОбработка, ПериодРегистрации, ЭтаФорма);
КонецПроцедуры

Процедура ПериодРегистрацииОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

Процедура ПериодРегистрацииРегулирование(Элемент, Направление, СтандартнаяОбработка)
	ПериодРегистрации = ДобавитьМесяц(ПериодРегистрации, Направление);
	Элемент.Значение = РаботаСДиалогами.ДатаКакМесяцПредставление(ПериодРегистрации);
КонецПроцедуры

Процедура ПериодРегистрацииАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
	РаботаСДиалогами.ДатаКакМесяцАвтоПодборТекста(Текст, ТекстАвтоПодбора, СтандартнаяОбработка);
КонецПроцедуры

Процедура ПериодРегистрацииОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
	РаботаСДиалогами.ДатаКакМесяцОкончаниеВводаТекста(Текст, Значение, СтандартнаяОбработка);
КонецПроцедуры
Показать


Тут реализовано изменение стрелочками, а не списком, да и вручную можно ввести. Как по мне весьма удобней, чем крутить длинный список.

в надежде заработать немного поинтов :)

PS. Халявы не будет! Ваш покорный слуга Тёмный :)
MikeGorshkov; Stref75; maksimus753; Barney06; madonov; purgin; RodinMax; Nelli_A86; +8 Ответить
4. petrov_al 10 10.12.14 09:49 Сейчас в теме
А мне нравится, даже если и "велосипед". Типовые решения хороши, но иногда полезно написать что то и самому оригинальное.
kravtsovvg; Masikmasik; +2 Ответить
5. DAnry 9 17.12.14 15:19 Сейчас в теме
Есть варианты и получше. В том числе и на infostart'е
6. bluntschi 02.02.17 13:20 Сейчас в теме
Добрый день,
вы пишите
Не нужно больше ничего выдумывать, в реквизите - "Месяц" у нас уже хранится дата начала выбранного месяца :)


а как получить эту дату начала?

разобралась спасибо.
7. user603532_fan_club_chelsea 28.09.18 06:00 Сейчас в теме
спасибо. пригодился Ваш "Велосипед" :)
8. CepeLLlka 76 28.09.18 09:26 Сейчас в теме
(7)Ой спасибо :) Приятно слышать :)

Надо будет ещё заняться.. а то делаешь порой по работе велосипедов много разных и мопедов, а выкладывать лень :)
9. a_islam 16.01.20 15:43 Сейчас в теме
Спасибо заи Ваши публикации. Я делаю первые шаги, Не все получается, например, не срабатывает обработчик «НачалоВыбораИзСписка» для поля ввода с КнопкойВыпадающегоСписка. в обработчике написан код для составления списка ссылок на отобранные по неким параметрам документы. Если эти же коды прописать в процедуре "при открытии"-то все работает. Но в процессе работы ситуация может измениться и надо, чтоб в начале выбора этот список обновлялся. Спасибо.
Кстати, поле ввода создано по вашему методу и привязано к нужному реквизиту.
10. CepeLLlka 76 17.01.20 08:06 Сейчас в теме
(9)Могу на почту прислать отчет, где я использовал этот месяц, будет как пример, подойдёт?
11. a_islam 17.01.20 11:02 Сейчас в теме
Спасибо. Давйте, попробуем. Мне кажется, что не наступает событие "НачалоВыбораИзСписка" или не срабатывает обработчик этого события. Даже если в обработчике написать сообщение("Ура"); ничего не происходит. А почему? Также на форме, в свойствах данного поля ввода не активно "Спиок выбора", т.е. еслиб захотел что-то там создать, то не получится, т.к. кнопки там не активны. Может влияют какие-то настройки самой базы или платформы? a_islam@mail.ru
12. a_islam 17.01.20 11:03 Сейчас в теме
конечно в обработчике надо писать: Сообщить();
13. sergey781 16.04.20 14:30 Сейчас в теме
Пробовал разные варианты, везде какие-то ньюансы, глюки, неудобства, остановился на этом:
1. Кидаем саму дату на форму, РежимВыбораИзСписка = Да, КнопкаВыпадающегоСписка = Да, КнопкаВыбора = Нет, КнопкаРегулирования = Да
2.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	СформироватьСписокВыбораМесяца(Объект.ПериодРасчета, Элементы.ПериодРасчета);
КонецПроцедуры

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

&НаКлиенте
Процедура ПериодРасчетаОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ПериодРасчетаРегулирование(Элемент, Направление, СтандартнаяОбработка)
	лПериодРасчета 			= Объект.ПериодРасчета;
	Объект.ПериодРасчета 	= ДобавитьМесяц(лПериодРасчета, Направление);
	Если Год(лПериодРасчета) <> Год(Объект.ПериодРасчета) Тогда
		СформироватьСписокВыбораМесяца(Объект.ПериодРасчета, Элемент);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПериодРасчетаВыбратьИзСписка()
	ТекущийЭлемент 	= Элементы.ПериодРасчета;
	Shell 			= Новый COMОбъект("WScript.Shell"); 
	Shell.SendKeys("{F4}");
КонецПроцедуры

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

Показать


Вот как то так, прошу прощения, если вырезал что-то не так...
Прикрепленные файлы:
Светлый ум; dammit666; Henistaromin; +3 Ответить
14. Papilion 22.12.20 06:08 Сейчас в теме
Может кому-то пригодится. Есть общая форма "ВыборСтандартногоПериодаМесяц" и пр., а там уже ищете где используется и делаете по аналогии.
marku; eeeio; Amara; +3 Ответить
15. Amara 10.02.21 09:25 Сейчас в теме
Спасибо, мне пригодилось. Правда мне нужен был список годов - не более 5 лет вперед, а не месяцев. Получилось компактно и легко редактируемо.
17. user704573_pff12780 01.10.23 20:17 Сейчас в теме
у Автора не работает, если привязать реквизит, то ТипЗначения будет Дата, а на картинке строка. Не работает.
18. CepeLLlka 76 01.10.23 20:52 Сейчас в теме
(17)Публикации уже почти 10 лет, кому-то пригодилось даже, а вы считаете что что-то не работает..

P.S. Приложу файл с примером к этой публикации, чтобы вы смогли сами всё проверить и удостовериться.
19. user704573_pff12780 02.10.23 08:31 Сейчас в теме
(18) Если привязать реквизит, тогда в ТипЗначения будет дата и на форме будет вид даты, а не строки. Картинку я вложил, где видно, и удаление не доступно.
Прикрепленные файлы:
Оставьте свое сообщение