Имя: Пароль:
1C
1C 7.7
v7: Кнопка множественного выбора элементов списка
0 Arland
 
07.03.18
07:38
Добрый день!
1с 7.7 Предприятие ТиС 9.2

Подскажите пож. какую процедуру писать для кнопки, чтобы при подборе номенклатуры можно было выбрать все элементы списка в форме подбора номенклатуры. Чтобы не по одному подбирать, а выбрать все из списка.
1 1Сергей
 
07.03.18
08:03
Посмотреть как в других местах сделано
2 2S
 
07.03.18
08:07
ЖКК еще не предлагали?
3 Смотрящий
 
07.03.18
08:24
11 лет на форуме...
4 Arland
 
07.03.18
08:26
Мля, просто наводку дайте
5 Arland
 
07.03.18
08:27
(3) 11 лет не означает,что 11 лет 1с-м занимаюсь
6 Смотрящий
 
07.03.18
08:30
Тыкаться во все элементы все равно придётся ктрл+а нет как в снеговике.
Спр.Выбрать() 3 или 4й параметр "ФлагМножественногоВыбора", вроде
7 Масянька
 
07.03.18
08:35
(0) Имеется ввиду - выбрать все из папки или что-то другое?
8 Arland
 
07.03.18
08:39
(7) В форме подбора номенклатуры просто тупо выбрать всю номенклатуру для документа.
Пример, док. Ввод остатков ТМЦ, чтобы кномкой можно было выбрать весь товар, а не по одному мышкой тыкать
9 Масянька
 
07.03.18
08:44
(8) Справ.ВыбратьЭлементы();
Пока Справ.ПолучитьЭлемент() = 1 Цикл
ТЧ.НоваяСтрока(); + автозаполнение.
КонецЦикла;
10 Arland
 
07.03.18
08:45
(9) ша попробую
11 vladko
 
07.03.18
08:49
(0) "при подборе номенклатуры можно было выбрать все элементы списка в форме подбора номенклатуры"
Каламбур какой-то, а не вопрос...
12 Масянька
 
07.03.18
08:53
(11) Каждый сходит с ума по-своему (С)
13 dk
 
07.03.18
09:15
автор ты таки определись - выбрать все элементы в справочнике или выбрать в одном окне несколько элементов?
14 Arland
 
07.03.18
09:18
(13) ) выбрать в одном окне несколько элементов
15 dk
 
07.03.18
09:20
тогда смотри в сторону ОбработкаПодбора - в любом типовом отчете
16 dk
 
07.03.18
09:21
еще если есть пример, но не понимаешь как работает - просто запусти замер производительности в отладчике и посмотри что там происходит
17 Масянька
 
07.03.18
09:22
(14) Чего?! А что тогда в (8)?
18 Масянька
 
07.03.18
09:22
(13) ИМХО, ТС уже запутался: чего, кому и как надо...
19 Arland
 
07.03.18
09:30
(18) (15) Как сюда картинку скинуть?
20 Duke1C
 
07.03.18
09:38
(19) Картинку на хостинг - ссыль сюда
21 Arland
 
07.03.18
10:13
(15) [URL=http://fastpic.ru/][IMG]http://i103.fastpic.ru/big/2018/0307/40/f34cf280a81d7fc50228dc20bd188540.jpg[/IMG][/URL]
Выбрать всю номенклатуру и добавить в документ
22 Arland
 
07.03.18
10:14
23 один я дАртаньян
 
07.03.18
10:20
24 Arland
 
07.03.18
10:29
(23) Не то
25 Arland
 
07.03.18
10:35
26 один я дАртаньян
 
07.03.18
11:06
(24) В принципе можно попробовать но заморочено.

1. Добавляем на форму Надпись в закладку дополнительно в функцию: ОчичтитьСписок()
2. В ТЧ добавляем колонку, на закладке дополнительно в функцию добавляем: ЗаполнитьСпНоменклатуры()

В модуль формы добавляем функции
Функция ОчичтитьСписок()
    Сообщить("ххх");
    Возврат "эээ";
КонецФункции
  
Функция ЗаполнитьСпНоменклатуры()
    Сообщить(""+ ТекущийЭлемент());
Возврат "Хх";
КонецФункции


У меня выводит следующее:
_Помойка (не удалять)
_Разное
Арматура стеклопластиковая
Брус сосновый
Вагонка,панели пластиковые,комплектующие
Вентиляция
ххх
_ЕНВД ДОЛГИ

Причем _ЕНВД ДОЛГИ - первая и активная строчка.

Если листать по одной строке:
ххх
Подвесной потолок
ххх
Плитка керамическая
ххх
Плинтус, порожки, планки для плитки
ххх
Пена монтажная и герметики


Если же прокручивать или увеличить окно, то показывает весь список.


Тут надо придумать  алгоритм, чтобы в ЗаполнитьСпНоменклатуры() - заполнялся некий список
А помто сочетание ОчичтитьСписок() и ЗаполнитьСпНоменклатуры() - неким образом копировало существующий список или добавляло в некий дополнительный список.

А потом уже из этого списка по кнопке копировать все.
27 Davalebor
 
07.03.18
11:10
(25) В верхнем списке весь справочник или там элементы с каким-то отбором? Или например пользователь в верхнем списке заходит в какую-то группу и ее содержимое нужно перенести в нижнюю таблицу?
Опиши как в твоем представлении выглядят действия пользователя.
Просто если в документ нужно перенести весь справочник, то эта форма подбора не нужна, а нужно добавить кнопку в форму документа и повесить на нее процедуру из (9).
Если все-таки пользователь должен отобрать элементы по какому-то критерию, например из какой-то конкретной группы перенести или с использованием какого-то отбора, то по другому действовать нужно.
28 Arland
 
07.03.18
11:30
(27) В 8-ке есть режим выделения.
Как в 7-ке сделать тоже самое и перенести выделенную номенклатуру в документ?
http://i99.fastpic.ru/big/2018/0307/12/eabddf27c3b3cd7936fb789bc80f0912.jpg
29 silent person
 
07.03.18
11:36
(28) в 7.7 нет режима выделения, но есть режим "Множественного выбора". Это когда при выборе одного элемента окно подбора не закрывается а можно сразу ткнуть в следующий.
об этом сказали еще в (6)
30 Kigo_Kigo
 
07.03.18
11:40
тогда не форму подбора использовать а Сз с пометкой
31 Salimbek
 
07.03.18
11:40
(29) А еще это дело кодом обвязывать нужно. Само по себе включением галочки оно не работает.
32 Kigo_Kigo
 
07.03.18
11:51
так пойдет?
https://yadi.sk/i/AamyFMiM3T748n
33 Arland
 
07.03.18
11:57
(32) Нет, всеравно тыкать нужно по каждой номенклатуре.
Мне нужно выбрать всю номенклатуру по нажатию одной кнопки.
34 Kigo_Kigo
 
07.03.18
11:59
(33) Всю, или ту что есть на остатках?
В пределах родителя, или тупо всю без групп?
35 Davalebor
 
07.03.18
11:59
(33) Сделай кнопку в форме подбора, в ее процедуре перебери весь справочник и помещай в нижнюю таблицу те элементы, которые подходят под используемые критерии отбора в верхнем списке.
36 Davalebor
 
07.03.18
12:00
(34) Так не признается он, спрашивали выше )
37 Arland
 
07.03.18
12:01
(35) Вот именно с процедурой у меня и проблема))
38 silent person
 
07.03.18
12:01
(33) режим выделения в 7.7 включается только с помощью 1CPP.dll
39 Arland
 
07.03.18
12:02
(36) Подскажите пож. какую процедуру писать для кнопки, чтобы при подборе номенклатуры можно было выбрать все элементы списка в форме подбора номенклатуры. Чтобы не по одному подбирать, а выбрать все из списка.
40 Arland
 
07.03.18
12:03
(34) Тупо все без групп!!!
41 silent person
 
07.03.18
12:04
чем (9) не устроило? тупо выбирает все элементы справочника.
не знаешь как группы исключить ?
42 Kigo_Kigo
 
07.03.18
12:09
Процедура ВыбратьВсе()
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если Спр.ЭтоГруппа() = 1 Тогда
        Продолжить;
    КонецЕсли;
       ТаблицаПодбора.НоваяСтрока();
       ТаблицаПодбора.Номенклатура = Спр.ТекущийЭлемент();
      
       ТаблицаПодбора.Единица = Спр.БазоваяЕдиница;
// и так далее      
    КонецЦикла;

КонецПроцедуры
43 Kigo_Kigo
 
07.03.18
12:09
В формулу кнопки помести ВыбратьВсе()
44 Arland
 
07.03.18
12:20
(42) Огромное Спасибо!!!! Это то что нужно, работает!!!)
45 Масянька
 
07.03.18
12:34
(41) Я там понимаю, тем, что код не полный... Но я думала мужчина с 22 см, а оказалось :))))))))))
46 один я дАртаньян
 
07.03.18
12:53
(44) Т.е. тебе нужно было тупо все элементы, а не только те, что на экране в данный момент?
47 Kigo_Kigo
 
07.03.18
12:57
(46) См (40) :)
48 Kigo_Kigo
 
07.03.18
13:02
(46) Ну можно и те что на эране
Процедура ВыбратьВсе()
Если ПустоеЗначение(ТекущийЭлемент().Родитель)  = 0 Тогда
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ИспользоватьРодителя(ТекущийЭлемент().Родитель);
    Спр.ВыбратьЭлементы(1);
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если Спр.ЭтоГруппа() = 1 Тогда
        Продолжить;
    КонецЕсли;
       ТаблицаПодбора.НоваяСтрока();
       ТаблицаПодбора.Номенклатура = Спр.ТекущийЭлемент();
      
       ТаблицаПодбора.Единица = Спр.БазоваяЕдиница;
// и так далее      

    КонецЦикла;
КонецЕсли;
КонецПроцедуры

нужно еще проверить, на каком уровне иерархии находится сейчас элемент и так далее, мне лень писать :)
49 Arland
 
07.03.18
13:05
(48) А, можно туда все остатки перенести в колонку количество?
50 Davalebor
 
07.03.18
13:06
(48) Теоретически еще всякие отборы могут быть включены, тогда на экране не полный перечень элементов будет.
Но ТС видимо над "тупо все".
51 Kigo_Kigo
 
07.03.18
13:15
(49)
ТовОстаток = 0;
ТовОстатокПоФирме = 0;             глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, Спр.ТекущийЭлемент, Спр.БазоваяЕдиница, ОстаткиТМЦ, ТовОстаток, ТовОстатокПоФирме, Склад, Резервы, 1);
ТаблицаПодбора.Количество = ТовОстаток; //или ТовОстатокПоФирме
52 Масянька
 
07.03.18
13:20
(51) А говорят, что эсники тупые и жадные... :)))))))
53 Kigo_Kigo
 
07.03.18
13:28
(52)Ну Ленивый,ну может туповат, да, но не жадный :)))
54 Масянька
 
07.03.18
13:29
(53) Согласна :)
Гони шоколадку :))))) (ШУТКА)
55 Kigo_Kigo
 
07.03.18
13:30
(54) Главное, чтобы сча за цену с суммой не спросил :)
56 Arland
 
07.03.18
13:31
(52) ))
57 Arland
 
07.03.18
13:32
(55) Выдает ошибку
глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, Спр.ТекущийЭлемент, Спр.БазоваяЕдиница, ОстаткиТМЦ, ТовОстаток, ТовОстатокПоФирме, Склад, Резервы, 1);
{Справочник.Номенклатура.ФормаСписка.ДляПодбора.Модуль(616)}: Поле агрегатного объекта не обнаружено (ТекущийЭлемент)
58 Масянька
 
07.03.18
13:32
(55) П-п-п-предупреждать надо :)))))))
59 Масянька
 
07.03.18
13:33
(57) Зашибись....
60 Kigo_Kigo
 
07.03.18
13:35
(57) Спр.ТекущийЭлемент = Спр.ТекущийЭлемент()
61 Kigo_Kigo
 
07.03.18
13:35
(59) Он наверно думает, что я еще и тестирую сижу :)
62 Arland
 
07.03.18
13:36
(61) ) не думаю
63 Arland
 
07.03.18
13:38
(61) Спасибо огромное за помощь!!!!
64 Arland
 
07.03.18
13:39
(55) Не спрошу, а, можно?)))
65 Kigo_Kigo
 
07.03.18
13:45
(64) А тут уже от склада зависит(розничный/оптовый) и от типа цены,и заполнены ли они в справочнике :)
66 Arland
 
07.03.18
13:48
(65) Цены закупочные, склад оптовый, в справочнике заполнены.
67 Kigo_Kigo
 
07.03.18
13:54
Ед = "";
ТовЦена = 0;
ТовВалюта="";
Если ПолучитьЦенуНоменклатуры(Спр.ТекущийЭлемент(), Спр.БазоваяЕдиница, ТовЦена, ТовВалюта) = 1 Тогда
    ТаблицаПодбора.Цена= ТовЦена;
    ТаблицаПодбора.Сумма = ТаблицаПодбора.Цена*ТаблицаПодбора.Количество;
    
КонецЕсли;
68 Arland
 
07.03.18
13:58
(67) Рассчетная        = ТипЦены.Рассчитывается;
{Глобальный модуль(1312)}: Значение не представляет агрегатный объект (Рассчитывается)
69 Kigo_Kigo
 
07.03.18
14:06
(68) Ну так выбери в документе из которого открываешь подбор - тип цен, он сейчас у тебя пустой
70 Arland
 
07.03.18
14:10
(69) Спасибо!!!!
71 Arland
 
07.03.18
14:11
(69) А, можно при выборе, выбрать только номенклатуру только с остатками?
72 Arland
 
07.03.18
14:11
(69) А, можно при выборе, выбрать номенклатуру только с остатками?
73 Kigo_Kigo
 
07.03.18
14:17
(71) Можно
Поместить
Пока спр.ПолучитьЭлемент() =1 Цикл
    Если Спр.ЭтоГруппа() = 1 Тогда
        Продолжить;
    КонецЕсли;
    
    ТовОстаток = 0;
    ТовОстатокПоФирме = 0;            
    глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, Спр.ТекущийЭлемент, Спр.БазоваяЕдиница, ОстаткиТМЦ, ТовОстаток, ТовОстатокПоФирме, Склад, Резервы, 1);
    Если ТовОстаток = 0 Тогда
        Продолжить;
    КонецЕсли;
    ТаблицаПодбора.НоваяСтрока();
    ТаблицаПодбора.Номенклатура = Спр.ТекущийЭлемент();
    ТаблицаПодбора.Единица = Спр.БазоваяЕдиница;
    Ед = "";
    ТовЦена = 0;
    ТовВалюта="";
    Если ПолучитьЦенуНоменклатуры(Спр.ТекущийЭлемент(), Спр.БазоваяЕдиница, ТовЦена, ТовВалюта) = 1 Тогда
        ТаблицаПодбора.Количество = ТовОстаток;
        ТаблицаПодбора.Цена= ТовЦена;
        ТаблицаПодбора.Сумма = ТаблицаПодбора.Цена*ТаблицаПодбора.Количество;
    КонецЕсли;
КонецЦикла;
74 Kigo_Kigo
 
07.03.18
14:21
Давай уж добью
)))

Если ТипЦен.Выбран() = 0 Тогда
    Если ВвестиЗначение(ТипЦен,"Выберите тип цен","Справочник.ТипыЦен") = 0 Тогда
        Сообщить("Нужно выбрать тип цен!");
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецЕсли;

Пока спр.ПолучитьЭлемент() =1 Цикл
    Если Спр.ЭтоГруппа() = 1 Тогда
        Продолжить;
    КонецЕсли;
    
    ТовОстаток = 0;
    ТовОстатокПоФирме = 0;            
    глПолучитьОстаткиНоменклатуры(ФирмаДляОстатковТМЦ, Спр.ТекущийЭлемент, Спр.БазоваяЕдиница, ОстаткиТМЦ, ТовОстаток, ТовОстатокПоФирме, Склад, Резервы, 1);
    Если ТовОстаток = 0 Тогда
        Продолжить;
    КонецЕсли;
    ТаблицаПодбора.НоваяСтрока();
    ТаблицаПодбора.Номенклатура = Спр.ТекущийЭлемент();
    ТаблицаПодбора.Единица = Спр.БазоваяЕдиница;
    Ед = "";
    ТовЦена = 0;
    ТовВалюта="";
    Если ПолучитьЦенуНоменклатуры(Спр.ТекущийЭлемент(), Спр.БазоваяЕдиница, ТовЦена, ТовВалюта) = 1 Тогда
        ТаблицаПодбора.Количество = ТовОстаток;
        ТаблицаПодбора.Цена= ТовЦена;
        ТаблицаПодбора.Сумма = ТаблицаПодбора.Цена*ТаблицаПодбора.Количество;
    КонецЕсли;
КонецЦикла;
75 Мандалай
 
07.03.18
14:23
Чеж вы прям по живому?

<Спр.ВыбратьЭлементы(1);>

Дети, учите запросы - это еще Дед мороз говорил!
76 Мандалай
 
07.03.18
14:24
77 это конечно не 8-ка, но конструктор там тоже есть.
77 Arland
 
07.03.18
14:28
(73) Номенклатуру выбирает правильно с остатками, но количество не переносит в док.
78 Arland
 
07.03.18
14:29
(75) Что не так?
79 Arland
 
07.03.18
14:30
(74) )))
80 Мандалай
 
07.03.18
14:33
Выборка элементов справочника работает на порядок медленнее чем использование запроса, пусть даже типового, а не прямого.

    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ИспользоватьРодителя(ТекущийЭлемент().Родитель);
    Спр.ВыбратьЭлементы(1);

Вот за такую запись вы бы спеца по 77 не получили.
81 Kigo_Kigo
 
07.03.18
14:37
(80) Работает? Не трожь! вы ветку читали? тут лепили из того что было :)
82 Arland
 
07.03.18
14:39
(81) Еще как работает!!!!! Все отлично Работает!!!!

Kigo_Kigo тут такую штуку сделал!!!!
83 Мандалай
 
07.03.18
14:39
(81) золотое правило программиста, беру свои слова обратно :)
84 Arland
 
07.03.18
14:46
(81) (83) А теперь скажу для чего это нужно было))

Есть старая база на 7-ке, вся замусоренная.
Базу очистил, удалив все dbf, оставив только номенклатуру.
Нужно было оприходовать товар. Благодоря  Kigo_Kigo
создал док оприходования остатков ТМЦ в старой и перенес док в чистую базу.
85 Arland
 
07.03.18
14:49
(81) Огромное тебе спасибо!!!! С меня причитаеться
86 Kigo_Kigo
 
07.03.18
15:11
(84) Вот так мы легко и не принужденно срезали сейчас базу, а ведь мог бы просто спросить, ребят чем базу срезать? и мы бы ему сча обработками как мыло закидали бы, и все адью, ветка на 3-4 ответа, а тут аж на 86 настрочили :)
87 Масянька
 
07.03.18
15:14
(84) Инветаризация -> оприходование ТМЦ - все есть в стандарте.
(86) Во-о-о-от... Я всегда прошу (а надо требовать!) описание задачи... А не разводить бодягу на сотку...
88 Kigo_Kigo
 
07.03.18
15:17
(87) Сча погодь, там еще с взаиморасчетами вопросики будут наверно :)
89 Масянька
 
07.03.18
15:19
(88) Не-на-чи-най....
А партии? А касса? А склады?
"Плюнула на плешь ему и послала к Лешему!" (С)
90 Arland
 
07.03.18
15:27
(89) (86) я и сам не думал ее реза все само собой получилось)))
91 Arland
 
07.03.18
15:27
(87) Говорю база убитая, там мусору валом
92 Arland
 
07.03.18
15:29
(88) не будет, кроме контрагентов и остатков номенклатуры с ценами ничего ненужно. Все отлично работает)
93 один я дАртаньян
 
07.03.18
18:41
(48) Когда я говорил все нак экране, я имел ввиду так как рисовал топикстартер http://i103.fastpic.ru/big/2018/0307/40/f34cf280a81d7fc50228dc20bd188540.jpg

Т.е. в правочнике 1000 позиций в данный момент на экране 10 нажал кнопку перенеслись именно эти десят, развернул окно, стали помещаться 50 элементов нажал на кнопк попало 50 элементов.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан