Преобразование значения к типу Число не может быть выполнено (ЗУП 2/5)

1. user1304317 10.07.20 09:04 Сейчас в теме
	{ВнешняяОбработка.бит_ЭлектроннаяВедомостьНаПеречислениеВСбербанк.МодульОбъекта(25)}: Преобразование значения к типу Число не может быть выполнено
	НовоеИмя = Число(Лев(ПоследнееИмя, Найти(ПоследнееИмя, "z")-1));



Перестала работать обработка. не могу понять, в чем дело.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 10.07.20 09:07 Сейчас в теме
(1)В ПоследнееИмя строковое(или другого типа) значение, которое не может быть преобразовано в число.
3. user1304317 10.07.20 09:11 Сейчас в теме
(2) Но раньше все работало)
4. nomad_irk 72 10.07.20 09:14 Сейчас в теме
(3)Я понимаю, но т.к. приведенный вами кусок кода - лютейший говнокод, настало время перестать ему работать :)
Запустите в режиме отладки и посмотрите, что происходит.
5. user1304317 10.07.20 09:16 Сейчас в теме
(4) В РО.
На комплименты вы щедры)
Прикрепленные файлы:
7. user1357043 10.07.20 09:17 Сейчас в теме
(5)у вас нет буквы Z, которую вы пытаетесь найти.
6. user1357043 10.07.20 09:17 Сейчас в теме
Логично же, что Лев(ПоследнееИмя, Найти(ПоследнееИмя, "z")-1) возвращает строку, которую нельзя преобразовать в число.
Попробуйте сделать Сообщить(Лев(ПоследнееИмя, Найти(ПоследнееИмя, "z")-1)) и сразу будет понятно в чем проблема
8. user1304317 10.07.20 09:18 Сейчас в теме
(6) Я уже вложил скрин в режиме отладки. Раньше такое имя не формировалось
9. user1357043 10.07.20 09:19 Сейчас в теме
(8)Ну значит проблема изначально появляется не в данной строке, а раньше. там, где не правильно формируется ПоследнееИмя. Возможно, изменилось правило формирования имени и весь алгоритм нужно пересматривать. Или в ТЗ попадает что-то не то (или что-то лишнее)
alex-l19041; +1 Ответить
10. user1304317 10.07.20 09:21 Сейчас в теме
(9)
Убрать может быть поиск буквы z?
Если Длг.Выбрать() Тогда
		
		НайденныеФайлы = НайтиФайлы(Длг.Каталог, "*.xml");
		
		ТЗ = Новый ТаблицаЗначений;
		ТЗ.Колонки.Добавить("Имя");
		
		Для Каждого с Из НайденныеФайлы Цикл
			
			н = ТЗ.Добавить();
			н.Имя = с.ИмяБезРасширения;
			
		КонецЦикла;
		
		ТЗ.Сортировать("Имя Убыв");
		
		Если ТЗ.Количество()>0 Тогда 
			ПоследнееИмя = ТЗ[0].Имя;
			НовоеИмя = Число(Лев(ПоследнееИмя, Найти(ПоследнееИмя, "z")-1));
			//Индекс = Число(Прав(ПоследнееИмя, СтрДлина(ПоследнееИмя)-Найти(ПоследнееИмя, "z")));
			
			ИмяФайла = Длг.Каталог+"\" + Строка(Формат(НовоеИмя+1,"ЧГ="))+"z"+".xml";		
		Иначе
			ИмяФайла = Длг.Каталог+"\" + "8606269z.xml";	
		КонецЕсли;
		
	Иначе 
		Возврат Неопределено;
	КонецЕсли;

Показать
11. user1357043 10.07.20 09:26 Сейчас в теме
(10)Судя по коду, вы пытаетесь найти старое имя и увеличить его на 1, потом добавить "z" в конце. Но в данном случае, старое имя файла попадает не то. Возможно, в папке, где вы ищите, есть лишние файлы, либо алгоритм поиска предыдущего файла неправильный. Я не знаю, что у вас хранится в вашей папке, могут ли там быть лишние файлы, могут ли удаляться старые, есть ли возможность найти последний файл другим способом...
Почему вы думаете, что ТЗ.Сортировать("Имя Убыв"); выведет первым именно последний файл по номеру? сортировка ведь по строке - первым может быть что угодно.
Проблема не в преобразовании к числу, а в поиске последнего файла. Попробуйте искать файлы по маске "???????z.xml"
alex-l19041; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот