Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Дополнительная нестандартная форма, как открыть
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bizisoft
Здравствуйте.

1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.14.01)
обычные формы.

Поставлена задача сделать отдельный интерфейс для ТерминалаСбораДанных (подключение через RDP).
Разработана стартовая форма 240*238, убрано все лишнее, запуск в режиме рабочего стола, навигация кнопками переключения по закладкам (страницам).
На каждой закладке сокращенный список на определенный вид документа.

Задумано, что при клике по строке нужного документа должна открываться форма документа, но не штатная, а особым образом построенная под размер экрана 240*238.
Я создал дополнительную форму для документа ПриходныйСкладскойОрдер и пытаюсь в процедуре списка
Процедура тпСписокПСОВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
открыть форму но вываливается ошибка
{ОбщийМодуль.зфЗащищенныеФункции.Модуль(1535)}: Ошибка при вызове метода контекста


Пробовал открывать свою форму "ФормаТСД" несколькими способами, но ничего не вышло.
ТекСсылка = ВыбраннаяСтрока.Ссылка;    
ТекСсылка.ПолучитьФорму("ФормаТСД",,).Открыть();

и так
парам = новый Структура;
парам.вставить("Ключ",ТекСсылка);
ОткрытьФорму("Документ.ПриходныйСкладскойОрдер.Форма.ФормаТСД",парам);


Если в коде изменить "ФормаТСД" на "ФормаДокумента", все нормально открывается (стандартная форма документа).
Подскажите пожалуйста, что я делаю не так?
salton
bizisoft @ Вчера, 20:12 необходимо зарегистрироваться для просмотра ссылки ,
Попробуйте:
СтандартнаяОбработка=Ложь;


потом

парам = новый Структура;
парам.вставить("Ключ",ТекСсылка);
ОткрытьФорму("Документ.ПриходныйСкладскойОрдер.Форма.ФормаТСД",парам);

Petre
bizisoft @ Вчера, 20:12 необходимо зарегистрироваться для просмотра ссылки ,
Какое значение имеет свойство "Данные" формы "ФормаТСД"?
bizisoft
salton @ Сегодня, 12:45 необходимо зарегистрироваться для просмотра ссылки ,
К сожалению так не работает, такая же ошибка.

Цитата(Petre @ 05.10.17, 12:59) необходимо зарегистрироваться для просмотра ссылки
Какое значение имеет свойство "Данные" формы "ФормаТСД"?

Простите, но я не совсем понял, что за "Данные"?
Если имеется ввиду если открыть в конфигураторе этот документ и на закладке "Данные", то:
8 реквизитов документа и табличная часть.
Для создания этой формы я ФормуДокумента скопировал и просто перестроил расположение элементов под маленький экран, ничего не добавлял и не выбрасывал.
bizisoft
Попробовал в свойствах документа, в разделе Форма, на закладке Дополнительные, указать в качестве дополнительной формы документа свою форму ФормаТСД, но и это не помогло.
А собственно для чего нужно это Дополнительные, для каких целей используется?

P.S. Вопрос собственно решить еще не получилось.
Petre
Если вы не собираетесь пока использовать стандартную форму, переименуйте ее, а свою назовите стандартно и сделайте основной. Кто его знает, что там творится в защищенных модулях.
bizisoft
Petre @ Сегодня, 9:40 необходимо зарегистрироваться для просмотра ссылки ,
Стандартная форма используется так сказать в обычном режиме, а эта форма будет использователся на экране ТерминалаСбораДанных Motorola MC909x.
Помнится где-то у меня была "открывашка" для закрытых модулей, попробую поискать и вскрыть.
pablo
Цитата
А собственно для чего нужно это Дополнительные, для каких целей используется?

Для конфигураций, использующих тонкий и толстый интерфейсы одновременно. Так можно назначить основную форму для каждого вида интерфейса без дополнительного кода.
bizisoft
Нашел "открывашку" для закрытых модулей.
Если она правильно разблокировала и расставила по строкам, то на строке 1535 закрытого модуля содержится следующая строка

    Рез = ОбработкаЗащиты.Компонента.дкФормаПередОткрытием(пЭтаФорма, пОтказ, пСтандартнаяОбработка);


а сама функция
Функция зфФормаПередОткрытием(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт
    ОбработкаЗащиты = "";

    Если Не зфПроверкаЗащиты(ОбработкаЗащиты) Тогда
        Возврат Ложь;
    КонецЕсли;

    пЭтаФорма = ЭтаФорма;
    пОтказ = Отказ;
    пСтандартнаяОбработка = СтандартнаяОбработка;
    Рез = ОбработкаЗащиты.Компонента.дкФормаПередОткрытием(пЭтаФорма, пОтказ, пСтандартнаяОбработка);
    Отказ = пОтказ;
    СтандартнаяОбработка = пСтандартнаяОбработка;
    Возврат Рез;
КонецФункции


Что-то я не совсем понял, для чего вообще данная функция, в которой просто перепресваиваются параметры?
Чисто ради того, чтобы все основные операции проходили через закрытый модуль, который просто проверяет есть ли ключик и если нет то блочит работу.
Petre
bizisoft @ Вчера, 23:54 необходимо зарегистрироваться для просмотра ссылки ,
Из функции идет обращение к внешней компоненте. Что там в ней делается - неясно.
bizisoft
Petre @ Вчера, 9:21 необходимо зарегистрироваться для просмотра ссылки ,
Пытаюсь дальше размотать клубок.
Ниточка привела меня к заключению, что эта внешняя компонента есть ни что иное, как динамически подключаемая библиотека V8AutoServiceUkr.dll.
Попробовал посмотреть что внутри при помощи OLLYDBG, но ничего там не увидел, искал по строковым значениям. Пробовал получить список экспортируемых функций при помощи IMPDEF - не смогла получить список ф-й.
bizisoft
Спасибо всем за комментарии и помощь в поиске решения проблемы.

Я так и не нашел решения и решил переделать форму 32000000.gif , повторно скопировав ФормуДокумента и заработало.
Почему оно ранее не работало так и осталось для меня загадкой, ну да ладно. crazy.gif

Пока искал решение проблему, придумал другую реализацию функционала для работы из терминала сбора данных.
Форму из обработки решил оставить, только убрал списки из которых думал ранее открывать документы.
Вместо этого добавил табличное поле с тремя столбцами (Артикул, Номенклатура, Количество) и ПолеВвода.

Сканер будет считывать штрих-код в ПолеВвода и завершать ввод эмуляцией нажатия клавишей Ввод.
В процедуре ПриИзменении происходит разбор строки на составляющие Артикул и Количество и после поиска по табличному полю добавляется в него или изменяет количество.

Процедура ПолеВвода1ПриИзменении(Элемент)
    Если ПустаяСтрока(пвАртикул) Тогда
        Предупреждение("Введите Штрих-код/Артикул");
                Возврат;
    КонецЕсли;
    
    Предупреждение("Ввод"+Строка(пвАртикул));
    Разделитель = " ";
    Строки = СтрЗаменить(СокрЛП(пвАртикул), Разделитель, Символы.ПС);
    
    БылРазделитель = Ложь;
    АртикулПолучен = Ложь;
    Кол = 0;
    Артикул = "";
    Для Индекс=1 По СтрЧислоСтрок(Строки) Цикл
        ТекСтр = СтрПолучитьСтроку(Строки, Индекс);
        Если ПустаяСтрока(ТекСтр) Тогда
        //    БылРазделитель = Истина;
        Иначе
            Если АртикулПолучен = Ложь Тогда
                Артикул = ТекСтр;
                АртикулПолучен=Истина;
            Иначе
                Кол = Число(ТекСтр);
            КонецЕсли;            
        КонецЕсли;
        
    КонецЦикла;
    Кол = ?(Кол=0, 1,Кол);
    Если ПустаяСтрока(Артикул) Тогда
        Предупреждение("Введите Артикул/Штрих-код");
    Иначе    
        НайденнаяСтрока = тпТовары.Найти(Артикул, "Артикул");
        Если НайденнаяСтрока = Неопределено Тогда
            НомСсылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
            Если НомСсылка.Пустая() Тогда
                Предупреждение("Товар не найден: "+Строка(Артикул));
            Иначе
                ЭлементыФормы.тпТовары.ДобавитьСтроку();
                НовСТР = ЭлементыФормы.тпТовары.ТекущаяСтрока;
                НовСТР.Артикул = Артикул;
                НовСТР.Номенклатура = НомСсылка;
                НовСТР.Кол = Кол;
            КонецЕсли;            
        Иначе
            НайденнаяСтрока.Кол = НайденнаяСтрока.Кол+Кол;
        КонецЕсли;            
    КонецЕсли;
КонецПроцедуры


После окончания наполнения табличного поля, его содержимое будет выгружаться в табличную часть нужного документа или нового или уже имеющегося в базе.
Вид документа может быть выбран любой (Реализация, Поступление, Перемещение, Возврат, СкладскиеОрдера и т.п.).
Думаю, что такой вариант сделает работу из ТСД более универсальной (можно выгружать в любой товарный документ) и не нужно делать для каждого документа дополнительную форму.

Позже отпишусь, чем все закончилось.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.