Имя: Пароль:
1C
1С v8
Модальные и немодальные окна
0 Златуся
 
01.08.17
13:20
Добрый день! Есть участок кода:
формирует один чек -открывает модальное окно с просьбой изменить сумму при необходиомсти - отправляет на форму оплаты кассира, затем формирует второй чек -открывает модальное окно с просьбой изменить сумму при необходимости -  отправляет на форму оплаты кассира. Проблема: строчки кода не ждут пока кассир пробьет чек, идут дальше , формируют второй, отправляют на оплату. Для кассира выглядит так: появилась форма с оплатой первым чеком и сразу форма с вопросом об изменении второго чека. форма модальная не дает пробить по кассе. если даже эту форму убрать - код пойдет дальше, отправит данные по второму чеку - программа запросит аннулирование первого чека, так как ей нужно забить новые данные. Как включить задержку после отправки первого чека? открыть модально первую форму с кассой не получается - так как форма сначала открывается, потом в нее передаются данные и обрабатывается интерфейс формы. если не открывать, а сначала передать данные - много ошибок связанных с установкой интерфейса формы кассира, который обрабатывает полученные значения. (чеки нужно отправлять именно по два сразу)
1 Fish
 
гуру
01.08.17
13:32
Измените логику таким образом, чтобы вторая форма не появлялась, пока не получен ответ в первой.
2 Ganiev
 
01.08.17
13:40
1 Сделай счетчик ожидания! пока не получил отмашку от первой формы не бежать по коду дальше! что-то типа  пока не ответполучен цикл конец цикла а при закрытии формы 1 ответполучен = Истина;
3 1dvd
 
01.08.17
13:46
нужно дождаться события от первого окна, прежде чем выполнять создание второго чека
4 Златуся
 
01.08.17
13:49
пока ФормаФронта.Открыта() цикл
конеццикла;
По циклу не прокатывает - получает виснет - вернулся и бегает
Как я могу дождаться события от первого окна? открыто немодально?
5 Златуся
 
01.08.17
13:50
получается мне нужно именно модально, чтобы на код не возвращался. тогда как передать данные - ежели форма сначала открывается немодально, получает параметры, а потом только должна уходить в модальный режим?
6 1dvd
 
01.08.17
13:51
(5) создание второго чего должно быть в другой процедуре, которая запустится после закрытия окна вопроса
7 Златуся
 
01.08.17
13:51
можно ли как-то перевести открытую форму из немодального в модальный? или только закрытием и повторным открытием?
8 1dvd
 
01.08.17
13:52
(7) Забудь про модальные окна. 1С всякими способами заставляет от них избавляться
9 Numerus Mikhail
 
01.08.17
13:52
(4) ОписаниеОповещения?
10 Златуся
 
01.08.17
13:53
(6) ну вызову из первой вторую - все равно уйдет сразу на код и во вторую процедуру. в первой идет просчет сумм по двум чекам
11 1dvd
 
01.08.17
13:54
(10) вторая запустится по событию закрытия окна
12 Fish
 
гуру
01.08.17
13:55
(10) Если всё правильно напишешь, то не уйдёт.
13 Numerus Mikhail
 
01.08.17
13:57
(10) почитай на досуге
http://its.1c.ru/docs/v8nonmodal/
14 _stay true_
 
01.08.17
14:04
(10) Вызывай немодально с ОписаниемОповещения о закрытии. Так ты будешь знать что первой каюк и пора пинать вторую. В чем трудность?
15 _stay true_
 
01.08.17
14:36
(0) и без фотокарточки не взлетит! :)
16 Златуся
 
01.08.17
14:38
доппараметры=новый структура();
доппараметры.Вставить("Документ",документ);
доппараметры.Вставить("Формафронта",формафронта);
доппараметры.Вставить("Суммавторойчасти", суммавторойчасти);
        ОткрытьФорму(ФормаФронта, ,,,,,Новый ОписаниеОповещения("Напечататьвторойчек",этотобъект, доппараметры),РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
Проходит без ошибок, вторая процедура в этом же модуле, в нее заходит  - где не так?
17 Златуся
 
01.08.17
14:38
т.е. НЕ заходит во вторую
18 Златуся
 
01.08.17
14:40
(15) Фотокарточку как-то выставляла, но на мисте человек-женщина - не может быть априори программистом, поэтому извиняйте - обсудили больше не мою проблему а внешность :))))
19 Numerus Mikhail
 
01.08.17
15:04
(16) Попробуй ЭтаФорма вместо ЭтотОбъект написать везде
20 _stay true_
 
01.08.17
15:05
(18) Вот как пример:

СтандартнаяОбработка = Ложь;
ОткрытьФорму("Справочник.Пользователи.ФормаВыбора",,ЭтаФорма,УникальныйИдентификатор,,,Новый ОписаниеОповещения("ВидыУслугТоварыОтветственныйНачалоВыбораЗавершение",ЭтаФорма),РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
&НаКлиенте
Процедура ВидыУслугТоварыОтветственныйНачалоВыбораЗавершение(Результат,Параметры)Экспорт
    //2017-07-14-Кулешов-000102632-Н
    ВыбранноеЗначение = Результат;
    Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.Пользователи") Тогда
        ЗапрещеноКВыбору = ПроверитьВозможностьВыбораПользователя(ВыбранноеЗначение);
        Если ЗапрещеноКВыбору Тогда
            ВыбранноеЗначение = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка");
            ПоказатьПредупреждение(Новый ОписаниеОповещения("ПослеЗакрытияПредупреждение",ЭтаФорма),"Невозможно выбрать данного менеджера!");
            Возврат;
        Иначе
            Элементы.ВидыУслугТовары.ТекущиеДанные.Ответственный = Результат;
        КонецЕсли;
    КонецЕсли;     
    //2017-07-14-Кулешов-000102632-К*  
КонецПроцедуры
21 _stay true_
 
01.08.17
15:06
И как только у тебя отработает и закроется первая форма, должно попасть в процедуру из описания оповещения
22 lodger
 
01.08.17
15:09
(20) конструкции вида: //2017-07-14-Кулешов-000102632-Н
забавны только первый год, когда они встречаются по 1 на функцию\процедуру максимум.
к N-ому году и активному развитию БП получается петрушка вида:
//2017-07-14-Кулешов-000102632-Н
//2017-07-14-Кулешов-000102632-Н
23 lodger
 
01.08.17
15:10
ой. недописал
//2017-07-14-Кулешов-000102632-Н
//2016-09-12-Петров-000100632-Н
//2015-06-17-Пупкин-000100032-Н
//2014-01-11-ИванГрозный-000100002-Н
24 Златуся
 
01.08.17
15:21
а если у меня не из формы вызывается? в документе есть кнопка "Оплата", по ней код уходит в обработку (в модуль обработки) и оттуда вызывает форму этой обработки. Попробовала владельцем указать этотобъект - все равно не идет, попробовала в качестве модуля для второй процедуры указать конкретную форму этой обработки - все равно все проходит без ошибок, но в процедуру не заходит
ОткрытьФорму(ФормаФронта,,этотобъект,,,,Новый ОписаниеОповещения("Напечататьвторойчек",Формафронта.ЭтаФорма, доппараметры),РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
25 _stay true_
 
01.08.17
15:37
(24) 1. Процедура "Напечататьвторойчек" должна отвечать нескольким требованиям:
1. она должна исполняться &НаКлиенте;
2. Она должна быть экспортной;
3. Она должна иметь не более двух параметров.

Скорее-всего, какое-то условие не выполнено.
26 _stay true_
 
01.08.17
15:38
(24) "а если у меня не из формы вызывается? в документе есть кнопка "Оплата""

Т.е. в ФормеДокумента? А говорите не из формы...
27 Златуся
 
01.08.17
15:43
нет, вызывается не из формы, из формы документа уходит в модуль обработки, вызывается непосредственно из модуля обработки фронт кассира.
(25) 1-да, 2 да, 3 - имеется ввиду в доп параметрах передача максимум двух переменных?
28 Златуся
 
01.08.17
15:48
вообще я тут пока тестила поняла, что любом случае будет не так как мне надо. Изначальная цель: документ продажи, оплата из документа формирует чек (типовой вариант). мне нужно переделать так, чтобы в зависимости от проданных товаров формировались два чека - по разным системам налогооблажения. После того, как пользователь пробъет один чек, нужно чтобы подгружался второй автоматом если есть товары по второй системе. Но я увидела что мне не нужно чтобы срабатывало на закрытие формы кассира - неудобно: пробил чек -  нужно закрыть фронт, и потом только будет второй опять с открытием. мне нужно на процедуру пробития скорее всего подвесить и передать параметр второй суммы. Эх, "пойду покурю, подумаю". Спасибо всем  - сегодня узнала что-то новое :))))
29 Златуся
 
02.08.17
10:24
В общем, может кому пригодиться:
Была написана отдельная процедура, которая просчитавает товары с суммой ндс и стоимость основной продажи без ндс уменьшает на необходимую сумму, учитывая предоплату.
В процедуры пробития чека и отмены пробития добавлен метод  "оповестить", с переходом на проц. "обработкаоповещения", в которой в зависимости от условий срабатывает процедура с выводом во фронт кассира второго чека.
Все таки, использовала метод оповещения, так что ваши подсказки мне очень помогли
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший