Потенциальный работодатель дал тестовое задание:
Сделать внешнюю обработку версии 8.1 которая будет переводить целое число от 0 до 1 000 000 в число прописью.
Не использовать стандартную функцию 1С.
Создаем обработку без реквизитов, форму, добавляем реквизит формы "ЧислоЧислом" и "ЧислоПрописью" и создаем визуальные элементы на форме. Создаем команду формы - ПолучитьЧислоПрописью
&НаСервереБезКонтекста
Функция ПолучитьЧислоПрописьюНаСервере(Число)
СоответствиеЧиселИПрописей = новый Соответствие;
СоответствиеЧиселИПрописей.Вставить(0, "ноль");
СоответствиеЧиселИПрописей.Вставить(1, "один");
СоответствиеЧиселИПрописей.Вставить(2, "два");
СоответствиеЧиселИПрописей.Вставить(3, "три");
СоответствиеЧиселИПрописей.Вставить(4, "четыре");
СоответствиеЧиселИПрописей.Вставить(5, "пять");
СоответствиеЧиселИПрописей.Вставить(6, "шесть");
СоответствиеЧиселИПрописей.Вставить(7, "семь");
СоответствиеЧиселИПрописей.Вставить(8, "восемь");
СоответствиеЧиселИПрописей.Вставить(9, "девять");
СоответствиеЧиселИПрописей.Вставить(10, "десять");
СоответствиеЧиселИПрописей.Вставить(11, "одинадцать");
СоответствиеЧиселИПрописей.Вставить(12, "двенадцать");
СоответствиеЧиселИПрописей.Вставить(13, "тринадцать");
СоответствиеЧиселИПрописей.Вставить(14, "четырнадцать");
СоответствиеЧиселИПрописей.Вставить(15, "пятнадцать");
СоответствиеЧиселИПрописей.Вставить(16, "шестнадцать");
СоответствиеЧиселИПрописей.Вставить(17, "семнадацать");
СоответствиеЧиселИПрописей.Вставить(18, "восемнадцать");
СоответствиеЧиселИПрописей.Вставить(19, "девятнадцать");
СоответствиеЧиселИПрописей.Вставить(20, "двадцать");
СоответствиеЧиселИПрописей.Вставить(30, "тридцать");
СоответствиеЧиселИПрописей.Вставить(40, "сорок");
СоответствиеЧиселИПрописей.Вставить(50, "пятьдесят");
СоответствиеЧиселИПрописей.Вставить(60, "шестьдесят");
СоответствиеЧиселИПрописей.Вставить(70, "семьдесят");
СоответствиеЧиселИПрописей.Вставить(80, "восемьдесят");
СоответствиеЧиселИПрописей.Вставить(90, "девяносто");
СоответствиеЧиселИПрописей.Вставить(100, "сто");
СоответствиеЧиселИПрописей.Вставить(200, "двести");
СоответствиеЧиселИПрописей.Вставить(300, "триста");
СоответствиеЧиселИПрописей.Вставить(400, "четыреста");
СоответствиеЧиселИПрописей.Вставить(500, "пятьсот");
СоответствиеЧиселИПрописей.Вставить(600, "шестьсот");
СоответствиеЧиселИПрописей.Вставить(700, "семьсот");
СоответствиеЧиселИПрописей.Вставить(800, "восемьсот");
СоответствиеЧиселИПрописей.Вставить(900, "девятьсот");
СоответствиеЧиселИПрописей.Вставить(1000, "одна тысяча");
СоответствиеЧиселИПрописей.Вставить(2000, "две тысячи");
СоответствиеЧиселИПрописей.Вставить(3000, "три тысячи");
СоответствиеЧиселИПрописей.Вставить(4000, "четыре тысячи");
СоответствиеЧиселИПрописей.Вставить(5000, "пять тысяч");
СоответствиеЧиселИПрописей.Вставить(6000, "шесть тысяч");
СоответствиеЧиселИПрописей.Вставить(7000, "семь тысяч");
СоответствиеЧиселИПрописей.Вставить(8000, "восемь тысяч");
СоответствиеЧиселИПрописей.Вставить(9000, "девять тысяч");
СоответствиеЧиселИПрописей.Вставить(1000000, "один миллион");
СоответствиеЧиселИПрописей.Вставить(2000000, "два миллиона");
СоответствиеЧиселИПрописей.Вставить(3000000, "три миллиона");
СоответствиеЧиселИПрописей.Вставить(4000000, "четыре миллиона");
СоответствиеЧиселИПрописей.Вставить(5000000, "пять миллионов");
СоответствиеЧиселИПрописей.Вставить(6000000, "шесть миллионов");
СоответствиеЧиселИПрописей.Вставить(7000000, "семь миллионов");
СоответствиеЧиселИПрописей.Вставить(8000000, "восемь миллионов");
СоответствиеЧиселИПрописей.Вставить(9000000, "девять миллионов");
СтроковоеПредставлениеЧисла = СоответствиеЧиселИПрописей.Получить(Число);
Если СтроковоеПредставлениеЧисла = НЕОПРЕДЕЛЕНО Тогда
//0 удалим
СоответствиеЧиселИПрописей.Удалить(0);
ПорядкиГруппРазрядов = новый Массив();
ПорядкиГруппРазрядов.Добавить(новый Структура("Порядок, Обозначение", 1, ""));
ПорядкиГруппРазрядов.Добавить(новый Структура("Порядок, Обозначение", 1000, "тысяч"));
ПорядкиГруппРазрядов.Добавить(новый Структура("Порядок, Обозначение", 1000000, "миллионов"));
СтроковоеПредставлениеЧисла = "";
ОставшеесяКоличествоРазрядовЧисла = СтрДлина(Формат(Число(Число), "ЧГ="));
Для каждого ПорядокГруппыРазрядов из ПорядкиГруппРазрядов цикл
ИндексТекущейГруппы = ПорядкиГруппРазрядов.Найти(ПорядокГруппыРазрядов);
ДелительГруппы = Pow(1000, ИндексТекущейГруппы+1);
ГруппаРазрядов = Цел((Число - Цел(Число/ДелительГруппы)*ДелительГруппы)/ПорядокГруппыРазрядов.Порядок);
Если ГруппаРазрядов = 0 Тогда
Продолжить;
КонецЕсли;
ОбозначениеГруппыРазрядов = ПорядокГруппыРазрядов.Обозначение;
СтроковоеПредставлениеГруппыРазрядов = СоответствиеЧиселИПрописей.Получить(ГруппаРазрядов);
Если СтроковоеПредставлениеГруппыРазрядов = НЕОПРЕДЕЛЕНО Тогда
ПорядкиРазрядовВГруппе = новый Массив();
ПорядкиРазрядовВГруппе.Добавить(1);
ПорядкиРазрядовВГруппе.Добавить(10);
ПорядкиРазрядовВГруппе.Добавить(100);
СтроковоеПредставлениеГруппыРазрядов = "";
ОставшеесяКоличествоРазрядовГруппы = СтрДлина(Формат(Число(ГруппаРазрядов), "ЧГ="));
Для каждого ПорядокРазрядаВГруппе из ПорядкиРазрядовВГруппе цикл
ИндексТекущегоРазряда = ПорядкиРазрядовВГруппе.Найти(ПорядокРазрядаВГруппе);
ДелительРазряда = Pow(10, ИндексТекущегоРазряда+1);
ЧислоВГруппеРазрядов = Цел((ГруппаРазрядов - Цел(ГруппаРазрядов/ДелительРазряда)*ДелительРазряда)/ПорядокРазрядаВГруппе);
ОставшеесяКоличествоРазрядовЧисла = ОставшеесяКоличествоРазрядовЧисла - 1;
ОставшеесяКоличествоРазрядовГруппы = ОставшеесяКоличествоРазрядовГруппы - 1;
Если ЧислоВГруппеРазрядов = 0 Тогда
Продолжить;
КонецЕсли;
ПредставлениеЧисла = СоответствиеЧиселИПрописей.Получить(ЧислоВГруппеРазрядов*?(ИндексТекущегоРазряда = 0, ПорядокГруппыРазрядов.Порядок, ПорядокРазрядаВГруппе));
Если ИндексТекущегоРазряда = 0 Тогда
ОбозначениеГруппыРазрядов = "";
КонецЕсли;
Если ЗначениеЗаполнено(СтроковоеПредставлениеГруппыРазрядов) Тогда
ПредставлениеЧисла = ПредставлениеЧисла + " ";
КонецЕсли;
СтроковоеПредставлениеГруппыРазрядов = ПредставлениеЧисла + СтроковоеПредставлениеГруппыРазрядов;
Если ОставшеесяКоличествоРазрядовЧисла = 0 ИЛИ ОставшеесяКоличествоРазрядовГруппы = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(ОбозначениеГруппыРазрядов) Тогда
СтроковоеПредставлениеГруппыРазрядов = СтроковоеПредставлениеГруппыРазрядов + ОбозначениеГруппыРазрядов;
КонецЕсли;
Если ЗначениеЗаполнено(СтроковоеПредставлениеГруппыРазрядов) Тогда
СтроковоеПредставлениеЧисла = СтроковоеПредставлениеГруппыРазрядов + " " + СтроковоеПредставлениеЧисла;
КонецЕсли;
Если ОставшеесяКоличествоРазрядовЧисла = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат СтроковоеПредставлениеЧисла;
КонецФункции
&НаКлиенте
Процедура ПолучитьЧислоПрописью(Команда)
ЧислоПрописью = ПолучитьЧислоПрописьюНаСервере(ЧислоЦифрами);
КонецПроцедуры