v7: Ошибка: Неверный тип справочника! #768176


#0 by MathaiShung
На этапе Спр.УстановитьАтрибут("Родитель",Родитель) возникает эта ошибка, хотя несколькими строками ранее, когда устанавливал Родителя создаваемой группе никакой ошибки не выдавалось - всё установилось нормально.
#1 by hhhh
потому что не определен вообще этот Родитель.       Иначе где определяешь? В каком месте?
#2 by MathaiShung
Я специально перед определением устанавливаю, потому что если после поставить - тогда Спр начинает выдавать только Родителя вместо всех элементов. Проверил - поставил Сообщить(Родитель) перед его определением - выдаёт всё верно.
#3 by ДенисЧ
Попробуй .ТекущийЭлемент...
#4 by MathaiShung
Пробовал - тогда если Родителя получать перед определением - выдаются все элементы, если после - нормально, только родитель, но тогда я не смогу обратиться к элементу чтобы его атрибут установить, т.к. Спр после определения Родителя возвращает тоже Родителя вместо элемента.
#5 by Chameleon1980
а тут зачем мы и так по тз бежим или конкретно по номеру колонки нужно?
#6 by MathaiShung
Я в ТЗ идентификаторов не устанавливал - она у меня выгружается из ecxel, так что по номеру обращаюсь
#7 by MathaiShung
Проблему с обращением к элементу решил с помощью ещё одного позиционирования. Теперь и Родитель устанавливается после его определения, и ТекущийЭлемент убрал, но ошибка осталась! По-прежнему - Неверный тип справочника! Причём для новых групп установить Родителя аналогичным образом удалось без всяких ошибок. Кто-нибудь знает почему так происходит и как с этим бороться?
#8 by Scandsv
и все....
#9 by MathaiShung
Так тоже делал - результат не меняется: Неверный тип справочника!
#10 by Злопчинский
Пристально не смотрел Но мне кардинально не нравится Что внутри условия если родитель присваивается но только пр выполнении условия а ниже по тексту кода используется родитель - какое значение если условие не сработало? И писать правильно Родитель = спр.текущийэлемент;
#11 by MathaiShung
У меня с ТекущимЭлементом и было изначально , это уже тут насоветовали - поменял. Если условие не сработает, значит нечего менять - по задумке должны переименовываться и переструктурироваться элементы справочника, коды которых соответствуют кодам из ТЗ.
#12 by Злопчинский
Далее по тексту Сделать для начала
#13 by Злопчинский
не путай бодий дар и палец как говорится У тебя родитель для текущей строки тз определяется каждый раз или может оставаться от предыдущей строки тз ?
#14 by Scandsv
а родитель - точно папка???? А то может ты элемент справочника в родители суешь? а туда только группу можно лепить
#15 by Злопчинский
Для начала сделай И сюда доклад
#16 by Злопчинский
угу, запросто Проверки то нет что жто группа
#17 by MathaiShung
Каждый раз определяется по коду из столбца Подчинение
#18 by MathaiShung
Точно, это в ТЗ уже чётко установлено
#19 by Злопчинский
тогда твой код однозначно кривой по логике построения
#20 by Злопчинский
Если у тебя ВСЕГДА условие =1 ТО ЗАЧЕМ ПРОВЕРЯТЬ ЭТО УСЛОВИЕ? Если не всегда условие=1 - то где ветка иначе?
#21 by Scandsv
Все, что точно определено должно быть 100% проверено. Перед тем как установить родителем - проверку делай на то, что элемент который будет родителем группа.
#22 by Злопчинский
Если нет ветки Иначе То внизу используемая переменная родитель - какое значение ДОЛЖНА ИМЕТЬ?
#23 by Scandsv
И если не группа пусть тебе сообщение выдаст - все увидишь. 99.99% что лепишь родителем элемент справочника. Чупа чупс ставлю.
#24 by Garykom
Никому не кажется этот код немного странным?
#25 by Злопчинский
присоединяюсь к рекомендации
#26 by MathaiShung
Да, условие будет всегда 1. Я таким образом позиционируюсь на нужном элементе и получаю Родителя. Или можно ещё как-то?
#27 by Злопчинский
Если условие ВСЕГДА =1 То нахрена это проверять? И почему ты уверен что всегда?
#28 by MathaiShung
И что здесь странного? Сначала проверяется код элемента, потом код Родителя этого элемента.
#29 by Злопчинский
да хз
#30 by Злопчинский
херню городите В части "этого элемента"
#31 by Scandsv
ты ищешь в справочнике элемент по коду. допустим ты его нашел. ТЫ уверен, что нашел группу? когда она была создана. Может элемент с этим кодом и не группа вовсе. Ты это не проверяешь.. а ведь кто не дает добавить Вот три секунды а сколько пользы
#32 by Злопчинский
Логика какаято типа Если не нашли элемент по коду То ищем группу по коду группы
#33 by Scandsv
не странно
#34 by Garykom
#35 by Scandsv
Коряво, но не странно
#36 by Scandsv
Он предполагает, что в ТЗ в одной колонке коды элементов, а в другой коды их родителей
#37 by MathaiShung
Я же говорю, это не ради проверки, а для получения значения Родителя. А нет, не всегда - если группа первого уровня, кода в колонке Подчинение не будет, этот момент пропустил.
#38 by Garykom
там "Родитель" легко может быть пустое в случае когда 1-е условие выполнилось а второе нет а дальше мы этого пустого пытаемся Гр.УстановитьАтрибут("Родитель",Родитель);
#39 by Scandsv
(с) Никогда не говори ВСЕГДА
#40 by Злопчинский
Код ваще мутный И в целом и в частностях Следует 1. Найти группу по Подчинение 2. Создать группу если не найдена 3. Запомнить ссылку группы 4. Найти элемент (если не найден элемент то создать при необходимости) 5. В элемент присвоить родителя из п.3 ВСЕ
#41 by Scandsv
А вот как раз пустое, насколько я помню и прокатит
#42 by Злопчинский
я на это уже обратил внимание выше и при том коде что написан родитель может вообще из пред. Строки унаследоватьс
#43 by Scandsv
Соглашусь - мутный
#44 by MathaiShung
Я это знаю, я сам загружаемую в ТЗ таблицу делал
#45 by Злопчинский
короче склифасовский Врубай скайп и тимвьювер Будем писать под диктовку Скайп zlopun
#46 by Garykom
да ну? где ТипаПустаяПеремнная нигде выше не присваивается
#47 by Злопчинский
Я сегодня добрвй Приехал с Родины
#48 by MathaiShung
Правильно, именно такую логику я хочу реализовать.
#49 by Scandsv
не присвоенная переменная и пустая ссылка - это чуть разные понятия, или я не прав?
#50 by Злопчинский
а написал хрень полную
#51 by Scandsv
А где Родина?
#52 by Garykom
Так у него выше Родитель скорее всего не элемент нужного справочника
#53 by Злопчинский
Брест
#54 by MathaiShung
Да ладно, сам уже додумаю, спасибо. Тут много чего посоветовали - буду исправлять...
#55 by Scandsv
Удачи. Хорошего настроения на долго
#56 by Злопчинский
#57 by MathaiShung
Нет, не так. Дело в том, что я неправильно ответил на (невнимательно прочитал) - у меня логика на самом деле другая. 1. Проверить по коду элементов в ТЗ существуют ли они в Справочнике. Если НЕТ: 2.Создать новые группы (т.к. новых товаров я в ТЗ не добавлял) и присвоить им Код и Наименование из ТЗ. 3. Найти в Справочнике группы по коду в колонке Подчинение из ТЗ, определить их как Родитель(находить Родителя нужно только после создания новых Групп (т.к. они тоже будут являться Родителем для др. элементов) - потому он у меня и определяется внутри условия). Если ДА: 4. Найти в Справочнике элементы по коду в колонке Код из ТЗ и присвоить новые Наименование и Родителя.
#58 by Злопчинский
Описанная логика кривая, ибо 1. Проверить по коду элементов в ТЗ существуют ли они в Справочнике. Если ДА: 4. Найти в Справочнике элементы по коду в колонке Код из ТЗ и присвоить новые Наименование и Родителя. из п.1 "Проверить по коду элементов в ТЗ существуют ли они в Справочнике." и из п.4 "Найти в Справочнике элементы по коду в колонке Код из ТЗ" - это одно и то же, т.к. проверить без поиска нельзя. вдобавок в п.4 в случае ЕСЛИ ДА - "новые наименование и родитель - ОНИ ОТКУДА? они - неопределены... У вас проблемы с алгоритмикой...
#59 by MathaiShung
С алгоритмикой как раз всё хорошо, скорее проблемы с правильным пониманием работы методов - когда что на чём позиционируется, поэтому начал мудрить с этим поиском. Сейчас переделал - всё работает как надо:
#60 by MathaiShung
+ Ну и ошибка была в пустом значении поля Подчинение у групп 1-го уровня в ТЗ
#61 by Злопчинский
Попробуй нижележащий код. Он, по идее, должен давать точно тот же результат что и твой (это и есть твой код, причесанный): если все норм будет - тогда втыкай в код.. ;-) успкхов!
#62 by MathaiShung
Да, вроде всё также, хотя пока не совсем понятно почему. Спасибо, буду разбираться...
#63 by 2S
все не читал, лень сходу - группа?
#64 by Злопчинский
потому что тривиальная программистская логика код никак НЕ СВЯЗАН с предыдущим куском кода. Сдвигаем этот код вверх, сразу после чтения данных из строки ТЗ получается далее (кусок кода который РАЗДЕЛЯЛ этот код ушел наверх) осталось:
#65 by Злопчинский
эти два блока если отрабатывают одно и то же, объединяем         Если Спр.НайтиПоКоду(Код,0)=0 Тогда
#66 by Злопчинский
Упрощаем
#67 by Злопчинский
общий код выносим за пределы если Если Спр.НайтиПоКоду(Код,0)=0 Тогда
#68 by Злопчинский
далее думаю понятно... заметь - тупой рефакторинг кода, даже без вникания в логику. по простым формальным признакам.
#69 by MathaiShung
Да, да, всё правильно, я уже повтыкал в код и сам понял, то о чём Вы выше написали.
#70 by Злопчинский
Вот видишь - надо всего лишь подумать... а не тыкать клаву в диком митусении ;-) Успехов!
#71 by MathaiShung
Спасибо. Только в не хватает Спр.Родитель=Родитель внутри Если Спр.НайтиПоКоду(Код,0) = 0 - это меня и смутило сразу, а потом уже и про рефакторинг заметил. Если не устанавливать родителя при создании новых групп, потом они не присвоятся. Ведь Иначе отрабатывает в этом же цикле ещё не созданные элементы.
#72 by Злопчинский
согласен, правильное замечание, тогда судя по всему - еще проще.. ;-)
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С