30.10.2020 Иван Каплин 11073
Дата прописью в 1С

Содержание:

1.       Необходимость написания даты прописью 1С

2.       Описание правил склонения в самостоятельном алгоритме  


1.    Необходимость написания даты прописью 1С


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

 

Решить такую задачу можно двумя путями:


1.     Простой, но имеющий ограничения: это использование при формировании даты прописью 1С подсистемы «Склонение представлений объектов» из набора «Библиотеки стандартных подсистем» в 1С (в большинство типовых конфигураций такая подсистема встроена). Так как подсистема универсальна и использует веб-сервис «Морфер», для ее работы требуется подключение к сети (что и является ограничением даже сегодня, ведь не везде возможно подключение к сети, иногда, в целях информационной безопасности).


2.     Сложный, но трудоемкий в реализации: это написать самостоятельно все правила склонений Даты, но придется указать ограничения в пределах 9999 года.

 

По простому пути идти рекомендуется в связи с возможностью использования веб-сервиса, а также для получения корректных данных (у сервиса меньше вероятности ошибки склонения).

 

Об использовании подсистемы «Склонение представлений объектов» есть достаточно подробные статьи, например, моего коллеги Алексея Болдонова (читать здесь). Однако цель текущей статьи – показать пример написания алгоритма в программе 1С.  


2. Описание правил склонения в самостоятельном алгоритме


Для того чтобы написать число прописью, потребуется предварительно составить порядок действий для сложных и простых случаев.

 

Очертим некоторые допущения:


1. согласно нормам русского языка в названии года могут использоваться как порядковые числительные, так и количественные, но, рассматривая текущий пример, мы несколько упростим правила для лучшего понимания примера самостоятельного алгоритма;


2. важно помнить, что для неодушевленных предметов вопрос для именительного падежа будет такой же, как и для винительного, поэтому последний мы указывать в таблице не будем;


3. в примере будет использована формула: для числа с двумя и более знаками все цифры (кроме нуля) будут взяты в именительном падеже, кроме последней (кроме нуля), которая будет взята в родительном падеже;


4. в примере будет рассмотрена упрощенная модель написания даты (месяца) прописью, не берущая во внимание исключения и из правил русского языка.

 

В прописной дате можно выделить следующие основные блоки чисел прописью на русском языке:

·        число дня;

·        число месяца прописью;

·        число года.


Начнем с простого – число месяца прописью. Для месяца всегда будет использован Родительный падеж, поэтому можно зафиксировать 12 значений в любом удобном виде (массив, список значений, соответствие и иное) используя метод Месяц(), который возвращает числовое значение месяца, поэтому как Ключ записи 1С может использовать число месяца прописью, а как значение записи – наименование месяца в Родительном падеже (для массива ключом записи в 1С может служить индекс значения).

 

Теперь можно разбирать сложное: числа дня и года. К сожалению, сделать для дня и года какие-то пересекающиеся алгоритмы довольно проблематично (мало пересечений), поэтому сначала разберем день, потом год, рассчитывая, что для них самостоятельный алгоритм будет совершать отдельные операции.

 

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

 

Число дня

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

 

Итак, зададим переменную и первые несколько строк значений:


написания даты прописью 1С


И так далее аж до 19-го числа. Начиная с 21-го числа, мы сможем комбинировать значение «двадцать», и «первое», «двадцать», и «второе», «двадцать», и «третье» аж до 99-го:


комбинировать значение в 1С


Для уменьшения количества строк, мы можем пойти следующим путем:


1. для значений от одного до двадцати используем уникальные значения склонений;


2. для значений внутри десятков, начиная со второго, мы будем пользоваться формулой: число дня >= 21 и < 30; значение 21 + значение дня, взятое из второй части цифры дня, например, 25 >= 21 и < 30, значит «двадцать» + «пятое» (всё в именительном падеже).

 

Используя метод День(), мы можем получить числовое выражение дня, что нам поможет в алгоритме.

 

При этом можно использовать условие (чтобы было проще понимать):


Используя метод День()


Так как до сотни значения будут повторяться, считаем, что с ними мы закончили. Для придания универсальности (то есть использования как дней, так и лет), можно добавить условия и заключить в функцию:


добавить условия 1с


Таким образом, мы получаем значение числа прописью для дня – в Именительном падеже, а для года (от первого до девяносто девятого) – в Родительном падеже.

 

Так как с днями мы разобрались, настал черед годов. Мы разобрали значения лет от одного до девяносто девяти, теперь же разберем состав сотен лет:


заключить в функцию


При этом следует учитывать, что если в указанном году нет десятков или единиц, то мы подставляем значение «Какого». Если есть десятки или единицы, то – «Какой». Через условие можно это указать и заключить в функцию:


подставляем значение в 1с


При написания тысяч ситуация будет схожей, а само заполнение будет выглядеть так:


Дата прописью в 1С


Таким же образом заключим условия для выбора в функцию 1С 8:


выбор в функцию 1С 8


Соединяя полученные функции 1С 8, мы сможем из даты получить все, что нам потребуется, чтобы собрать результат в одну строку:


функции 1С 8


Итак, мы разобрали сначала день, потом месяц. Год мы разобрали по частям: десятки лет, сотни лет и тысячи лет. И уже после собрали все в одну строку.

 

Вот таким объемным способом можно самостоятельно создать функцию даты прописью в 1С, но, конечно, следует учитывать ограничения.

 

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

 

Специалист компании «Кодерлайн»

Иван Каплин

Наши проекты

ФГОУ ВПО «Горский государственный аграрный университет»
ФГОУ ВПО «Горский государственный аграрный университет»

Отрасль:
Образование

Внедренное типовое решение:
1С:Колледж ПРОФ

- Управление персоналом и кадровый учет (HRM):
Кадровый учет
Управление об...

ООО «Фипар»
ООО «Фипар»

Отрасль:

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Специалисты «Кодерлайн» внедрили «1С:ERP. Управление предприятием 2» и автома...

ПЭК
ПЭК

Отрасль:
Грузоперевозки

Внедренное типовое решение:
1С:Управление производственным предприятием

- Внедрение функционала управления НСИ;
- Рефакторинг;
- Оптимизация общег...

Филиал ГлавУпДК при МИД России фирма «Инпредкадры»
Филиал ГлавУпДК при МИД России фирма «Инпредкадры»

Отрасль:
Государственное управление

Внедренное типовое решение:
1С:Бухгалтерия

- Расчеты с контрагентами;
- Управленческий учет;
- Формирование отраслев...

ООО «ПЛЮСПЭЙ»
ООО «ПЛЮСПЭЙ»

Отрасль:
Организацией расчетов посредством электронных средств платежа

Внедренное типовое решение:
1С:Комплексная автоматизация

- Разработка подсистемы оперативного учета транзакций...

 ЗАО "Инвестгеосервис" -ДО
ЗАО «Инвестгеосервис»

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:Документооборот КОРП

- Работа с файлами;
- Делопроизводство;
- Процессы движения документов; ...

Автоматизации учета затрат и расчета себестоимости с использованием конфигурации «Koderline: Управление проектами строительства скважин»
ООО «Буровая сервисная компания «ГРАНД»

Отрасль:
Нефтесервис

Внедренное типовое решение:
«Koderline: Управление проектами строительства скважин»

Учет и планирование:
- собственную разработку компании «Кодерлайн» – конф...

ООО "НЦКТ"
ООО "НЦКТ"

Отрасль:
Профессиональные услуги

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Производственные операции
Автоматизация бизнес-процессов...

ООО «ПраксисКом»
ООО «ПраксисКом»

Отрасль:
Аутсорсинг бухгалтерских услуг

Внедренное типовое решение:
1С:Бухгалтерия ПРОФ

- Бухгалтерский учет:
Банк и касса
Завершение периода
Нематериальные ...

Внедрение ПП "1С:CRM ПРОФ" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:CRM ПРОФ

- Управление отношениями с клиентами (CRM) ...

ООО «ТейблТок»
ООО «ТейблТок»

Отрасль:
Общественное питание и рестораны

Внедренное типовое решение:
1С:Управление торговлей

Оформление заказов поставщикам Оформление заказов покупателей Управление ...

Автоматизация учета на базе ПП "1С:Комплексная автоматизация 8" в ЗАО "Крюгер-Гранд"
ЗАО «Крюгер-Гранд»

Отрасль:
Производство

Внедренное типовое решение:
1С:Комплексная автоматизация

- Создание интерфейсов и наборов прав пользователей;
- Отражению временных ...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение