|
v7: Как понять, что пользователь закрыл таблицу, сформированную отчетом? | ☑ | ||
---|---|---|---|---|
0
Double_Medved
26.06.14
✎
08:14
|
Добрый день! Сделал что-то вроде отчета в режиме онлайн, чтобы данные сами обновлялись, ввел нехитрую строку Форма.ОбработкаОжидания("Сформировать",3)
Работает, только теперь не могу остановить эту ужасную машину. То есть при закрытии самой таблицы через 3 или менее секунд открывается новая, и это продолжается пока не будет закрыта сама форма. Собственно вопрос: как можно отловить то, что пользователь закрыл таблицу? Пробовал Если ПустоеЗначение(Таб)=1 , но не помогает, таблица насколько я понимаю при закрытии не рушится, просто не показывается. |
|||
1
Мимохожий Однако
26.06.14
✎
08:19
|
Код секретный?
|
|||
2
Double_Medved
26.06.14
✎
08:23
|
Просто не хотел нагружать форумчан полотном
Процедура Запустить() Форма.ОбработкаОжидания("Сформировать",3); КонецПроцедуры Процедура Сформировать() Если ПустоеЗначение(Таб)=0 Тогда СтандартнаяОбработка = 0; СправочникМонтажи = СоздатьОбъект("Справочник.Монтажи"); ДатаНач = НачМесяца(МесяцВедомости); ДатаТек = НачМесяца(МесяцВедомости); ДатаКон = КонМесяца(МесяцВедомости); Если ПустоеЗначение(Таб)=1 Тогда //Обновление таблицы, очищаем и заполняем снова Таб = СоздатьОбъект("Таблица"); Иначе Таб.Очистить(); КонецЕсли;//ПустоеЗначение(Таб)=1 R=1; C=1; Пока ДатаТек <= ДатаКон Цикл Таб.ВывестиСекцию("Строка"); ОблОкрашивания = Таб.Область("R"+Строка(C)+"C"+Строка(R)+":"+"R"+Строка(C)+"C"+Строка(R)); ДеньНедели = НомерДняНедели(ДатаТек); СправочникМонтажи = СоздатьОбъект("Справочник.Монтажи"); //тут будем искать и перебирать элементы справочника монтажи СправочникМонтажи.ВыбратьЭлементыПоРеквизиту("ДатаМонтажа",ДатаТек,0,0); ПерваяПоловинаДня = 0; Пока СправочникМонтажи.ПолучитьЭлемент() = 1 Цикл Если ((СправочникМонтажи.ПоловинаДня = 1) и (СправочникМонтажи.Отменен = 0) и (ПустоеЗначение(СправочникМонтажи.Заявка)=0)) или ((СправочникМонтажи.ПоловинаДня = 1) и (СправочникМонтажи.Отменен = 0) и (ПустоеЗначение(СправочникМонтажи.Заявка)=1) и (ПустоеЗначение(СправочникМонтажи.Контрагент)=0)) Тогда ПерваяПоловинаДня = 1; КонецЕсли; КонецЦикла; СправочникМонтажи.ВыбратьЭлементыПоРеквизиту("ДатаМонтажа",ДатаТек,0,0); ВтораяПоловинаДня = 0; Пока СправочникМонтажи.ПолучитьЭлемент() = 1 Цикл Если ((СправочникМонтажи.ПоловинаДня = 2) и (СправочникМонтажи.Отменен = 0) и (ПустоеЗначение(СправочникМонтажи.Заявка)=0)) или ((СправочникМонтажи.ПоловинаДня = 2) и (СправочникМонтажи.Отменен = 0) и (ПустоеЗначение(СправочникМонтажи.Заявка)=1) и (ПустоеЗначение(СправочникМонтажи.Контрагент)=0)) Тогда ВтораяПоловинаДня = 1; КонецЕсли; КонецЦикла; Если ПерваяПоловинаДня = 1 Тогда ПоловинаДня = "Первая половина дня"; Таб.ВывестиСекцию("ПоловинаДня"); C = C + 1; СправочникМонтажи.ВыбратьЭлементыПоРеквизиту("ДатаМонтажа",ДатаТек,0,0); Пока СправочникМонтажи.ПолучитьЭлемент() = 1 Цикл Если (ПустоеЗначение(СправочникМонтажи.Заявка)=0) и (СправочникМонтажи.Отменен=0) и (СправочникМонтажи.ПоловинаДня=1) Тогда Монтаж = СправочникМонтажи.Заявка; ИнформацияОМонтаже = ""; ИнформацияОМонтаже = ИнформацияОМонтаже + Строка(СправочникМонтажи.Код) + РазделительСтрок + Строка(СправочникМонтажи.Заявка.Проект.Наименование) + РазделительСтрок + СправочникМонтажи.Заявка.Контрагент + РазделительСтрок + СправочникМонтажи.Заявка.АдресМонтажа; ИнформацияОМонтаже = СокрЛП(ИнформацияОМонтаже); ИнформацияОМонт = СправочникМонтажи.ТекущийЭлемент(); Оборудование=""; Заявка = СправочникМонтажи.Заявка; Заявка.ВыбратьСтроки(); Пока Заявка.ПолучитьСтроку()=1 Цикл Оборудование = Оборудование + Заявка.Номенклатура + " "+ Заявка.Количество+", "; КонецЦикла; Оборудование = Лев(Оборудование,СтрДлина(Оборудование)-2); Оборудование = Оборудование + РазделительСтрок + СправочникМонтажи.Комментарий; Монтажники = ""; ТаблМонтажников = СоздатьОбъект("ТаблицаЗначений"); Если ТипЗначенияСтр(ЗначениеИзСтроки(СправочникМонтажи.СтрокаМонтажников))="ТаблицаЗначений" Тогда ТаблМонтажников.Загрузить(ЗначениеИзСтроки(СправочникМонтажи.СтрокаМонтажников)); КонецЕсли; ТаблМонтажников.ВыбратьСтроки(); Пока ТаблМонтажников.ПолучитьСтроку()=1 Цикл Монтажники = Монтажники + ТаблМонтажников.Сотрудник + " "; КонецЦикла; Таб.ВывестиСекцию("ИнформацияОМонтаже"); C = C + 3; КонецЕсли; КонецЦикла; //только по контрагенту //начало СправочникМонтажи.ВыбратьЭлементыПоРеквизиту("ДатаМонтажа",ДатаТек,0,0); Пока СправочникМонтажи.ПолучитьЭлемент() = 1 Цикл Если (ПустоеЗначение(СправочникМонтажи.Заявка)=1) и (СправочникМонтажи.Отменен=0) и (СправочникМонтажи.ПоловинаДня=1) и (ПустоеЗначение(СправочникМонтажи.Контрагент)=0) Тогда Монтаж = СправочникМонтажи.Заявка; ИнформацияОМонтаже = ""; ИнформацияОМонтаже = ИнформацияОМонтаже +СправочникМонтажи.Проект + РазделительСтрок + СправочникМонтажи.Контрагент + РазделительСтрок + " ..."; ИнформацияОМонтаже = СокрЛП(ИнформацияОМонтаже); ИнформацияОМонт = СправочникМонтажи.ТекущийЭлемент(); Оборудование=""; Заявка = СправочникМонтажи.Заявка; Заявка.ВыбратьСтроки(); Пока Заявка.ПолучитьСтроку()=1 Цикл Оборудование = Оборудование + Заявка.Номенклатура + " "+ Заявка.Количество+", "; КонецЦикла; Оборудование = Лев(Оборудование,СтрДлина(Оборудование)-2); Оборудование = Оборудование + РазделительСтрок + СправочникМонтажи.Комментарий; Монтажники = ""; ТаблМонтажников = СоздатьОбъект("ТаблицаЗначений"); Если ТипЗначенияСтр(ЗначениеИзСтроки(СправочникМонтажи.СтрокаМонтажников))="ТаблицаЗначений" Тогда ТаблМонтажников.Загрузить(ЗначениеИзСтроки(СправочникМонтажи.СтрокаМонтажников)); КонецЕсли; ТаблМонтажников.ВыбратьСтроки(); Пока ТаблМонтажников.ПолучитьСтроку()=1 Цикл Монтажники = Монтажники + ТаблМонтажников.Сотрудник + " "; КонецЦикла; Таб.ВывестиСекцию("ИнформацияОМонтаже"); C = C + 3; КонецЕсли; КонецЦикла; //конец КонецЕсли; Если ВтораяПоловинаДня = 1 Тогда ПоловинаДня = "Вторая половина дня"; Таб.ВывестиСекцию("ПоловинаДня"); C = C + 1; СправочникМонтажи.ВыбратьЭлементыПоРеквизиту("ДатаМонтажа",ДатаТек,0,0); Пока СправочникМонтажи.ПолучитьЭлемент() = 1 Цикл Если (ПустоеЗначение(СправочникМонтажи.Заявка)=0) и (СправочникМонтажи.Отменен=0) и (СправочникМонтажи.ПоловинаДня=2) Тогда Монтаж = СправочникМонтажи.Заявка; ИнформацияОМонтаже = ""; ИнформацияОМонтаже = ИнформацияОМонтаже + Строка(СправочникМонтажи.Код) + РазделительСтрок + Строка(СправочникМонтажи.Заявка.Проект.Наименование) + РазделительСтрок + СправочникМонтажи.Заявка.Контрагент + РазделительСтрок + СправочникМонтажи.Заявка.АдресМонтажа; ИнформацияОМонтаже = СокрЛП(ИнформацияОМонтаже); ИнформацияОМонт = СправочникМонтажи.ТекущийЭлемент(); Оборудование=""; Заявка = СправочникМонтажи.Заявка; Заявка.ВыбратьСтроки(); Пока Заявка.ПолучитьСтроку()=1 Цикл Оборудование = Оборудование + Заявка.Номенклатура + " "+ Заявка.Количество+", "; КонецЦикла; Оборудование = Лев(Оборудование,СтрДлина(Оборудование)-2); Оборудование = Оборудование + РазделительСтрок + СправочникМонтажи.Комментарий; Монтажники = ""; ТаблМонтажников = СоздатьОбъект("ТаблицаЗначений"); Если ТипЗначенияСтр(ЗначениеИзСтроки(СправочникМонтажи.СтрокаМонтажников))="ТаблицаЗначений" Тогда ТаблМонтажников.Загрузить(ЗначениеИзСтроки(СправочникМонтажи.СтрокаМонтажников)); КонецЕсли; ТаблМонтажников.ВыбратьСтроки(); Пока ТаблМонтажников.ПолучитьСтроку()=1 Цикл Монтажники = Монтажники + ТаблМонтажников.Сотрудник + " "; КонецЦикла; Таб.ВывестиСекцию("ИнформацияОМонтаже"); C = C + 3; КонецЕсли; КонецЦикла; //Только по контрагенту //начало СправочникМонтажи.ВыбратьЭлементыПоРеквизиту("ДатаМонтажа",ДатаТек,0,0); Пока СправочникМонтажи.ПолучитьЭлемент() = 1 Цикл Если (ПустоеЗначение(СправочникМонтажи.Заявка)=1) и (СправочникМонтажи.Отменен=0) и (СправочникМонтажи.ПоловинаДня=2) и (ПустоеЗначение(СправочникМонтажи.Контрагент)=0) Тогда Монтаж = СправочникМонтажи.Заявка; ИнформацияОМонтаже = ""; ИнформацияОМонтаже = ИнформацияОМонтаже + СправочникМонтажи.Проект + РазделительСтрок + СправочникМонтажи.Контрагент + РазделительСтрок +"... "; ИнформацияОМонтаже = СокрЛП(ИнформацияОМонтаже); ИнформацияОМонт = СправочникМонтажи.ТекущийЭлемент(); Оборудование=""; Заявка = СправочникМонтажи.Заявка; Заявка.ВыбратьСтроки(); Пока Заявка.ПолучитьСтроку()=1 Цикл Оборудование = Оборудование + Заявка.Номенклатура + " "+ Заявка.Количество+", "; КонецЦикла; Оборудование = Лев(Оборудование,СтрДлина(Оборудование)-2); Оборудование = Оборудование + РазделительСтрок + СправочникМонтажи.Комментарий; Монтажники = ""; ТаблМонтажников = СоздатьОбъект("ТаблицаЗначений"); Если ТипЗначенияСтр(ЗначениеИзСтроки(СправочникМонтажи.СтрокаМонтажников))="ТаблицаЗначений" Тогда ТаблМонтажников.Загрузить(ЗначениеИзСтроки(СправочникМонтажи.СтрокаМонтажников)); КонецЕсли; ТаблМонтажников.ВыбратьСтроки(); Пока ТаблМонтажников.ПолучитьСтроку()=1 Цикл Монтажники = Монтажники + ТаблМонтажников.Сотрудник + " "; КонецЦикла; Таб.ВывестиСекцию("ИнформацияОМонтаже"); C = C + 3; КонецЕсли; КонецЦикла; //конец КонецЕсли; C = C + 1; ДатаТек = ДатаТек +1; КонецЦикла; Таб.ПараметрыСтраницы(1,,,0,0,0,0,,,1,,); Таб.ТолькоПросмотр(1); Таб.Показать(,,0); КонецЕсли; КонецПроцедуры //Сформировать() |
|||
3
Мимохожий Однако
26.06.14
✎
08:42
|
Попробуй разместить таблицу на форме. Еще как я бы подсмотрел как в типовых отчетах работает кнопка Обновить.
|
|||
4
Мимохожий Однако
26.06.14
✎
08:44
|
У таблицы есть метод Очистить() вместо СоздатьОбъект("Таблица")
|
|||
5
Мимохожий Однако
26.06.14
✎
08:45
|
Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда
Таб = СоздатьОбъект("Таблица"); Иначе Таб.Очистить(); КонецЕсли; |
|||
6
Double_Medved
26.06.14
✎
08:50
|
(3)Да в том-то и дело, что в типовых на кнопку обновить надо нажимать, а я хочу в реал тайме обновлять. Про то как разместить таблицу на форме это здравая идея, теперь буду думать как это сделать
|
|||
7
Double_Medved
26.06.14
✎
09:45
|
Нашел пример размещения таблицы на форме http://infostart.ru/public/17025/
|
|||
8
doctorzlo
26.06.14
✎
10:16
|
Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 0
Тогда Сообщить("Не получилось загрузить FormEx.DLL ..."); Иначе ИмяТаб=""; Сервис=СоздатьОбъект("Сервис"); СпТ=Сервис.СписокТаблиц(); КоличествоОткрытыхТаблиц=СпТ.РазмерСписка(); Если КоличествоОткрытыхТаблиц>0 Тогда Для ы=1 По КоличествоОткрытыхТаблиц Цикл ТекТаб=СпТ.ПолучитьЗначение(ы,ИмяТаб); Сообщить(ИмяТаб); КонецЦикла; Иначе Предупреждение("Нет открытых таблиц",5); КонецЕсли; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |