Имя: Пароль:
1C
 
замена родителя у справочника
,
0 Margo95
 
08.10.20
15:01
Добрый день, помогите разобраться, почему по нажатию кнопки, у меня не срабатывает смена родителя у элементов справочника? ДС.Категория - ДС.Родитель = Колонки в ТЗ(даже если сделать через Для каждого стр из ТЗ Цикл, то все равно не будет заменяться


    Пока Выборка.Следующий() Цикл
        Если ТабДок.Область(а,1).ЦветФона = WebЦвета.БледноЛиловый Тогда
            поиск = спр.НайтиПоНаименованию(ДС.Категория).ПолучитьОбъект();
            поиск1 = спр.НайтиПоНаименованию(ДС.Родитель).ПолучитьОбъект();
            поиск.Родитель = поиск1.Ссылка;
            поиск.Записать();
        Иначе
            Прервать;
        КонецЕсли;
        а = а + 1;
    КонецЦикла;
1 vicof
 
08.10.20
15:09
Запусти отладку хотя бы. Про код я вообще молчу.
2 ГдеСобака Зарыта
 
08.10.20
15:09
Наверно в ТабДоке цвет фона не бледно-лиловый))
3 vicof
 
08.10.20
15:09
Ставлю на то, что в выборке нет записей
4 vicof
 
08.10.20
15:10
Или категория и родитель не текстовые
5 ГдеСобака Зарыта
 
08.10.20
15:12
(4) Тогда б ругнулась на несоответствие типа. Скорее всего дело в цвете.
6 Margo95
 
08.10.20
15:14
в Табличном документе цвет фона нужных колонок окрашен и поиск их происходит отлично, в справочнике так же есть все записи, Выборка = Справочники.Номенклатура.Выбрать();
Категория так же указана у всех элементов и родитель так же указан, справочник иерархический, вот только те поля которые находятся, по какой-то причине не меняют родителей на соответствующие их категории и я не понимаю по какой причине(
7 vicof
 
08.10.20
15:17
(6) Типы разные
8 Kigo_Kigo
 
08.10.20
15:17
А если так
поиск = спр.НайтиПоНаименованию(ДС.Категория);
ПоискЭл = Поиск.ПолучитьОбъект();

     поиск1 = спр.НайтиПоНаименованию(ДС.Родитель);
            поискЭл.Родитель = поиск1;//.Ссылка;
            поискЭл.Записать();

И кстати , зачем ты получаешь Элемент родитель, его достаточно найти
9 vicof
 
08.10.20
15:21
И где фотка в профиле?
10 Margo95
 
08.10.20
15:22
(8) Думала, что родителя тоже нужно получать, нет, так тоже не работает, допустим если в 5й строке у меня в колонке категория Техника, а Родитель Товары, то по нажатию кнопки, всё остаётся как и было, Категория Техника и Родитель не меняется на Техника
11 Margo95
 
08.10.20
15:23
(9) не задумывалась о загрузке фотки в профиль
12 Kigo_Kigo
 
08.10.20
15:29
поиск = спр.НайтиПоНаименованию(ДС.Категория);
ПоискЭл = Поиск.ПолучитьОбъект();

     поиск1 = спр.НайтиПоНаименованию(ДС.Родитель);
Если не Поиск1.Этогруппа() Тогда
Сообщить("это не группа!")
КонецЕсли
            поискЭл.Родитель = поиск1//.Ссылка;

            поискЭл.Записать();

а так что скажет?
13 Margo95
 
08.10.20
15:34
(12) не Сообщает ничего, даже если сделать Если поиск1 ...  У меня перед моим кодом идёт добавление в ТЗ, возможно какие-то проблемы изначально с кодом?

Выборка = Справочники.Номенклатура.Выбрать();
    Пока Выборка.Следующий() Цикл
        ДС = ТЗ.Добавить();
        ДС.Наименование = Выборка.Наименование;
        ДС.ВидНоменклатуры = Выборка.ВидНоменклатуры;
        ДС.Категория = Выборка.Категория;
        ДС.Родитель = Выборка.Родитель;
    КонецЦикла;
14 Kigo_Kigo
 
08.10.20
15:39
(13) Все ясно, ответ в (4)
поиск = спр.НайтиПоНаименованию(СокрЛП(ДС.Категория.Наименование));
ПоискЭл = Поиск.ПолучитьОбъект();

поиск1 = спр.НайтиПоНаименованию(СлкрЛП(ДС.Родитель.Наименование));
Если не Поиск1.Этогруппа() Тогда
    Сообщить("это не группа!")
КонецЕсли
поискЭл.Родитель = поиск//.Ссылка;


поискЭл.Записать();
15 Margo95
 
08.10.20
15:41
Я нашла ошибочку, из-за того, что у меня ТабДок.Область(а,1) у меня происходит проверка 1 раз и после срабатывает Иначе Прервать; После чего цикл заканчивается и код не пробегает по всему Табличному документу
16 Margo95
 
08.10.20
15:42
(14) Вылетает ошибка {Обработка.Обработка1.Форма.Форма.Форма(65)}: Ошибка при вызове метода контекста (Записать)
            поиск.Записать();
по причине:
Зацикливание уровней!

по причине:
Зацикливание уровней!
17 Margo95
 
08.10.20
15:45
(14) Вот только не совсем пойму, как сделать цикл так, чтобы зацикливание уровней не происходило, уже часа 4 мучаюсь с этой задачкой
18 Kigo_Kigo
 
08.10.20
15:47
(17) А ты точно код и (14) используешь? у меня нет поиск.Записать(); , у меня есть поискЭл.Записать();
19 Kigo_Kigo
 
08.10.20
15:49
А зациливание идет, когда родителя в родителя пытаешься записать, самого в себя
20 Margo95
 
08.10.20
15:51
(18) да, просто изначально указала поискЭл, после в конце поиск.Записать, сейчас копипаст сделаю даже, для точной проверки
21 Margo95
 
08.10.20
15:55
(19) 2 ошибки, Значение не является значением объектного типа (Наименование)
и
Метод объекта не обнаружен (Этогруппа)
22 Kigo_Kigo
 
08.10.20
15:57
(21) УФ? Предупреждать надо
23 Margo95
 
08.10.20
15:59
(22) ох, извиняюсь, да это управляемые формы (((
24 Kigo_Kigo
 
08.10.20
16:01
(23) Выполняй на сервере тогда
25 Margo95
 
08.10.20
16:02
(24) у меня весь код на сервере написан
26 Волшебник
 
08.10.20
16:04
"поиск" - это плохое название для переменной, содержащей элемент справочник (ссылку или объект)
27 Kigo_Kigo
 
08.10.20
16:04
Тогда не знаю,
поиск = спр.НайтиПоНаименованию(ДС.Категория);
ПоискЭл = Поиск.ПолучитьОбъект();

поиск1 = спр.НайтиПоНаименованию(ДС.Родитель);

поискЭл.Родитель = поиск1;//.Ссылка;
поискЭл.Записать();
28 Margo95
 
08.10.20
16:05
(24) Исправила малёх ошибку, нашла в чем причина, на Если не поиск.ЭтоГруппа ничего не выводит, просто опять Ошибка при вызове метода контекста (Записать)
29 Kigo_Kigo
 
08.10.20
16:05
Уж ЭтоГруппа() 100% должен отрабатывать, не говоря про наименование
30 Волшебник
 
08.10.20
16:07
Результатом НайтиПоНаименованию может быть Неопределено, если элемент не найден.
31 Margo95
 
08.10.20
16:08
Вот код, который находится после добавление данных в ТЗ из справочника который выдаёт 2 ошибки Значение не является значением объектного типа (Наименование) и Ошибка при вызове метода контекста (Записать) - зацикливание уровней

Пока Выборка.Следующий() Цикл
        Если ТабДок.Область(а,1).ЦветФона = WebЦвета.Зеленый Тогда
            поиск = спр.НайтиПоНаименованию(СокрЛП(ДС.Категория.Наименование));
            ПоискЭл = поиск.ПолучитьОбъект();
            
            поиск1 = спр.НайтиПоНаименованию(СокрЛП(ДС.Родитель.Наименование));
            Если не поиск1.ЭтоГруппа Тогда
                Сообщить("это не группа!")
            КонецЕсли;
            ПоискЭл.Родитель = поиск1.Ссылка;
            ПоискЭл.Записать();
        Иначе
            Прервать;
        КонецЕсли;
        а = а + 1;
    КонецЦикла;
32 Kigo_Kigo
 
08.10.20
16:08
(30) Хорошо
Если поиск = спр.НайтиПоНаименованию(ДС.Категория) тогда;
ПоискЭл = Поиск.ПолучитьОбъект();

поиск1 = спр.НайтиПоНаименованию(ДС.Родитель);

поискЭл.Родитель = поиск1//.Ссылка;

поискЭл.Записать();
КонецЕсли;
33 Волшебник
 
08.10.20
16:09
Непонятно сравнение Если ЦветФона = WebЦвета.БледноЛиловый.
Лучше сравнивать числа или значения из ячеек, например, флажки, коды, а не какие-то там цвета
34 Волшебник
 
08.10.20
16:10
ПоискЭл.Родитель = поиск1.Ссылка;

В "поиск1" уже содержится ссылка (если элемент найден). Лишнее обращение через точку.
Если не найден, то будет ошибка.

Вместо "поиск1" лучше назвать НовыйРодитель или ДС_Родитель
35 Kigo_Kigo
 
08.10.20
16:11
(33) Ладно, это можно опустить, сравнение идет и она попадает в тело, почему получается , что она родителя в родителя получается пытается записать?
Эхх, отладчиком бы ее научить пользоваться, а так развлекаловка ))))
36 Margo95
 
08.10.20
16:13
(33) у меня Табличный документ раскрашен в 3 разных цвета, при разных условиях, решила сделать сравнение по цвету, так просто нужные колонки будут перебираться и так все равно ищет все значения покрашенные в такой цвет
37 Волшебник
 
08.10.20
16:14
(36) Всё плохо. Всё надо удалить и написать заново.
38 Margo95
 
08.10.20
16:14
(35) у меня тоже такой вопрос, почему идёт зацикливание, пыталась менять название Перем по совету из (34), но все равно родитель в родителя идёт
39 Волшебник
 
08.10.20
16:14
ТабличныйДокумент здесь не нужен вообще.
40 Kigo_Kigo
 
08.10.20
16:15
поправочка
Если поиск = спр.НайтиПоНаименованию(ДС.Категория) тогда;
ПоискЭл = Поиск.ПолучитьОбъект();

поискРодитель = спр.НайтиПоНаименованию(ДС.Родитель);

поискЭл.Родитель = поискРодитель;//.Ссылка;


поискЭл.Записать();
КонецЕсли;
41 Kigo_Kigo
 
08.10.20
16:16
Если СПРпоиск = спр.НайтиПоНаименованию(ДС.Категория) тогда;
ПоискЭл = СПРПоиск.ПолучитьОбъект();

поискРодитель = спр.НайтиПоНаименованию(ДС.Родитель);

поискЭл.Родитель = поискРодитель//.Ссылка;
поискЭл.Записать();
КонецЕсли;
42 Волшебник
 
08.10.20
16:16
НайтиПоНаименованию ищет по частичному наименованию и находит не то.
Для поиска по точному наименованию есть второй параметр.
43 Волшебник
 
08.10.20
16:16
(41) Мазила
44 Margo95
 
08.10.20
16:17
(39) изначально нужно просто использовать поте Табличного документа, поэтому я использую его
45 Kigo_Kigo
 
08.10.20
16:17
(43) Убрал название переменных в пересечении с системными )))
46 Margo95
 
08.10.20
16:24
все равно происходит зацикливание, ладненько, всем спасибо за помощь, пойду дальше читать и побольше почитаю про справочники и их методы, надеюсь, что сама найду проблемку, оставлю эту задачу на потом
47 Margo95
 
08.10.20
16:24
Спасибо большое еще раз за то, что откликнулись
48 Kigo_Kigo
 
08.10.20
16:28
(47) Что  то мне подсказывает, не там проблему ищешь
ДС.Категория и ДС.Родитель - это у тебя одно и тоже, вот и зацикливание и этот в (41) код рабочий, если ДС.Категория <> ДС.Родитель, так что лучше почитай лучше как отладчиком пользоваться
49 Margo95
 
08.10.20
16:30
(48) Не совсем поняла, как у меня это может быть одним и тем же, если у меня Категория(это реквизит в справочнике), а Родитель это у меня обычно указывается папка, в которой находится товар
50 Margo95
 
08.10.20
16:32
(48) Как-то найти значения мне нужные возможно по другому? сначала они у меня выводятся в поле табличного документа, после по нажатию кнопки, должны сменяться реквизиты, я просто не понимаю, как мне по-другому тогда искать нужные мне значения
51 Kigo_Kigo
 
08.10.20
16:40
Меня смущает вот это
Выборка = Справочники.Номенклатура.Выбрать();
    Пока Выборка.Следующий() Цикл
        ДС = ТЗ.Добавить();
        ДС.Наименование = Выборка.Наименование;
        ДС.ВидНоменклатуры = Выборка.ВидНоменклатуры;
        ДС.Категория = Выборка.Категория;
        ДС.Родитель = Выборка.Родитель;
    КонецЦикла;

Что такое категория, тип значения?
52 Kigo_Kigo
 
08.10.20
16:42
Поставь точку останова, запусти и смотри все переменные и какие значения там
53 lEvGl
 
гуру
08.10.20
16:45
сколько желающих поискать БледноЛиловый в дебрях табдока)
54 Margo95
 
08.10.20
17:06
(52) Наименование - наим. товара, ВидНоменклатуры - Товар/Услуга, Категория - Строка. Допустим (Техника), Родитель(ссылка на папку Техника), если родитель не ссылка на папку где находится товар
Поставила точку останова везде, ДС.Категория и Родитель всегда имеют Значение "" , а вот Выборка.Категория/Родитель имеют нужные значения из справочника и так же поставила точку остановка на НайтиПоНаименованию(ДС.Категория/Родитель), тоже Значение ""
55 Margo95
 
08.10.20
17:07
(53) один из цветов, который используется для покраски не совпадающих колонок)
56 Margo95
 
08.10.20
17:08
(54) Не совсем понимаю почему у меня значение на ДС. .. "", если используя для табличного документа подобный вывод, поля тз полностью заполнились всемии значениями
57 Margo95
 
08.10.20
17:23
Проверила, у меня дс.Категория и ДС.Родитель получают самое последнее в этих колонках ТЗ значение типа строка
58 Kigo_Kigo
 
09.10.20
07:50
Категория - Строка. Допустим (Техника), Родитель(ссылка на папку Техника)
вот теперь думай, почему у тебя зацикливание, короче все мутно