|
v7: Непонятка - приоткрытии внешнего отчета параметр в форме читается через раз | ☑ | ||
---|---|---|---|---|
0
Vladal
21.12.11
✎
13:19
|
Релиз 7.70.027.
Из одной внешней обработки вызываю вторую. Делаю так: в первой: .... Параметры.Установить("СтрокаКолонок","ТМЦ, Цена"); ОткрытьФорму("Отчет", сп, "ОбработкаТЗ.ert"); Во второй, ОБработкаТЗ.ert которая: Процедура ПриОткрытии() Сп = Форма.Параметр; ... Вот тут-то Форма.Параметр и пусто. Отладчик говорит, что в первой обработке Параметры - список значений, размер списка 7 элементов, даёт его просмотреть по Параметры.ВыбратьЗначение(1) А во второй как-то через раз - то пусто, то есть Соответственно, если параметр пусто получается, то не работает. Как отловить или из-за чего это может быть? |
|||
1
Vladal
21.12.11
✎
13:20
|
упс, пропустьил строку: сп = Параметры
|
|||
2
Vladal
21.12.11
✎
13:27
|
Правильный вариант:
Параметры.Установить("СтрокаКолонок","ТМЦ, Цена"); сп = Параметры ОткрытьФорму("Отчет", сп, "ОбработкаТЗ.ert"); .... во второй обработке: Процедура ПриОткрытии() Сп = Форма.Параметр; Сообщить(Сп.размерСписка) - либо сообщает размер (7 элементов) либо ругается "Поле агрегатного объекта не обнаружено", это если параметр формы не прочитался. |
|||
3
1Сергей
21.12.11
✎
13:28
|
(2) Сообщить(Сп.размерСписка())
|
|||
4
1Сергей
21.12.11
✎
13:30
|
и для чего такой изврат, если достаточно:
Параметры=создатьОбъект("СписокЗначений"); Параметры.Установить("СтрокаКолонок","ТМЦ, Цена"); ОткрытьФорму("Отчет", Параметры, "ОбработкаТЗ.ert"); & |
|||
5
Vladal
21.12.11
✎
13:41
|
Да то изврат еще тот. Там список дальше работает. И наверно, чтобы зафиксировать его и копируется он в Параметры
|
|||
6
Vladal
21.12.11
✎
13:42
|
Суть в том, что этот список всегда заполнен (Сообщить() сообщает его размер до вызова обработки), а в параметры он не всегда попадает - там "соощить" иногда вываливается в ошибку
|
|||
7
dk
21.12.11
✎
13:44
|
ОткрытьФормуМодально
|
|||
8
NS
21.12.11
✎
13:46
|
У тебя сп - ссылка на Параметры.
К моменту входа в обработку время жизни "параметры" уже закончилось. Выход - сделать "параметры" переменной модуля формы. |
|||
9
1Сергей
21.12.11
✎
13:47
|
(6) не понял. Ты где проверяешь, в вызываемой обработке или в вызывающей?
|
|||
10
NS
21.12.11
✎
13:47
|
Либо передавать не сп, а параметры.
|
|||
11
Vladal
21.12.11
✎
13:52
|
(8) Сделано, в первой строке: Перем Сп, Параметры, Таб;
|
|||
12
Vladal
21.12.11
✎
13:52
|
(9) А обеих. Перед вызовом ОткрытьФорму и после вызова Форма.Параметр
|
|||
13
1Сергей
21.12.11
✎
13:56
|
(12) Избавься вообще от Сп.
И: ОткрытьФорму(<?>,,) Синтаксис: ОткрытьФорму(<ОписательОбъекта>,<КонтекстФормы>,<ИмяФайла>) Назначение: Открывает визуальную форму внешнего отчета. Возвращает: 1 - если действие выполнено, 0 - иначе. Параметры: <ОписательОбъекта> - строковое выражение. ''Отчет''; <КонтекстФормы> - имя переменной, куда можно задать значение любого типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как атрибут Форма.Параметр. После исполнения данного метода система вернет в данную переменную контекст открытой формы (необязателен). <ИмяФайла> - cтроковое выражение - полное имя файла внешнего отчета. Замечание: Пока форма открыта, тип значения параметра <КонтекстФормы> равен 100, когда закрыта - 0. на последнее предложение обрати внимание |
|||
14
Ёпрст
21.12.11
✎
13:58
|
(0) где-то еще переопределяешь Параметры свои..
Или есть такой реквизит формы. |
|||
15
Vladal
21.12.11
✎
14:03
|
Короче, почистил все "параметры", оставил только Сп.
также выпадает. Х.з. |
|||
16
1Сергей
21.12.11
✎
14:04
|
(15) ещё раз покажи как сделал
|
|||
17
Vladal
21.12.11
✎
14:10
|
на принимающей стороне
Процедура ПриОткрытии() Сп = Форма.Параметр; Если ПустоеЗначение(Сп) = 0 Тогда ============================================ при вызове: Сп = СоздатьОбъект("СписокЗначений"); ... Сп.Установить("СтрокаКолонок","ТМЦ, Цена"); ОткрытьФорму("Отчет", Сп, "ОбработкаТЗ.ert"); |
|||
18
Ёпрст
21.12.11
✎
14:11
|
(17)
сообщить(Форма.Параметр.РазмерСписка()); поди всегда нормально работает, не так ли ? :) |
|||
19
2S
21.12.11
✎
14:11
|
ну епт, на принимающей стороне просто
Если ПустоеЗначение(Форма.Параметр) = 0 Тогда |
|||
20
NS
21.12.11
✎
14:12
|
(11) Значит ты вызывающую форму закрываешь.
|
|||
21
Vladal
21.12.11
✎
14:12
|
Вот не всегда.
Иногда выдаёт "Поле агрегаьного объекта не обнаружено" |
|||
22
Vladal
21.12.11
✎
14:13
|
нихрена не закрываю. Всё программно.
Простите за мой французский. |
|||
23
Vladal
21.12.11
✎
14:13
|
(19) Да так и сделал. Но толку от этого нихт. Если отчет работал и перестал.
|
|||
24
NS
21.12.11
✎
14:13
|
(22) Ничего не понял. Программно форму что-ли не закрыть?
У тебя в момент открытия вызываемой формы вызывающая на экране? |
|||
25
Vladal
21.12.11
✎
14:15
|
(24) Первая форма всегда открыта. Она программно вызывает служебную обработку. Та делает вычисления и по идее в список, который передаётся в неё параметром, помещает результаты работы.
Но нихт. |
|||
26
Vladal
21.12.11
✎
14:15
|
вторая потом закрывается, первая остается открытой всегда.
|
|||
27
NS
21.12.11
✎
14:15
|
Хотя не важно. Предавай везде список по-человечески, а не через равно, и всё будет работать.
сп=создатьобъект("списокЗначений"); Параметры.выгрузить(сп); сп=создатьобъект("списокЗначений"); Форма.Параметр.выгрузить(сп); |
|||
28
Vladal
21.12.11
✎
14:16
|
Что заметил - если открыт отлачик и сджелан стоп перед вызовом формы второй обработки - срабатывает.
Если стопа не было, пролетает мимо. |
|||
29
Vladal
21.12.11
✎
14:16
|
Выгрузить... Загрузить... Хм.. ща попробую.
|
|||
30
Ёпрст
21.12.11
✎
14:17
|
Ну ёпта.. Сразу не мог об этом сказать ??
Лови в ПриПовторномОткрытии свой список. У тебя вторая форма еще не закрыта. |
|||
31
Vladal
21.12.11
✎
14:22
|
При повторном.. сфигли она не закрылась? ща пофиксю.
|
|||
32
Vladal
21.12.11
✎
14:34
|
там фигня такая теперь - в полученный параметр я помещаю результат - Сп.Установить("Табл", Табл);
и он не читается: Сп.Установить("СтрокаКолонок","ТМЦ, Цена"); ОткрытьФорму("Отчет", Сп, "ОбработкаТЗ.ert"); Табл = Сп.Получить("Таблица"); |
|||
33
NS
21.12.11
✎
14:36
|
ОткрытьФорму не вызывается сразу!
Сразу вызывается и ждет результата только открытьформумодально. |
|||
34
mdocs
21.12.11
✎
14:36
|
Если форма уже открыта, то нужно юзать ПриПовторномОткрытии()
|
|||
35
1Сергей
21.12.11
✎
14:37
|
(34)* в вызывающей форме, а не вызываемой
|
|||
36
mdocs
21.12.11
✎
14:40
|
(35) Да. Если не модально, то вызывающую форму тоже "открывать" из вызываемой и передавать параметры
|
|||
37
Vladal
21.12.11
✎
14:43
|
(35) Рекурсивно?
Форма 1: Открыть Форму("Отчет, сп, "ОбработкаТЗ"); ОбработкаТЗ: Форма.Параметр; ... ОткрытьФорму ("отчет", СП, "ОтчетТМЦ.ert"); Так?? |
|||
38
mdocs
21.12.11
✎
14:46
|
если не ошибаюсь да, и в первой форме ловить приповторномоткрытии
|
|||
39
Vladal
21.12.11
✎
14:59
|
Восстановил из архива, что было на утро.
Работает. НУ что за дела, блин? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |