gifts2017

"Быстрый" выбор периода в журнале

Опубликовал mdbm (mdbm) в раздел Программирование - Практика программирования

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

Бывает пользователь хочет мне показать документ. Открывает журнал и начинает выбирать период. Я стою и смотрю и жду и трачу время лишь на то, чтобы дождаться пока пользователем будет выбран период журнала.

В итоге решил упростить процесс выбора периода.

Технология оказалось простой:

1. Функция глобального модуля

2. Кнопка на форме журнала.

Вот собственно сама функция:

Функция глВыбратьПериод(Конт) Экспорт
    Перем Выбор;
    Перем Позиция;
    СЗ=СоздатьОбъект("СписокЗначений");
    СЗ.ДобавитьЗначение("2008");
    СЗ.ДобавитьЗначение("2009");
    СЗ.ДобавитьЗначение("2010");
    СЗ.ДобавитьЗначение("");
   
    Для НомерМесяца=1 По 12 Цикл
        СЗ.ДобавитьЗначение("2009."+Формат(Дата(2009,НомерМесяца,1),"ДММММ"));
    КонецЦикла;
    СЗ.ДобавитьЗначение("");
    Для НомерМесяца=1 По 12 Цикл
        СЗ.ДобавитьЗначение("2010."+Формат(Дата(2010,НомерМесяца,1),"ДММММ"));
    КонецЦикла;
    рез=СЗ.ВыбратьЗначение(Выбор,"",Позиция,100,1);
    Если Рез=1 Тогда
        Если Позиция<=3 Тогда
            ДатаНачала    ="01.01."+Выбор;
            ДатаКонца    ="31.12."+Выбор;
        ИначеЕсли (Позиция>4)и(Позиция<17) Тогда
            ДатаНачала    =НачМесяца("01."+?(СтрДлина(Строка(Позиция-4))>1,Строка(Позиция-4),"0"+Строка(Позиция-4))+".2009");
            ДатаКонца    =КонМесяца(ДатаНачала);
        ИначеЕсли (Позиция>17) Тогда
            ДатаНачала    =НачМесяца("01."+?(СтрДлина(Строка(Позиция-17))>1,Строка(Позиция-17),"0"+Строка(Позиция-17))+".2010");
            ДатаКонца    =КонМесяца(ДатаНачала);
        КонецЕсли;
        Конт.УстановитьИнтервал(ДатаНачала,ДатаКонца,1);
    Иначе
        Возврат "";
    КонецЕсли;
КонецФункции

 

Теперь просто кидаем кнопку на форму любого журнала и в формуле кнопки прописываем вызов нашей функции:

глВыбратьПериод(Контекст)

И все.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей (ACE$) 09.12.09 20:41
1. Из меню немного неудобно выбирать в данном случае, слишком много позиций.
2. Можно сделать автозаполнение: т.е. текущий год, скажем, - 2; тогда п. 1 становится ненужным
2. Дмитрий Литовченко (kompas-dm) 10.12.09 10:44
3. dummy 10.12.09 12:36
гут, гут, удобно... немного модифицировал для пущей универсальности, с вашего позволения ;)

Функция глВыбратьПериод(Конт) Экспорт
	
	Перем Выбор, Позиция;
	
	СЗ=СоздатьОбъект("СписокЗначений");
	СЗ.ДобавитьЗначение("За весь период");
	СЗ.ДобавитьЗначение("……………………");
	СЗ.ДобавитьЗначение(ДатаГод(ТекущаяДата())-1);
	СЗ.ДобавитьЗначение(ДатаГод(ТекущаяДата()));
	
	Для Список = 3 по (СЗ.РазмерСписка()) Цикл
		СЗ.ДобавитьЗначение("……………………");
		Для НомерМесяца=1 По 12 Цикл 
			СЗ.ДобавитьЗначение(СокрЛП(СЗ.ПолучитьЗначение(Список)) + "." + Формат(Дата(СокрЛП(СЗ.ПолучитьЗначение(Список)),НомерМесяца,1),"ДММММ"));
		КонецЦикла;
	КонецЦикла;
	
	Рез = СЗ.ВыбратьЗначение(Выбор,"",Позиция,100,1);
	
	Если Рез = 1 Тогда
		Если (Позиция = 2) или (Позиция = 5) или (Позиция = 18) Тогда
			Возврат "";
		ИначеЕсли Позиция = 1 Тогда
			ДатаНачала = НачалоСтандартногоИнтервала();
			ДатаКонца = КонГода(ТекущаяДата());
		ИначеЕсли (Позиция > 2) и (Позиция < 5)  Тогда
			ДатаНачала = "01.01." + Прав(Выбор,2);
			ДатаКонца = "31.12." + Прав(Выбор,2);
		ИначеЕсли (Позиция > 5) и (Позиция < 19) Тогда 
			ДатаНачала = НачМесяца ("01." + ?(СтрДлина(Строка(Позиция-5)) > 1, Строка(Позиция-5), "0" + Строка(Позиция-5)) + "." + Лев(Выбор,4));
			ДатаКонца  = КонМесяца (ДатаНачала);
		Иначе 
			ДатаНачала = НачМесяца ("01." + ?(СтрДлина(Строка(Позиция-18)) > 1, Строка(Позиция-18), "0" + Строка(Позиция-18)) + "." + Лев(Выбор,4));
			ДатаКонца  = КонМесяца (ДатаНачала);
		КонецЕсли;
		Конт.УстановитьИнтервал(ДатаНачала,ДатаКонца,1);  
	Иначе
		Возврат "";
	КонецЕсли;
КонецФункции
...Показать Скрыть
4. Артур Аюханов (artbear) 10.12.09 14:51
Ищите на сайте "выбор периода" - есть превосходные и давным-давно реализованные варианты
5. mdbm (mdbm) 10.12.09 15:47
6. Илья (gucci76) 12.12.09 12:38
Реализация идеи заставляет изменять глобальник, а это нехорошо! Можно же без изменения обойтись! Для выкачивания денег из клиента это плюс, но что мешает использовать внешнюю обработку???!!!! Тогда надо только сделать кнопку на форме и это все изменения конфигурации!
7. Вик (1yh1) 18.12.09 12:19
>>Ищите на сайте "выбор периода" - есть превосходные и давным-давно >>реализованные вариант

Я искал ничего интереснее не нашёл
8. Dmitry The Wing (wing) 24.12.09 04:57
Мне это не кажется удобным, однако, могу посоветовать использовать FormEx, а именно его объект Сервис для уменьшения занимаемого экранного пространства этим меню, а именно - сделав выбор в виде дерева. Пояснять?
9. Neman Entorin (ne_en) 01.07.10 11:36
(8) можно и без FormEx, правда придется по каждому следующему пунту щелкать, а не оно само будет открываться, но зато без ВК.
10. Александр Рытов (Арчибальд) 01.07.10 11:51
(9) Формекс настолько прижился, что уже за ВК не считается :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа