Имя: Пароль:
1C
1С v8
Работа с деревом значений
0 Ly_Alena
 
19.01.15
08:51
Доброе утро, у кого-то уже день. Сразу сто раз извиняюсь за глупые вопросы.
Как в дереве значений добавить колонку?

Пишу так:
Если ПолучатьЦены Тогда
        
        ДеревоОстатков.Колонки.Добавить("Номенклатура");
        СтрокаНоменклатуры = ДеревоОстатков.Строки.Добавить();
        
        СтрокаНоменклатуры.Номенклатура = Номенклатура;
        
        Пока ПолучисьЦенушка.Следующий() Цикл
            
            ЗаполнитьПоляСумм(СтрокаСклад, ПолучисьЦенушка, СписокЦенОстатков, КурсыВалют);
            
        КонецЦикла;
        
    КонецЕсли;



Выдает ошибку - "Ошибка при вызове метода контекста "Добавить""
1 Ly_Alena
 
19.01.15
08:55
* ЗаполнитьПоляСумм(СтрокаНоменклатуры, ПолучисьЦенушка, СписокЦенОстатков, КурсыВалют);
2 Asmody
 
19.01.15
08:55
(0) если дерево на форме, то может проще колонку невидимой делать?
3 Fedor-1971
 
19.01.15
08:57
(0)Сделать то что хочешь?
Обычные управляемые формы?
Дерево будешь фомировать или это режим отображения табличного поля?
4 Ly_Alena
 
19.01.15
08:58
И в догонку вопрос, как скрыть колонку дерева значений? Пишу
ДеревоОстатков.ХарактеристикаСклад.Видимость - Ложь;

Тоже выдает ошибку, что поле не обнаружено.
5 butterbean
 
19.01.15
09:00
(4) видимо надо ДеревоОстатков.Колонки.ХарактеристикаСклад...
6 Ly_Alena
 
19.01.15
09:01
У меня выборка по складам идет. Раньше задача стояла - показывать плановую цену, только той номенклатуре которая есть на складе. Теперь нужно чтобы цена выходила на все.
Поэтому условие - если остатка на складе нет - то добавляем колонку - номенклатура в ней выводим номенклатуру и рядом цену, а колонку "Склад" прячем.
7 Ly_Alena
 
19.01.15
09:01
(5) так тоже пробовала
8 vicof
 
19.01.15
09:01
(0) ПолучисьЦенушка :))) умиляет
9 vicof
 
19.01.15
09:02
(7) ЭлементыФормы.ДеревоОстатков....
10 Ly_Alena
 
19.01.15
09:02
(8) я старалась )
11 Ly_Alena
 
19.01.15
09:02
(9) Ах да, это процедура в общем модуле. Элементыформы - не пойдет.
12 Peltzer
 
19.01.15
09:04
Видимостью можно управлять только в форме. Для объекта ДеревоЗначений нет такого свойства.
13 Ly_Alena
 
19.01.15
10:05
(12) Хорошо - пусть не видимость. Тогда вернемся к первому вопросу. Как создать столбец, т.е. колонку.
14 Ly_Alena
 
19.01.15
10:06
(12) если в модуле объекта то видимостью можно управлять.
15 _KaA
 
19.01.15
10:11
Тип у ДеревоОстатков скорее всего ДанныеФормыДерево?
16 Ly_Alena
 
19.01.15
10:12
(15) тип дерево значений
17 vicof
 
19.01.15
10:14
(13) ДеревоОстатков.Колонки.Добавить("Номенклатура");
18 DrZombi
 
гуру
19.01.15
10:14
(16) СП, продам не дорого :)

ДеревоЗначений (ValueTree)
Свойства:

Колонки (Columns)
Строки (Rows)

Методы:

ВыбратьСтроку (ChooseRow)
Скопировать (Copy)

Конструкторы:

По умолчанию

Описание:

Используется для доступа к свойствам и методам дерева значений в целом.
Объект, представляющий собой древовидную структуру, обладает сходной функциональностью с таблицей значений, а также обладает возможностью добавлять подчиненные строки к какой-либо строке дерева.

Внимание! В толстом клиенте (обычное приложение) передача значений данного типа с клиента на сервер и обратно приводит к возникновению исключения.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: ValueTree
Пример:

ДеревоРезультатов = Новый ДеревоЗначений;
Для Каждого Колонка ИЗ ТаблицаРезультатов.Колонки Цикл
    ДеревоРезультатов.Колонки.Добавить(Колонка.Имя);
КонецЦикла;


См. также:

ДеревоЗначений, метод Скопировать
РезультатАнализаДанныхПоискАссоциаций, метод ВыгрузитьПравила
СтрокаДереваЗначений, метод Владелец
19 DrZombi
 
гуру
19.01.15
10:15
+(16) А коль вы пытаетесь изменить не набор данных, а Интерфейс, то там другой подход :)
20 GRAF_84
 
19.01.15
10:15
21 Ly_Alena
 
19.01.15
10:16
(15) На форме есть дерево значений - ОстаткиДляНовогоКлиента. В функции
Функция СоздатьКолонкиДереваОстатков(ТаблицаПоиска = Неопределено, ВсеТипыЦен = Ложь) Экспорт
    
    ДеревоОстатков = Новый ДеревоЗначений;
    
    МассивБазовыхТиповЦен = Новый Массив;
    МассивРасчитываемыхЦен = Новый Массив;
    СформироватьМассивБазовыхТиповЦен(ТаблицаПоиска, МассивБазовыхТиповЦен, МассивРасчитываемыхЦен, ВсеТипыЦен);
       ДеревоОстатков.Колонки.Добавить("ХарактеристикаСклад", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры,СправочникСсылка.Склады"));
    //ДеревоОстатков.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка"));
    ДеревоОстатков.Колонки.Добавить("ГВ", Новый ОписаниеТипов("СправочникСсылка.ГодВыпуска"));
    ДеревоОстатков.Колонки.Добавить("МестоХранения"      , Новый ОписаниеТипов("Строка"));
    ДеревоОстатков.Колонки.Добавить("Общий"              , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
    ДеревоОстатков.Колонки.Добавить("Свободный"          , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
    ДеревоОстатков.Колонки.Добавить("СвободныйОжидаемый" , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
    ДеревоОстатков.Колонки.Добавить("ВРезерве"           , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
    

    // Тут колонки добавляются в том порядке в котором они идут в списке типов цен
    Если МассивБазовыхТиповЦен.Количество() > 0 Тогда
        
        // колонки для Каждого типа цены
        Для Каждого Элемент Из МассивБазовыхТиповЦен Цикл
            ПрефиксИмени = ОпределитьПрефиксИмениКолонки(ТаблицаПоиска, Элемент);
            СоздатьКолонкиСуммДерево(ДеревоОстатков, ПрефиксИмени);
        КонецЦикла;
        
        Для Каждого Элемент Из МассивРасчитываемыхЦен Цикл
            ПрефиксИмени = ОпределитьПрефиксИмениКолонки(ТаблицаПоиска, Элемент);
            СоздатьКолонкиСуммДерево(ДеревоОстатков, ПрефиксИмени);
        КонецЦикла;

    КонецЕсли;
    
    Возврат ДеревоОстатков;
    
КонецФункции
22 Ly_Alena
 
19.01.15
10:17
(17) Самое первое сообщение так и есть.
23 Ly_Alena
 
19.01.15
10:17
(18) я читала справку.
24 Ly_Alena
 
19.01.15
10:19
Кажись тапки полетят...
25 _KaA
 
19.01.15
10:21
(16) Докеж*!

Перевод: можно увидеть картинку из отладчика как доказательство?!
26 DrZombi
 
гуру
19.01.15
10:21
(24) У тебя код в (0) приведен, так как он есть?
В (0) написан бред :)

Попробуй сделать, как в СП. И добавление колонок в цикле, не есть хорошо, там должны быть ошибка "Идентификатор колонки не уникален".

Лена, вы бы хоть привели бы полный текст ошибки :)
27 DrZombi
 
гуру
19.01.15
10:23
+(24) Сохрани Обработку в файли, и выложи на Файло помойку. Дай посмотреть, что ты там пишешь :)
28 Ly_Alena
 
19.01.15
10:25
(26) Алена. Не могу обработку дать. Ком тайна )) Все отслеживается. Могу только фрагменты кода. Картинку и полный код ошибки - сейчас дам.
29 _KaA
 
19.01.15
10:27
(28) Весь в предвкушении. Даж в чистое переоделся :)))
30 DrZombi
 
гуру
19.01.15
10:27
(28) Давайте картинку. Полный код ошибки.
И это УФ или Толстый Клиент?
31 Ly_Alena
 
19.01.15
10:34
32 Ly_Alena
 
19.01.15
10:35
123456 пароль
33 Ly_Alena
 
19.01.15
10:36
скрин в конфиге http://www.fayloobmennik.net/4487412 пароль тот же
34 Ly_Alena
 
19.01.15
10:36
Обработку не могу (
35 DrZombi
 
гуру
19.01.15
10:38
(34) А теперь полный код, где вы заполняете. Древо :)
36 DrZombi
 
гуру
19.01.15
10:39
+(35) Переменная "ДеревоОстатков" как то не соответствует "ОстаткиДляНовогоКлиента"
37 Ly_Alena
 
19.01.15
10:40
{ОбщийМодуль.УправлениеЗапасами.Модуль(2289)}: Ошибка при вызове метода контекста (Добавить)
        ДеревоОстатков.Колонки.Добавить("Номенклатура");
по причине:
Неверное имя колонки
38 Ly_Alena
 
19.01.15
10:41
(35) полный код в (21) сообщении
39 DrZombi
 
гуру
19.01.15
10:41
(37) Молодец, Алена. И код, процедуры заполнения, пожалуйста.
В (0) приведен невнятный фрагмент, заведомо ошибочный :)
40 Ly_Alena
 
19.01.15
10:43
(39) Хм... могу только фрагмент запроса и фрагмент кода.
Невнятный код - потому как не умею работать с деревомзначений.
Сейчас
41 DrZombi
 
гуру
19.01.15
10:43
+(37) "Неверное имя колонки", попробуй сменить Имя колонки, на другое.
Сдается мне ,что там уже эта колонка есть.

Отладчиком пройдись.
42 DrZombi
 
гуру
19.01.15
10:43
(40) Не надо.
43 Ly_Alena
 
19.01.15
10:44
(41) пробовала
44 Ly_Alena
 
19.01.15
10:45
Хотя сейчас попробую назвать чтобы не могло совпасть ни с чем.
45 DrZombi
 
гуру
19.01.15
10:46
(44) И код в (21) отличается от (0) :)
46 DrZombi
 
гуру
19.01.15
10:48
+(44) Переменную "ДеревоОстатков", объяви через "Перем ДеревоОстатков;" :)
47 Ly_Alena
 
19.01.15
10:50
(45) я объясню почему. В 21 функция, которая формирует структуру, а в 1 процедура с запросами, по которым выводятся данные и добавляется и удаляются столбцы.
48 Ly_Alena
 
19.01.15
10:51
Теперь когда, назвала столбец по-другому - ошибку не выдает, но и столбец не добавляет.
49 Ly_Alena
 
19.01.15
10:55
Через отладчик как будто бы все проходит, но в отладчики ничего не видно.
50 DrZombi
 
гуру
19.01.15
10:56
(49) На форму добавь колонку.
51 Ly_Alena
 
19.01.15
10:57
Если на форму добавляю, то он выводит все нормально. Но дело в том что мне эта колонка нужна только если остатков нет. а видимость - как выяснилось из общего модуля не отключишь.
52 DrZombi
 
гуру
19.01.15
10:57
+(49) Вообще добавь колонки на форму Руками.
А в коде избавься от создания новых колонок.
И оставь только заполнение.

Если если так надо, то вообще спрячь колонки.
53 Ly_Alena
 
19.01.15
10:57
(50) (52) спрятать - спрячу, вопрос выше был - а как потом показать?
54 DrZombi
 
гуру
19.01.15
10:58
(51) Кто тебе сказал? Отключай на форме диалога.

Ну а так, тогда и на форму добавляй свои колонки.
Так же нужно анализировать, а добавила ли ты эти колонки.
55 DrZombi
 
гуру
19.01.15
10:59
(53) Показать, так же, как и спрячешь. Условия тебе известны.
56 DrZombi
 
гуру
19.01.15
10:59
+(55) В чем проблема? Ты же все делаешь в одном справочнике :)
57 Ly_Alena
 
19.01.15
11:01
(56) Сообщения (4), (12)
58 DrZombi
 
гуру
19.01.15
11:03
(57) Не путай Элемент Диалога и Реквизит на форме!!!
59 DrZombi
 
гуру
19.01.15
11:03
Через "ЭлементыФормы". А далее отладчиком :)
60 Ly_Alena
 
19.01.15
11:04
ЭлементыФормы в общем модуле не понимает
61 Ly_Alena
 
19.01.15
11:05
Я конечно извиняюсь. Первый раз все-таки колонку видимо добавляет, но ее почему-то невидно.
Потому как при повторном выборе номенклатуры ругается что такая колонка уже есть.
62 DrZombi
 
гуру
19.01.15
11:06
(60) У тебя "Общий Модуль" Содержит галочку "Клиент (обычное приложение)"?
63 DrZombi
 
гуру
19.01.15
11:07
(61) Анализируй, что уже когда-то добавляла колонку :)
Через "Попытку" самое быстрое :)
64 DrZombi
 
гуру
19.01.15
11:07
+(62) Если содержит, то передай туда "ЭтаФорма" :)
65 Ly_Alena
 
19.01.15
11:11
(62) нет галочки
66 Ly_Alena
 
19.01.15
11:14
Ну ДеревоОстатков.Колонки.Добавить("Несовподалушка1"); едва ли кто-то добавлял, и тем не менее - первый раз без ошибки проходит - второй раз с ошибкой.
67 Ly_Alena
 
19.01.15
11:15
Какая заморочка с этим деревом значений - добавить столбец такой головняк
68 _KaA
 
19.01.15
11:16
> первый раз без ошибки проходит - второй раз с ошибкой

2 колонки с одним именем добавить нельзя...
69 DrZombi
 
гуру
19.01.15
11:16
(65) Тогда, заполняя значения В общем модуле.
Потрудись еще в Диалоге Формы, обработать все как надо :)
70 DrZombi
 
гуру
19.01.15
11:17
(67) Нет там мороки, это у тебя какое-то видиние на уровне 1С 7.7. Ты не разделяешь, Сервер и Приложение :)
И не делишь понятие "Элемент формы" и "Реквизит на форме" :)
71 Ly_Alena
 
19.01.15
11:24
(68) это понятно - но почему я в таком случае первый раз не вижу столбец
72 DrZombi
 
гуру
19.01.15
11:26
(71) Потому, что его нет. Ты же его не добавила на форму?
В последующие разы, у тебя оченно часто обращается за Остатками. И ты все время пытаешься тупо создавать колонки.

Если попробуешь закрыть форму и открыть по новой, то первый раз тоже не сругается :)
73 Ly_Alena
 
19.01.15
11:31
(70) видЕние на уровне 1С 7.7 расценю как комплимент в моем случае...
74 DrZombi
 
гуру
19.01.15
11:32
(73) Как хочешь, я могу с таким же успехом звать вас Леной. Мне так больше нравится :)

Без правки Справочника вам не обойтись.
75 Ly_Alena
 
19.01.15
11:38
(74) А вот Леной не надо - это не мое имя )
76 Ly_Alena
 
20.01.15
11:36
Добрый день. Продолжая тему дерева значений. Как проверить заполнена ли строка дерева значений?
Основная теорема систематики: Новые системы плодят новые проблемы.