Функция позволяет формировать описание периода, заданного датами начала и окончания на одном из языков, поддерживаемых платформой. Например, в результате выполнения следующего кода:
Код 1C v 8.2 УП ТекДата = ТекущаяДата();
НачПериода = НачалоМесяца(ТекДата);
КонПериода = КонецМесяца(ТекДата);
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ПредставлениеПериода(НачПериода, КонПериода, "L=en_US");
// или
Сообщение.Текст = ПредставлениеПериода(НачПериода, КонПериода, "L=ru_RU");
Сообщение.Сообщить();
будет получено представление периода на английском или русском языках!
Функция глобального контекста
ПредставлениеПериода() позволяет получить строковое представление периода, заданного датами начала и окончания.
Например:
Код 1C v 8.х ПредставлениеПериода('20050101000000', '20050101235959') // 1 января 2005 г.
ПредставлениеПериода('20050101000000', '20050131235959') // Январь 2005 г.
ПредставлениеПериода('20050101000000', '20050228235959') // Январь 2005 г. - Февраль 2005 г.
Кроме стандартных периодов эта функция позволяет получать представления так называемых финансовых периодов: первых
девяти месяцев года и первого полугодия. Для этого используется форматная строка с указанием признака ФП:
Код 1C v 8.х ПредставлениеПериода('20050101000000', '20050630235959', "ФП = Истина") // 1 полугодие 2005 г.
ПредставлениеПериода('20050101000000', '20050930235959', "ФП = Истина") // 9 месяцев 2005 г.
Кроме этого форматная строка позволяет получать представление периода на языке, отличном от используемого по-умолчанию:
Код 1C v 8.х ПредставлениеПериода('20050101000000', '20050331235959', "L = en_US") // 1 quarter of 2005 - Английский
ПредставлениеПериода('20050101000000', '20050331235959', "L = bg_BG") // 1-во тримесечие на 2005 г. - Болгарский
ПредставлениеПериода('20050101000000', '20050331235959', "L = de_DE") // 1. Quartal 2005 - Немецкий
Код причины постановки на учёт (КПП) представляет собой
девяти значный цифровой код, который вместе с ИНН организации позволяет однозначно идентифицировать её обособленные подразделения (см. КПП в Википедии).
Структура КПП:
* 4 цифры – код подразделения ФНС России (справочник СОУН);
* 2 цифры – код причины постановки на учёт;
* 3 цифры – порядковый номер постановки на учёт;
В большинстве случаев КПП выглядит как: код подразделения ФНС + 01001 поскольку не так уж много организаций имеют обособленные подразделения.
К недостаткам КПП можно отнести невозможность проверки КПП по контрольной сумме. Максимум можно проверить “разумность” заполнения каждого из его элементов. В общем случае КПП не несёт больше информации чем несёт ИНН, и практически никогда не используется по отдельности в ИНН организации.
Код 1C v 8.х // Параметры:
// КПП - строка - проверяемый код причины постановки на учет
Функция КППСоответствуетТребованиям(Знач КПП) Экспорт
Если НЕ ТолькоЦифрыВСтроке(КПП) Тогда
Возврат Ложь;
КонецЕсли;
Если СтрДлина(СтрЗаменить(Строка(КПП), "0", "1")) <> 9 Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
При помощи приведенных ниже функций можно вывести дату прописью, например:
03.08.2009 - третье августа две тысячи девятого года
Код 1C v 8.х
// Функция Дата прописью
// Параметры:
// ДП - Дата
// Возвращаемое значение:
// дата прописью
//
// Модификация для v8: Evgeny Migachev
Функция ДатаПрописью(ДП) Экспорт
стрРез = "";
Д=Формат(ДП,"ДЛФ=D");
спсМес = Новый СписокЗначений;
спсМес.Добавить("января");
спсМес.Добавить("февраля");
спсМес.Добавить("марта");
спсМес.Добавить("апреля");
спсМес.Добавить("мая");
спсМес.Добавить("июня");
спсМес.Добавить("июля");
спсМес.Добавить("августа");
спсМес.Добавить("сентября");
спсМес.Добавить("октября");
спсМес.Добавить("ноября");
спсМес.Добавить("декабря");
спсЧисл = Новый СписокЗначений;
спсЧисл.Добавить("первое","первого");
спсЧисл.Добавить("второе","второго");
спсЧисл.Добавить("третье","третьего");
спсЧисл.Добавить("четвертое","четвертого");
спсЧисл.Добавить("пятое","пятого");
спсЧисл.Добавить("шестое","шестого");
спсЧисл.Добавить("седьмое","седьмого");
спсЧисл.Добавить("восьмое","восьмого");
спсЧисл.Добавить("девятое","девятого");
//числительные им.падеж
спсЧислИм = Новый СписокЗначений;
спсЧислИм.Добавить("тысяча","тысячного");
спсЧислИм.Добавить("две тысячи","двухтысячного");
спсЧислИм.Добавить("три тысячи","трехтысячного");
спсЧислИм.Добавить("четыре тысячи","четырёхтысячного");
спсЧислИм.Добавить("пять","пятитысячного");
спсЧислИм.Добавить("шесть","шеститысячного");
спсЧислИм.Добавить("семь","семитысячного");
спсЧислИм.Добавить("восемь","восьмитысячного");
спсЧислИм.Добавить("девять","девяти тысячного");
спсСотни = Новый СписокЗначений;
спсСотни.Добавить("сто");
спсСотни.Добавить("двести");
спсСотни.Добавить("триста");
спсСотни.Добавить("четыреста");
спсСотни.Добавить("пятьсот");
спсСотни.Добавить("шестьсот");
спсСотни.Добавить("семьсот");
спсСотни.Добавить("восемьсот");
спсСотни.Добавить("девятьсот");
//десятки им.падеж
спсДесИм = Новый СписокЗначений;
спсДесИм.Добавить("","десятого");
спсДесИм.Добавить("двадцать","двадцатого");
спсДесИм.Добавить("тридцать","тридцатого");
спсДесИм.Добавить("сорок","сорокового");
спсДесИм.Добавить("пятьдесят","пятидесятого");
спсДесИм.Добавить("шестьдесят","шестидесятого");
спсДесИм.Добавить("семьдесят","семидесятого");
спсДесИм.Добавить("восемьдесят","восьмидесятого");
спсДесИм.Добавить("девяносто","девяностого");
//субдесятки род.падеж
спсСубДесРод = Новый СписокЗначений;
спсСубДесРод.Добавить("одиннадцатого");
спсСубДесРод.Добавить("двенадцатого");
спсСубДесРод.Добавить("тринадцатого");
спсСубДесРод.Добавить("четырнадцатого");
спсСубДесРод.Добавить("пятнадцатого");
спсСубДесРод.Добавить("шестнадцатого");
спсСубДесРод.Добавить("семнадцатого");
спсСубДесРод.Добавить("восемнадцатого");
спсСубДесРод.Добавить("девятнадцатого");
спсДес = Новый СписокЗначений;
спсДес.Добавить("десятое");
спсДес.Добавить("двадцатое","двадцать");
спсДес.Добавить("тридцатое","тридцать");
спсДес.Добавить("сороковое","тридцать");
спсДес.Добавить("пятидесятое","тридцать");
спсДес.Добавить("шестидесятое","тридцать");
спсДес.Добавить("семидесятое","тридцать");
спсСубДес = Новый СписокЗначений;
спсСубДес.Добавить("одиннадцатое");
спсСубДес.Добавить("двенадцатое");
спсСубДес.Добавить("тринадцатое");
спсСубДес.Добавить("четырнадцатое");
спсСубДес.Добавить("пятнадцатое");
спсСубДес.Добавить("шестнадцатое");
спсСубДес.Добавить("семнадцатое");
спсСубДес.Добавить("восемнадцатое");
спсСубДес.Добавить("девятнадцатое");
спсДаты = СтрЗаменить(СокрЛП(Д),".",Символы.ПС);
//разбираем день
стрДень = СокрЛП(Число(СтрПолучитьСтроку(спсДаты,1)));
Если СтрДлина(стрДень)=1 Тогда
стрДень = спсЧисл.Получить(Число(стрДень)-1).Значение;
Иначе
десДень = Число(Лев(стрДень,1));
едДень = Число(Прав(стрДень,1));
Если едДень=0 Тогда
стрДень = спсДес.Получить(десДень-1).Значение;
Иначе
Если десДень>1 Тогда
т = Строка(спсДес.Получить(десДень-1));
стрДень = т+" "+Строка(спсЧисл.Получить(едДень-1).Значение);
Иначе
стрДень = спсСубДес.Получить(едДень-1).Значение;
КонецЕсли;
КонецЕсли;
КонецЕсли;
//разбираем месяц
стрМес = спсМес.Получить(Число(СтрПолучитьСтроку(спсДаты,2))-1).Значение;
//разбираем год
стрГод = СтрПолучитьСтроку(спсДаты,3);
длинаГода = СтрДлина(стрГод);
Если длинаГода=4 Тогда
тыс = Сред(стрГод,1,1); сот = Сред(стрГод,2,1); дес = Сред(стрГод,3,1); ед = Сред(стрГод,4,1);
_т = спсЧислИм.Получить(Число(тыс)-1).Значение;
Если (Число(сот)=0) и (Число(дес)=0) и (Число(ед)=0) Тогда
миллениум = Строка(спсЧислИм.Получить(Число(тыс)-1));
стрГод = миллениум;
Иначе
с = ""; дс = ""; е = "";
Если Число(сот)<>0 Тогда
с = спсСотни.Получить(Число(сот)-1).Значение;
КонецЕсли;
Если Число(дес)<>0 Тогда
Если Число(ед)=0 Тогда
дг = Строка(спсДесИм.Получить(Число(дес)-1));
дс = дг;
Иначе
дс = спсСубДесРод.Получить(Число(ед)-1).Значение;
КонецЕсли;
КонецЕсли;
Если (Число(дес)>1) или (Число(дес)=0) Тогда
Если Число(ед)<>0 Тогда
е =Строка(спсЧисл.Получить(Число(ед)-1));
КонецЕсли;
КонецЕсли;
стрГод = Строка(_т)+" "+Строка(с)+" "+Строка(дс)+" "+Строка(е);
КонецЕсли;
Иначе
КонецЕсли;
стрГод = стрГод+" года";
стрГод = СтрЗаменить(стрГод," "," ");
стрРез = Строка(стрДень)+" "+Строка(стрМес)+" "+Строка(стрГод);
стрРез = СтрЗаменить(стрРез," "," ");
Возврат стрРез;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
сообщить(ДатаПрописью(РеквизитДатаНаФорме));
КонецПроцедуры
Код 1C v 7.x
// ПрописьДата()
//
// Параметры:
// Д - дата в формате ДД.MM.ГГГГ
// Возвращаемое значение:
// дата прописью
//
// Автор: hunter
Функция глПрописьДата(Д) Экспорт
стрРез = "";
спсМес = СоздатьОбъект("СписокЗначений");
спсМес.ДобавитьЗначение("января");
спсМес.ДобавитьЗначение("февраля");
спсМес.ДобавитьЗначение("марта");
спсМес.ДобавитьЗначение("апреля");
спсМес.ДобавитьЗначение("мая");
спсМес.ДобавитьЗначение("июня");
спсМес.ДобавитьЗначение("июля");
спсМес.ДобавитьЗначение("августа");
спсМес.ДобавитьЗначение("сентября");
спсМес.ДобавитьЗначение("октября");
спсМес.ДобавитьЗначение("ноября");
спсМес.ДобавитьЗначение("декабря");
спсЧисл = СоздатьОбъект("СписокЗначений");
спсЧисл.ДобавитьЗначение("первое","первого");
спсЧисл.ДобавитьЗначение("второе","второго");
спсЧисл.ДобавитьЗначение("третье","третьего");
спсЧисл.ДобавитьЗначение("четвертое","четвертого");
спсЧисл.ДобавитьЗначение("пятое","пятого");
спсЧисл.ДобавитьЗначение("шестое","шестого");
спсЧисл.ДобавитьЗначение("седьмое","седьмого");
спсЧисл.ДобавитьЗначение("восьмое","восьмого");
спсЧисл.ДобавитьЗначение("девятое","девятого");
//числительные им.падеж
спсЧислИм = СоздатьОбъект("СписокЗначений");
спсЧислИм.ДобавитьЗначение("тысяча","тысячного");
спсЧислИм.ДобавитьЗначение("две тысячи","двухтысячного");
спсЧислИм.ДобавитьЗначение("три тысячи","трехтысячного");
спсЧислИм.ДобавитьЗначение("четыре тысячи","четырёхтысячного");
спсЧислИм.ДобавитьЗначение("пять","пятитысячного");
спсЧислИм.ДобавитьЗначение("шесть","шеститысячного");
спсЧислИм.ДобавитьЗначение("семь","семитысячного");
спсЧислИм.ДобавитьЗначение("восемь","восьмитысячного");
спсЧислИм.ДобавитьЗначение("девять","девяти тысячного");
спсСотни = СоздатьОбъект("СписокЗначений");
спсСотни.ДобавитьЗначение("сто");
спсСотни.ДобавитьЗначение("двести");
спсСотни.ДобавитьЗначение("триста");
спсСотни.ДобавитьЗначение("четыреста");
спсСотни.ДобавитьЗначение("пятьсот");
спсСотни.ДобавитьЗначение("шестьсот");
спсСотни.ДобавитьЗначение("семьсот");
спсСотни.ДобавитьЗначение("восемьсот");
спсСотни.ДобавитьЗначение("девятьсот");
//десятки им.падеж
спсДесИм = СоздатьОбъект("СписокЗначений");
спсДесИм.ДобавитьЗначение("","десятого");
спсДесИм.ДобавитьЗначение("двадцать","двадцатого");
спсДесИм.ДобавитьЗначение("тридцать","тридцатого");
спсДесИм.ДобавитьЗначение("сорок","сорокового");
спсДесИм.ДобавитьЗначение("пятьдесят","пятидесятого");
спсДесИм.ДобавитьЗначение("шестьдесят","шестидесятого");
спсДесИм.ДобавитьЗначение("семьдесят","семидесятого");
спсДесИм.ДобавитьЗначение("восемьдесят","восьмидесятого");
спсДесИм.ДобавитьЗначение("девяносто","девяностого");
//субдесятки род.падеж
спсСубДесРод = СоздатьОбъект("СписокЗначений");
спсСубДесРод.ДобавитьЗначение("одиннадцатого");
спсСубДесРод.ДобавитьЗначение("двенадцатого");
спсСубДесРод.ДобавитьЗначение("тринадцатого");
спсСубДесРод.ДобавитьЗначение("четырнадцатого");
спсСубДесРод.ДобавитьЗначение("пятнадцатого");
спсСубДесРод.ДобавитьЗначение("шестнадцатого");
спсСубДесРод.ДобавитьЗначение("семнадцатого");
спсСубДесРод.ДобавитьЗначение("восемнадцатого");
спсСубДесРод.ДобавитьЗначение("девятнадцатого");
спсДес = СоздатьОбъект("СписокЗначений");
спсДес.ДобавитьЗначение("десятое");
спсДес.ДобавитьЗначение("двадцатое","двадцать");
спсДес.ДобавитьЗначение("тридцатое","тридцать");
спсДес.ДобавитьЗначение("сороковое","тридцать");
спсДес.ДобавитьЗначение("пятидесятое","тридцать");
спсДес.ДобавитьЗначение("шестидесятое","тридцать");
спсДес.ДобавитьЗначение("семидесятое","тридцать");
спсСубДес = СоздатьОбъект("СписокЗначений");
спсСубДес.ДобавитьЗначение("одиннадцатое");
спсСубДес.ДобавитьЗначение("двенадцатое");
спсСубДес.ДобавитьЗначение("тринадцатое");
спсСубДес.ДобавитьЗначение("четырнадцатое");
спсСубДес.ДобавитьЗначение("пятнадцатое");
спсСубДес.ДобавитьЗначение("шестнадцатое");
спсСубДес.ДобавитьЗначение("семнадцатое");
спсСубДес.ДобавитьЗначение("восемнадцатое");
спсСубДес.ДобавитьЗначение("девятнадцатое");
спсДаты = СтрЗаменить(СокрЛП(Д),".",РазделительСтрок);
//разбираем день
стрДень = СокрЛП(Число(СтрПолучитьСтроку(спсДаты,1)));
Если СтрДлина(стрДень)=1 Тогда
стрДень = спсЧисл.ПолучитьЗначение(Число(стрДень));
Иначе
десДень = Число(Лев(стрДень,1));
едДень = Число(Прав(стрДень,1));
Если едДень=0 Тогда
стрДень = спсДес.ПолучитьЗначение(десДень);
Иначе
Если десДень>1 Тогда
т = ""; спсДес.ПолучитьЗначение(десДень,т);
стрДень = т+" "+спсЧисл.ПолучитьЗначение(едДень);
Иначе
стрДень = спсСубДес.ПолучитьЗначение(едДень);
КонецЕсли;
КонецЕсли;
КонецЕсли;
//разбираем месяц
стрМес = спсМес.ПолучитьЗначение(Число(СтрПолучитьСтроку(спсДаты,2)));
//разбираем год
стрГод = СтрПолучитьСтроку(спсДаты,3);
длинаГода = СтрДлина(стрГод);
Если длинаГода=4 Тогда
тыс = Сред(стрГод,1,1); сот = Сред(стрГод,2,1); дес = Сред(стрГод,3,1); ед = Сред(стрГод,4,1);
_т = спсЧислИм.ПолучитьЗначение(Число(тыс));
Если (Число(сот)=0) и (Число(дес)=0) и (Число(ед)=0) Тогда
миллениум = ""; спсЧислИм.ПолучитьЗначение(Число(тыс),миллениум);
стрГод = миллениум;
Иначе
с = ""; дс = ""; е = "";
Если Число(сот)<>0 Тогда
с = спсСотни.ПолучитьЗначение(Число(сот));
КонецЕсли;
Если Число(дес)<>0 Тогда
Если Число(ед)=0 Тогда
_дг = ""; спсДесИм.ПолучитьЗначение(Число(дес),_дг);
дс = _дг;
Иначе
Если Число(дес)>1 Тогда
дс = спсДесИм.ПолучитьЗначение(Число(дес));
Иначе
дс = спсСубДесРод.ПолучитьЗначение(Число(ед));
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если (Число(дес)>1) или (Число(дес)=0) Тогда
Если Число(ед)<>0 Тогда
//е = "";
спсЧисл.ПолучитьЗначение(Число(ед),е);
КонецЕсли;
КонецЕсли;
стрГод = _т+?(ПустоеЗначение(с)=0," ","")+с+?(ПУстоеЗначение(дс)=0," ","")+дс+" "+е;
КонецЕсли;
Иначе
КонецЕсли;
стрГод = стрГод+" года";
стрРез = стрДень+" "+стрМес+" "+стрГод;
//Сообщить(стрДень+" "+стрМес+" "+стрГод);
Возврат стрРез;
КонецФункции