Имя: Пароль:
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 элементов.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой