helpf.pro
Регистрация

Программно изменить период в форме списка документа

mov68
14.04.2010 15:29Прочитано: 28102
Как программно изменить период отображения документов в форме списка документа?
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
14.04.2010 15:41Ответ № 1
Изменение периода, это обычный отбор по реквизиту дата в форме списка, смотри тут
Только у тебя реквизит Дата, вид отбора Интервал, и далее указываешь, ДатаС ДатаПо
mov68
14.04.2010 16:30Ответ № 2
Не... нужно не отбором, а установкой периода:
Нашел
Код 1C v 8.х
 НастройкаПериода = ЭлементыФормы.Список.СтандартныйПериод;
НастройкаПериода.УстановитьПериод(НачалоДня(ДокСсылка.Дата), НастройкаПериода.ПолучитьДатуОкончания());

, но это работает только при очередном открытии формы, а чтобы сразу?
E_Migachev
14.04.2010 17:35Ответ № 3
так прописать в форме, в процедуре при открытии и все...
mov68
14.04.2010 17:43Ответ № 4
Задача следующая: Сканер передает номер документа, нужно на нем спозиционироваться, если документ попал в период журнала, то все работает замечательно, если нет, необходимо программно изменить период уже открытого списка документов (отборы не подходят, т.к. у пользователя уже могут стоять отборы), поэтому при открытии не подходит, нужно программно.
E_Migachev
14.04.2010 17:58Ответ № 5
Тогда нужно прописывать это в обработке сканера, чтобы перед позиционированием устанавливался период.
mov68
15.04.2010 09:37Ответ № 6
Это понятно, можно пример изменения периода уже открытого списка документов.
E_Migachev
15.04.2010 10:37Ответ № 7
сложно дать пример не видя как там устроено, смотри как обработка сканера обращается к этому списку, так же и обращайся.
mov68
15.04.2010 10:51Ответ № 8
Код 1C v 8.х
 Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник = "Сканер" Тогда
ДокСсылка=мирПолучитьДокументПоШтрихКоду(Данные);
Если ТипЗнч(ДокСсылка)=Тип("ДокументСсылка.ЗаказНаряд") Тогда
НастройкаПериода = ЭлементыФормы.Список.СтандартныйПериод;
Если НачалоДня(НастройкаПериода.ДатаНачала) > НачалоДня(ДокСсылка.Дата) Тогда
НастройкаПериода.УстановитьПериод(НачалоДня(ДокСсылка.Дата), НастройкаПериода.ПолучитьДатуОкончания());
КонецЕсли;
ЭлементыФормы.Список.ТекущаяСтрока=ДокСсылка;
лОбъект=ДокСсылка.ПолучитьОбъект();
Форма=лОбъект.ПолучитьФорму("ФормаДокумента");
Если Форма.Открыта() Тогда
Форма.Активизировать();
Иначе
Форма.Открыть();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Нормально отрабатывает, если документ в периоде, если нет, то документ открывается, но в списке на него не переходит
E_Migachev
15.04.2010 10:59Ответ № 9
Так ссылку ты на документ получаешь ДокСсылка=мирПолучитьДокументПоШтрихКоду(Данные);
Предлагаю без условий сразу писать:
Код 1C v 8.х
 ДокСсылка=мирПолучитьДокументПоШтрихКоду(Данные);
Если ТипЗнч(ДокСсылка)=Тип("ДокументСсылка.ЗаказНаряд") Тогда
НастройкаПериода = ЭлементыФормы.Список.СтандартныйПериод;
// Сделаем дата начала - дата документа минус день
НастройкаПериода.УстановитьПериод(ДокСсылка.Дата-86400, НастройкаПериода.ПолучитьДатуОкончания());
ЭлементыФормы.Список.ТекущаяСтрока=ДокСсылка;
лОбъект=ДокСсылка.ПолучитьОбъект();
Форма=лОбъект.ПолучитьФорму("ФормаДокумента");
Если Форма.Открыта() Тогда
Форма.Активизировать();
Иначе
Форма.Открыть();
КонецЕсли;
КонецЕсли;
mov68
15.04.2010 13:49Ответ № 10
Это мелочи, главное что метод УстановитьПериод срабатывает только при следующем открытии списка документов, т.е. сразу , если документ за пределами периода, позиционирования не происходит
E_Migachev
15.04.2010 15:48Ответ № 11
Слушай, а попробуй обновить форму со списком документов
Через:
Код 1C v 8.х
  Форма.Обновить(); 
// или
ЭтаФорма.Обновить();


Добавил в Ответы
mov68
15.04.2010 16:43Ответ № 12
ЭтаФорма.Обновить() - не срабатывает

Если закрыть список и потом открыть заново, то стоит новый период, а так функция Обновить() период не меняет

пришлось все же:
Код 1C v 8.х
 ДокументСписок.Отбор.Дата.ВидСравнения=ВидСравнения.ИнтервалВключаяГраницы;
ДокументСписок.Отбор.Дата.Значение=ДокументСписок.Отбор.Дата.Значение;
ДокументСписок.Отбор.Дата.ЗначениеС=НачалоДня(ДокСсылка.Дата);
ДокументСписок.Отбор.Дата.ЗначениеПо=ДокументСписок.Отбор.Дата.ЗначениеПо;
ДокументСписок.Отбор.Дата.Установить();

так работает
E_Migachev
15.04.2010 18:27Ответ № 13
Похоже, что это единственный рабочий способ )
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.