УТ 11, Письма с вложенными файлами, где есть недопустимые символы не принимаются
#1
Отправлено 15 февраля 2012 - 06:10
Управление торговлей, редакция 11.0 (11.0.7.13)
Не принимается письмо где есть недопустимые символы... в журнале регистрации пишет следующее
"При получении письма Re:запросы на 01.02.12 от 05.02.2012 18:56:41, отправленное c адреса ivan@vostokbg.ru произошла ошибка
{ОбщийМодуль.ОбщегоНазначенияКлиентСервер.Модуль(749)}: Поле объекта недоступно для записи (ИмяФайла)
ИмяФайла = СтрЗаменить(ИмяФайла,НедопустимыйСимвол,НаЧтоМенять);"
Отладчик показывает, что "ИмяФайла" это Строка... и не пойму почему оно недоступно для записи.
Подскажите пожалуйста это ошибка релиза? и можно ли исправить
#2
Отправлено 15 февраля 2012 - 10:50
#3
Отправлено 15 февраля 2012 - 14:44
А если вместо вашего
ИмяФайла = СтрЗаменить(ИмяФайла,НедопустимыйСимвол,НаЧтоМенять);
написать код
ИмяФайла_Зам = СтрЗаменить(ИмяФайла,НедопустимыйСимвол,НаЧтоМенять); ИмяФайла = ИмяФайла_Зам;
- то что на это скажет программа?
Если же ИмяФайла - параметр, то как он передается в эту процедуру/ф-ию? Уж не как Чётатам(СпрСсылка.ИмяФайла) ?
Сообщение отредактировал uza: 15 февраля 2012 - 14:47
#4
Отправлено 15 февраля 2012 - 19:08
Функция ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла,НаЧтоМенять = " ") Экспорт МассивНайденныхНедопустимыхСимволов = НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла); Если МассивНайденныхНедопустимыхСимволов.Количество() > 0 Тогда Для каждого НедопустимыйСимвол Из МассивНайденныхНедопустимыхСимволов Цикл ИмяФайла = СтрЗаменить(ИмяФайла,НедопустимыйСимвол,НаЧтоМенять); КонецЦикла; КонецЕсли; Возврат ИмяФайла; КонецФункции
Поставьте точку останова на отладке посмотрите какой тип имеет переменная ИмяФайла, вряд ли там строка
Молодым программистам на заметку
Как задать вопрос по СКД?
Как узнать версию платформы и конфигурации?
Описание файлов поставки обновлений конфигурации (1С: Предприятие 8)
#5
Отправлено 16 февраля 2012 - 09:30
#6
Отправлено 16 февраля 2012 - 10:24
Во пример того, как это могло быть
СпрКтр = Справочник.Контрагенты.НайтиПоКоду("0000000001"); //получаем ссылку на справочник. Все реквизиты ссылка НЕ ДОСТУПНЫ для записи ведь!!! ЗаменитьНедопустимыеСимволыВИмениФайла(СпрКтр.ИмяФайлаКонтрагента,""); //передаем реквизит ссылки на справочник, который как мы помним, для записи не допустим! //далее в самой функции замены символов происходит попытка изменения реквизита СпрКтр.ИмяФайлаКонтрагента, от чего и ловим ошибку. //а почему ловим ошибку? Правильно, потому что выше я два раза сказал что реквизит ССЫЛКИ справочника для записи не доступны. //передвать нужно либо реквизит объекта, либо так: //ИмяФайлаКонтрагента_стр = СпрКтр.ИмяФайлаКонтрагента; //ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаКонтрагента_стр,""); //передаем уже не реквизит, но строку - которую хоть в хвост, хоть в ан..гриву можем менять //Если ИмяФайлаКонтрагента_стр <> СпрКтр.ИмяФайлаКонтрагента Тогда // ... решаем чего делать, или НЕ делать. //КонецЕсли;
Сообщение отредактировал uza: 16 февраля 2012 - 10:26
#7
Отправлено 16 февраля 2012 - 13:23
Молодым программистам на заметку
Как задать вопрос по СКД?
Как узнать версию платформы и конфигурации?
Описание файлов поставки обновлений конфигурации (1С: Предприятие 8)
#8
Отправлено 16 февраля 2012 - 15:51
Для Вас mialord и для меня, это ,возможно и очевидная вещь (хотя за себя - я сомневаюсь. Просто F5, F10/F11 нажимать было бы не лень, и вопросов бы не задавал). Но для некоторых, даже и опытных - это может быть сильно не очевидно.
По реализации же ф-ии есть у меня притенении.
Ну блин, или принимайте ИмяФала по значению, или не меняйте его внутри ф-ии.
Используйте промежуточную переменную
Функция ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла,НаЧтоМенять = " ") Экспорт Результат = ИмяФайла; МассивНайденныхНедопустимыхСимволов = НайтиНедопустимыеСимволыВИмениФайла(Результат); Если МассивНайденныхНедопустимыхСимволов.Количество() > 0 Тогда Для каждого НедопустимыйСимвол Из МассивНайденныхНедопустимыхСимволов Цикл Результат = СтрЗаменить(Результат,НедопустимыйСимвол,НаЧтоМенять); КонецЦикла; КонецЕсли; Возврат Результат; КонецФункции
Вот, например.
Сообщение отредактировал uza: 16 февраля 2012 - 15:54
#9
Отправлено 16 февраля 2012 - 17:28
Ээээх, ну почему люди поиском не пользуются, все сотни раз описывалось
Молодым программистам на заметку
Как задать вопрос по СКД?
Как узнать версию платформы и конфигурации?
Описание файлов поставки обновлений конфигурации (1С: Предприятие 8)
#10
Отправлено 17 февраля 2012 - 09:28
Хотя, если автор догадался запостить свой вопрос в ветку "Конфигурирование", то я вот отчего то думаю что человек хоть немного "в теме" - но видимо ошибаюсь.
А по поводу поиска:
Если спич про ГуглоТындексы - то это да, а если спич про поиск на этом сайте - то...
Ну как то вот побовал я писком тут попользоваться - что то то как то "не впечатлило".
Да и в связи с обильной генерацией тем "я навичок, не пинайте", и развитием сиих тем, то поиск вываливает либо "нишиша" либо "кучи кучные"
Сообщение отредактировал uza: 17 февраля 2012 - 09:29
#11
Отправлено 17 февраля 2012 - 11:06
Поиск по сайту на новом движке - стал намного лучше. Но постараюсь еще и яндекс прикрутить к нему (как на старом)
За названием тем должны следить модераторы - если название кривое: стоит использовать жалобу на сообщение с указанием причины.
#12
Отправлено 21 февраля 2012 - 07:14
Та функция о которой я говорю, она же типовая и мне не хотелось ее переписывать... но видимо придется так как не работает тот код... буду пробовать.
#13
Отправлено 21 февраля 2012 - 11:29
а письма идут постоянно с такими файлами, ребята что делать...
это же ошибка в типовом релизе
Кстати UZA был изначально прав, что параметр передается "Уж не как Чётатам(СпрСсылка.ИмяФайла) ? "
#14
Отправлено 22 февраля 2012 - 09:37
Например можно сделать так.
Временно комментим код в месте где вылетает спотычка
ИмяФайла = СтрЗаменить(ИмяФайла,НедопустимыйСимвол,НаЧтоМенять);
И заменяем его на кусок
//ИмяФайла = СтрЗаменить(ИмяФайла,НедопустимыйСимвол,НаЧтоМенять); БылаОшибка = 0; Попытка ИмяФайла = СтрЗаменить(ИмяФайла,НедопустимыйСимвол,НаЧтоМенять); Исключение БылаОшибка = 1; КонецПопытки; СтопМашина = Ложь;
Далее ставим условную точку останова на СтопМашина. С условием что БылаОшибка = 1
Ну и далее плавно по F10 проходим все возвраты управления до того места, где эта зараза была вызвана исходно. Ну а там уже и думаем чего и как поправить.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных









