Имя: Пароль:
1C
1С v8
Генерация "Уникальности" при открытии списка документов
0 Osobo_Opasen
 
28.12.16
17:00
Добрый вечер господа,

Конфигурация УТ 11.2

Может кто-нибудь сталкивался с подобной задачей. Мне требуется программно открывать список документов, например "Заказы клиентов" после открытия программы, и чтобы это не конфликтовало с типовым механицизмом (недопустимо открытие нескольких списков). Пример:  при открытии списка "Заказов клиентов" из раздела "Продажи" отрабатывает вот такой вот код модуля команды:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    // &ЗамерПроизводительности
    ОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(
        "Документ.ЗаказКлиента.Команда.ЗаказыКлиентов");
    
    ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов",
        , // ПараметрыФормы,
        ПараметрыВыполненияКоманды.Источник,
        ПараметрыВыполненияКоманды.Уникальность,
        ПараметрыВыполненияКоманды.Окно);
    
КонецПроцедуры

Я выяснил, что за поиск среди открытых форм отвечает параметр "Уникальность".
Каждый раз при нажатии на открытие списка документов этот параметр не меняется в пределах одного сеанса. Следовательно он где-то хранится. Искал везде где только мог, но так и не смог его получить. Внимание вопрос, кто-нибудь знает как получить этот параметр сразу после открытия программы?
1 Fragster
 
гуру
28.12.16
17:01
проще всего вывести нужный список на начальную страницу
2 Osobo_Opasen
 
28.12.16
17:04
(1) Да, это понятно... что проще всего вообще ничего не делать. Но всё таки истина дороже
3 Fragster
 
гуру
28.12.16
17:06
(2) непонятно, где ищется истина. например, почему нельзя открывать две формы списка? или наоборот, надо открыть новую форму списка?
4 Osobo_Opasen
 
28.12.16
17:33
(3) Потому что так поставлена задача. При открытии нового списка, хотелось бы переходить на уже открытый, а не плодить окна.
5 vde69
 
28.12.16
17:34
у меня есть готовая реализация сабжа
6 vde69
 
28.12.16
17:42
&НаКлиенте
Процедура ОткрытьФормыАвтоОткрытия()
    
    //-----------------------------------------------------
    Если ОткрыватьЗадачиИОповещения Тогда
        ОткрытьФорму("Обработка.ЗадачиИОповещенияТекущегоПользователя.Форма");
    КонецЕсли;
    
    Если ОткрыватьЗаявки Тогда
        ОткрытьФорму("Документ.ЗаявкаНаОперацию.ФормаСписка");
    КонецЕсли;
    
    Если ОткрыватьРезервированиеБюджетов Тогда
        ОткрытьФорму("Документ.РезервированиеБюджета.ФормаСписка");
    КонецЕсли;

    Если ОткрыватьРеестрыПлатежей Тогда
        ОткрытьФорму("Документ.РеестрПлатежей.ФормаСписка");
    КонецЕсли;
    
    //-----------------------------------------------------
    мОкна = ПолучитьОкна();
    Для Каждого мОкно из мОкна Цикл
        Если мОкно.НачальнаяСтраница Тогда
            мОкно.Активизировать();
            Возврат;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры



//---------------------------------------------
// в каждой из форм

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    Если  ИнтерфейсУпрощенныйСервер.ПолучитьРежимАвтоОткрытия("ОткрыватьЗадачиИОповещения")
        И ПараметрыПриложения["БазовыйИнтерфейс.Закрыть1с"] <> Истина Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры



//--------------------------------
//где-то в дебрях общих модулей

// Выполняется перед интерактивном завершении работы пользователя с областью данных или в локальном режиме.
//
// Соответствует обработчику ПередЗавершениемРаботыСистемы.
//
// Параметры:
//  Параметры - Структура - структура со свойствами:
//             Отказ                  - Булево - Возвращаемое значение. Если установить Истина,
//                                       то завершение работы программы будет отменено.
//            
ИнтерактивнаяОбработка - ОписаниеОповещения - Возвращаемое значение. Для открытия окна,
//                                       блокирующего выход из программы, следует присвоить в этот параметр
//                                       описание обработчика оповещения, который открывает окно.
//                                       См. пример выше (для обработчика ПередНачаломРаботыСистемы).
//            * ОбработкаПродолжения   - ОписаниеОповещения - если открывается окно, блокирующее выход
//                                       из программы, то в обработке закрытия этого окна необходимо
//                                       выполнить оповещение ОбработкаПродолжения.
//                                       См. пример выше (для обработчика ПередНачаломРаботыСистемы).
//
Процедура ПередЗавершениемРаботыСистемы(Параметры) Экспорт
    Если не Параметры.Отказ Тогда
        ПараметрыПриложения["БазовыйИнтерфейс.Закрыть1с"] = Истина;
    Иначе
        ПараметрыПриложения["БазовыйИнтерфейс.Закрыть1с"] = Ложь;
    КонецЕсли;
КонецПроцедуры


// Выполняется перед интерактивным началом работы пользователя с областью данных или в локальном режиме.
//
// Соответствует обработчику ПередНачаломРаботыСистемы.
//
// Параметры:
//  Параметры - Структура - структура со свойствами:
//              Отказ                  - Булево - Возвращаемое значение. Если установить Истина,
//                                       то работа программы будет прекращена.
//              Перезапустить          - Булево - Возвращаемое значение. Если установить Истина и параметр.
//                                       Отказ тоже установлен в Истина, то выполняется перезапуск программы.
//              ДополнительныеПараметрыКоманднойСтроки - Строка - Возвращаемое значение. Имеет смысл
//                                       когда Отказ и Перезапустить установлены Истина.
//              ИнтерактивнаяОбработка - ОписаниеОповещения - Возвращаемое значение. Для открытия окна,
//                                       блокирующего вход в программу, следует присвоить в этот параметр
//                                       описание обработчика оповещения, который открывает окно.
//                                       См. пример ниже.
//              ОбработкаПродолжения   - ОписаниеОповещения - если открывается окно, блокирующее вход
//                                       в программу, то в обработке закрытия этого окна необходимо
//                                       выполнить оповещение ОбработкаПродолжения.
//                                       См. пример ниже.
//
// Пример открытия окна, блокирующего вход в программу:
//
//        Если ОткрытьОкноПриЗапуске Тогда
//            Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения("ОткрытьОкно", ЭтотОбъект);
//        КонецЕсли;
//
//    Процедура ОткрытьОкно(Параметры, ДополнительныеПараметры) Экспорт
//        // Показываем окно, по закрытию которого вызывается обработчик оповещения ОткрытьОкноЗавершение.
//        Оповещение = Новый ОписаниеОповещения("ОткрытьОкноЗавершение", ЭтотОбъект, Параметры);
//        Форма = ОткрытьФорму(... ,,, ... Оповещение);
//        Если Не Форма.Открыта() Тогда // Если ПриСозданииНаСервере Отказ установлен Истина.
//            ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения);
//        КонецЕсли;
//    КонецПроцедуры
//
//    Процедура ОткрытьОкноЗавершение(Результат, Параметры) Экспорт
//        ...
//        ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения);
//        
//    КонецПроцедуры
//
Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт
    
....
....
....
    
    ПараметрыПриложения["БазовыйИнтерфейс.Закрыть1с"] = Ложь;
    
КонецПроцедуры
7 Fragster
 
гуру
28.12.16
17:44
(6) много лишних букв и в вебклиенте глючит :)
а в 8.3.8 еще появился классный параметр, коотрый позволяет без глобальных переменных нормально запретить закрытие "базовых" окон :)
8 Fragster
 
гуру
28.12.16
17:46
Процедура ОткрытьФормыИнтерфейса() Экспорт
    
    СтруктураПараметров = Новый Структура("ГлавнаяФорма", Истина); // это ключевой параметр, как раз для разрешения открытия других форм списка
    СтруктураПараметровОтчета = Новый Структура("ГлавнаяФорма, СформироватьПриОткрытии", Истина, Ложь);
    ОткрытьФорму("Документ.Документ1.ФормаСписка", СтруктураПараметров, , , , , , РежимОткрытияОкнаФормы.Независимый);
    ОткрытьФорму("Документ.Документ2.ФормаСписка", СтруктураПараметров, , , , , , РежимОткрытияОкнаФормы.Независимый);
    ОткрытьФорму("Отчет.Отчет1.Форма", СтруктураПараметровОтчета, , , , , , РежимОткрытияОкнаФормы.Независимый);

    АктивизироватьНачальнуюСтраницу();
    
КонецПроцедуры

Процедура АктивизироватьНачальнуюСтраницу() Экспорт
    
    Окна = ПолучитьОкна();
    Для каждого Окно Из Окна Цикл
        Если Окно.НачальнаяСтраница Тогда
            Окно.Активизировать();
            Окно.Содержимое[0].Активизировать(); // обход ошибки веб клиента
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
9 Osobo_Opasen
 
28.12.16
18:00
Джентльмены, вас немного унесло в сторону, данный код не позволяет переключать на уже открытый список документов. Он просто открывает новый, без "Ключа уникальности"
10 Fragster
 
гуру
28.12.16
18:09
(9) ну убери параметр "уникальность" в параметрах открытия формы....
11 Osobo_Opasen
 
28.12.16
18:14
(10) Вот тут есть еще один нюанс - типовой код трогать нельзя. Единственный способ который я вижу в настоящее время, это получение "Ключа Уникальности"
12 Мимохожий Однако
 
28.12.16
18:17
(11) Расширения не помогут?
13 Osobo_Opasen
 
28.12.16
18:27
&НаКлиенте
&Вместо("ОбработкаКоманды")
Процедура Расш1_ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
        
    // &ЗамерПроизводительности
    ОценкаПроизводительностиКлиентСервер.НачатьЗамерВремени(
        "Документ.ЗаказКлиента.Команда.ЗаказыКлиентов");
    
    ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов",
        , // ПараметрыФормы,
        ПараметрыВыполненияКоманды.Источник,
        ,
        ПараметрыВыполненияКоманды.Окно);

КонецПроцедуры

При таком коде, выводится следуюющая ошибка:

{Расширение1 Документ.ЗаказКлиента.Команда.ЗаказыКлиентов.МодульКоманды(2,8)}: Ожидается определение процедуры/функции
&Вместо<<?>>("ОбработкаКоманды") (Проверка: Сервер)
{Расширение1 Документ.ЗаказКлиента.Команда.ЗаказыКлиентов.МодульКоманды(2,8)}: Ожидается определение процедуры/функции
&Вместо<<?>>("ОбработкаКоманды") (Проверка: Тонкий клиент)
14 Fragster
 
гуру
28.12.16
18:31
(13) совместимость, естественно, 8.3.9?
15 Osobo_Opasen
 
28.12.16
18:32
(14) Совместимость чего?
16 Fragster
 
гуру
28.12.16
18:33
(15) конфигурации
17 Osobo_Opasen
 
28.12.16
18:34
(16) Совместимость конфигурации расширения 8.3.8, 8.3.9 - нет в списке. А платформа 8.3.9.1850
18 Мимохожий Однако
 
28.12.16
18:39
Открой свойства конфигурации
19 Fragster
 
гуру
28.12.16
18:46
(17) совместимость 8.3.9 для платформы 8.3.9 - это "не использовать"
20 Osobo_Opasen
 
29.12.16
07:42
(19) Снова конфликт:
Расширение1: Режим совместимости расширения конфигурации больше режима совместимости основной конфигурации
21 Osobo_Opasen
 
29.12.16
11:19
Может быть все-таки кто-нибудь знает как получить этот гр...ый "Ключ Уникальности"?