Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программное изменение интервала журнала
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
vadim007
Проблема следующая: есть некая обработка, в ней задается период с НачДата по КонДата.
Затем нужно выбрать документы для этой обработки, для чего используется следующий код:
Док = СоздатьОбъект("Документ");
Док.ВидыДляВыбора(СтрВиды);
Если Док.Выбрать("Выберите документ") = 1 Тогда
.......
КонецЕсли;

Открывается журнал выбора документов, но у этого журнала интервал установлен такой, какой задан в параметрах системы, вкладка Журналы.
А хотелось-бы (очень!), чтобы интервал журнала был такой-же, как и у обработки.
Как программно изменить интервал открытого журнала документов?
MATEVI
УстановитьИнтервал(<?>,,);
Синтаксис:
УстановитьИнтервал(<ДатаНач>,<ДатаКон>,<ФлагИзменения>)
Назначение:
Установить интервал журнала.
Параметры:
<ДатаНач> - дата начала интервала журнала;
<ДатаКон> - дата конца интервала журнала.
<ФлагИзменения> - необязательный параметр. Этим флагом регулируется возможность интерактивного изменения интервала журнала. 1 - пользователь может изменить интервал журнала интерактивно, 0 - пользователь не может интерактивно изменить интервал журнала.
Замечание:
Метод доступен только в контексте Модуля формы журнала.
vadim007
Цитата(MATEVI @ 26.11.12, 16:42) необходимо зарегистрироваться для просмотра ссылки
Метод доступен только в контексте Модуля формы журнала.

А как этот контекст получить из внешней обработки?
MATEVI
Ну как то приблизительно так
В обработке
Процедура ОткрытьЖурн()
    Сп=СоздатьОбъект("СписокЗначений");
    Сп.ДобавитьЗначение(НачМесяца(ТекущаяДата()),"Дата");
    Сп.ДобавитьЗначение(КонМесяца(ТекущаяДата()),"Дата");
    ОткрытьФорму("Журнал.АвансовыеОтчеты",Сп)
КонецПроцедуры

В журнале
Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда
    Сп=Форма.Параметр;
    ДатаНач = Сп.получитьзначение(1,"Дата");
    ДатаКон = Сп.получитьзначение(2,"Дата");
    УстановитьИнтервал(ДатаНач,ДатаКон,);
КонецЕсли;
Cthulhu
Цитата(vadim007 @ 27.11.12, 8:31) необходимо зарегистрироваться для просмотра ссылки
А как этот контекст получить из внешней обработки?

Перем тКонт;  // описание переменной, в которую будем получать контекст открытой формы (в принципе - любой)
ОткрытьФорму("Журнал.АвансовыеОтчеты",тКонт); // собственно получение в переменную контекста открытой формы
тКонт.УстановитьИнтервал(ВыбНачПериода,ВыбКонПериода);  // ну и использование контекста открытой формы


ЗЫ: так, на всякий пожарный - ответ на незаданный вопрос "как активизировать в открытом журнале нужный документ?". ну мало ли, тоже на тему использования контекста из внешней обработки... в продолжение кода, приведенного віше (и, допустим, (ссілка на) нужній документ - в переменной "тДокум" уже лежит):
тКонт.УстановитьИнтервал(Мин(тДокум.ДатаДок,тКонт.НачалоИнтервала()),Макс(тДокум.ДатаДок,тКонт.КонецИнтервала()));
тТхт=""; Пока тКонт.ТекущийДокумент<>тДокум Цикл
  Если ПустоеЗначение(тТхт)<>1 Тогда Если Найти("Нет,Отмена",Вопрос(тТхт,"Да+Нет+Отмена",1))<>0 Тогда Прервать КонецЕсли КонецЕсли;
  тКонт.АктивизироватьОбъект(тДокум); тТхт="Повторить попытку активизации Документа """+тДокум+"""?..";
КонецЦикла;
//Если тКонт.ТекущийДокумент<>тДокум Тогда  // так, на всякий случай:
//  Сообщить("Документ """+тДокум+""" не активизирован...","");
//  //Предупреждение("Документ """+тДокум+""" не активизирован...",12);
//КонецЕсли;
vadim007
Цитата(MATEVI @ 27.11.12, 11:48) необходимо зарегистрироваться для просмотра ссылки
Ну как то приблизительно так

Делаю обработку для стандартных конфигураций. А в вашем случае конфа будет уже нестандартной.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.