На этом шаге мы рассмотрим создание модкля печати дат.
На модуль формирования написания даты прописью уже делалась ссылка в примерах, описывающих автоматизацию формирований командировочных удостоверений и приходных кассовых ордеров. На рисунке 3 232 шага приведен фрагмент рабочего листа с формулами модуля написания текста даты с преобразованием названия месяца в текст по номеру месяца.
При автоматизации формирования текста доверенности, даты используются значительно чаще. Поэтому прежде чем переходить к созданию приложения, остановимся на модулях формирования текста дат.
На рисунке 1 приведен пример визуального отображения даты, ссылка на ячейку в которую она введена, находится внутри текстовой функции СЦЕПИТЬ, введенной в ячейку С1.
Рис.1. Пример отображения даты в текстовом формате
Этот пример похож на текстовое отображение числовых данных, приведенных в прошлом примере.
Ячейка В1 отформатирована как дата в формате Excel. В аргументе функции СЦЕПИТЬ задана ссылка на ячейку В1. Эта текстовая функция автоматически переводит дату в число, равное количеству дней, прошедших с 1 января 1900 года, от которой Excel ведет исчисление дат. В таком виде эта дата и будет попадать в текст. Естественно, в таком отображении, дата в текстовом документе будет не читаема. Поэтому необходимо разработать алгоритм отображения даты внутри текста в таком же виде, как она представлена в ячейке В1 на рисунке 1.
На рисунке 2 на примере формулы, введенной в ячейку С6 и отображенной в строке формул, приведен алгоритм перевода видимого визуально формата даты Excel в текст, сохраняющий визуально этот формат.
Рис.2. Формула отображения в текстовом виде формата даты
В формуле используются:
Рассмотрим вторую строку введенной формулы. Первый аргумент функции ЕСЛИ проводит сравнение номера дня со значением 9 и, если номер дня равен или меньше значения 9, то тогда во втором аргументе, с помощью функции СЦЕПИТЬ к значению номера дня слева добавляется значение "0". Если условие первого аргумента не выполняется, то номер дня возвращается третьим аргументом функции ЕСЛИ без изменений.
С номером месяца производится та же операция. И, в завершение, функция СЦЕПИТЬ, соединяет в единое целое полученные значения составляющих даты, вставив между ними точки и добавив в конце текст "г.".
Для написания прописью номера дня и года можно применить таблицу, показанную на рисунке 3.
Рис.3. Таблица написания прописью номера дня в месяце
Отличие текста написания номера дня от номера года зависит только от склонения, например: номер дня 11 пишется как "одиннадцатое", а такой же год - "одиннадцатого".
В таблице ячейка С5 является входом, в которую вводится число (или ссылка на ячейку, содержащую это число), а ячейка D5 - выходом, в которой это число уже пишется прописью.
В области ячеек С6:D7 выделяются отдельно десятки и единицы этого числа. Формулы в ячейках С8:С10 предназначены для написания прописью количества десятков, а в ячейках D8:D16 - для написания прописью единиц. Таблица пишет прописью числа от единицы до тридцати девяти.
После создания таблицы и тестирования, ее размеры минимизируются путем вложения формул. На рисунке 4 приведена минимизированная таблица (модуль) написания номера года.
Рис.4. Модуль написания прописью номера года
Модуль расположен в ячейках С6:F6, в которой ячейка С6 является входом, а ячейка F6 выходом. Номер года пишется от 2001 до 2039, причем прописью определяется только число от 1 до 39, а текст "две тысячи" дополняется.
Если соединить все три модуля написания текста числа, месяца и года в единое целое, то получится один модуль написания даты прописью. Как пример, такой модуль показан на рисунке 5.
Рис.5. Полученный модуль написания даты прописью
На следующем шаге мы рассмотрим расчет полного количества лет, дней и месяцев в интервале указанных дат.