Имя: Пароль:
1C
1С v8
Заполнить поле выбора
0 ghostrid3r
 
18.12.12
12:06
Добрый день подскажите как заполнить поле выбора, написал следующий код а всеравно поле выбора <не задано>.

               Форма = НовДокРеалТоваровУслуг.ПолучитьФорму();
               Номенклатура = ПолучитьСправочнкиИз8ки(Новый Структура("Имя, Назначение, ИмяЭ",Стр.ТМЦ, Стр.НазПрод, Стр.ТМЦЭ), "Номенклатура");                    
               ЭлементСпискаЗначений = Форма.ЭлементыФормы.Вагоны.Колонки.Номенклатура.ЭлементУправления.СписокВыбора.Добавить(Номенклатура);
               Форма.ЭлементыФормы.Вагоны.Колонки.Номенклатура.ЭлементУправления.Значение = ЭлементСпискаЗначений;

ЭлементСпискаЗначений все ок, там сидит наша номенклатура, а вот как ее подставить в табличную часть?
1 cw014
 
18.12.12
12:07
Форма.ЭлементыФормы.Вагоны.Колонки.Номенклатура.ЭлементУправления.Значение = ЭлементСпискаЗначений.Значение;
2 ghostrid3r
 
18.12.12
12:08
(1) не подходит в отладчике, это равенство равно ЛОжь
3 Reset
 
18.12.12
12:11
(2) Это не равенство, это присваивание
4 Reset
 
18.12.12
12:11
Хотя и некорректное
5 Reset
 
18.12.12
12:13
Возможно, нужно что-то типа
Форма.Вагоны[НомерСтроки].Номнклатура=ЗначениеНоменклатуры

Пишу "возможно", потому что условия задачи эээ нечеткие
6 Reset
 
18.12.12
12:14
или, вернее
НовДокРеалТоваровУслуг.Вагоны[НомерСтроки].Номнклатура=ЗначениеНоменклатуры
7 ghostrid3r
 
18.12.12
12:20
(6) ваш вариант не подходит, тк номенклатура не реквизит табличной части, поэтому к ней надо обращатся через элементы формы
8 ghostrid3r
 
18.12.12
12:22
(3) + если это присваивание и при присваивание отладчик выдал Ложь, то присваивания не будет, и так же останется <не задано>
9 ghostrid3r
 
18.12.12
12:27
единсвенный вариант при котором присваивание выдаст истину следующий, но я не уверен что он правильный.

Форма.ЭлементыФормы.Вагоны.Колонки.Номенклатура.ЭлементУправления.СписокВыбора[0].Значение = ЭлементСпискаЗначений.значение
10 Reset
 
18.12.12
12:28
"не реквизит табличной части,поэтому к ней надо обращатся через элементы формы"
Мощно задвинул.
Так ты определи тогда, что такое - номенклатура.

(8) "при присваивание отладчик выдал Ложь" - у тебя действительно такая каша в мозгах или просто изъясняться не умеешь?
11 cw014
 
18.12.12
12:28
(8) Отладчик не отрабатывает присваивание. Он может только вычислить значение, поэтому он равенство тебе показывает, что на данный момент значение не равно указываемому
12 Reset
 
18.12.12
12:29
(9) Прекрати это "при котором присваивание выдаст истину"
Тут не С а 1С, примваивание ничего не выдает
13 Reset
 
18.12.12
12:29
присваивание*
14 Reset
 
18.12.12
12:30
(0) "а вот как ее подставить в табличную часть"
(7) " тк номенклатура не реквизит табличной части"

действительно каша
15 ghostrid3r
 
18.12.12
12:32
(10) я не мощно задвинул, это добавленная вручную колонка, с типом строка, с повешеными обработчиком выбора, которой пихает туда номенклатуру из другой табличной части. Но мне не нужно каждый раз заходить и выбирать например 100 строк, а чтобы они автоматом заполнились
16 cw014
 
18.12.12
12:32
Пока не поймешь, что такое присваивание и сравнение, пока не научишься отделять мух от котлет - помочь ничем не смогу
17 Reset
 
18.12.12
12:33
(15) Добавленная вручную КУДА?
18 cw014
 
18.12.12
12:33
(4) А почему ты думаешь что некорректное? Ибо у поля выбора есть тип значения - неважно что оно всегда "Произвольное". Поэтому значением этого ЭУ будет значением из элемента списка
19 ghostrid3r
 
18.12.12
12:34
в табличную часть Вагоны
20 Reset
 
18.12.12
12:35
(18) Некорректное - потому что мухе котлету пытается присвоить
21 Reset
 
18.12.12
12:36
(19) Ты отличаешь табличную часть от табличного поля? Точно добавил в табличную часть?
22 ghostrid3r
 
18.12.12
12:36
как вам еще обьяснить?
23 Reset
 
18.12.12
12:36
(19) тк в (7)
"тк номенклатура не реквизит табличной части"
24 ghostrid3r
 
18.12.12
12:36
(21) да точно она добавлена в табличную часть.
25 Reset
 
18.12.12
12:37
(24) тогда см (6)
26 ghostrid3r
 
18.12.12
12:37
(23) ее в реквизитах нет, когда обратится к табличной части документа, не через элементы формы.
27 Reset
 
18.12.12
12:38
(26) Я спросил в (21), отличаешь или нет - вижу, не отличаешь
28 cw014
 
18.12.12
12:38
(20)
   ЭлементыФормы.ПолеВыбора1.СписокВыбора.Очистить();
   ЭлементыФормы.ПолеВыбора1.СписокВыбора.Добавить("ААА");
   ЭлементыФормы.ПолеВыбора1.СписокВыбора.Добавить("БББ");
   ЭлементыФормы.ПолеВыбора1.СписокВыбора.Добавить("ВВВ");
   ЭлементыФормы.ПолеВыбора1.СписокВыбора.Добавить("ГГГ");
   ЭлементыФормы.ПолеВыбора1.Значение = "ВВВ";



Прикинь, работает
29 Reset
 
18.12.12
12:39
(28) Два путающих мух и котлеты на одного меня - слишком много
30 ghostrid3r
 
18.12.12
12:39
(25) Поле объекта не обнаружено Номенклатура.
31 Reset
 
18.12.12
12:40
(28) А ты отличаешь табличное поле от поля ввода?
32 cw014
 
18.12.12
12:41
(31) А где ты видел у меня "Поле ввода"?
33 Reset
 
18.12.12
12:44
(32) Ну поле выбора. Прикидывешься идиотом?
34 Reset
 
18.12.12
12:44
(33) хотя грубовато, извини
35 cw014
 
18.12.12
12:45
(34) Ладно, мы похоже не до конца друг друга понимаем
(30) Подскажи, а что у тебя в свойстве "Данные" находится, если колонка не реквизит ТЧ?
36 Reset
 
18.12.12
12:46
В общем, для более терпеливых читателей темы.
Я так понимаю что автор в ТП с данными из ТЧ впендючил колонку и хочет заполнить ее данными. Очевидно, это невозможно, т.к. данных у такой колонки нет. Можно только симулировать наличие данных в ней ПриВыводеСтроки(ПриПолученииДанных), храня их где-нибудь. Ну или добавить таки реквизит в ТЧ. Не чувствую себя в состоянии довести это до автора, может кому-то другому удастся.
37 cw014
 
18.12.12
12:47
(30) Слушай мудрых людей в (36)
38 ghostrid3r
 
18.12.12
12:48
Форма.ЭлементыФормы.Вагоны.Колонки.Номенклатура.Данные - строка (35)
39 ghostrid3r
 
18.12.12
12:49
(36) и ничего я не впиндюривал, все так и было. просто нужно заполнить автоматом
40 ghostrid3r
 
18.12.12
12:59
Форма.ЭлементыФормы.Вагоны.Номенклатура поле объекта не обнаружено Номенклатура.

Форма.ЭлементыФормы.Вагоны.Колонки.Номенклатура - КолонкаТабличногоПоля
41 cw014
 
18.12.12
13:00
(38) Не может быть.... А что в этом свойстве то?
42 cw014
 
18.12.12
13:01
(40) Логично
43 Reset
 
18.12.12
13:02
(35) Я действительно не совсем прав был, если у колонки нет данных,(1) присвоит значение "по умолчанию" для "всех" элементов управления в ТП. Т.е. если нужно одно на всех значение во всех строках (?), тогда это можно использовать.
Но автору нужно, видимо, в каждой строке свое значение, иначе зачем вообще добавлять это в ТЧ.
44 Reset
 
18.12.12
13:03
(43) неправ в том, что "присваивание некорректное"
45 cw014
 
18.12.12
13:03
(44) Прощаю, я не обидчивый. Ну так что будем с ТП делать то?
46 Reset
 
18.12.12
13:06
(45) я не знаю, что делать. Автор то добавлял колонку, то "так было". Если "было" (кто-то уже сделал до автора) и колонка уже организована с хранением, то обращаться нужно туда, где оно хранится.
Короче кончился запас телепатии
47 ghostrid3r
 
18.12.12
13:08
(46) я нигде не писал что добавлял колонку
48 ghostrid3r
 
18.12.12
13:09
вот какие обработчики висят на этом поле выбора

Процедура ВагоныНоменклатураНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
   ЭлементыФормы.Вагоны.Колонки.Номенклатура.ЭлементУправления.СписокВыбора = СформироватьСписокВыбораНоменклатурыДляТранспорта();
КонецПроцедуры

Функция СформироватьСписокВыбораНоменклатурыДляТранспорта()
   
   СписокВыбора = Новый СписокЗначений;
   
   Для каждого СтрокаТоваров ИЗ Товары Цикл
       Если СтрокаТоваров.КлючСтроки <> 0 Тогда
           СписокВыбора.Добавить(Новый Структура("ИмяТЧ, КлючСтроки", "Товары", СтрокаТоваров.КлючСтроки), "" + СтрокаТоваров.НомерСтроки + ". " + СтрокаТоваров.Номенклатура);
       КонецЕсли;
   КонецЦикла;
   
   Возврат СписокВыбора;
   
КонецФункции
49 Reset
 
18.12.12
13:09
(47) ----> (15)
" это добавленная вручную колонка, с типом строка"
50 ghostrid3r
 
18.12.12
13:11
Раньше все в тч части товары выбирали номенклатуру, а в тч вагоны забывали. Теперь нужно пройтись обработкой и заполнить номенклатуру в тч вагоны. (49) и где тут написано что добавлял я?
51 Reset
 
18.12.12
13:12
(50) Слушай, мне похрен, реально, кто именно добавлял.

(48) Покажи обработчики ВагоныПриВыподеСтроки и ВагоныПриПолученииДанных, если таковые есть.
52 Reset
 
18.12.12
13:13
ВагоныПриВыподеСтроки --> ВагоныПриВыводеСтроки
53 cw014
 
18.12.12
13:13
(50) > а в тч вагоны забывали
Может потому и "забывали" что не давало выбрать?
54 ghostrid3r
 
18.12.12
13:15
Процедура ВагоныПриПолученииДанных(Элемент, ОформленияСтрок)
   ПриПолученииДанныхТабличногоПоляТранспорта(Элемент, ОформленияСтрок);
КонецПроцедуры

Процедура ПриПолученииДанныхТабличногоПоляТранспорта(Элемент, ОформленияСтрок)
   
   Если НЕ Элемент.Колонки.Номенклатура.Видимость Тогда
       Возврат;
   КонецЕсли;
   
   Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
       
       ТекстНоменклатуры = "<не задана>";
       Если ОформлениеСтроки.ДанныеСтроки.КлючСтроки <> 0 И НЕ ПустаяСтрока(ОформлениеСтроки.ДанныеСтроки.ИмяТЧСтроки) Тогда
           СтрокиТоваров = ЭтотОбъект[ОформлениеСтроки.ДанныеСтроки.ИмяТЧСтроки].НайтиСтроки(Новый Структура("КлючСтроки", ОформлениеСтроки.ДанныеСтроки.КлючСтроки));
           Если СтрокиТоваров.Количество() > 0 Тогда
               ТекстНоменклатуры = СтрокиТоваров[0].Номенклатура.Наименование;
           КонецЕсли;
       КонецЕсли;
       
       ОформлениеСтроки.Ячейки.Номенклатура.УстановитьТекст(ТекстНоменклатуры);
       
   КонецЦикла;
   
КонецПроцедуры
55 cw014
 
18.12.12
13:17
(54) Так, уже что то. А нужно то теперь что?
56 Reset
 
18.12.12
13:18
(54) Т.е. в табличной части "Вагоны" есть поле КлючСтроки?
57 cw014
 
18.12.12
13:19
(56) Смотри, что то проясняется
58 cw014
 
18.12.12
13:19
(56) И я кажется знаю что. Он хочет выбирать номенклатуру, а должно меняться "КлючСтроки" по этой номенклатуре. Короче связывать их как серийные номера
59 ghostrid3r
 
18.12.12
13:20
(56) есть
60 Reset
 
18.12.12
13:21
(59) и в этом поле хранится эмм структура, состоящая из имени ТЧ и клча строки в ТЧ
61 cw014
 
18.12.12
13:21
(60) Скорее всего просто Ключ строки
62 Reset
 
18.12.12
13:22
(60) А, не
два отдельных
ИмяТЧСтроки
КлючСтроки
63 Reset
 
18.12.12
13:22
(62) Собственно, в них и нужно писать, а не в "Номенклатура"
64 Reset
 
18.12.12
13:24
т.е
НовДокРеалТоваровУслуг.Вагоны[НомерСтроки].ИмяТЧСтроки="Товары";
НовДокРеалТоваровУслуг.Вагоны[НомерСтроки].КлючСтроки=КлючСтрокиИз_ТЧ_Товары
65 Reset
 
18.12.12
13:26
КлючСтрокиИз_ТЧ_Товары - это значение реквизита КлючСтроки из табличной части товары, из той строки, в которой находится нужна номенклатура
66 Reset
 
18.12.12
13:34
В (54) неоптимальность - используется НайтиСтроки, когда можно просто Найти (зря тратится время на создание структуры, зря осущвляется поиск по всей тч, когда можно остановится при первом найденном, зря возвращается массив (из одного значения), зря тратится время на получение элемента по индексу..) Хотя это детали, так, докопаться.
67 Reset
 
18.12.12
13:35
(66) При этом используется Номенклатура.Наименование;
Пффф :)
68 Reset
 
18.12.12
13:41
Короче, ответ на (0) в (64)(65)