Имя: Пароль:
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
В общем, может кому пригодиться:
Была написана отдельная процедура, которая просчитавает товары с суммой ндс и стоимость основной продажи без ндс уменьшает на необходимую сумму, учитывая предоплату.
В процедуры пробития чека и отмены пробития добавлен метод  "оповестить", с переходом на проц. "обработкаоповещения", в которой в зависимости от условий срабатывает процедура с выводом во фронт кассира второго чека.
Все таки, использовала метод оповещения, так что ваши подсказки мне очень помогли