Имя: Пароль:
1C
1С v8
Подбор товаров, мультивыделение на планшете (!)
,
0 triviumfan
 
31.07.18
17:35
Доброго дня!

Конфа: торговля 11
Имеются планшеты на ведроиде с ms rdp клиентом. Админы говорят, что через веб-клиент жестокие лаги, вроде как 3Ж не тянет (хз, что там за пропускная способность нужна, но планшеты нужны для менеджеров, работающих "в полях").

А теперь, внимание вопрос (https://cs8.pikabu.ru/post_img/big/2016/09/10/7/1473505439170846857.jpg):
Можно ли на планшете при использовании типовой обработки подбора товаров в документ использовать мультивыделение строк? На ПК я просто Ctrl+A и перетаскиваю все товары из папки/категории/иликакойещётамотбор.
1 Fragster
 
гуру
31.07.18
17:42
ну сделай им "залипающую" кнопку на панели инструментов, пока она нажата, при активизации строки добавляет в "выделенныеСтроки".
2 Cyberhawk
 
31.07.18
18:11
Веб-клиент платформы 1С не поддерживает Андроид (сенсорное управление).
Но в терминале можно вызвать экранную клавиатуру, и какое-нибудь залипание клавиш в том числе.
Хочешь натива и красивости "из коробки" - мобильный клиент / мобильная платформа в помощь.
3 triviumfan
 
31.07.18
18:15
(1) не подскажешь, как это делается в 1с?)
(2) экранная клавиатура..хм, тоже вариант
4 Остап Сулейманович
 
31.07.18
18:22
(0) Ну есть же мобильная платформа. И мобильный клиент. Специально под ведроид в том числе. Нормальное множественное выделение. В ведроидном стиле.
Что за маниакальная тяга работать на планшете через РДП?
5 Casey1984
 
31.07.18
22:06
(4) Это называется лень)
6 triviumfan
 
01.08.18
09:07
(5) это не лень, ут11 переписанная вдоль и поперёк, чтобы подготовить конфу под мобильную платформу надо собаку съесть.
7 triviumfan
 
01.08.18
10:34
а почему не работает это?
    
    Shell= Новый COMОбъект("Wscript.Shell");
    Shell.SendKeys("^+A");
8 triviumfan
 
01.08.18
10:50
(7) работает, но через раз, то да, то нет.
ппц, одинэс...
9 Fragster
 
гуру
01.08.18
11:30
(8) вероятно следует смотреть, где фокус (какое поле ввода активно) при отправке контрол-а. но для выделения всех строк можно воспользоваться манипуляцией с массивом выбранных строк, а не отправкой сочетаний клавиш. Если нужно крутить ДС, а не ТЧ, то может поможет http://catalog.mista.ru/public/559370/
С ТЧ все тривиально.
10 triviumfan
 
01.08.18
11:45
(9) фокус верен, даже программно устанавливал текущий элемент - тупит этот wscript из под 1с.

Да, решил я все-таки попробовать использовать расширение таблицы формы для дин. списка.
Пытаюсь в подборе добавить все товары из списка в корзину:

&НаКлиенте
Процедура ИТМ_ПеренестиВсеСтроки(Команда)
    
    Если НавигацияПоХарактеристикам Тогда
        ЭлементФормыСпискаСтрокой = ПодборТоваровКлиентСервер.ИмяСпискаХарактеристикПоВариантуПоиска(ЭтаФорма);
    Иначе
        ЭлементФормыСпискаСтрокой = ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма);
    КонецЕсли;
    
    ИТМ_ПеренестиВсеСтрокиНаСервере(ЭлементФормыСпискаСтрокой);
    
КонецПроцедуры

&НаСервере
Процедура ИТМ_ПеренестиВсеСтрокиНаСервере(ЭлементФормыСпискаСтрокой)
    
    Схема = Элементы[ЭлементФормыСпискаСтрокой].ПолучитьИсполняемуюСхемуКомпоновкиДанных();
    //Настройки = Элементы[ЭлементФормыСпискаСтрокой].ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
    Настройки = Схема.НастройкиПоУмолчанию;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
    МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , ,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТаблицаРезультат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    Если ТаблицаРезультат.Количество() < 100 Тогда
        ПеретащитьВКорзинуНаСервере(ТаблицаРезультат);
    Иначе
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Слишком много элементов для разового добавления в корзину!");
    КонецЕсли;
    
КонецПроцедуры
[\1С]
Но прикол в том, что в запросе N полей, а в моей ТЗ, полученной таким образом M полей, а на форме вообще P элементов.
Соответственно типовая процедура добавления ПеретащитьВКорзинуНаСервере() ругается, там даже типа номенклатуры не содержится. Опять я дурак или 1с?:)
11 triviumfan
 
01.08.18
11:46
(10) я пробовал настройки компоновщика получать и из расширения формы, и по умолчанию... все равно результат процессора вывода отличается
12 Вафель
 
01.08.18
11:54
выделить все строки можно без всяких скриптов
13 triviumfan
 
01.08.18
12:34
(12) небо голубое.
14 triviumfan
 
01.08.18
14:01
Так никто не в курсе, почему количество полей дин. списка, расположенного на форме, отличается от ТЗ, полученной на основании схемы и компоновщика настроек из расширения таблицы формы сего списка?
15 DrWatson
 
01.08.18
14:18
(14) может они отличаются на те колонки которые не выводятся в форму или на те что сейчас невидимые.
16 triviumfan
 
01.08.18
15:47
(15) именно так!
17 triviumfan
 
01.08.18
15:49
(16) тип номенклатуры, к примеру, на форму не выведен, но стоит флаг "использовать всегда"
18 triviumfan
 
01.08.18
15:50
соответственно при добавлении в корзину текущей строки списка номенклатуры данные строки содержат это поле.
Как мне получить все данные?
19 triviumfan
 
01.08.18
18:01
Извиняюсь, ссылка в (9) - там все есть, не дочитал =\
Итого:

Схема = Элементы[ЭлементФормыСпискаСтрокой].ПолучитьИсполняемуюСхемуКомпоновкиДанных();
    Настройки = Элементы[ЭлементФормыСпискаСтрокой].ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
    
    ВыбранныеПоляКомпоновкиДанных = Настройки.Структура[0].Выбор;
    ВыбранныеПоляКомпоновкиДанных.Элементы.Очистить();
    Для Каждого Элемент Из ВыбранныеПоляКомпоновкиДанных.ДоступныеПоляВыбора.Элементы Цикл
        Если Не Элемент.Папка Тогда КомпоновкаДанныхКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляКомпоновкиДанных, Элемент.Поле, Элемент.Заголовок); КонецЕсли;
    КонецЦикла;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
    МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , ,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТаблицаРезультат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    Если ТаблицаРезультат.Количество() > 100 Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Слишком много элементов для разового добавления в корзину!");
        Возврат;
    КонецЕсли;
    
    МассивСтрокТовара = Новый Массив;
    Для Каждого ДанныеСтроки Из ТаблицаРезультат Цикл
        
        ПараметрыТовара = ПодборТоваровКлиентСервер.ПараметрыТовара();
        
        ЗаполнитьЗначенияСвойств(ПараметрыТовара, ДанныеСтроки);
        
        Если ДанныеСтроки.ЭтоТовар И Склады.Количество() = 1 И РежимПодбораИспользоватьСкладыВТабличнойЧасти Тогда
            ПараметрыТовара.Склад = Склады.Получить(0).Значение;
        КонецЕсли;
        
        ПараметрыТовара.КоличествоУпаковок = 1;
        
        МассивСтрокТовара.Добавить(ПараметрыТовара);
        
    КонецЦикла;
    
    ПеретащитьВКорзинуНаСервере(МассивСтрокТовара);
[\1C]
20 breezee
 
02.08.18
08:59
Можно. Добавьте туда реквизит с типом булево и переностие только те строки, у кого флаг выстален
Ошибка? Это не ошибка, это системная функция.