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

10.12.14

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

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

6000 руб.

16.01.2015    61797    43    59    

80

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

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

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

5000 руб.

14.01.2016    54403    16    21    

42

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

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

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

2400 руб.

29.06.2020    16698    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10740    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9618    151    acces969    31    

118

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

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

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

1 стартмани

05.07.2022    3666    kalyaka    2    

27

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

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

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

3600 руб.

29.04.2022    12082    1    5    

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

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

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

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

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

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

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

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


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

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

PS. Халявы не будет! Ваш покорный слуга Тёмный :)
Stref75; maksimus753; Barney06; madonov; purgin; RodinMax; Nelli_A86; +7 Ответить
4. petrov_al 10 10.12.14 09:49 Сейчас в теме
А мне нравится, даже если и "велосипед". Типовые решения хороши, но иногда полезно написать что то и самому оригинальное.
kravtsovvg; Masikmasik; +2 Ответить
5. DAnry 8 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 58 28.09.18 09:26 Сейчас в теме
(7)Ой спасибо :) Приятно слышать :)

Надо будет ещё заняться.. а то делаешь порой по работе велосипедов много разных и мопедов, а выкладывать лень :)
9. a_islam 16.01.20 15:43 Сейчас в теме
Спасибо заи Ваши публикации. Я делаю первые шаги, Не все получается, например, не срабатывает обработчик «НачалоВыбораИзСписка» для поля ввода с КнопкойВыпадающегоСписка. в обработчике написан код для составления списка ссылок на отобранные по неким параметрам документы. Если эти же коды прописать в процедуре "при открытии"-то все работает. Но в процессе работы ситуация может измениться и надо, чтоб в начале выбора этот список обновлялся. Спасибо.
Кстати, поле ввода создано по вашему методу и привязано к нужному реквизиту.
10. CepeLLlka 58 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 58 01.10.23 20:52 Сейчас в теме
(17)Публикации уже почти 10 лет, кому-то пригодилось даже, а вы считаете что что-то не работает..

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