|
v7: Вроде простая обработка, а не получается | ☑ | ||
---|---|---|---|---|
0
Масянька
26.07.12
✎
14:51
|
День добрый!
Есть обработка: формирование ценников. На ней есть кнопка "Заполнить цены из прайса". На кнопке - процедура: Параметры = СоздатьОбъект("СписокЗначений"); Параметры.ДобавитьЗначение(гТабВыборка, "Данные"); Параметры.ДобавитьЗначение(ДокументПрайсЛист, "Прайс"); ОткрытьФормуМодально("Обработка.ПоискЦен", Параметры); Обработка - ПоискЦен Перем МожноЗакрыть; Процедура Выполнить(РабочаяТаблица, ДокументПрайсЛист) Если РабочаяТаблица.КоличествоСтрок() = 0 Тогда Предупреждение("Заполните табличную часть."); Возврат; Иначе РабочаяТаблица.ВыбратьСтроки(); Если СокрЛП(ДокументПрайсЛист) = "" Тогда Предупреждение("Укажите прайс-лист."); Активизировать("ДокументПрайсЛист"); Возврат; КонецЕсли; Excel = СоздатьОбъект("Excel.Application"); Книга = Excel.Workbooks.Open(ДокументПрайсЛист); Лист = Книга.WorkSheets(1); Колонки = Лист.Columns(1); мПоследняяСтрока = Лист.UsedRange.Rows.Count; мТекЯчейка = Лист.Range("D1:D" + Лист.UsedRange.Rows.Count).Address(); Диапазон = Лист.Range("D1:" + мТекЯчейка); Пока РабочаяТаблица.ПолучитьСтроку() = 1 Цикл мАртикулПрайс = СокрЛП(РабочаяТаблица.АртикулПрайс); Попытка Нашли = Диапазон.Find(мАртикулПрайс, Диапазон.Cells(1,1), -4123,1,1,1,0,0); НашлиАдрес = Нашли.Address; НашлиСтрока = Нашли.Row; НашлиКолонка = Нашли.Column; НоваяКолонка = НашлиКолонка + 2; Цена = Окр(Лист.Cells(НашлиСтрока,НоваяКолонка).Value); РабочаяТаблица.ЦенаИзПрайса = Цена; СтрокаСостояния = СтрокаСостояния + "."; Исключение Сообщить("Номенклатура с артикулом - " + мАртикулПрайс + " не найдена в прайс-листе."); КонецПопытки; КонецЦикла; Excel.DisplayAlerts = 0; Excel.Quit(); КонецЕсли; МожноЗакрыть = 1; Форма.Закрыть(0); КонецПроцедуры // ПослеОткрытия Процедура ПриОткрытии() МожноЗакрыть = 0; РабочаяТаблица = Форма.Параметр.Получить("Данные"); ДокументПрайсЛист = Форма.Параметр.Получить("Прайс"); Выполнить(РабочаяТаблица, ДокументПрайсЛист); КонецПроцедуры // ПриОткрытии Процедура ПриЗакрытии() СтатусВозврата(МожноЗакрыть); КонецПроцедуры // ПриЗакрытии На форме обработки "ПоискЦен" - текстовой поле "идет поиск.....". Так вот: поиск происходит, все, что надо заполняется, а вот форма не отображается. Почему? Спасибо. |
|||
1
NS
26.07.12
✎
14:52
|
Форма отображается только когда ей передается управление - то есть когда завершается выполнение кода.
|
|||
2
akaBrr
26.07.12
✎
14:53
|
(0)
МожноЗакрыть = 1; Форма.Закрыть(0); СтатусВозврата(МожноЗакрыть); она не открывается |
|||
3
Масянька
26.07.12
✎
14:54
|
Бляха-муха....
А как сделать, чтобы сначала отобразилась форма, а потом началось выполнение. без доп. движений пальцами? |
|||
4
akaBrr
26.07.12
✎
14:55
|
(3) через повторное открытие
|
|||
5
akaBrr
26.07.12
✎
14:55
|
не пойму Ёпрст в отпуске что-ли?
|
|||
6
Масянька
26.07.12
✎
14:55
|
(4) Это как?
|
|||
7
Масянька
26.07.12
✎
14:56
|
(5) Да, блин! Где он?
|
|||
8
NS
26.07.12
✎
14:56
|
(3) Форма.обработкаОжидания("Сформировать",5)
|
|||
9
Масянька
26.07.12
✎
14:57
|
(8) ПриОткрытии?
|
|||
10
NS
26.07.12
✎
14:58
|
(2) Форма.Закрыть() обрабатывается только после завершения работы кода.
|
|||
11
akaBrr
26.07.12
✎
14:58
|
(8) точно, форма то модальная, не уследил
(10) ага, но форма не откроется |
|||
12
NS
26.07.12
✎
14:59
|
(11) И при чем тут (2)?
|
|||
13
Масянька
26.07.12
✎
14:59
|
Скажите, куда пихать ОбработкуОжидания?
|
|||
14
NS
26.07.12
✎
15:00
|
(13) Ей богу, не удержусь и скажу :)
|
|||
15
akaBrr
26.07.12
✎
15:00
|
(12) в ПриОткрытии вызывается закрытие формы
|
|||
16
Масянька
26.07.12
✎
15:01
|
(14) Скажи! Только не русском матерном :))))
|
|||
17
NS
26.07.12
✎
15:02
|
(16) У тебя есть другие варианты, кроме как в при открытии?
Если нет, то значит естественно туда. |
|||
18
akaBrr
26.07.12
✎
15:02
|
+(15) форма откроется когда закончится работа ПриОткрытии, а там пшик
|
|||
19
NS
26.07.12
✎
15:04
|
(15) Попробуй в обработку, в приОткрытии(), добавить одну всего строку - форма.Закрыть(), и убедишься что форма будет открываться.
|
|||
20
akaBrr
26.07.12
✎
15:07
|
(19) попробовал, не открывается
|
|||
21
NS
26.07.12
✎
15:07
|
(20) Не ври пожалуйста.
|
|||
22
Масянька
26.07.12
✎
15:08
|
В ПриОткрытии сделала:
..... Форма.ОбработкаОжидания("Выполнить(РабочаяТаблица, ДокументПрайсЛист)",5); //Выполнить(РабочаяТаблица, ДокументПрайсЛист); Теперь висит форма с надписью, не заполняется, не закрывается.... |
|||
23
NS
26.07.12
✎
15:11
|
Форма.ОбработкаОжидания("Выполнить",5);
|
|||
24
Масянька
26.07.12
✎
15:12
|
(23) Без параметров?
Или сначала Ожидание, а потом с параметрами? |
|||
25
NS
26.07.12
✎
15:13
|
перем рабочаяТаблица;
перем прайслист; Процедура Выполнить() ... Процедура ПриОткрытии() МожноЗакрыть = 0; РабочаяТаблица = Форма.Параметр.Получить("Данные"); ДокументПрайсЛист = Форма.Параметр.Получить("Прайс"); Выполнить(); |
|||
26
NS
26.07.12
✎
15:13
|
(24) Буква в букву как я написал.
|
|||
27
NS
26.07.12
✎
15:13
|
перем документпрайслист; Виноват.
|
|||
28
Масянька
26.07.12
✎
15:14
|
А где Ожидание?
|
|||
29
NS
26.07.12
✎
15:15
|
(28) Вместо Выполнить() в приоткрытии()
|
|||
30
Масянька
26.07.12
✎
15:17
|
А говоришь - буква в букву....
|
|||
31
Масянька
26.07.12
✎
15:22
|
Нету Выполнить....... Висит форма.....
|
|||
32
NS
26.07.12
✎
15:25
|
(31) Выложи полностью текущий код
И форму надеюсь не модально вызываешь? |
|||
33
akaBrr
26.07.12
✎
15:28
|
(32) модально
|
|||
34
akaBrr
26.07.12
✎
15:29
|
(21) не вру
|
|||
35
NS
26.07.12
✎
15:30
|
И в Выполнить() нужно добавить форма.обработкаожидания("",0);
первой строчкой. В модальных формах форма.обработкаожидания() не работает. но есть другой способ - через форма.Закрыть() и выполнить в процедуре приЗакрытии() |
|||
36
Масянька
26.07.12
✎
15:31
|
(31) Модально.
|
|||
37
akaBrr
26.07.12
✎
15:31
|
(35) судя по всему автор и пытался так сделать
|
|||
38
NS
26.07.12
✎
15:31
|
(34) Извини, но врешь.
форма.Закрыть() ничего не закрывает, а только выставляет флаг закрытия, который отрабатывается после выполнения кода, и полного открытия формы. Даже если сработает быстро, форма мелькнет на экране. |
|||
39
akaBrr
26.07.12
✎
15:32
|
иначе нафига было играться со статусом возврата
|
|||
40
akaBrr
26.07.12
✎
15:32
|
(38) ну так мелькнула, так что не вру, у нас просто нет договоренности о терминах :)
|
|||
41
akaBrr
26.07.12
✎
15:33
|
и у автора она 100% мелькала, но не "открылась"
|
|||
42
Масянька
26.07.12
✎
15:33
|
(41) Мелькала.
|
|||
43
akaBrr
26.07.12
✎
15:34
|
(42) убери Форма.Закрыть()
|
|||
44
NS
26.07.12
✎
15:35
|
(40) Теперь еще один простой вопрос - она мелькала из-за того что форма закрылась, или из-за того что она не открылась перед выполнением кода?
|
|||
45
Масянька
26.07.12
✎
15:36
|
Все. Сделала ПриЗакрытии. мне нравится :))))))
СПАСИБО! |
|||
46
akaBrr
26.07.12
✎
15:36
|
(44) согласен, от того что открытая форма закрылась
|
|||
47
NS
26.07.12
✎
15:38
|
(46) У неё она и должна закрыться по окончании обработки.
А проблема в том что у неё открывалась только после окончания обработки, а должна была открываться до. И при чем тут ПриЗакрытии()? |
|||
48
akaBrr
26.07.12
✎
15:39
|
(47) понятия не имею, нафиг было Форма.Закрыть() вставлять?
|
|||
49
NS
26.07.12
✎
15:42
|
(48) Чтоб по окончании обработки форма закрылась.
|
|||
50
akaBrr
26.07.12
✎
15:44
|
(49) а зачем? мы же тогда ничего можем не увидеть
|
|||
51
akaBrr
26.07.12
✎
15:45
|
я так понял нужно чтобы форма открылась и табличка заполнилась
|
|||
52
Масянька
26.07.12
✎
15:50
|
Поиск в прайсе - большой файл, несколько минут происходит. Хочется, чтобы на время поиска висело окошко "Идет поиск....", а потом само закрылось.
|
|||
53
Масянька
26.07.12
✎
15:51
|
Нормально.
PS Сижу ем мороженое - хорошо :))))) |
|||
54
akaBrr
26.07.12
✎
16:01
|
(52) может тогда на форму прогрессбар нарисовать?
|
|||
55
Масянька
26.07.12
✎
16:10
|
(54) Каким макаром? Поиск по Excel'ю - Find. Красивого прогрессбара не получится :(((
|
|||
56
akaBrr
26.07.12
✎
16:12
|
(55) цикл то есть Пока РабочаяТаблица.ПолучитьСтроку() = 1 Цикл
|
|||
57
NS
26.07.12
✎
16:12
|
(55) Допиши после
Пока РабочаяТаблица.ПолучитьСтроку() = 1 Цикл состояние(окр(Рабочаятаблица.номерстроки*100/рабочаятаблица.количествострок(),0)); и убедишься что всё там нормально. |
|||
58
Ахиллес
26.07.12
✎
16:16
|
Обработка - ПоискЦен
//Перем МожноЗакрыть; //У кого мне надо спросить разрешение, чтоб закрыть форму? Убери эту чушь. Перем РабочаяТаблица, ДокументПрайсЛист; * * * * Процедура ПриОткрытии() МожноЗакрыть = 0; РабочаяТаблица = Форма.Параметр.Получить("Данные"); ДокументПрайсЛист = Форма.Параметр.Получить("Прайс"); // Выполнить(РабочаяТаблица, ДокументПрайсЛист); впадлу самому кнопочку нажать? КонецПроцедуры // ПриОткрытии Процедура ПриЗакрытии() // СтатусВозврата(МожноЗакрыть); Это бред. МожноЗакрыть никогда не принимает значение отличное от 1 КонецПроцедуры // ПриЗакрытии |
|||
59
NS
26.07.12
✎
16:18
|
Кто-то немного тормозит...
|
|||
60
Масянька
26.07.12
✎
16:19
|
(57) Попробовала: пару минут - тишина, потом быстренько пробежали цифирки.
Я же говорю: позиций для поиска около 100, а в прайсе - около 70 страниц. И где какая позиция - вопрос. Мне больше нравится окошко. :))) (58) Высокие отношения....... |
|||
61
Ахиллес
26.07.12
✎
16:24
|
(59) А зачем вообще вызывать форму обработки, если не предполагается, что пользователь с ней взаимодействует? Весь код из обработки "ПоискЦен" в "формирование ценников" добавить, да и не морочить голову.
Запихивать Выполнить в ПриЗакрытии() это плохо. |
|||
62
NS
26.07.12
✎
16:26
|
(61) Чем плохо?
|
|||
63
Ахиллес
26.07.12
✎
16:29
|
(62) Не логично. Выскочила какая то форма, пользователь перепугался и чтоб чего то не поломать решил её закрыть от греха подальше. А обработка возьми да начни выполнять чего то. Так и до инфаркта можно довести юзера. Когда программа делает не то,что от неё ожидают это всегда плохо.
|
|||
64
NS
26.07.12
✎
16:30
|
(63) Ничего не понял. На обработке написано что она делает, и как пользователь закроет обработку без доступа к форме?
|
|||
65
Масянька
26.07.12
✎
16:31
|
(63) Логично..... Еще более логично, прежде чем, "тыкать" в какую-то форму, хорошенько подумать: "А оно мне надо?"
|
|||
66
Ахиллес
26.07.12
✎
16:34
|
(65) Обработки предполагают, что с ними пользователь интерактивно взаимодействует и как то может повлиять на результат работы. Если в данном случае это так, то пусть сам жмёт батон "Выполнить", не переломится. Если от юзера ничего такого не требуется, то просто необходимый код добавь в "формирование ценников".
|
|||
67
NS
26.07.12
✎
16:36
|
(66) Да ладно? Зайди в prnforms, и подумай с чем там пользователь взимодействует.
|
|||
68
Масянька
26.07.12
✎
16:38
|
(66) Мда..... Зашибись...... И Вы еще меня учите не ковыряться в носу.....
PS Пойду я еще мороженное съем. Блин, у нас +38. На улице - как в парилке. Только веника не хватает..... |
|||
69
Ахиллес
26.07.12
✎
16:45
|
(67) От это нафига? "Бляха-муха....
А как сделать, чтобы сначала отобразилась форма, а потом началось выполнение. без доп. движений пальцами?" Либо пользователь видит форму и сам решает на какую кнопку жать, либо форма даже не открывается, обработка всё делает сама. А чтоб юзер тупо пялился на пустую форму, такого не видел. |
|||
70
NS
26.07.12
✎
16:46
|
(69) то есть, если обработка фоном считает без сообщений, а программа не отвечает - это нормально.
А если при этом форма на экране, и написано выполняется такая-то обработка - это зло? :) |
|||
71
Ахиллес
26.07.12
✎
16:51
|
В Состояние или Сообщить выводить для юзера не достаточно?
|
|||
72
chief accountant
26.07.12
✎
16:57
|
Хм, мне тоже стало интересно.
(70) У меня некоторые отчеты из реготчетности формируются 20-30 мин. и никто не тупит над тем, что перед ним пустая форма |
|||
73
NS
26.07.12
✎
16:59
|
(71) Ты не ответил на вопрос - чем плохо сообщение о выполнении обработки в виде модальной формы на экране?
|
|||
74
Масянька
26.07.12
✎
17:14
|
(72) Повезло с юзерями. А мои просят. "Она работает или висит?"
(71) Сообщить не всегда красиво отображается - может прикрывать форму. И потом его (окно сообщений) закрывать надо. Состояние (в данном случае) - мне не нравится. И чего вы придираетесь? |
|||
75
akaBrr
26.07.12
✎
17:26
|
(74) баньтики дело такое, на вкус и цвет разные, как фломастеры :)
|
|||
76
Масянька
26.07.12
✎
17:27
|
(75) Согласна :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |