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

03.10.18

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

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

Скачать файл

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

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

 

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

//функция получения числа прописью  
Функция ЧислоПрописьюСвойСпособ(Знач ЧислоП) 
     
    Если ЧислоП < 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;
    
КонецПроцедуры


        
 

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

См. также

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

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

21.05.2024    26688    dimanich70    83    

149

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

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

1 стартмани

18.03.2024    4620    4    John_d    11    

57

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

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

12.02.2024    27954    atdonya    25    

58

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    6213    ke.92@mail.ru    17    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    17039    YA_418728146    8    

170

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    4422    75    progmaster    11    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 1C:Бухгалтерия 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    19359    184    sapervodichka    112    

137