Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
03 июл 2024, 13:11

Тупит КОД: сравнение одинаковых типов дает ЛОЖЬ.

Автор gfifdos, 01 мая 2020, 15:22

0 Пользователей и 1 гость просматривают эту тему.

Програмисты 1ц - не правильно сравнили тип
1 (50%)
Пользователи - нех.лезть в доступные настройки
0 (0%)
Просто баг - исправят и никто не постраает
1 (50%)

Проголосовало пользователей: 2

Голосование закончилось: 11 авг 2020, 22:36

gfifdos

Первоначальная проблема: у контрагента не меняется поле "Правовой статус", ошибка "неуникальное имя реквизита Имя КонтактнаяИнформация..."

Нашел причину, не выполняется условие:
Если ТипЗнч(ПодчиненныеЭлементы) = Тип("ЭлементыФормы") Тогда....

В отладчике значения равны, а при сравнениий дает ЛОЖЬ.
Если сравнивать как строку Строка(ТипЗнч(ПодчиненныеЭлементы)) = Строка(Тип("ЭлементыФормы")), то дает ИСТИНА.

В чем причина? Как исправить?

---
* 1С:Предприятие 8.3 (8.3.15.1700) Розница, редакция 2.3 (2.3.3.31)
* в другой БД, такой же конфигурации, ошибки нет. Сравнивает типы корректно.
* загружал полностью конфигурацию из БД, где ошибки нет в эту проблемную - не помогло.
* чекдбф ошибок не нашел.
* конфигурация оригинальная, без доработок.

gfifdos

Помогите!!! Обработка для теста прилагается.

На пустую форму добавил
* группу Страницы
* три страницы + декорация
* кнопка ТЕСТ

Код формы:
Процедура ТЕСТ(Команда)
ТЕСТНаСервере();
КонецПроцедуры

&НаСервере
Процедура ТЕСТНаСервере()
Сообщить("Тест страницы СтраницаУчетнаяИнформация:");
СделатьТест(Элементы.СтраницаУчетнаяИнформация.ПодчиненныеЭлементы);

Сообщить("Тест страницы СтраницаКонтактнаяИнформация:");
СделатьТест(Элементы.СтраницаКонтактнаяИнформация.ПодчиненныеЭлементы);

Сообщить("Тест страницы СтраницаКомментарий:");
СделатьТест(Элементы.СтраницаКомментарий.ПодчиненныеЭлементы);
КонецПроцедуры

&НаСервере
Процедура СделатьТест(ПодчиненныеЭлементы)
Если ТипЗнч(ПодчиненныеЭлементы) = Тип("ЭлементыФормы") Тогда
Сообщить("" + ТипЗнч(ПодчиненныеЭлементы) + " = " + Тип("ЭлементыФормы") + " >>> ИСТИНА");
Иначе
Сообщить("" + ТипЗнч(ПодчиненныеЭлементы) + " = " + Тип("ЭлементыФормы") + " >>> ЛОЖЬ");
КонецЕсли;
КонецПроцедуры


ИТОГО, код работает только на одной базе!!!! АААААААА ПОЧЕМУ?????

Мои тесты:
Розница, редакция 2.3 (2.3.3.31) Бд1 Результат: Элементы формы = Элементы формы >>> ЛОЖЬ
Розница, редакция 2.3 (2.3.3.31) БД2 Результат: Элементы формы = Элементы формы >>> ИСТИНА
Управление торговлей, редакция 11 (11.4.11.93) Результат: Элементы формы = Элементы формы >>> ЛОЖЬ   
Бухгалтерия предприятия (базовая), редакция 3.0 (3.0.76.67) Результат: Элементы формы = Элементы формы >>> ЛОЖЬ   

Добавлено: 02 мая 2020, 16:07



Вообщем решение я нашел.

Меняем параметры подключения:
Основной режим запуска: Толстый клиент
НА
Основной режим запуска: Выбирать автоматически
И все начинает работать! Ошибка не появляется, типы сравниваются корректно!
Если ТипЗнч(ПодчиненныеЭлементы) = Тип("ЭлементыФормы") Тогда....ИСТИНА!!!

итого - тупая 1Ц:^454^:

LexaK

Цитироватьитого - тупая 1Ц :^454^:
ну-ну, очень напоминаете мартышку перед зеркалом, которая ругает его за то, что там(в зеркале) рожи противные!!!

просто все надо делать/программировать - правильно!!!
В СП к любому методу/свойству всегда есть параграф:
пример 

[b]Доступность:[/b]
Сервер, мобильное приложение (сервер).

Добавлено: 04 мая 2020, 17:21


а вообще прикольная тема, правда самому не приходилось в такую кучу вляпываться, возможно ошибки платформы?
вот представления типов в разных клиентах! и действительно в толстом клиенте разные ссылки одного и того-же типа данных?

//толстый клиент
//ЗначениеВСтрокуВнутр(ТипЗнч(ПодчиненныеЭлементы)) = {"T",3be629df-ddf8-4d38-b45c-c580a0d7ed8c}
//ЗначениеВСтрокуВнутр(Тип("ЭлементыФормы")) = {"T",74007e6f-1320-4e1c-9bc9-b6fc1c2a2449}
//тонкий клиент
//ЗначениеВСтрокуВнутр(ТипЗнч(ПодчиненныеЭлементы)) = {"T",3be629df-ddf8-4d38-b45c-c580a0d7ed8c}
//ЗначениеВСтрокуВнутр(Тип("ЭлементыФормы")) = {"T",3be629df-ddf8-4d38-b45c-c580a0d7ed8c}


ну и вишенка на эту кучу
вашу проблему/ошибку при работе на разных клиентах, можно обойти следующим образом, достаточно поменять условие проверки

//вот это
    Если ТипЗнч(ПодчиненныеЭлементы) = Тип("ЭлементыФормы") Тогда

//замените на это, проверено работает
    Если ""+ТипЗнч(ПодчиненныеЭлементы) = "Элементы формы" Тогда


если помогло нажмите: Спасибо!

gfifdos

Привет! И спасибо тебе LexaK за участие в в этой теме!
Но про мартыху ты зря написал. Очень зря!!!
Вот почему функция в одном варианте работает так, а с другой настройкой функция работает иначе????? ПРИМЕР По всем законам 4+4=8, а чуть настройки поменяешь и 4+4=9. Это ошибка прогеров 1ц!
Я писал, что конфигурация оригинальная, поэтому какие либо изменения  если я внесу, то это ошибка рогеров 1ц.
Конфа стандартная, без изменений!!! Почему, если клиент поставил настройки "Основной режим запуска: Толстый клиент", то у него должно  все рухнуть и перестать работать этот функционал????? Почему разрабы не предусмотрели этот момент?
Ладно, соглашусь, разарабы забыли нюансы - простим. Но это не проблема клиента и не моя! Мы не мартыхи!!! Разарабы тупанули, пимем это.

За это ЗначениеВСтрокуВнутр(ТипЗнч(ПодчиненныеЭлементы)) спасибо. Буду знать.
Еще раз - код нельзя менять - КОД ПОСТАВЩИКА!

Итого: тупая 1ц/разрабы.
* разрабы - разработчики/программисты платформы 1с.

Dethmontt

Платформа 1С:Предприятие 8.3 (8.3.16.1063)
И толстый и тонкий клиент дают один и тот же результат
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

LexaK

gfifdos, ну да, согласен, насчет мартых, немного погорячился!
на то в штате фирмы и держат своего программера что бы допилить/пофиксить любую проблему.
вот варианты
1.любую конфу можно снять с замка, для изменения с возможностью обновления, ни чего страшного, после следующего обновления всегда можно закрыть базу от изменений!
(к стати во всех релизах пишут режим совместимости с платформой, у вас совпадает?)
2.как напомнили выше -- Установите новую платформу!
идет постоянное обновление/доработка платформы (исправляют старые ошибки... и создают новые) и с этим приходится мириться и находить пути обхода.
если помогло нажмите: Спасибо!

gfifdos

LexaK - ок, принято:)

####

Давайте вместе оформим баг 1С.

Конкретная проблема: Меню Справочник - НСИ - Контрагенты - Правовой статус - Индивидуальный предприниматель
Ошибка: "неуникальное имя реквизита Имя КонтактнаяИнформация..."
Найденная проблема в коде:
* Справочник.Контрагенты.Модуль
* Процедура: ЗаполнитьМассивыЭлементовКУдалению
* Строка 832: Если ТипЗнч(ПодчиненныеЭлементы) = Тип("ЭлементыФормы") Тогда
Причина проблемы: 1С не верно сравнивает типы

Временное решение: Меняем параметры подключения: Основной режим запуска: Толстый клиент НА Основной режим запуска: Выбирать автоматически

ПО: 1С:Предприятие 8.3 (8.3.17.1386), Розница, редакция 2.3 (2.3.3.31)

###
Воспроизводим баг на пустой конфигурации:
* Создаем пустую БД
* Параметры подключения: Основной режим запуска: Толстый клиент
* Запускаем тестовую обработку _тест.epf
* нажимаем кнопку "Тест", видим сообщение что типы не равны - ЛОЖЬ
* обработка прилагается, скрин теста прилагается, платформа обновлена до максимума, конфигурация любая

LexaK

ЦитироватьДавайте вместе оформим баг 1С.
gfifdos, так пофиксили/вылечили-же в новой версии платформы!!!
в 8.3.16...  вы проверяли?
рекомендация 1С, всегда ешьте осетрину первой свежести!!! :befhbt:
если помогло нажмите: Спасибо!

gfifdos



LexaK, с уважением. Но вы видели "ПО: 1С:Предприятие 8.3 (8.3.17.1386)"?

Dethmontt

gfifdos, кеш чистил? у меня типовой бухне такая же ошибка бывает, лечится чисткой убитого кеша
Добавлено: 08 мая 2020, 03:16


gfifdos, 8.3.17 это бэта версии)))
Добавлено: 08 мая 2020, 03:18


Цитата: gfifdos от 07 мая 2020, 22:24Запускаем тестовую обработку _тест.epf
Приложи обработку, я тебе скрины скину))
Добавлено: 08 мая 2020, 03:27


gfifdos, Увидел обработку выше...
На одной и той же базе под разными версиями платформы
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск