Имя: Пароль:
1C
 
Создание списка выбора для поля табличной части документа
, ,
0 NIGHTHUNTER
 
15.08.22
11:51
В табличной части документа, в первой коленке выбирается ссылка на документ.
У этого документа, есть табличная часть, в которой хранятся некие номера.
Необходимо дать пользователю возможность выбора перечня номеров, которые хранятся в определенной колонки тч, выбираемого документа.
то есть имея ссылку на документ, можно получать номера его табличной части. Как дать пользователю, в документе выбирать из этого перечня номеров.
Номер может быть один, так как повторяется, может быть несколько так как разные.
Как в следующем за полем с типом ссылка на документ, вывести список этих номеров?
1 NIGHTHUNTER
 
15.08.22
12:03
там нужно как то заполнять СписокВыбора, этого поля табличной части?
Подскажите пожалуйста как именно???
2 Ёпрст
 
15.08.22
12:11
(0) .Добавить
3 Kigo_Kigo
 
15.08.22
12:15
НачалоВыбора стандартнаяОбработка = ложь и поехали накидывать СЗ из документСсылка
4 mikecool
 
15.08.22
12:19
(1) когда уже ты поиском будешь пользоваться?
5 Фантазер
 
15.08.22
12:33
(4) А это тоже своеобразный поиск. Через коллективный разум. Зато человек учится формулировать задачи. А в процессе формирования вопроса часто приходит и ответ.
6 NIGHTHUNTER
 
15.08.22
14:44
Подскажите пожалуйста, почему не работает выбор в поле?

//
&НаСервере
Функция ПолучитьСписокномеровНаСервере(ДокументСсылка)
    CписокНомеров = Новый Массив;
    //
    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.ХХХ_НомерДобавления КАК НомерДобавления
        |ИЗ
        |    Документ.ХХХ_ПредварительныйЗаказПоставщику.Товары КАК ХХХ_ПредварительныйЗаказПоставщикуТовары
        |ГДЕ
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Рез = Запрос.Выполнить();
    Если НЕ Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        Пока Выборка.Следующий() Цикл
            CписокНомеров.Добавить(Выборка.НомерДобавления);        
        КонецЦикла;
    КонецЕсли;    
    Возврат CписокНомеров;
КонецФункции
//
&НаКлиенте
Процедура ЛимитыНомерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    //
    ТекСтрока     = Элементы.Лимиты.ТекущиеДанные;
    СписокНомеров = ПолучитьСписокномеровНаСервере(ТекСтрока.ПредварительныйЗаказПоставщику);
    Если СписокНомеров.Количество() > 0 Тогда
        Элементы.Номер.СписокВыбора.ЗагрузитьЗначения(СписокНомеров);
    КонецЕсли;    
КонецПроцедуры
//
7 NIGHTHUNTER
 
15.08.22
14:53
У поля Номер, режим выбора из списка стоит .
8 Fram
 
15.08.22
17:07
(6) // СтандартнаяОбработка = Ложь;
9 NIGHTHUNTER
 
16.08.22
11:02
По коду в отладчике, в список добавился один элемент.
Но выбрать его так же не удается, список не открывается, ничего там нет.
И не выбирается. как нужно исправить? Что не так покоду?

&НаСервере
Функция ПолучитьСписокномеровНаСервере(ДокументСсылка)
    CписокНомеров = Новый Массив;
    //
    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.ХХХ_НомерДобавления КАК НомерДобавления
        |ИЗ
        |    Документ.ХХХ_ПредварительныйЗаказПоставщику.Товары КАК ХХХ_ПредварительныйЗаказПоставщикуТовары
        |ГДЕ
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Рез = Запрос.Выполнить();
    Если НЕ Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        Пока Выборка.Следующий() Цикл
            CписокНомеров.Добавить(Выборка.НомерДобавления);        
        КонецЦикла;
    КонецЕсли;    
    Возврат CписокНомеров;
КонецФункции
//
&НаКлиенте
Процедура ЛимитыНомерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    //СтандартнаяОбработка = Ложь;
    //
    ТекСтрока     = Элементы.Лимиты.ТекущиеДанные;
    СписокНомеров = ПолучитьСписокномеровНаСервере(ТекСтрока.ПредварительныйЗаказПоставщику);
    Если СписокНомеров.Количество() > 0 Тогда
        Элементы.Номер.СписокВыбора.ЗагрузитьЗначения(СписокНомеров);
    КонецЕсли;    
КонецПроцедуры
10 NIGHTHUNTER
 
16.08.22
11:02
(8) Я закомментировал. Но ничего не исправилось (
11 NIGHTHUNTER
 
16.08.22
11:04
РежимВыбораИзСписка галка стоит
12 NIGHTHUNTER
 
16.08.22
11:06
тип полей совпадает, число 10
13 NIGHTHUNTER
 
16.08.22
11:16
Подскажите, как мне сделать, что бы работал выбор из списка?
14 NIGHTHUNTER
 
16.08.22
11:23
В поле номер, несмотря на (9) ничего нельзя выбрать.
После того как в предыдущем поле выбран документ.
У которого в Тч содержатся эти значения, для списка в поле Номер.
Уже и свойство, КнопкаВыпадающегоСписка поставил в Да.
15 Мимохожий Однако
 
16.08.22
11:25
У поля Номер какой тип?
16 Мимохожий Однако
 
16.08.22
11:27
Еще есть процедура ТвоёПолеНачалоВыбораИзСписка()
17 NIGHTHUNTER
 
16.08.22
11:38
(15) Число, размерность 10. Такое же как и у документа, от куда берутся данные для его заполнения.
18 Мимохожий Однако
 
16.08.22
11:45
Кстати, если нажать буковку Я справа от темы, то возможно увидишь как минимум три варианта решения твоей задачки.)
19 NIGHTHUNTER
 
16.08.22
11:49
(16) Она не помогла.
20 NIGHTHUNTER
 
16.08.22
11:57
пока я не вижу вариантов решения не одного, мне нужно для управляемых форм
21 NIGHTHUNTER
 
16.08.22
11:59
Эта процедура вообще не работает, точка останова в ней не останавлявается.

&НаКлиенте
Процедура ЛимитыНомерНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    //
    ТекСтрока     = Элементы.Лимиты.ТекущиеДанные;
    СписокНомеров = ПолучитьСписокномеровНаСервере(ТекСтрока.ПредварительныйЗаказПоставщику);
    Если СписокНомеров.Количество() > 0 Тогда
        Элементы.Номер.СписокВыбора.ЗагрузитьЗначения(СписокНомеров);
    КонецЕсли;    
КонецПроцедуры
22 butterbean
 
16.08.22
11:59
(6) в событии НачалоВыбора уже поздновато элементу список подсовывать, нужно менять переменную ДанныеВыбора, то есть ДанныеВыбора().ЗагрузитьЗначения(СписокНомеров)
23 NIGHTHUNTER
 
16.08.22
12:21
(22)

Значение не является значением объектного типа (ЗагрузитьЗначения)
{Документ.ХХХ_РеестрЛимитов.Форма.ФормаДокумента.Форма(39)}:        ДанныеВыбора.ЗагрузитьЗначения(СписокНомеров)


&НаКлиенте
Процедура ЛимитыНомерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    //СтандартнаяОбработка = Ложь;
    //
    ТекСтрока     = Элементы.Лимиты.ТекущиеДанные;
    СписокНомеров = ПолучитьСписокномеровНаСервере(ТекСтрока.ПредварительныйЗаказПоставщику);
    Если СписокНомеров.Количество() > 0 Тогда
        Элементы.Номер.СписокВыбора.ЗагрузитьЗначения(СписокНомеров);
        ДанныеВыбора.ЗагрузитьЗначения(СписокНомеров)
    КонецЕсли;    
КонецПроцедуры
24 NIGHTHUNTER
 
16.08.22
12:22
(23) ДанныеВыбора в этой процедуре = неопределено
25 NIGHTHUNTER
 
16.08.22
12:24
(22)   Как тут быть? Для значения ДанныеВыбора с неопределенным типом, нельзя использовать ЗагрузитьЗначения()
26 sitex
 
naïve
16.08.22
12:35
(0) Номеров много ?
27 NIGHTHUNTER
 
16.08.22
12:36
(26) Пока что один.
28 sitex
 
naïve
16.08.22
12:38
(27) Обязательно выводить список в ячейке ? А если будет больше 15 или 25 тогда что ?
29 NIGHTHUNTER
 
16.08.22
12:43
(28) Табличная часть документа.
Вначале выбирается документ, в первой ячейке.
А во второй извлеченные из его табличной части номера. В списке, что бы пользователь мог выбрать нужный.
А как ещё это сделать? Такая задача.
30 sitex
 
naïve
16.08.22
12:48
(29) Тут все зависит сколько будет данных в списке выбора у пользователя. Если слишком много позиции в табл части это документа то лучше форму выводить и пусть выбирает что хочет.
31 NIGHTHUNTER
 
16.08.22
12:50
(30) Пока минимум, по этому и ищу способ сделать через список.
32 NIGHTHUNTER
 
16.08.22
12:52
почему вот эта процедура вообще не срабатывает?

ЛимитыНомерНачалоВыбораИзСписка
33 NIGHTHUNTER
 
16.08.22
12:58
У меня ничего не получается.
34 NIGHTHUNTER
 
16.08.22
13:02
Не думал что со списами такая проблема (
35 sitex
 
naïve
16.08.22
13:05
не вижу проблем
36 sitex
 
naïve
16.08.22
13:06
(24) ДанныеВыбора = новый СписокЗначений;
и ДанныеВыбора.ЗагрузитьЗначения(Сп)
37 sitex
 
naïve
16.08.22
13:06
и РежимВыбораИзСписка галку
38 sitex
 
naïve
16.08.22
13:07
и (3) вот в начале написал.
39 NIGHTHUNTER
 
16.08.22
13:09
(35) ок, сейчас пробую. Спасибо!
40 NIGHTHUNTER
 
16.08.22
13:09
(35) А почему в этой процедуре не срабатывают точки останова ?

ЛимитыНомерНачалоВыбораИзСписка()
41 sitex
 
naïve
16.08.22
13:12
(40) перезайди в Конфигуратор или у обработчик отвязался.
42 NIGHTHUNTER
 
16.08.22
13:14
(41) Ясно. Но я смотрел он был на месте. все равно значит видимо отвязанный был.
43 NIGHTHUNTER
 
16.08.22
13:33
Почистил сейчас кешь, перезапускаюсь.

(36) С этим значение нужное появилось в списке, но выбирая его, оно не появляется в самом поле.
Не подскажете что это значит?

(41) Эта процедура так и не запускается, я вообще процедуру переопределил.
44 NIGHTHUNTER
 
16.08.22
13:48
(37)  РежимВыбораИзСписка стоит галка и СтандартнаяОбработка = Ложь

Что не так с этим кодом7 Почему значение из списка не выбирается в поле?

&НаКлиенте
Процедура ЛимитыНомерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    //
    ДанныеВыбора  = Новый СписокЗначений;    
    ТекСтрока     = Элементы.Лимиты.ТекущиеДанные;
    СписокНомеров = ПолучитьСписокномеровНаСервере(ТекСтрока.ПредварительныйЗаказПоставщику);
    Если СписокНомеров.Количество() > 0 Тогда
        //Элементы.Номер.СписокВыбора.ЗагрузитьЗначения(СписокНомеров);
        ДанныеВыбора.ЗагрузитьЗначения(СписокНомеров)
    КонецЕсли;    
КонецПроцедуры
45 butterbean
 
16.08.22
13:50
(44) скорее всего дело вот в этом:

НачалоВыбора (StartChoice)

В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
46 NIGHTHUNTER
 
16.08.22
13:51
(45) А как быть? Сказали нет проблем. А они тут на каждом углу ((((

Тут вообще точки останова не срабатывают ЛимитыНомерНачалоВыбораИзСписка()
47 NIGHTHUNTER
 
16.08.22
13:52
Варианты какие то есть для решения задачи? Всего лишь, одно значение в списке и что бы его можно было бы выбрать в поле!
48 NIGHTHUNTER
 
16.08.22
13:57
Подскажете как мне решить вопрос?
49 Мимохожий Однако
 
16.08.22
13:58
(47) Повторяю, если нажать буковку Я справа от темы, то возможно увидишь как минимум три варианта решения твоей задачки.)
50 butterbean
 
16.08.22
14:00
(47) Сделай реквизит формы тип таблица значений,в ней храни все доступные номера для каждого ПредварительныйЗаказПоставщику. Эту таблицу значений обновляй при создании формы и при измении значения в колонке ПредварительныйЗаказПоставщику. И список выбора набивай уже из этой  таблицы
51 sitex
 
naïve
16.08.22
14:06
(48) Поставь так.



(44)&НаКлиенте
Процедура ЛимитыНомерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Элемент.СписокВыбора.Очистить();

    ТекСтрока     = Элементы.Лимиты.ТекущиеДанные;

    СписокНомеров = ПолучитьСписокномеровНаСервере(ТекСтрока.ПредварительныйЗаказПоставщику);

     ДанныеВыбора.ЗагрузитьЗначения(СписокНомеров);

    Элементы.СписокВыбора.ЗагрузитьЗначения(СписокНомеров);


КонецПроцедуры
52 NIGHTHUNTER
 
16.08.22
14:07
(49) Я же нажимал. Думаете я не делал этого? И просмотрел все что там есть, там для обычных форм. Мне нужно для управляемых.
53 Мимохожий Однако
 
16.08.22
14:11
(52) У меня на третьей позиции поиска
https://forum.infostart.ru/forum9/topic99225/
54 butterbean
 
16.08.22
14:14
(53) справедливости ради - это ему не подходит
55 NIGHTHUNTER
 
16.08.22
14:14
(53) Мне нужно формировать список, после выбора документа в предыдущей колонке.
Мне посоветовали делать это в процедуре НачалоВыбора, что никаких проблем.

Но а в вашей верке, там не так. при открытии что то там создается и тп т тд
56 Мимохожий Однако
 
16.08.22
14:16
(55) Тогда формируй список по окончании редактирования строки "после выбора документа в предыдущей колонки"
57 Мимохожий Однако
 
16.08.22
14:16
(54) Ну, так помоги ему
58 pasha_d
 
16.08.22
14:17
(47), (48) Судя по твоей интонации на каждой созданной тобою ветке - тебе тут все должны по ходу...
59 butterbean
 
16.08.22
14:17
(57) я ему в (50) вроде бы достаточно понятно описал, что надо делать
60 NIGHTHUNTER
 
16.08.22
14:22
(51)

Значение не является значением объектного типа (ЗагрузитьЗначения)
{Документ.ХХХ_РеестрЛимитов.Форма.ФормаДокумента.Форма(47)}:    ДанныеВыбора.ЗагрузитьЗначения(СписокНомеров);
61 NIGHTHUNTER
 
16.08.22
14:23
(51) Это как у вас? 2 раза загрузить значений?
62 sitex
 
naïve
16.08.22
14:24
(60) Сам мог догадаться чего не хватает.
63 NIGHTHUNTER
 
16.08.22
14:24
(62) Ну это я добавил

ДанныеВыбора  = Новый СписокЗначений;

сейчас перезапускаю. Не понимаю только ход дейтсвий. Как нужно уже вроде все должно сложиться. Но что то все не так.
64 NIGHTHUNTER
 
16.08.22
14:28
(62)

Поле объекта не обнаружено (СписокВыбора)
{Документ.ХХХ_РеестрЛимитов.Форма.ФормаДокумента.Форма(49)}:    Элементы.СписокВыбора.ЗагрузитьЗначения(СписокНомеров);
65 sitex
 
naïve
16.08.22
14:30
(64) Элемент.СписокВыбора
66 NIGHTHUNTER
 
16.08.22
14:30
Дело в том что я просто запутался, видя что ничего не работает (((.
67 sitex
 
naïve
16.08.22
14:31
(63) Путаться нечего. Коротко - Одно визуализирует , другое выбирает;
68 NIGHTHUNTER
 
16.08.22
14:37
Тут точка останова так и не работает, по этому как это работает я так и не узнал.


Процедура ЛимитыНомерНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)


Так же и не узнал, почему не работает эта процедура (.
69 NIGHTHUNTER
 
16.08.22
14:40
Сейчас, тестирую вот это:

//
&НаСервере
Функция ПолучитьСписокномеровНаСервере(ДокументСсылка)
    CписокНомеров = Новый Массив;
    //
    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.ХХХ_НомерДобавления КАК НомерДобавления
        |ИЗ
        |    Документ.ХХХ_ПредварительныйЗаказПоставщику.Товары КАК ХХХ_ПредварительныйЗаказПоставщикуТовары
        |ГДЕ
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Рез = Запрос.Выполнить();
    Если НЕ Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        Пока Выборка.Следующий() Цикл
            CписокНомеров.Добавить(Выборка.НомерДобавления);        
        КонецЦикла;
    КонецЕсли;    
    Возврат CписокНомеров;
КонецФункции
//
&НаКлиенте
Процедура ЛимитыНомерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ДанныеВыбора  = Новый СписокЗначений;    
    Элемент.СписокВыбора.Очистить();
    ТекСтрока     = Элементы.Лимиты.ТекущиеДанные;
    СписокНомеров = ПолучитьСписокномеровНаСервере(ТекСтрока.ПредварительныйЗаказПоставщику);
    ДанныеВыбора.ЗагрузитьЗначения(СписокНомеров);
    Элемент.СписокВыбора.ЗагрузитьЗначения(СписокНомеров);
КонецПроцедуры
//
70 NIGHTHUNTER
 
16.08.22
14:53
(69) Тут, даже не нужно СтандартнаяОбработка = Ложь ????
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой