7.7 Как сделать копейки прописью ?

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем Kas-tet, 7 окт 2016.

  1. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet

    Регистрация:
    30 сен 2016
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    пример: 1.04 = один рубль четыре копейки
    При изменении формта на ЧПДС выводит один рубль 04 копейки
  2. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    313
    Симпатии:
    50
    Баллы:
    54
    Написать свою функцию, разбив число на целую и дробную часть, получить их пропись отдельно, затем соединить.
  3. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet

    Регистрация:
    30 сен 2016
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    Это не то?
    Код:
    Функция ЧислоПрописью(ЗначЧисло) Экспорт
        ЦелЧасть    = Цел(ЗначЧисло);
        ДробЧасть    = Окр(ЗначЧисло - ЦелЧасть, 4);
                                 
        Если ДробЧасть = Окр(ДробЧасть,0) Тогда
            ДробЧасть    = 0;
            Дробная        = "";
           
        Иначе
            ДробЧасть = Окр(ДробЧасть, 4);
            ДробЧасть    = Окр(ДробЧасть, 4) * 1000;
            Дробная        = "есть";
           
        КонецЕсли;
    
        Возвр = "";
    
        Возвр = Возвр + ?(ПустоеЗначение(ЦелЧасть) = 1, "Ноль", СокрЛП(Формат(ЦелЧасть, "ЧП")));
        Если  Дробная = "" Тогда
            Пока (Возвр <> "") И (Возвр = СокрП(Возвр)) Цикл    // последний символ в строке не пробел
                ПоследнееСлово    = Прав(Возвр, 1) + ПоследнееСлово;    // добавляем последнюю букву
                Возвр            = Лев(Возвр, СтрДлина(Возвр) - 1);    // отрезаем последнюю букву
            КонецЦикла;
           
            Если Врег(ПоследнееСлово) = "ОДИН" Тогда
                // первую букву слова оставляем
                ПоследнееСлово    = Лев(ПоследнееСлово, 1) + "дна";
            Иначе
                Если (Врег(ПоследнееСлово) = "ДВА") Тогда
                    ПоследнееСлово = Лев(ПоследнееСлово, 1) + "ве";
                КонецЕсли;
            КонецЕсли;
    
            Возвр = Возвр + ПоследнееСлово + " т"    
        Иначе   
            // теперь займемся окончанием последнего слова целой части
            ПоследнееСлово = "";
       
            Пока (Возвр <> "") И (Возвр = СокрП(Возвр)) Цикл    // последний символ в строке не пробел
                ПоследнееСлово    = Прав(Возвр, 1) + ПоследнееСлово;    // добавляем последнюю букву
                Возвр            = Лев(Возвр, СтрДлина(Возвр) - 1);    // отрезаем последнюю букву
            КонецЦикла;
           
            Если Врег(ПоследнееСлово) = "ОДИН" Тогда
                // первую букву слова оставляем
                ПоследнееСлово    = Лев(ПоследнееСлово, 1) + "дна";
            Иначе
                Если (Врег(ПоследнееСлово) = "ДВА") Тогда
                    ПоследнееСлово = Лев(ПоследнееСлово, 1) + "ве";
                КонецЕсли;
            КонецЕсли;
    
            Возвр = Возвр + ПоследнееСлово + " т" + " " + НРег(СокрЛП(Формат(ДробЧасть, "ЧП")))+ " кг";
        КонецЕсли;
       
        Возврат Возвр;
       
    КонецФункции // ЧислоПрописью()
  4. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    313
    Симпатии:
    50
    Баллы:
    54
    Глянь в отладке, для этот код - нечитабельный)
    --- Объединение сообщений, 7 окт 2016 ---
    Твоя функция походу исходное число представляет в тоннах и килограммах :)
    А тебе то в валюте.
    Код:
    Функция ПрописьЧисла(Знач мЧисло)
      
        ПрописьЦелойЧасти = Формат(Цел(мЧисло), "ЧП");
        ПрописьДробнойЧасти =  Формат((мЧисло * 100) % 100, "ЧП");
        Возврат ПрописьЦелойЧасти + " " + Нрег(ПрописьДробнойЧасти);
    
    КонецФункции
    Но тебе ещё склонять валюту числа придётся... в общем это геморрой. Чем тебе копейки не нравятся? Стандартная функция формат, ей пользуются абсолютно все.
    Последнее редактирование: 7 окт 2016
  5. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet

    Регистрация:
    30 сен 2016
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    мне копейки нравятся, но сказали нужо полностью прописью
  6. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    313
    Симпатии:
    50
    Баллы:
    54
    Ну, можно вот так:
    Код:
    Функция ПрописьЧисла(Знач мЧисло)
       
        мПрописьЧисла = Формат(мЧисло, "ЧПДС");
        ДробнаяЧасть = (мЧисло * 100) % 100;
        Если ДробнаяЧасть = 0 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "00", "ноль");
        Иначе
            ПрописьДробнойЧасти = Нрег(Формат(ДробнаяЧасть, "ЧП"));
            Результат = СтрЗаменить(мПрописьЧисла, Строка(ДробнаяЧасть), ПрописьДробнойЧасти);   
        КонецЕсли;
        Возврат Результат;
    
    КонецФункции
    Kas-tet нравится это.
  7. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet

    Регистрация:
    30 сен 2016
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1

    Это я так понимаю часть кода, для замены 00 на ноль. Так? Остальное таким же макаром прописывать для каждого числа...
  8. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    313
    Симпатии:
    50
    Баллы:
    54
    Это вся функция прописи.
    1) берём число и переводим его в число с прописью с валютами.
    2) берём дробную часть
    3) если дробная равна нулю, то заменяем "00" на "ноль", в противном случае заменяем на прописную дробную часть.
  9. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet

    Регистрация:
    30 сен 2016
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    Что-то я не догоняю...
    А откуда берется например мЧисло?
  10. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    313
    Симпатии:
    50
    Баллы:
    54
    Я последний раз отвечаю на подобные вопросы. Нужно иметь хотя бы базовые знания.
    Вместо твоего Формат(..., "ЧПДС") нужно использовать мою функцию ЧислоПрописью(...)

    Вложения:

    Kas-tet нравится это.
  11. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet

    Регистрация:
    30 сен 2016
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    Работает, но почемуто если 08 копеек пишет как 0восемь кпеек
  12. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    313
    Симпатии:
    50
    Баллы:
    54
    потому что у меня кривые руки и функцию нужно "допилить"
    --- Объединение сообщений, 7 окт 2016 ---
    Код:
    Функция ПрописьЧисла(Знач мЧисло)
       
        мПрописьЧисла = Формат(мЧисло, "ЧПДС");
        ДробнаяЧасть = (мЧисло * 100) % 100;
        Если ДробнаяЧасть = 0 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "00", "ноль");
        Иначе
            ПрописьДробнойЧасти = Нрег(Формат(ДробнаяЧасть, "ЧП"));
            мПрописьЧисла = СтрЗаменить(мПрописьЧисла, "0", "");
            Результат = СтрЗаменить(мПрописьЧисла, Строка(ДробнаяЧасть), ПрописьДробнойЧасти);   
        КонецЕсли;
        Возврат Результат;
    
    КонецФункции
    Последнее редактирование: 7 окт 2016
  13. TopicStarter Overlay
    Kas-tet
    Offline

    Kas-tet

    Регистрация:
    30 сен 2016
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    1
    Спасибо!!
    Доделал так, вроде работает)
    Код:
    Функция ПрописьЧисла(Знач мЧисло)
      
        мПрописьЧисла = Формат(мЧисло, "ЧПДС");
        ДробнаяЧасть = (мЧисло * 100) % 100;
        Если ДробнаяЧасть = 0 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "00", " ноль ");
        ИначеЕсли
             ДробнаяЧасть = 01 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "01", " одна ");
        ИначеЕсли
            ДробнаяЧасть = 02 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "02", " две ");
        ИначеЕсли
            ДробнаяЧасть = 03 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "03", " три ");
        ИначеЕсли
            ДробнаяЧасть = 04 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "04", " четыре ");
        ИначеЕсли             
            ДробнаяЧасть = 05 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "05", " пять ");
        ИначеЕсли   
            ДробнаяЧасть = 06 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "06", " шесть ");
        ИначеЕсли         
            ДробнаяЧасть = 07 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "07", " семь ");
        ИначеЕсли         
            ДробнаяЧасть = 08 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "08", " восемь ");
        ИначеЕсли         
            ДробнаяЧасть = 09 Тогда
            Результат = СтрЗаменить(мПрописьЧисла, "09", " девять ");
            Иначе
            ПрописьДробнойЧасти = Нрег(Формат(ДробнаяЧасть, "ЧП"));
            Результат = СтрЗаменить(мПрописьЧисла, Строка(ДробнаяЧасть), ПрописьДробнойЧасти);  
        КонецЕсли;
        Возврат Результат;
    
    КонецФункции
  14. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    313
    Симпатии:
    50
    Баллы:
    54
    Ну,
    Ну, окей. Хотя проще просто ноль удалить)))

Поделиться этой страницей