Имя: Пароль:
1C
1С v8
Активизировать открытую форму управляемого приложения
0 OnePrg
 
08.05.23
14:19
УникальныйИдентификатор_РМК = Неопределено;
Для каждого эл из ПолучитьОкна() Цикл
     Если эл.Содержимое.Количество() = 0 Тогда
    Продолжить;
     КонецЕсли;
     Если эл.Содержимое[0].ИмяФормы = "Документ.ЧекККМ.Форма.ФормаДокумента_РМК" Тогда    
    УникальныйИдентификатор_РМК = эл.Содержимое[0].УникальныйИдентификатор;
    Прервать;
     КонецЕсли;
КонецЦикла;
ОткрытьФорму("Документ.ЧекККМ.Форма.ФормаДокумента_РМК",,,УникальныйИдентификатор_РМК);

по факту открывает новую форму, хотя передаю туда идентификатор открытого окна

что не так?
1 OnePrg
 
08.05.23
14:23
кажется понял

нужно эл.Содержимое[0].ЭтаФорма.УникальныйИдентификатор
2 OnePrg
 
08.05.23
14:27
нет, так тоже не работает
3 Злопчинский
 
08.05.23
14:33
Для начала я бы не довольствовался голословными заявлениями а вывел в лог уник ид перед циклом и перед открытьформу
4 OnePrg
 
08.05.23
14:42
(3) по точке останова проверяю - уник тот, что в ПолучитьОкна()
5 OnePrg
 
08.05.23
14:45
кажется нужно эл.Содержимое[0].КлючУникальности

пробую ....
6 OnePrg
 
08.05.23
14:48
да, так заработало
7 OnePrg
 
08.05.23
18:48
Не совсем :(

ФормаДокумента_РМК является формой документа. Работает аналогично другим торговым конфигурациям.

Так вот вот этот код (0) срабатывает только если в форме не пробит ни один чек. Стоит пробить чек и код не срабатывает, открывает новую форму. Не пойму где смотреть.
8 Волшебник
 
08.05.23
19:04
(7) Значит там другой КлючУникальности
9 OnePrg
 
08.05.23
19:44
Пока вижу что после пробития чека вызывается процедура ИнициализироватьНовыйЧек()

&НаСервере
Процедура ИнициализироватьНовыйЧек(ВыдатьОкноУспешноПробит = Ложь)
    
    СсылкаНаЧек_МК = Объект.Ссылка;
    
    НовыйЧек = Документы.ЧекККМ.СоздатьДокумент();
    
    ЗаполнитьЗначенияСвойств(НовыйЧек, Объект,, "Запасы, БезналичнаяОплата, СкидкиНаценки, Номер, Проведен, ПометкаУдаления, Заказ");
    Если ЗначениеЗаполнено(СтруктураСостояниеКассовойСмены) Тогда
        МассивРеквизитов = Новый Массив;
        ПолучитьСтрокуРеквизитыИсключения(МассивРеквизитов);
        
        Для Каждого ЗначениеМассива Из МассивРеквизитов Цикл
            НовыйЧек[ЗначениеМассива] = СтруктураСостояниеКассовойСмены[ЗначениеМассива];
        КонецЦикла;
    КонецЕсли;
    
    Попытка
        РазблокироватьДанныеДляРедактирования(Объект.Ссылка, УникальныйИдентификатор);
    Исключение
        //
    КонецПопытки;
    
    ЗначениеВДанныеФормы(НовыйЧек, Объект);   <-------------- может это причина потери уникальности?
    
    УстановитьОтборОтложенныхЧековПоСсылке();
    
    Объект.СуммаДокумента = 0;
    ОбновитьНадписьКнопкиКОплатеНаСервере();
    
    Объект.ВидСкидкиНаценки = Неопределено;
    Объект.ДисконтнаяКарта = Неопределено;
    Объект.Контрагент = Неопределено;
    Объект.Договор = Неопределено;
    Объект.ПроцентСкидкиПоДисконтнойКарте = 0;
    Объект.СкидкиРассчитаны = Ложь;
    СуммаСкидки = 0;
    
    Объект.ПолученоНаличными = 0;
    ПолученоПлатежнымиКартами = 0;
    
    СуммаЧекаБезСкидки = 0;
    СуммаСдачи = 0;
    
    Объект.Запасы.Очистить();
    Объект.БезналичнаяОплата.Очистить();
    Объект.СкидкиНаценки.Очистить();
    
    Объект.НомерЧекаККМ = 0;
    // +локализация ПРРО Кашалот
    Объект.НомерЧекаCashalot = "";
    // -локализация ПРРО Кашалот
    
    Объект.Архивный = Ложь;
    Объект.Статус = Перечисления.СтатусыЧековККМ.ЧекНеПробит;
    Объект.Телефон = "";
    Объект.АдресЭП = "";
    Объект.Комментарий = "";
    
    УстановленСерыйЦвет = Истина;
    Элементы.ЗапасыРассчитатьСкидкиНаценки.Картинка = БиблиотекаКартинок.ОбновитьСерый;
    
    ЦеныИВалюта = СформироватьНадписьЦеныИВалюта(ПолучитьСтруктуруНадписиЦеныИВалютаНаСервере());
    
    Если ЭтоМобильныйКлиент Тогда
        Если ВыдатьОкноУспешноПробит Тогда
            Элементы.ГруппаПродажаИВозврат.ТекущаяСтраница = Элементы.ГруппаФормаЗавершенияПродажи;
            Элементы.ПечатьТоварногоЧека_МК.Видимость = Истина;
        Иначе
            Элементы.ГруппаПродажаИВозврат.ТекущаяСтраница = Элементы.ГруппаПродажаМК;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры // ИнициализироватьНовыйЧек()
10 OnePrg
 
08.05.23
19:53
(8) по отладчику проверяю - ключ уникальности не меянется
11 Волшебник
 
08.05.23
19:56
(10) Проверьте ещё раз. Может Вы не туда смотрите
12 OnePrg
 
08.05.23
19:58
(11) я даже вывел в таблицу все реквизиты формы до и после и сравнил через "сравнить файлы" - кроме цифр чека и самого чека ничего не меняется
13 Волшебник
 
08.05.23
20:10
(12) Ну Вы же понимаете, что программа не ошибается. Она просто выдаёт ошибку по программе.
14 OnePrg
 
08.05.23
20:23
Если бы выдавало ошибку, было бы легче. А так просто открывает другое окно, хотя идентификатор не меняется.
15 Волшебник
 
08.05.23
20:46
(14) Значит ошибки нет. Может это Вы ошибаетесь? Проверьте КлючУникальности для каждого открытого окна
16 OnePrg
 
08.05.23
20:56
(14) программа сама перебирает открытые окна и находить в них окно, а у окна ключ уникальности: (0)
17 Волшебник
 
08.05.23
20:58
(16) Вам надо подумать над программой.
Программа никогда не делает что-то "сама" и никогда "автоматически".

Думайте, работайте.
18 OnePrg
 
08.05.23
23:34
Разобрался

Можете у себя промоделлировать.

Создаём внешнюю обработку с двумя кнопками "Открыть форму новой ПН" и "Открыть ПН"

&НаКлиенте
Процедура ОткрытьФормуНовойПН(Команда)
    ОткрытьФорму("Документ.ПриходнаяНакладная.Форма.ФормаДокумента",,,Новый УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьПН(Команда)
    КлючУникальности_РМК = Неопределено;                                          
    Для каждого эл из ПолучитьОкна() Цикл
        Если эл.Содержимое.Количество() = 0 Тогда
            Продолжить;
        КонецЕсли;
        Если эл.Содержимое[0].ИмяФормы = "Документ.ПриходнаяНакладная.Форма.ФормаДокумента" Тогда    
            КлючУникальности_РМК = эл.Содержимое[0].КлючУникальности;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    ОткрытьФорму("Документ.ПриходнаяНакладная.Форма.ФормаДокумента",,,КлючУникальности_РМК);
КонецПроцедуры

Нажимаем первую кнопку, открывается форма нового документа "Поступление товаров и услуг".

Если перейти обратно в обработку и нажимать кнопку "Открыть ПН" то будет открываться одна и та же форма нового документа. Но стоит нажать в этой форме кнопку "Записать" и всё - будет открываться новая форма. При этом ключ уникальности этой формы не изменился.

Именно так им работает форма кассира. Она есть форма документа и каждый раз как пробивается чек происходит запись объекта. Создаётся новый объект и форме подкладываются новые данные.

А мне нужно в эту форму возвратиться.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.