Работа с примитивными типами данных и системными функциями

Начнем изучение встроенного языка 1С с программирования работы с примитивными типами данных.

Примитивными типами данных в системе 1С являются следующие типы:
- Число;
- Строка;
- Дата;
- Булево и др.

В данном курсе мы ограничимся рассмотрением указанных четырех типов данных.

Для изучения программных походов к работе с примитивными типами данных создадим новую обработку “ПримитивныеДанные”:

Настроим форму обработки (пока она будет пустой):

Предварительно в начале модуля формы объявим переменные:

Перем Число1, Число2;
Перем Строка1;
Перем Дата1, Дата2, Дата3, Дата4, Дата5, Дата6;
Перем Булево1;
Перем A;

Попробуем программным способом ввести в систему данные примитивного типа. Для моделирования такого ввода добавим на форму обработки “ПримитивныеДанные” кнопку “ВводПрограммно” (Форма – Вставить элемент управления… – Кнопка).

Свяжем кнопку “ВводПрограммно” по событию “Нажатие” с процедурой “ВводПрограммноНажатие” и введем следующий код процедуры:

Процедура ВводПрограммноНажатие(Элемент)

Число1 = 25;
Число2 = 123456.789;
Строка1 = "Привет!";
Строка2 = "ООО ""Лабан""";
Дата1 = '20050308000000';
Дата2 = '00010101000000';
Дата3 = Дата(2005, 1, 1);
Дата4 = Дата(1, 1, 1);
Дата5 = Дата(2005, 1, 1, 10, 29, 50);
Булево1 = Истина;
Сообщить("Переменная Число1 типа " + ТипЗнч(Число1) + " имеет значение " + Число1);
Сообщить("Переменная Строка1 типа " + ТипЗнч(Строка1) + " имеет значение " + Строка1);
Сообщить("Переменная Строка2 типа " + ТипЗнч(Строка2) + " имеет значение " + Строка2);
Сообщить("Переменная Дата1 типа " + ТипЗнч(Дата1) + " имеет значение " + Дата1);
Сообщить("Переменная Дата2 типа " + ТипЗнч(Дата2) + " имеет значение " + Дата2);
Сообщить("Переменная Дата3 типа " + ТипЗнч(Дата3) + " имеет значение " + Дата3);
Сообщить("Переменная Дата4 типа " + ТипЗнч(Дата4) + " имеет значение " + Дата4);
Сообщить("Переменная Дата5 типа " + ТипЗнч(Дата5) + " имеет значение " + Дата5);
Сообщить("Переменная Булево1 типа " + ТипЗнч(Булево1) + " имеет значение " + Булево1);
КонецПроцедуры

Процедура должна активизироваться при нажатии кнопки “ВводПрограммно”, вводить значения переменных разных типов в тексте программы и выводить типы и значения этих переменных в окне “Служебные сообщения”.

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

Проверим работу процедуры в пользовательском режиме:

Далее продемонстрируем моделирование ввода значения переменной интерактивно, через поле ввода. Для этого создадим на форме поле ввода переменной А (Форма – Вставить элемент управления… – Поле ввода) и собщим этой переменной составной тип данных:

Кроме того, создадим на форме кнопку “ВводИнтерактивно”, свяжем ее по событию “Нажатие” с процедурой “ВводИнтерактивноНажатие” и введем следующий код процедуры:

Процедура ВводИнтерактивноНажатие(Элемент)

Сообщить("Переменная А типа " + ТипЗнч(А) + " имеет значение " + А);
КонецПроцедуры

Проверим работу процедуры в пользовательском режиме. Введем в поле ввода какое-либо значение примитивного типа и после нажатия кнопки “ВводИнтерактивно” увидим в окне “Служебные сообщения” выводить тип и значение введенной переменной.

Упражнение: Попробуйте оставить поле ввода незаполненным и нажать на кнопку “Ввод интерактивно”. Что выводится в окне “Служебные сообщения”? Как сделать так, чтобы в этом случае никакого сообщения не появлялось?

 

Проверка даты на “пустое значение”

Если значение переменной типа Дата не задано, то эта переменная по умолчанию имеет значение 01.01.0001 0:00:00 (начало первого дня первого месяца первого года).

Проверку даты на “пустое значение” можно сделать так:

Если ДатаПроверяемая = Дата(1, 1, 1) Тогда

Сообщить("Пустая дата!");
КонецЕсли;

Реализуем эту проверку на практике, используя введенные нами программно даты Дата1, Дата2, Дата3, Дата4 и Дата5.

Для этого создадим на форме кнопку “ПустаяДата”, свяжем ее по событию “Нажатие” с процедурой “ПустаяДатаНажатие” и введем следующий код процедуры:

Процедура ПустаяДатаНажатие(Элемент)

Дата1 = '20050308';
Дата2 = '00010101000000';
Дата3 = Дата(2005, 1, 1);
Дата4 = Дата(1, 1, 1);
Дата5 = Дата(2005, 1, 1, 10, 29, 50);
Если Дата1 = Дата(1, 1, 1) Тогда
Сообщить("Дата1 является пустой!");
Иначе Сообщить("Дата1 не является пустой!");
КонецЕсли;
Если Дата2 = Дата(1, 1, 1) Тогда
Сообщить("Дата2 является пустой!");
Иначе Сообщить("Дата2 не является пустой!");
КонецЕсли;
Если Дата3 = Дата(1, 1, 1) Тогда
Сообщить("Дата3 является пустой!");
Иначе Сообщить("Дата3 не является пустой!");
КонецЕсли;
Если Дата4 = Дата(1, 1, 1) Тогда
Сообщить("Дата4 является пустой!");
Иначе Сообщить("Дата4 не является пустой!");
КонецЕсли;
Если Дата5 = Дата(1, 1, 1) Тогда
Сообщить("Дата5 является пустой!");
Иначе Сообщить("Дата5 не является пустой!");
КонецЕсли;
КонецПроцедуры

Проверим работу процедуры в пользовательском режиме:

Переменные Дата2 и Дата4 совершенно справедливо определены как пустые.

Теперь, не определяя переменную Дата6, добавим в конец процедуры “ПустаяДатаНажатие” следующий код:

Если Дата6 = Дата(1, 1, 1) Тогда

Сообщить("Дата6 является пустой!");
Иначе Сообщить("Дата6 не является пустой!");
КонецЕсли;

Что получилось?

Как мы видим, программа ошибочно выдала сообщение: “Дата6 не является пустой!”.

Почему?

Поставьте на начало вставленного кода точку останова и проверьте, какой тип данных присвоен переменной Дата6. Это тип “Неопределено”.

Нам необходимо, чтобы переменная Дата6 имела тип “Дата”. Одним из способов такого присвоения является создание поля ввода переменной Дата6 с указанием типа “Дата”:

Также уберем переменную Дата6 из объявления переменных и запустим пользовательский режим.

Не вводя никакого значения в поле ввода Дата6, нажмем кнопку “Пустая дата”. Теперь относительно переменной Дата6 мы получим корректное сообщение: “Дата6 является пустой!”. Если же мы введем в поле ввода Дата6 какое-то значение даты, то мы получим сообщение: “Дата6 не является пустой!”.

Упражнение: Из процедуры “ПустаяДатаНажатие” выделите процедуры “ВводДанных” и “ПроверкаНаПустоеЗначение”.

Из одной процедуры получатся примерно следующие три:

Процедура ВводДанных()

Число1 = 25;
Число2 = 123456.789;
Строка1 = "Привет!";
Дата1 = '20050308';
Дата2 = '00010101000000';
Дата3 = Дата(2005, 1, 1);
Дата4 = Дата(1, 1, 1);
Дата5 = Дата(2005, 1, 1, 10, 29, 50);
Булево1 = Истина;
КонецПроцедуры

Процедура ПустаяДатаНажатие(Элемент)

ВводДанных();
Сообщить("Дата1:");
ПроверкаНаПустоеЗначение(Дата1);
Сообщить("Дата2:");
ПроверкаНаПустоеЗначение(Дата2);
Сообщить("Дата3:");
ПроверкаНаПустоеЗначение(Дата3);
Сообщить("Дата4:");
ПроверкаНаПустоеЗначение(Дата4);
Сообщить("Дата5:");
ПроверкаНаПустоеЗначение(Дата5);
Сообщить("Дата6:");
ПроверкаНаПустоеЗначение(Дата6);
КонецПроцедуры

Процедура ПроверкаНаПустоеЗначение(ПроверяемаяДата)

Если ПроверяемаяДата = Дата(1, 1, 1) Тогда
Сообщить("Дата является пустой!");
Иначе Сообщить("Дата не является пустой!");
КонецЕсли;
КонецПроцедуры

Проверим работу созданной программы в пользовательском режиме.

В будущем мы будем стараться оформлять учебные примеры в виде процедур или функций.

 

Определение соответствия переменной указанному типу данных

Иногда перед программистом 1С ставится задача программно определить, соответствует ли тип данных используемой переменной указанному типу (или типам) и, в зависимости от этого, выполнять с этой переменной те или иные действия.

В следующем примере мы проверим, имеет ли анализируемая переменная тип Дата. Для этого создадим процедуру “АнализТипа”:

Процедура АнализТипа(АнализируемаяПеременная, НаименованиеТипа)

Если ТипЗнч(АнализируемаяПеременная) = Тип(НаименованиеТипа) Тогда
Сообщить("Переменная имеет тип " + НаименованиеТипа);
Иначе Сообщить("Переменная не имеет тип " + НаименованиеТипа);
КонецЕсли;
КонецПроцедуры

На форме обработки “ПримитивныеДанные” создадим кнопку “ПроверкаТипа”, свяжем ее по событию “Нажатие” с процедурой “ПроверкаТипаНажатие” и введем следующий код процедуры, которая будет, в свою очередь, несколько раз вызывать процедуру “АнализТипа”:

Процедура АнализТипаНажатие(Элемент)

ВводДанных();
Сообщить("Строка1:");
АнализТипа(Строка1, "Дата");
Сообщить("Строка1:");
АнализТипа(Строка1, "Строка");
Сообщить("Дата2:");
АнализТипа(Дата2, "Дата");
Сообщить("Булево1:");
АнализТипа(Булево1, "Дата");
Сообщить("Булево1:");
АнализТипа(Булево1, "Булево");
КонецПроцедуры

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

 

Сравнение двух дат

Обратим внимание на то, что переменные Дата3 и Дата5 обозначают один день, но разное время. Для того, чтобы выполнить сравнение дат с точностью до дня, их рекомендуется привести к началу дня. Для этого используется встроенная функция НачалоДня.

Итак, сравним между собой несколько дат с точностью до дня. Для сравнения создадим процедуру “СравнениеДат”:

Процедура СравнениеДат(ПерваяДата, ВтораяДата)

Если НачалоДня(ПерваяДата) = НачалоДня(ВтораяДата) Тогда
Сообщить("Даты совпадают");
Иначе Сообщить("Даты не совпадают");
КонецЕсли;
КонецПроцедуры

На форме обработки “ПримитивныеДанные” создадим кнопку “СравниваемДаты”, свяжем ее по событию “Нажатие” с процедурой “СравниваемДатыНажатие” и введем следующий код процедуры, которая будет, в свою очередь, несколько раз вызывать процедуру “СравнениеДат”:

Процедура СравниваемДатыНажатие(Элемент)

ВводДанных();
Сообщить("Дата3 и Дата5:");
СравнениеДат(Дата3, Дата5);
Сообщить("Дата1 и Дата2:");
СравнениеДат(Дата1, Дата2);
Сообщить("Дата2 и Дата4:");
СравнениеДат(Дата2, Дата4);
Сообщить("Дата1 и Дата5:");
СравнениеДат(Дата1, Дата5);
КонецПроцедуры

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

 

Изменение даты на некоторое количество дней

Изменить дату на некоторое количество дней можно разными способами.

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

Процедура ИзменениеДаты1(ИзменяемаяДата, КоличествоДней)

НоваяДата = ИзменяемаяДата + КоличествоДней * 60 * 60 * 24;
Сообщить("НоваяДата = " + НоваяДата);
КонецПроцедуры

Для выполнения данной процедуры создадим на форме обработки “ПримитивныеДанные” кнопку “ИзменяемДаты1”, свяжем ее по событию “Нажатие” с процедурой “ИзменяемДаты1Нажатие” и введем следующий код процедуры:

Процедура ИзменяемДаты1Нажатие(Элемент)

ВводДанных();
КолДн = 2;
Сообщить("Дата2 = " + Дата2);
Сообщить("Изменить на " + КолДн + " дней");
ИзменениеДаты1(Дата2, КолДн);
КолДн = -1;
Сообщить("Дата5 = " + Дата5);
Сообщить("Изменить на " + КолДн + " дней");
ИзменениеДаты1(Дата5, КолДн);
КонецПроцедуры

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

 

Для добавления месяцев можно использовать встроенную функцию ДобавитьМесяц:

Процедура ИзменениеДаты2(ИзменяемаяДата, КоличествоМесяцев)

НоваяДата = ДобавитьМесяц(ИзменяемаяДата, КоличествоМесяцев);
Сообщить("НоваяДата = " + НоваяДата);
КонецПроцедуры

Для выполнения данной процедуры создадим на форме обработки “ПримитивныеДанные” кнопку “ИзменяемДаты2”, свяжем ее по событию “Нажатие” с процедурой “ИзменяемДаты2Нажатие” и введем следующий код процедуры:

Процедура ИзменяемДаты2Нажатие(Элемент)

ВводДанных();
КолМес = 3;
Сообщить("Дата2 = " + Дата2);
Сообщить("Изменить на " + КолМес + " мес.");
ИзменениеДаты2(Дата2, КолМес);
КолМес = -2;
Сообщить("Дата5 = " + Дата5);
Сообщить("Изменить на " + КолМес + " мес.");
ИзменениеДаты2(Дата5, КолМес);
КонецПроцедуры

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

 

А.П. Габец и Д.И. Гончаров, авторы книги “1С:Предприятие 8.0 Простые примеры разработки”, предлагают также изменять дату с помощью запроса и встроенной функции ДобавитьКДате. Для этого они рекомендуют создать функцию следующего вида:

Функция ИзменениеДаты3(ИзменяемаяДата, КоличествоДней)

Запрос = Новый Запрос("ВЫБРАТЬ
|ДОБАВИТЬКДАТЕ(&ИзменяемаяДата, ДЕНЬ, &Количество) как Дата");
Запрос.УстановитьПараметр("ИзменяемаяДата", ИзменяемаяДата);
Запрос.УстановитьПараметр("Количество", КоличествоДней);
Возврат Запрос.Выполнить().Выгрузить()[0].Дата;
КонецФункции

Для выполнения данной процедуры создадим на форме обработки “ПримитивныеДанные” кнопку “ИзменяемДаты3”, свяжем ее по событию “Нажатие” с процедурой “ИзменяемДаты3Нажатие” и введем следующий код процедуры:

Процедура ИзменяемДаты3Нажатие(Элемент)

ВводДанных();
КолДн = 2;
Сообщить("Дата2 = " + Дата2);
Сообщить("Изменить на " + КолДн + " дней");
НоваяДата = ИзменениеДаты3(Дата2, КолДн);
Сообщить("НоваяДата = " + НоваяДата);
КолДн = -1;
Сообщить("Дата5 = " + Дата5);
Сообщить("Изменить на " + КолДн + " дней");
НоваяДата = ИзменениеДаты3(Дата5, КолДн);
Сообщить("НоваяДата = " + НоваяДата);
КонецПроцедуры

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

 

Выбор значения составного типа

Для программирования выбора значения составного типа создадим процедуру “СоставнойТип”:

Процедура СоставнойТип()

МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Число"));
МассивТипов.Добавить(Тип("Строка"));
МассивТипов.Добавить(Тип("Дата"));
МассивТипов.Добавить(Тип("Булево"));
МассивТипов.Добавить(Тип("СправочникСсылка.КонтактныеЛица"));
// Добавить другие типы.
ОписаниеВозможныхТипов = Новый ОписаниеТипов(МассивТипов);
ПолученноеЗначение = Неопределено;
ВвестиЗначение(ПолученноеЗначение, "Выберите значение:", ОписаниеВозможныхТипов);
Сообщить("Введено значение " + ПолученноеЗначение);
КонецПроцедуры

В данной процедуре используется конструктор ОписаниеТипов. В качестве параметра ему необходимо передать массив допустимых типов значений. Затем используется встроенная функция диалога ввода данных ВвестиЗначение(). Эта функция имеет три параметра:
1) имя переменной, которой передается введенное значение;
2) заголовок открываемого окна;
3) объект ОписаниеТипов.

После ввода значения в пользовательском режиме программа выводит в окно “Служебные сообщения” значение, переданное переменной, указанной в качестве первого параметра функции ВвестиЗначение().

Для выполнения данной процедуры создадим на форме обработки “ПримитивныеДанные” кнопку “ВыбираемТипы”, свяжем ее по событию “Нажатие” с процедурой “ВыбираемТипыНажатие” и введем следующий код процедуры:

Процедура ВыбираемТипыНажатие(Элемент)

СоставнойТип();
КонецПроцедуры

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

 

Передача значения переменной из одной процедуры в другую

До сих пор мы выводили в окно “Служебные сообщения” значение переменной в той процедуре, где она формировалась.

А что делать, если мы хотим передать это значение в другую процедуру?

Вернемся к предыдущему примеру и перенесем строку
Сообщить("Введено значение " + ПолученноеЗначение);
из процедуры СоставнойТип в вызывающую ее процедуру ВыбираемТипыНажатие:

Процедура ВыбираемТипыНажатие(Элемент)

СоставнойТип();
Сообщить("Введено значение " + ПолученноеЗначение);
КонецПроцедуры

Процедура СоставнойТип()

МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Число"));
МассивТипов.Добавить(Тип("Строка"));
МассивТипов.Добавить(Тип("Дата"));
МассивТипов.Добавить(Тип("Булево"));
МассивТипов.Добавить(Тип("СправочникСсылка.КонтактныеЛица"));
// Добавить другие типы.
ОписаниеВозможныхТипов = Новый ОписаниеТипов(МассивТипов);
ПолученноеЗначение = Неопределено;
ВвестиЗначение(ПолученноеЗначение, "Выберите значение:", ОписаниеВозможныхТипов);
КонецПроцедуры

При компиляции система 1С выдает сообщение о том, что в процедуре ВыбираемТипыНажатие переменная ПолученноеЗначение не определена.

Это происходит потому, что в настоящее время область действия переменной ПолученноеЗначение ограничена процедурой СоставнойТип.

Для того, чтобы распространить область действия переменной ПолученноеЗначение на весь модуль формы необходимо объявить ее в начале этого модуля:

Перем ПолученноеЗначение;

Проверьте корректность работы созданного механизма в пользовательском режиме.

 

Вывод многострочного предупреждения

Для вывода на экран предупреждения используется процедура глобального контекста Предупреждение(). Процедуре передаются три параметра:
1) текст предупреждения (тип Строка);
2) таймаут в секундах (время, через которое окно самостоятельно закроется);
3) текст заголовка окна (тип Строка).

Чтобы вывести многострочное предупреждение, необходимо в соответствующих местах добавить символ перевода строки:
... + Символы.ПС + ...

Для иллюстрации вывода многострочного предупреждения создадим на форме обработки “ПримитивныеДанные” кнопку “Предупреждение”, свяжем ее по событию “Нажатие” с процедурой “ПредупреждениеНажатие” и введем следующий код процедуры:

Процедура ПредупреждениеНажатие(Элемент)

Предупреждение("Строка 1" + Символы.ПС + "Строка 2" + Символы.ПС + "Строка 3", 5, "Пример многострочного предупреждения");
КонецПроцедуры

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

Если пользователь не закрывает окно предупреждения, то через 5 сек. оно должно закрыться само.

 

Вывод текущего времени

Для определения системной (текущей) даты и времени в системе 1С используется стандартный метод ТекущаяДата(). Для того, чтобы получить данные только о текущем времени можно применить встроенную функцию Формат() с параметром формата "ДЛФ=В" (о других параметрах функции Формат можно подробнее проситать в Синтакс-Помощнике (Общее описание встроенного языка/Встроенные функции/Функции форматирования/Формат)).

Создадим на форме обработки “ПримитивныеДанные” кнопку “ТекущееВремя”, свяжем ее по событию “Нажатие” с процедурой “ТекущееВремяНажатие” и введем следующий код процедуры:

Процедура ТекущееВремяНажатие(Элемент)

ТекущееВремя = Формат(ТекущаяДата(), "ДЛФ=В");
Сообщить(ТекущееВремя);
КонецПроцедуры

Проверим корректность работы созданного механизма в пользовательском режиме:

 

Вывод числа прописью на русском и английском языках

Пусть мы имеем некоторое число (например, 123456,789). Нужно вывести его значение по-русски и по-английски.

Для выполнения этой задачи используется функция глобального контекста ЧислоПрописью.Эта функция имеет три параметра:
1) число, которое необходимо преобразовать;
2) форматная строка, включающая в себя параметры форматирования (в частности, код локализации, язык записи числа и наличие дробной части);
3) параметры предмета исчисления (предметы исчисления указываются через запятую в формах единственного числа именительного падежа, единственного числа родительного падежа и множественного числа родительного падежа; также указываются род предмета исчисления и количество разрядов дробной части).

Примеры форматной строки:

ФорматнаяСтрока = "Л=ru_RU";
(Л – обозначение кода локализации; ru_RU – русский язык (Россия); без дробной части (по умолчанию))

ФорматнаяСтрока = "Л=ru_RU; ДП=Истина";
(Л – обозначение кода локализации; ru_RU – русский язык (Россия); с выводом дробной части (ДП – обозначение параметра вывода дробной части; по умолчанию ДП=Ложь))

ФорматнаяСтрока = "Л=en_US";
(Л – обозначение кода локализации; en_US – английский язык (США); без дробной части)

Примеры строки параметров предмета исчисления

ПараметрыПредметаИсчисления = " , , , , , , , , 0";
(предметы исчисления отсутствуют; дробная часть отсутствует)

ПараметрыПредметаИсчисления = "килограмм, килограмма, килограммов, м, грамм, грамма, граммов, м, 3";
(предметы исчисления: килограмм (род мужской), грамм (род мужской); дробная часть – 3 знака)

ПараметрыПредметаИсчисления = "dollar, dollars, cent, cents, 2";
(предметы исчисления: dollar, cent; дробная часть – 2 знака)

Создадим на форме обработки “ПримитивныеДанные” кнопку “ЧислаПрописью”, свяжем ее по событию “Нажатие” с процедурой “ЧислаПрописьюНажатие” и введем следующий код процедуры:

Процедура ЧислаПрописьюНажатие(Элемент)

Число2 = 123456.789;
// Вывод числа без дробной части
ФорматнаяСтрока = "Л=ru_RU";
ПараметрыПредметаИсчисления = " , , , , , , , , 0";
Сообщить(ЧислоПрописью(Число2, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
// Вывод числа с дробной частью
ФорматнаяСтрока = "Л=ru_RU; ДП=Истина";
ПараметрыПредметаИсчисления = "целая, целых, целых, ж, сотая, сотой, сотых, ж, 2";
Сообщить(ЧислоПрописью(Число2, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
// Вывод веса
ФорматнаяСтрока = "Л=ru_RU; ДП=Истина";
ПараметрыПредметаИсчисления = "килограмм, килограмма, килограммов, м, грамм, грамма, граммов, м, 3";
Сообщить(ЧислоПрописью(Число2, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
// Вывод суммы в долларах по-английски
ФорматнаяСтрока = "Л=en_US";
ПараметрыПредметаИсчисления = "dollar, dollars, cent, cents, 2";
Сообщить(ЧислоПрописью(Число2, ФорматнаяСтрока, ПараметрыПредметаИсчисления));
КонецПроцедуры

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

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

 

Округление числа

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

Округление числа может быть выполнено различными способами. Ниже будет описано выполнение округления с помощью встроенной функции Окр(). Функция имеет три параметра:

1) исходное число;
2) разрядность – число, определяющее число знаков дробной части, до которых производится округление (параметр необязательный);
3) режим округления (параметр необязательный).

Для выполнения примера округления создадим на форме обработки “ПримитивныеДанные” кнопку “Округление”, свяжем ее по событию “Нажатие” с процедурой “ОкруглениеНажатие” и введем следующий код процедуры:

Процедура ОкруглениеНажатие(Элемент)

ВводДанных();
Сообщить("Число2 = " + Число2);
// Округление до целого
ОкругленноеЧисло = Окр(Число2);
Сообщить("Округление до целого числа = " + ОкругленноеЧисло);
// Округление до второго знака
ОкругленноеЧисло = Окр(Число2, 2);
Сообщить("Округление до второго знака = " + ОкругленноеЧисло);
КонецПроцедуры

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

 

Генерация случайных чисел

Программисты 1С имеют возможность использовать генерацию случайных чисел, которая производится с помощью объекта ГенераторСлучайныхЧисел. Этот объект имеет метод СлучайноеЧисло, имеющий два параметра: нижний и верхний диапазоны.

Создадим на форме обработки “ПримитивныеДанные” кнопку “СлучайноеЧисло”, свяжем ее по событию “Нажатие” с процедурой “СлучайноеЧислоНажатие” и введем следующий код процедуры:

Процедура СлучайноеЧислоНажатие(Элемент)

ГСЧ = Новый ГенераторСлучайныхЧисел();
СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 1000);
Сообщить(СлучайноеЧисло);
КонецПроцедуры

Проверим корректность работы созданного механизма в пользовательском режиме:

Упражнение: Выведите с помощью цикла 10 случайных значений от 0 до 100.

 

Проверка заполненности значения

Для проверки заполненности значений переменных используется функция ЗначениеЗаполнено(), которая проверяет, отличается ли переданное значение от значения по умолчанию для данного типа. Проверка заполненности данных осуществляется в процедуре “ПроверкаЗаполненности”:

Процедура ПроверкаЗаполненности(ПроверяемоеЗначение)

Если ЗначениеЗаполнено(ПроверяемоеЗначение) Тогда
Сообщить("Значение заполнено");
Иначе Сообщить("Значение не заполнено");
КонецЕсли;
КонецПроцедуры

Для выполнения данной процедуры создадим на форме обработки “ПримитивныеДанные” кнопку “Заполненность”, свяжем ее по событию “Нажатие” с процедурой “ЗаполненностьНажатие” и введем следующий код процедуры, которая будет, в свою очередь, несколько раз вызывать процедуру “ПроверкаЗаполненности”:

Процедура ЗаполненностьНажатие(Элемент)

ВводДанных();
Сообщить("Число1: " + Число1);
ПроверкаЗаполненности(Число1);
Сообщить("Строка1: " + Строка1);
ПроверкаЗаполненности(Строка1);
Сообщить("Дата1: " + Дата1);
ПроверкаЗаполненности(Дата1);
Сообщить("Дата2: " + Дата2);
ПроверкаЗаполненности(Дата2);
Сообщить("Дата3: " + Дата3);
ПроверкаЗаполненности(Дата3);
Сообщить("Дата4: " + Дата4);
ПроверкаЗаполненности(Дата4);
Сообщить("Дата5: " + Дата5);
ПроверкаЗаполненности(Дата5);
Сообщить("Дата6: " + Дата6);
ПроверкаЗаполненности(Дата6);
Сообщить("Булево1: " + Булево1);
ПроверкаЗаполненности(Булево1);
Сообщить("а: " + а);
ПроверкаЗаполненности(а);
КонецПроцедуры

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

Обратим внимание на то, что переменные типа Дата, в которые внесены значения Дата(1, 1, 1) ('00010101000000'), будут считаться незаполненными, так как значение переменной типа Дата по умолчанию равняется именно Дата(1, 1, 1) ('00010101000000').

 

Преобразование данных

Наконец, рассмотрим подробнее способы преобразования данных из одного типа в другой.

Для такого преобразования данных в системе 1С используются встроенные функции Число(), Строка(), Дата(), Булево(), а также функция форматирования Формат().

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

Приведем учебный пример некоторых часто встречающихся преобразований:
- Число –> Строка –> Число;
- Число –> Булево –> Число;
- Булево –> Строка –> Булево;
- Дата –> Строка –> Дата.

Для реализации указанного примера создадим четыре процедуры:

Процедура ЧислоСтрокаЧисло(а)

б = Строка(а);
в = Число(б);
Сообщить("Первоначальное значение: " + ТипЗнч(а) + " - " + а + "; " + ТипЗнч(б) + " - """ + б + """" + "; " + ТипЗнч(в) + " - " + в);
КонецПроцедуры

Процедура ЧислоБулевоЧисло(а)

б = Булево(а);
в = Число(б);
Сообщить("Первоначальное значение: " + ТипЗнч(а) + " - " + а + "; " + ТипЗнч(б) + " - " + б + "; " + ТипЗнч(в) + " - " + в);
КонецПроцедуры

Процедура БулевоСтрокаБулево(а)

б = Строка(а);
в = Булево(б);
Сообщить("Первоначальное значение: " + ТипЗнч(а) + " - " + а + "; " + ТипЗнч(б) + " - """ + б + """" + "; " + ТипЗнч(в) + " - " + в);
КонецПроцедуры

Процедура ДатаСтрокаДата(а)

б = Строка(а);
в = Дата(б);
Сообщить("Первоначальное значение: " + ТипЗнч(а) + " - '" + а + "'; " + ТипЗнч(б) + " - """ + б + """" + "; " + ТипЗнч(в) + " - '" + в + "'");
КонецПроцедуры

Также создадим кнопку “ПреобразованиеДанных”, свяжем ее по событию “Нажатие” с процедурой “ПреобразованиеДанныхНажатие” и введем код процедуры:

Процедура ПреобразованиеДанныхНажатие(Элемент)

// Исходные данные для преобразования
Число1 = 0;
Число2 = 25;
Число3 = 123456.789;
Строка1 = "";
Строка2 = "Привет!";
Дата1 = '20050308000000';
Дата2 = '00010101000000';
Дата3 = Дата(2005, 1, 1);
Дата4 = Дата(1, 1, 1);
Дата5 = Дата(2005, 1, 1, 10, 29, 50);
Булево1 = Истина;
Булево2 = Ложь;
// Преобразование типов данных
ЧислоСтрокаЧисло(Число1);
ЧислоСтрокаЧисло(Число2);
ЧислоСтрокаЧисло(Число3);
ЧислоБулевоЧисло(Число1);
ЧислоБулевоЧисло(Число2);
ЧислоБулевоЧисло(Число3);
БулевоСтрокаБулево(Булево1);
БулевоСтрокаБулево(Булево2);
ДатаСтрокаДата(Дата1);
ДатаСтрокаДата(Дата2);
ДатаСтрокаДата(Дата3);
ДатаСтрокаДата(Дата4);
ДатаСтрокаДата(Дата5);
КонецПроцедуры

Результат выполнения процедуры в пользовательском режиме: