«Шедевры» типового кода. Розница 2.3

Иногда в типовых конфигурациях встречает такой «творческий» код, что хоть стой, хоть падай.

У клиента код после обновления стал выдавать ошибку:

17.01.2025 11:51:36
Поле объекта недоступно для записи (ANSI)
{ОбщийМодуль.МенеджерОфлайнОборудованияКлиент.Модуль(1058)}:Кодировка = МенеджерОфлайнОборудованияВызовСервера.ПолучитьКодировкуФайла(Кодировка); //Массив из ОписаниеПередаваемогоФайла
{ВнешняяОбработка.ЗагрузкаДокументовИзККМOffline.Форма.Форма.Форма(62)}:МенеджерОборудованияКлиент.ПолучитьСодержаниеТекстовыхФайлов(ИмяФайла, ОписаниеОповещения, КодировкаТекста.ANSI);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

Ошибку вызывал вот этот «шедевральный» код в модуле МенеджерОфлайнОборудованияКлиент, ещё один пример позорного стиля написания типовых конфигураций:

Пришлось заносить кодировку в переменную:

Среда: 2.3.21.19

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 14

  1. Дыкелыпалы:

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

  2. rzd:

    Так а в чем конкретно ошибка?

    • в присвоении параметру Кодировка. Вместо использования локальной переменной. Код который может и приводит к ошибкам.
      Неожиданное побочное поведение функции.

      • rzd:

        Какая платформа? Не воспроизводится

        • что именно не производится? Версия конфигурации написана.

          • rzd:

            Очевидно ошибка не воспроизводится. Я спросил про версию платформы.

          • эта ошибка не зависит от версии платформы. Покажите код, который вы тестируете.
            очевидно, что если вы передатите в качестве кодировки системное значение перечисления (read-only), например Кодировка.ANSI, то ему не сможет присвоиться значение.

  3. rzd:

    Нет ошибки:

    &НаКлиенте
    Процедура Команда1(Команда)

    Рез = МенеджерОфлайнОборудованияВызовСервера.ПолучитьКодировкуФайла(КодировкаТекста.ANSI);
    Сообщить(Рез);

    КонецПроцедуры

    • И так нет ошибки?
      КодировкаТекста.ANSI = Строка(КодировкаТекста.ANSI);

      Покажите еще текст функции: МенеджерОфлайнОборудованияВызовСервера.ПолучитьКодировкуФайла

      • rzd:

        >>КодировкаТекста.ANSI = Строка(КодировкаТекста.ANSI);
        ты тупишь? естественно так ошибка есть

        вот функция:

        Функция ПолучитьКодировкуФайла(Кодировка = Неопределено) Экспорт

        Если Кодировка = Неопределено ИЛИ Кодировка = «UTF8» Тогда
        Кодировка = КодировкаТекста.UTF8;
        ИначеЕсли Кодировка = «ANSI» Тогда
        Кодировка = КодировкаТекста.ANSI;
        ИначеЕсли Кодировка = «OEM» Тогда
        Кодировка = КодировкаТекста.OEM;
        ИначеЕсли Кодировка = «UTF16» Тогда
        Кодировка = КодировкаТекста.UTF16;
        КонецЕсли;

        Возврат Кодировка;

        КонецФункции

        • а теперь посмотрите какой код функции в этом релизе (в статье я привел скриншот).
          Если у вас более новый релиз, значит там поправили этот код.

          • rzd:

            Нет. Не привел
            Вообще проблема есть, но не в этом

          • Проблема в типовой функции ПолучитьСодержаниеТекстовыхФайлов. Ее код есть на скриншоте. Проблема очевидна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *