Число прописью без использования функции ЧислоПрописью

03.10.18

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Число прописью
.epf 7,39Kb
9 1 850 руб. Купить
Все обработки от wowik на infostart.ru до 01.10.2018
.zip 59,98Kb
0 2 150 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

 

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Сообщить(ЧислоПрописьюСвойСпособ(ЧислоДляПреобразования));
    
КонецПроцедуры

//функция получения числа прописью  
Функция ЧислоПрописьюСвойСпособ(Знач ЧислоП) 
     
    Если ЧислоП < 0 Тогда    // число по модулю
        ЧислоП = ЧислоП*-1;
    КонецЕсли;

    ЧислоППрописью = "";
    //Вторая часть задания:"но программа должна ЛЕГКО расширяться для добавления больших чисел". Начало.
    //Если ЧислоП >= 1000000000000 Тогда        
    //    Количество =  Цел(ЧислоП/ 1000000000000);
    //ЧислоППрописью = СложитьСтроки(ЧислоППрописью,ЧислоСтрокой2(Количество)); //прописью сколько триллионов
    //    Если Количество = 1 Тогда
    //        ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "триллион")
    //    ИначеЕсли Количество = 2 Тогда
    //        ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "триллиона")
    //    Иначе
    //        ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "триллионов")
    //    КонецЕсли;
    //    ЧислоП = ЧислоП - Цел(ЧислоП / 1000000000000) * 1000000000000
    //КонецЕсли;                             
    //
    //Если ЧислоП >= 1000000000 Тогда        
    //    Количество =  Цел(ЧислоП/ 1000000000);
    //  ЧислоППрописью = СложитьСтроки(ЧислоППрописью,ЧислоСтрокой2(Количество)); //прописью сколько миллиардов
    //    Если Количество = 1 Тогда
    //        ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "миллиард")
    //    ИначеЕсли Количество = 2 Тогда
    //        ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "миллиарда")
    //    Иначе
    //        ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "миллиардов")
    //    КонецЕсли;
    //    ЧислоП = ЧислоП - Цел(ЧислоП / 1000000000) * 1000000000
    //КонецЕсли;    
    //Вторая часть задания:"но программа должна ЛЕГКО расширяться для добавления больших чисел". Окончание.
    
    Если ЧислоП >= 1000000 Тогда        
        Количество =  Цел(ЧислоП/1000000);  //сколько миллионов
        
        ЧислоППрописью = СложитьСтроки(ЧислоППрописью,ЧислоСтрокой2(Количество)); //прописью сколько миллионов

        Если Количество = 1 Тогда
            ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "миллион")
        ИначеЕсли Количество = 2 Тогда
            ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "миллиона")
        Иначе
            ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "миллионов")
        КонецЕсли;
        ЧислоП = ЧислоП - Цел(ЧислоП / 1000000) * 1000000 // для миллионов все сделали, далее нужно определить количество тысяч 
    КонецЕсли;
    
      Если ЧислоП >= 1000 Тогда        
        Количество =  Цел(ЧислоП/1000); //определить количество тысяч
        
        ЧислоППрописью = СложитьСтроки(ЧислоППрописью,ЧислоСтрокой2(Количество)); //прописью тысячи
        
        Если Количество = 1 Тогда
            ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "тысяча")
        ИначеЕсли Количество = 2 Тогда
            ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "тысячи")
        Иначе
            ЧислоППрописью = СложитьСтроки(ЧислоППрописью, "тысяч")
        КонецЕсли;
        ЧислоП = ЧислоП - Цел(ЧислоП / 1000) * 1000
    КонецЕсли;    

    Если ЧислоП >= 0 Then
        ЧислоППрописью = СложитьСтроки(ЧислоППрописью, ЧислоСтрокой2(ЧислоП))
    КонецЕсли;
    
    Возврат ЧислоППрописью;
 
КонецФункции

//возвращает строкове представление числа с разрадностью 3    
Функция ЧислоСтрокой2(Знач Количество)
    
    ЧислоП = "";
    Если Количество >= 100 Тогда
        ЧислоП = ЧислоСтрокой(Цел(Количество/100)*100);
        Количество = Количество - Цел(Количество / 100) * 100;
    КонецЕсли;
    
    Если Количество >= 20 Тогда
        ЧислоП     = СложитьСтроки(ЧислоП, ЧислоСтрокой(Цел(Количество/10) * 10)); 
        Количество = Количество - Цел(Количество / 10) * 10;             
    КонецЕсли;
    
    ЧислоП = СложитьСтроки(ЧислоП, ЧислоСтрокой(Количество));
    
    Возврат ЧислоП;
    
КонецФункции

//возвращает строковое представление числа    
Функция ЧислоСтрокой(Число)
    
    Если Число = 100 Тогда
        ЧислоСтрокой = "сто"
    ИначеЕсли Число = 200 Тогда
        ЧислоСтрокой = "двести"
    ИначеЕсли Число = 300 Тогда
        ЧислоСтрокой = "триста"
    ИначеЕсли Число =400  Тогда
        ЧислоСтрокой = "четыреста"
    ИначеЕсли Число = 500  Тогда
        ЧислоСтрокой = "пятьсот"
    ИначеЕсли Число = 600  Тогда
        ЧислоСтрокой = "шестьсот"
    ИначеЕсли Число = 700  Тогда
        ЧислоСтрокой = "семьсот"
    ИначеЕсли Число = 800  Тогда
        ЧислоСтрокой = "восемьсот"
    ИначеЕсли Число = 900 Тогда
        ЧислоСтрокой = "девятьсот"
    ИначеЕсли Число = 11  Тогда
        ЧислоСтрокой = "одиннадцать"
    ИначеЕсли Число = 12 Тогда
        ЧислоСтрокой = "двенадцать"
    ИначеЕсли Число = 13  Тогда
        ЧислоСтрокой = "тринадцать"
    ИначеЕсли Число = 14  Тогда
        ЧислоСтрокой = "четырнадцать"
    ИначеЕсли Число = 15  Тогда
        ЧислоСтрокой = "пятнадцать"
    ИначеЕсли Число = 16  Тогда
        ЧислоСтрокой = "шестнадцать"
    ИначеЕсли Число = 17  Тогда
        ЧислоСтрокой = "семнадцать"
    ИначеЕсли Число = 18 Тогда
        ЧислоСтрокой = "восемнадцать"
    ИначеЕсли Число = 19  Тогда
        ЧислоСтрокой = "девятнадцать"
    ИначеЕсли Число = 20 Тогда
        ЧислоСтрокой = "двадцать"
    ИначеЕсли Число = 30  Тогда
        ЧислоСтрокой = "тридцать"
    ИначеЕсли Число = 40 Тогда
        ЧислоСтрокой = "сорок"
    ИначеЕсли Число = 50 Тогда
        ЧислоСтрокой = "пятьдесят"
    ИначеЕсли Число = 60 Тогда
        ЧислоСтрокой = "шестьдесят"
    ИначеЕсли Число = 70  Тогда
        ЧислоСтрокой = "семьдесят"
    ИначеЕсли Число = 80  Тогда
        ЧислоСтрокой = "восемьдесят"
    ИначеЕсли Число = 90  Тогда
        ЧислоСтрокой = "девяносто"
    ИначеЕсли Число = 10 Тогда
        ЧислоСтрокой = "десять"
    ИначеЕсли Число = 9 Тогда
        ЧислоСтрокой = "девять"         
    ИначеЕсли Число = 8 Тогда
        ЧислоСтрокой = "восемь" 
    ИначеЕсли Число = 7 Тогда
        ЧислоСтрокой = "семь" 
    ИначеЕсли Число = 6 Тогда
        ЧислоСтрокой = "шесть" 
    ИначеЕсли Число = 5 Тогда
        ЧислоСтрокой = "пять" 
    ИначеЕсли Число = 4 Тогда
        ЧислоСтрокой = "четыре" 
    ИначеЕсли Число = 3 Тогда
        ЧислоСтрокой = "три" 
    ИначеЕсли Число = 2 Тогда
        ЧислоСтрокой = "два" 
    ИначеЕсли Число = 1 Тогда
        ЧислоСтрокой = "один"         
    КонецЕсли;

     Возврат  ЧислоСтрокой;
    
КонецФункции

//конкатенация двух строк 
Функция СложитьСтроки(Строка1, Строка2)
    
    Если Строка1 = "" Тогда
        СложитьСтроки = Строка2;
    ИначеЕсли Строка2 = "" Тогда 
        СложитьСтроки = Строка1
    Иначе
        СложитьСтроки = Строка1 + " " + Строка2
    КонецЕсли;
    
    Возврат СложитьСтроки;
    
КонецФункции

//при открытии формы обработки
Процедура ПриОткрытии()
    
    ЧислоДляПреобразования = 411211241;
    
КонецПроцедуры


        
 

Вступайте в нашу телеграмм-группу Инфостарт

число прописью

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3476    Abysswalker    8    

45

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    6442    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    48951    dimanich70    83    

170

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7330    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    61226    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9130    ke.92@mail.ru    17    

68