Диалоги выбора периода для 1С версий 8.3 и 7.7

Представлены два диалога для выбора интервала дат по календарю в составе демонстрационных конфигураций 1С8.3 и 1С7.7

Диалог для версии 1С 7.7

Исторически, сначала был разработан диалог ввода периода для 1С 7.7. Причиной тому послужила утомляемость, проявлявшая себя после многократного использования стандартного диалога. За основу была выбрана форма годичного календаря.

На форму добавлено контекстное меню для выбора некоторых наиболее востребованных периодов. Для работы этого диалога требуются внешние компоненты FormEx и SpreadSheet(Йоксель). Выкладываю упакованную демонстрационную базу данных для версии 7.7. Все включенное в ее состав необходимо, ничего лишнего.

Для выбора произвольного периода дат, сначала нажимается-отпускается клавиша Shift, прощелкивается левой кнопкой мыши (ЛКМ) начальная дата периода; потом опять же ЛКМ прощелкивается конечная дата периода. В зависимости от опции в контекстном меню «Показать выделенный период перед выбором», если она выставлена, период сначала подсвечивается, а потом дополнительный щелчок ЛКМ по выделенному периоду завершает операцию. При неустановленной опции выбор периода осуществляется сразу же, как только будет прощелкнута конечная дата.

Начало периода можно выставить и из контекстного меню, если покажется за-умным использование клавиши Shift.

Диалог для версии 1С 8.3

В версию 1С 8.3  диалог был перенесен из 7.7 почти без изменений, но учтены некоторые стандартные возможности 1С 8.3 (возможность настройки варианта периода). Для удобства добавлены кнопки переходов на предыдущий или следующий период (удобно, если это какое-то энное количество дней, но не год, не квартал, не месяц и не неделя).

Произвольный период выбирается так: правой кнопкой мыши выделяется начальная дата периода, левой — конечная дата периода и на этом диалог закрывается.

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

Реализован диалог аки общая форма, а не обработка (дико извиняюсь).

Праздничные дни и переносы дат отмечаются в регистре сведений (пример есть).

В демонстрационной конфигурации заведена общая команда, которую достаточно вывести на форму списка документов, регистра накопления (сведений) или форму отчета. Возможно, у вас появятся более удачные варианты использования диалога. Мне, в свое время, на ум пришел именно такой, дабы минимизировать в дальнейшем свои усилия.

В силу всего вышеперечисленного, затрудняюсь представить диалог как внешний отчет.

Проверено под Win7 в 1С v8.3.7(5) на управляемых формах.

7 Comments

  1. romasna

    Хочу в виде комментария сделать небольшое дополнение. В диалогах можно не только выбирать произвольные периоды двумя кликами по датам, но доступны и все стандартные периоды в один клик: год — по заголовку года; месяц — по заголовку месяца; кварталы, полугодия, 9 месяцев — все это кликабельно. Так что, для бухгалтера это зачастую один клик при выборе периода.

    Reply
  2. CheBurator

    хорошая формочка (на Исе есть и другие похожие для быстрого выбора периодов) — вот еще бы ее как-то перелопределить чтобы она вызывалось при жмаке на любую педальку даты…

    Reply
  3. vcv

    Перехватить системные кнопки выбора периода в журналах можно с помощью RWidjets

    Для прочих кнопок можно попробовать перехватить FormEx какое-нибудь ПослеСозданияФормы, в нём перебрать кнопки на форме и заменить в них формулы.

    Формула

    Синтаксис:

    Формула

    Назначение:

    Доступ к значению формулы атрибута формы. Атрибут для чтения/записи.

    ПРИМЕР:

    АтрФормы = СоздатьОбъект(»АтрибутФормы»);

    АтрФормы.УстановитьАтрибут(Форма,10);

    Если ПустоеЗначение(АтрФормы.Формула)=1 Тогда

    АтрФормы.Формула = »#Закрыть»;

    КонецЕсли;
    Reply
  4. CheBurator

    (3) спсб, руки дойдут — попробую

    Reply
  5. CheBurator

    (3) а как вот сделать «по умолчанию» чтобы при выборе даты в реквизите формы — ничего не программировать ДЛЯ КАЖДОЙ ФОРМЫ, а чтобы как-то «глобально» обеспечить вызов этого календарика для любых полей на формах с реквизитом «дата»..?

    Reply
  6. romasna

    (5) Насколько я осведомлен, такое возможно отчасти, извратившись во внешних компонентах, реализовать для версии 7.7. И такие компоненты уже названы в (3). Но для версии 1с8? Не встречал решения. Собственно, никогда и не искал. Зачем во все места тыкать такой громоздкий календарь? Для выбора периода — да, удобно. Но для выбора отдельной даты прекрасно подходит и штатный, аккуратный, небольшой календарь. Это мое личное мнение…

    Для выбора периодов в 1С8 в журналах, отчетах и иже с ними, я уже привел в конфигурации пример общей команды, которую выбросить на форму — секунда дела. Конечно, такой подход никак не упрощает переделку типовых конфигураций. Но именно этого я и старался бы избежать, доведись мне сопровождать на восьмерке типовые. Ну, разве что, и в самом деле можно где-то как-то заместо встроенного календаря подсунуть этот (обсуждаемый) перед началом выбора «ничего не программируя», т.е. не меняя существенно конфигурацию.

    Reply
  7. vcv

    (5) Если конфигурация перепаханная (а для 7.7, подозреваю, других не осталось), ни кто не мешает во все формы воткнуть что-то типа такого один раз потратив полдня:

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

    А в глобальнике проверять тип элемента диалога тем же FormEx и обрабатывать как надо.

    У меня таким образом отдельная форма открываются, если поле ввода Справочник.Контрагенты названо «Производитель». По F4 в номере документа можно выбрать префикс номера. И тому подобное. И на надо в каждой форме сложную процедуру ПриНачалеВыбораЗначения. Она типовая, с вызовом глобальной процедуры. Максимум, в ней пара эксклюзивных для этой формы полей и опять глПриНачалеВыбораЗначения в ветке Иначе.

    Reply

Leave a Comment

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