Вход | Регистрация
 

замена родителя у справочника

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


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

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

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


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

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

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

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



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

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

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

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

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

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

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


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

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

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

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

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



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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.