при нажатии на кнопку преобразование значения к типу число не может быть выполнено

1. user674551_ali.yerzhanov 22.01.17 16:15 Сейчас в теме
Создал калькулятор (1С 8.3), в модуле Синтаксических ошибок не обнаружено, но в отладке когда запуская обработку и при нажатии на кнопку любой цифры выходит сообщение что "преобразование значения к типу число не может быть выполнено" вместо того чтобы цифра появилась в табло

Вот алгоритм процедур:

&НаКлиенте
Процедура Цифра1Нажатие(Элементы)
	ВыводЦифры1 = 1;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры1, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра2Нажатие(Элементы)
	ВыводЦифры2 = 2;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры2, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра3Нажатие(Элементы)
	ВыводЦифры3 = 3;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры3, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра4Нажатие(Элементы)
	ВыводЦифры4 = 4;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры4, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра5Нажатие(Элементы)
	ВыводЦифры5 = 5;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры5, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра6Нажатие(Элементы)
	ВыводЦифры6 = 6;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры6, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра7Нажатие(Элементы)
	ВыводЦифры7 = 7;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры7, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра8Нажатие(Элементы)
	ВыводЦифры8 = 8;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры8, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра9Нажатие(Элементы)
	ВыводЦифры9 = 9;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры9, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура Цифра0Нажатие(Элементы)
	ВыводЦифры0 = 0;
	ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры0, 9);
	ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));
КонецПроцедуры

&НаКлиенте
Процедура ОчиститьНажатие(Элементы)
	ТаблоКалькулятора = 0;
КонецПроцедуры

&НаКлиенте
Процедура СложениеНажатие(Элементы)
	Элементы.Буфер = Число(Элементы.ТаблоКалькулятора);
	ТаблоКалькулятора = "";
	Операция = "Сложение";
КонецПроцедуры

&НаКлиенте
Процедура РазностьНажатие(Элементы)
	Элементы.Буфер = Число(Элементы.ТаблоКалькулятора);
	ТаблоКалькулятора = "";
	Операция = "Вычитание";
КонецПроцедуры

&НаКлиенте
Процедура УмножениеНажатие(Элементы)
	Элементы.Буфер = Число(Элементы.ТаблоКалькулятора);
	ТаблоКалькулятора = "";
	Операция = "Умножение";
КонецПроцедуры

&НаКлиенте
Процедура ДелениеНажатие(Элементы)
	Элементы.Буфер = Число(Элементы.ТаблоКалькулятора);
	ТаблоКалькулятора = "";
	Операция = "Деление";
КонецПроцедуры

&НаКлиенте
Процедура РавноНажатие(Элементы)
	Если Элементы.Операция = "Сложение" Тогда
		ТаблоКалькулятора = Элементы.Буфер + Число(Элементы.ТаблоКалькулятора);
		//Сообщить ("операция сложения");
	ИначеЕсли Элементы.Операция = "Вычитание" Тогда
		//Сообщить ("операция вычитания");
		ТаблоКалькулятора = Элементы.Буфер - Число(Элементы.ТаблоКалькулятора);
	ИначеЕсли Элементы.Операция = "Деление" Тогда
		//Сообщить ("операция деления");
		ТаблоКалькулятора = Элементы.Буфер / Число(Элементы.ТаблоКалькулятора);
	ИначеЕсли Элементы.Операция = "Умножение" Тогда
		//Сообщить ("операция умножения");
		ТаблоКалькулятора = Элементы.Буфер * Число(Элементы.ТаблоКалькулятора);
	КонецЕсли;
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
12. spacecraft 22.01.17 18:56 Сейчас в теме
(1) если не вдаваться в стилистику кода (это страшно), то
при нажатии на кнопку любой цифры выходит сообщение что "преобразование значения к типу число не может быть выполнено"

В принципе этого не должно быть. Правда не известен тип ТаблоКалькулятора. Но думаю, что тип Строка.

А вот ошибку должно 100% давать следующий код:
Элементы.Буфер = Число(Элементы.ТаблоКалькулятора);

Но он уже не на кнопках с цифрами...
Элементы.ТаблоКалькулятора имеет тип ПолеФормы. Этот тип нельзя привезти к числу по определению.
Элементы.Буфер это тоже ПолеФормы. Используйте сами реквизиты формы.
Буфер = Число(ТаблоКалькулятора);


Для понимания что делать, приведу одну из команд, исходя из предположения, что ТаблоКалькулятора имеет тип Строка:
&НаКлиенте 
Процедура Цифра1Нажатие(Элементы) 
ТаблоКалькулятора = ТаблоКалькулятора + 1; 
КонецПроцедуры
2. Pavel_nv 16 22.01.17 16:18 Сейчас в теме
"Лев" возвращает строку
3. Cooler 22 22.01.17 16:39 Сейчас в теме
(2)
"Лев" возвращает строку
Если бы только это... А то ведь автор настойчиво пытается взять девять символов слева от... однозначного числа:
 ВыводЦифры1 = 1; 
 ТаблоКалькулятора = ТаблоКалькулятора + Лев(ВыводЦифры1, 9);

Интересно, он хоть на словах сумеет пояснить - какой в этом смысл?

А заодно - зачем постоянно преобразовывать тип ТаблоКалькулятора? В процитированном фрагменте предполагается, что это строка, но уже в следующей строчке она преобразуется в число:
ТаблоКалькулятора = Число(Прав(ТаблоКалькулятора,10));

При следующем вызове процедуры что получится? Правильно, полная ерунда!

P.S. Хотел начать свое сообщение с рекомендации автору пользоваться тегами "Вставка кода", но потом понял, что это лишнее - г...внокоду никакие теги не помогут.
5. user674551_ali.yerzhanov 22.01.17 16:55 Сейчас в теме
(3) извиняюсь, но я только начинаю программировать и поэтому хотел бы спросить как можно решить это?
6. Cooler 22 22.01.17 17:00 Сейчас в теме
(5)
хотел бы спросить как можно решить это?
Хотел бы посоветовать: "Надо понимать, что и зачем пишешь, каждую строчку", но, боюсь, это для вас слишком сложно.

Поэтому для начала более простой совет: попробуйте погуглить "калькулятор на языке 1С".
7. user674551_ali.yerzhanov 22.01.17 17:05 Сейчас в теме
(6)Можете ли просто подсказать, как решить проблему с ошибкой именно с этим кодом?
8. user674551_ali.yerzhanov 22.01.17 17:10 Сейчас в теме
(6)Этот код ведь полностью работает в 1С 8.2, а в 1С 8.3 нет. Были много ошибок, многие я исправил, осталось только эта проблема.
10. lefthander 22.01.17 17:38 Сейчас в теме
(8) в (3) вам уже дали ответ. Для понимания почему в 8.2 работает а в 8.3 нет, надо понять чем они отличаются. :)
4. Cooler 22 22.01.17 16:54 Сейчас в теме
Нашел источник написанного скопированного автором: http://erp-project.com.ua/index.php/ru/poleznye-materialy/2013-05-19-11-50-06/sovety-podderzhka/756-urok-1-pishem-kalkulyator-na-1s

Все вопросы к нему снимаются. Вместо этого предлагаю воспользоваться советом с Мисты:
Если есть сложности с созданием калькулятора на любом языке программирования, то я думаю не стоит идти на работу программистом.
Denis_CFO; +1 Ответить
9. Cooler 22 22.01.17 17:12 Сейчас в теме
Бесплатно поработать ассенизатором? Спасибо за предложение, но мне это не интересно.
11. lefthander 22.01.17 17:46 Сейчас в теме
В первую очередь форма обычная (8.2) сильно отличается от формы управляемой(8.3). Когда поймете разницу, тогда увидите где ошибка( намекаю в формах по разному приосходит обращение к элементам расположенным на форме). Раз вы только начинаете, то вам полезно искать ответы на вопросы, а не получать готовые ответы.
13. user674551_ali.yerzhanov 22.01.17 19:37 Сейчас в теме
(11)Спасибо Вам. Нашел решение, все заработало)
Оставьте свое сообщение

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