«Шедевры» типового кода. Розница 2.3
Иногда в типовых конфигурациях встречает такой «творческий» код, что хоть стой, хоть падай.
У клиента код после обновления стал выдавать ошибку:

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

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

Среда: 2.3.21.19

А что не так? это же только реад-онли, не?
поэтому и недоступно для записи. Продебажил метод, посмотерл в какой кодировке он что возвращает. Ну использовал временную пременную, и что?
а как должно быть, типа в реад-онли вносить запись, ну щас захардкодил, а что за файл из которого можно получить кодировку, ты его смотрел?! что там можно получить и какую кодировку
ошибка налицо.
Так а в чем конкретно ошибка?
в присвоении параметру Кодировка. Вместо использования локальной переменной. Код который может и приводит к ошибкам.
Неожиданное побочное поведение функции.
Какая платформа? Не воспроизводится
что именно не производится? Версия конфигурации написана.
Очевидно ошибка не воспроизводится. Я спросил про версию платформы.
эта ошибка не зависит от версии платформы. Покажите код, который вы тестируете.
очевидно, что если вы передатите в качестве кодировки системное значение перечисления (read-only), например Кодировка.ANSI, то ему не сможет присвоиться значение.
Нет ошибки:
&НаКлиенте
Процедура Команда1(Команда)
Рез = МенеджерОфлайнОборудованияВызовСервера.ПолучитьКодировкуФайла(КодировкаТекста.ANSI);
Сообщить(Рез);
КонецПроцедуры
И так нет ошибки?
КодировкаТекста.ANSI = Строка(КодировкаТекста.ANSI);
Покажите еще текст функции: МенеджерОфлайнОборудованияВызовСервера.ПолучитьКодировкуФайла
>>КодировкаТекста.ANSI = Строка(КодировкаТекста.ANSI);
ты тупишь? естественно так ошибка есть
вот функция:
Функция ПолучитьКодировкуФайла(Кодировка = Неопределено) Экспорт
Если Кодировка = Неопределено ИЛИ Кодировка = «UTF8» Тогда
Кодировка = КодировкаТекста.UTF8;
ИначеЕсли Кодировка = «ANSI» Тогда
Кодировка = КодировкаТекста.ANSI;
ИначеЕсли Кодировка = «OEM» Тогда
Кодировка = КодировкаТекста.OEM;
ИначеЕсли Кодировка = «UTF16» Тогда
Кодировка = КодировкаТекста.UTF16;
КонецЕсли;
Возврат Кодировка;
КонецФункции
а теперь посмотрите какой код функции в этом релизе (в статье я привел скриншот).
Если у вас более новый релиз, значит там поправили этот код.
Нет. Не привел
Вообще проблема есть, но не в этом
Проблема в типовой функции ПолучитьСодержаниеТекстовыхФайлов. Ее код есть на скриншоте. Проблема очевидна.