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