d9e5a92d

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ

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

Наша задача довольно проста, и мы после создания объекта Текст обойдемся небольшим числом методов, применяемых в 1С для объектов такого типа, - методами ДобавитьСтроку, ТолькоПросмотр, Показать и Записать. Для форматирования и преобразования данных используем встроенные функции Формат и Строка. Необходимые пояснения впервые использованных методов и функций дадим в нижеприводимом тексте программы.

// Процедура формирования текстового файла с данными о непериодических константах процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

перем ин, числоКонст, син, идеи, значен; перем текст, имяФайла; имяФайла = "Koнстакты.txt"; текст = СоздатьОбъект("Текст");

// Формируем текст с данными о константах; системная константа // РазделительСтрок обеспечит вставку пустой строки между // заголовком списка и заголовками столбцов

текст.ДобавитьСтроку("Список непериодических констант" + РазделительСтрок);

// Вывод заголовков столбцов

// Как и ранее, выведем в каждой строке 3 поля: идентификатор, синоним // и значение константы, задав длину каждого поля, равной 20 символам текст.ДобавитьСтроку(Формат("Идентификатор", "С20") + " " +

ФорматС'Синоним", "С20") + + Формат("Значение", "С20") + РазделительСтрок);

числоКонст = 0; // Число непериодических констант

для ин = 1 по Метаданные.Константа() цикл

если Метаданные.Константа(ин).Периодический = 1 тогда

продолжить; // Значения периодических констант не выводятся

конецЕсли;

числоКонст = числоКонст + 1;

// Определяем значения переменных идеи, син и значен идеи = Метаданные.Константа(ин).Идентификатор; син = Метаданные.Константа(ин).Синоним; значен = сокрЛ(Константа.ПолучитьАтрибут(иден));

// Вывод очередной строки в формируемый текст // Встроенная функция Формат(пар, "С20") вернет значение // параметра пар в виде строки длиной в 20 символов текст.ДобавитьСтроку(Формат(иден, "С20") + " " +

Формат(син, "С20") + " " + Формат(значен, "С20"));

конецЦикла; / / для

текст.ДобавитьСтроку(""); // Выводим пустую строку // Функция Строка преобразовывает значение переменной числоКонст // в символьное представление

текст.ДобавитьСтроку("Всего непериодических констант " + Строка(числоКонст));

// Вывод данных о числе непериодических констант // Запрещаем редактирование результирующего текста текст.Т олькоПросмотр(1);

// Покажем текст, в окне, имеющем заголовок Список непериодических констант текст.Показать("Список непериодических констант");

текст.Записать(имяФайла); // Запишем текст в файл Константы-txt нецПроцедуры // Выполнить.

Результат приведен на рис. 1.38.

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 1.38. Текст отображается с применением равномерного шрифта Замечания:

1. Поля с данными будут расположены равномерно, если применить шрифт с фиксированной шириной символа, например Fixedsys. Переход от пропорционального шрифта к равномерному в результирующем тексте осуществляется в 1С:Пред-приятии в результате выбора пунктов меню Текст - Текст модуля. Колонка меню Текст появляется при просмотре текста.
2. Метод Записать, если не задан путь, разместит файл в директории с базами данных системы. Если файл записывается впервые, то метод Записать создаст этот файл. При записи в существующий файл и при его создании метод Записать, если он употребляется совместно с методом Показать, предварительно осведомится, нужно ли записывать данные в указанный файл.

1.11. ЗАГРУЗКА ТЕКСТА МОДУЛЯ ИЗ ФАЙЛА

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

Если же диалог и таблица в процессе работы над формой не изменяются, а модифицируется только код программных компонентов модуля, то процесс запуска измененной программы можно несколько ускорить. Для этого следует воспользоваться командой

#ЗагрузитьИзФайла ИмяФайла

Эта команда должна быть размещена в первой строке модуля и начинаться с ее первой позиции. ИмяФайла - это указанное без кавычек имя файла, в котором размещается текст редактируемого модуля, например Проба.ей.

При наличии в модуле такой команды весь расположенный вслед за ней код игнорируется. Редактирование данных должно выполняться в файле ИмяФайла. При этом файл загружается не в конфигураторе, а в 1С:Предприятии (Файл - Открыть). Чтобы появившийся текст представлялся как программа, то есть с использованием заданных для текста программ шрифта, цветов и размера табуляции, необходимо после открытия файла выбрать в меню пункты Текст - Текст модуля.

После внесения изменений необходимо сохранить файл (Ctrl+S), закрыть файл формы (обработки), если она открыта, и открыть его заново. В загруженной форме будет использован обновленный в файле ИмяФайла код модуля.

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

// Команда размещена в первой строке модуля #ЗагрузитьИзФайла Д\1ст7ДТей\ІХІ\Прс)баМ

Затем создадим, например в папке ТХТ, текстовый файл Пробам, откроем его в 1С:Предприятии, скопируем в него код модуля обработки Проба.ей, выберем пункты меню Текст - Текст модуля, внесем в текст файла изменения, добавив, например, в процедуру выполнить оператор

Сообщить("Код модуля загружен из файла Пробам");

Сохраним файл Проба.Ш, откроем и запустим обновленную обработку (файл Проба.М закрывать не нужно).

Еще одна рекомендация. При работе с кодом модуля не забывайте о возможностях колонки меню Текст и панели инструментов Текстовый редактор (рис. 1.39).

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 1.39. Панель инструментов Текстовый редактор
Напомним, что действия с блоком (вторая группа кнопок на рис. 1.39) становятся возможными после выделения одной или нескольких строк текста.

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

1.12. КАК ОТКРЫТЬ ОТЧЕТ ИЛИ ОБРАБОТКУ В ПРОГРАММЕ

Запуск обработки Проба мы до сих пор выполняли из созданного нами меню, либо выбирая в нем Проба - Пуск, либо нажимая Alt+1. Кроме того, мы могли открыть обработку, использовав пункты Открыть колонки меню Файл. При необходимости, однако, отчет или обработку можно открыть из любой другой формы или программы глобального модуля. Для этой цели употребляется функция ОткрытьФорму.

Чтобы привести примеры обращения к функции и методу, открывающим отчет (обработку), создадим еще одну обработку, дав ей имя Открыть.ert, и разместим ее там же, где и обработка Проба. Формируя новую обработку, не забудем вставить команду ее вызова в меню Ученик, ответив утвердительно на соответствующее предложение помощника создания обработки. Диалог обработки может иметь приведенный на рис. 1.40 вид.

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 1.40. Диалог обработки Открыть
С кнопкой Открыть обработки свяжем процедуру Открыть, разместив в ней следующий код:

Процедура Открыть() // Открывает обработку Проба

перем контОбрПроба; // Контекст обработки Проба

ОткрытьФорму("Отчет", контОбрПроба, "d:\lCv77\Test\ExtForms\npoбa.ert"); КонецПроцедуры // Открыть

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

Имя файла можно получить, применив метод ВыбратьФайл агрегатного типа ФС. Тогда код процедуры Открыть будет таким:

процедура Открыть() // Открывает обработку Проба

перем контОбрПроба; перем флаг, имяФайла;

// Третий параметр метода ВыбратьФайл опущен флаг = ФС.ВыбратьФайл(0, имяФайла,,

"Находим файл Проба^гТ, "Отчет и обработки | *.ert''); если флаг = 1 тогда // Если файл обработки выбран

если ОткрытьФорму("Отчет", контОбрПроба, имяФайла) = 0 тогда Предупреждение(''Не удается открыть обработку " + имяФайла); возврат; конецЕсли; иначе

Предупреждение("Файл обработки не выбран."); конецЕсли;

конецПроцедуры // Открыть

Метод ВыбратьФайл, если его первый параметр равен нулю, открывает диалог типа Открыть (рис. 1.41) и возвращает, если файл выбран, во второй параметр имя файла.

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 1.41. Выбор файла, содержащего обработку Проба
Четвертый параметр (третий опущен) задает заголовок диалога, а пятый - сообщение, выводимое в поле Тип файлов, и после разделительной черты - маску, определяющую вид отображаемых в диалоге файлов. Заданная нами маска оставит в диалоге только файлы с расширением ERT.

Замечания:

1. Функция ОткрытьФорму имеет более широкое назначение. Она употребляется для открытия форм справочников, документов, различных журналов и др.

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

1.13. КОНТЕКСТ ОБРАБОТКИ ПРОБА

Вторым параметром использованной в предшествующем разделе функции От-крытьФорму является контекст формы обработки Проба, под которым понимается совокупность ее реквизитов (переменных диалога) й методов формы обработки. Этот параметр является выходным.

Проиллюстрируем методы работы с контекстом на примере обработки, диалог которой содержит два поля (рис. 1.42): одно числового типа (дЧ), другое типа Перечисление (пер).

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 1.42. Обработка Проба с полями ДЧ и пер
Определяя тип второго поля на закладке Тип в диалоге задания его свойств, выберем перечисление ТипПлатежа (рис. 1.43).

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 1.43. Выбор вида перечисления для поля пер
Это перечисление определено в конфигурации и содержит следующие идентификаторы значений:

• ВсеДолгиПоЗарплате;

• Зарплата;

• Аванс;

• МежрасчВыплата;

• ВыплатыНаДетей;

• Дивиденды;

• ЕдиновременныеПособия.

В модуле модифицированной обработки Проба запишем предопределенную процедуру ПриОткрытии с двумя операторами присваивания:

процедура ПриОткрытии()

// Начальные значения переменных диалога дЧ и пер дЧ = 5.55;

пер = Перечисление.ТипПлатежа.ЗначениеПоНомеру(2); // Зарплата конецПроцедуры // ПриОткрытии

В обработке Открыть (см. рис. 1.40), из которой в результате применения функции ОткрытьФорму вызывается обработка Проба, создадим процедуру НовыйКонтекст, изменяющую значения переменных дЧ и пер диалога обработки Проба и обновляющую ее диалог. В качестве результата выведем состояние диалога обработки Проба до и после изменения значения переменных дЧ и пер.

Чтобы вместе с обработкой Открыть закрывалась и обработка Проба, в предопределенной процедуре ПриЗакрытии первой обработки выполним оператор

контОбрПроба.Форма.Закрыть();

Таким образом, модуль обработки Открыть будет содержать следующий код: перем контОбрПроба; // Переменная модуля обработки Открыть

// Изменяет значения переменных дЧи пер и обновляет диалог обработки Проба процедура НовыйКонтекст(контОбр Проба)

Сообщить(контОбрПроба.Дч); // 5.55

Сообщить(контОбрПроба.пер); // Зарплата

Предупреждение("Сейчас будут изменены переменные дЧ и пер обработки Проба.");

// Изменяем переменные диалога дЧ и пер обработки Проба

// и смотрим на ее диалог; результаты наблюдений приведены на рис. 1.44

контОбрПроба.Дч = 7.98;

контОбрПроба.пер =

Перечисление.ТипПлатежа.ЗначениеПоНомеру(З); // Аванс // Обновляем диалог обработки Проба контОбрПроба.Форма.Обновить(); конецПроцедуры // НовыйКонтекст

процедура Открыть() // Открывает обработку Проба

перем флаг, имяФайла; флаг = ФС.ВыбратьФайл(0, имяФайла,

"Находим файл Проба.еіі, "Отчет и обработки | *.ert"); если флаг = 1 тогда // Если файл обработки выбран

если ОткрытьФорму("Отчет", контОбрПроба, имяФайла) = 0 тогда Предупреждение("Не удается открыть обработку " + имяФайла); возврат; иначе

НовыйКонтекст(контОбрПроба); // Изменяем значения переменных дЧ и пер конецЕсли; // и обновляем окно формы обработки Проба

иначе

Предупреждение("Файл обработки не выбран."); конецЕсли;

конецПроцедуры // Открыть

// Закрывает открытую обработку Проба, используя для доступа к методу Закрыть // переменную модуля контОбрПроба процедура ПриЗакрытии()

если ПустоеЗначение(контОбрПроба) = 0 тогда контОбрПроба.Форма.Закрыть(); конецЕсли;

конецПроцедуры // ПриЗакрытии

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 1.44. Диалог обработки Проба: а - до обновления; б - после него
Структура контекста говорит о том, что он является объектом агрегированного типа, включающего компоненты (в нашем случае реквизиты формы) и методы, употребляемые с обработкой. Приведем еще один пример управления формой обработки Проба через ее контекст. Так, если в процедуру перед вызовом

контОбрПроба. Форма. Обновить();

выполнить оператор

конЮбрПроба.Форма.дЧ.Видимост^О); // Скрываем элемент диалога дЧ

то рис. 1.44, б примет приведенный на рис. 1.45 вид.

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 1.45. Управление формой обработки Проба через ее контекст
Замечание. Переменная контОбрПроба, возвращаемая функцией ОткрытьФорму, имеет тип ГрупповойКонтекст. В этом можно убедиться, выполнив вызов

Сообщшъ(ТипЗначенияСтр(контОбрПроба)); // Напечатает ГрупповойКонтекст

Это говорит о том, что через переменную контОбрПроба доступны все употребляемые с формой методы: методы формы, элементов ее диалога, контекста модуля формы и контекста модуля формы отчета (обработки).

Контекст формы можно передать в качестве входного/выходного параметра процедуре или функции глобального модуля. Пусть, например, в глобальном модуле определена процедура

процедура РаботаСКонтекстом(конт) экспорт конт.Дч = 7.98; конт.пер =

Перечисление.ТипПлатежа.ЗначениеПоНомеру(З); // Аванс конт.Форма.дЧ.Видимость(0); // Скрываем элемент диалога д Ч конт.Форма.ОбновшъО; // Обновляем диалог обработки Проба

конецПроцедуры // РаботаСКонтекстом

При вызове такой процедуры в качестве фактического параметра используется переменная Контекст. Например:

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

РаботаСКонтекстом(Контекст); конецПроцедуры // РаботаСКонтекстом

Результат такого вызова см. на рис. 1.45.

Замечание. Реально процедура РаботаСКонтекстом после запуска вышеприведенного примера удалена из глобального модуля.

Разумеется, контекст обработки можно передать как входной/выходной параметр процедуре или функции, размещенных в модуле обработки. Например, запишем в модуле обработки Проба следующий код:

процедура РаботаСКонтекстомВМодуле(конт) конт.Дч = 7.98; конт.пер =

Перечисление.ТипПлатежа.ЗначениеПоНомеру(З); // Аванс

конт.Форма.дЧ.Видимость(0); // Скрываем элемент диалога дЧ

конт.Форма.Обновить(); // Обновляем диалог обработки Проба

конецПроцедуры // РаботаСКонтекстомВМодуле

процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

РаботаСКонтекстомВМодуле(Контекст); конецПроцедуры // Выполнить

Исполнение кода даст тот же эффект, что и вызов процедуры РаботаСКонтекстом глобального модуля. В то же время очевидна избыточность такого подхода: область действия переменных диалога и процедур формы распространяется на все программные единицы ее модуля.

Замечание. Все сказанное относительно контекста обработки применимо и к контексту произвольной формы: документа, формы списка справочника и др.

1.14. ФУНКЦИИ ДЛЯ АДМИНИСТРАТОРА

Возможно, вам придется каким-либо образом управлять работой пользователей системы. Для этого могут пригодиться встроенные функции среды исполнения. Они приведены в табл. 1.6.

Таблица 1.6

Функции среды исполнения
Функция Что возвращает
заголовокСтар = ЗаголовокСистемы ([заголовок]); Возвращает и/или устанавливает заголовок окна системы
имяЭВМ= ИмяКомпьютера(); Сетевое имя работающего с программой компьютера
пользователь = ИмяПользователя(); Имя работающего с программой пользователя, взятое из списка пользователей (см. рис. 1.9)
полноеИмя = ПолноеИмяПользователя( ); Полное имя работающего с программой пользователя (см. рис. 1.10)
наборПрав = НазваниеНабораПрав( ); Название набора прав пользователя
право = ПравоДоступа

(названиеПрава, объект);
Единицу, если пользователь имеет право доступа, заданное именем названиеПрава, к объекту, заданного именем объект, или нуль - в противном случае
интерфейс = НазваниеИнтерфейса(); Название интерфейса, заданное пользователю в конфигураторе
Функция Что возвращает
каталог = Катало гПользователя(); Заданное в конфигураторе имя рабочего каталога пользователя
каталогБазы = КаталогИБ(); Имя каталога информационной базы данных
каталогІС = КаталогПрограммы( ); Имя каталога с исполняемыми файлами 1С
времКат = КаталогВременныхФайлов( ); Имя каталога временных файлов, образуемых при работе с 1С
режим = МонопольныйРежим(); Единицу, если программа запущена в монопольном режиме, или нуль - в противном случае
язык = ОсновнойЯзык(); Единицу, если основной язык русский, или нуль, если английский
Пример:
процедура Выполнить() // Связана с кнопкой Пуск обработки Проба

ОчиститьОкноСообщений();

ЗашловокСистемы(''Система с учебными формами");

Сообщить(ИмяКомпьютера()); // DEFAULT

Сообщить(ИмяПользователя()); // Ученик

Сообщить(ПолноеИмяПользователя()); // Николаев Н. А. Сообщить(НазваниеНабораПрав()); // ПолныеПрава

Сообщить(ПравоДоступа(''ВводНового'', "Справочник. КадровыеДанные")); //1

// Для справочников регулируются права доступа со следующими названиями:

// чтение;

// любыеИзменения;

// вводНового;

// удаление;

// пометкаНаУдаление;

// снятиеПометкиНаУдаление;

// корректировка

Сообщить(ПазваниеИнтерфейса()); // Ученик

Сообщить(КаталогПользователя()); , //D:\lCv77\Test\

Сообщить(КаталогИБ()); // D:\lCv77\Test\

Сообщить(КаталогПрограммы()); // D:\l CV77\BIN\ Сообщить(КаталогВременныхФайлов()); // С:\ТЕМР\ Сообщить(МонопольныйРежим()); //1

Сообщить(ОсновнойЯзык()); //1

конецПроцедуры // Выполнить

Замечания:

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

ОсновнойЯзык();

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

2. Если при вызове встроенной функции и процедуры возникает ошибка исполнения, то выводится диагностическое сообщение и может произойти аварийное заверш е-ние программы. Выводимые в таких случаях сообщения, правда, не всегда адекватны ситуации. Так, при запуске процедуры

процедура Выполнить( ) // Связана с кнопкой Пуск обработки Проба

перем х;

ОчиститьОкноСообщений(); х = 0;

Лог(х);

конецПроцедуры // Выполнить получим сообщения х = 0;

{D:\lCV7ДTEST\EXTFORMS\ПРОБA. ERT(3)}: Деление на 0

1.15. ВЫВОДЫ

Приведенные сведения позволяют сделать ряд выводов.

1. Для каждого пользователя можно (и нужно) создать свой интерфейс с определенными правами доступа.

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

3. Формы разрабатываются в конфигураторе, а запускаются в 1 С: Предприятии.

4. Имена переменных, процедур и функций, заданных в форме (в ее диалоге, модуле или его программных компонентах), доступны только в этой форме. Причем имя переменной модуля или диалога может быть закрыто локальным именем процедуры или функции модуля.

5. Модуль формы в общем случае содержит объявления переменных модуля и программные компоненты - основную программу, пользовательские процедуры (в том числе и предопределенные) и функции. Предопределенные процедуры, то есть создаваемые пользователем процедуры, имеющие определенные в документации имена и интерфейсы и исполняемые либо при наступлении стандартных событий, например при открытии формы, либо при рбращении к ним из других программных компонентов модуля, включаются в модуль по мере необходимости. Порядок следования программных компонентов модуля подчиняется определенным правилам.

6. Существуют по-настоящему глобальные имена (разд. 1.6), доступные в каждом программном модуле.

7. Объекты, такие, как Таблица значений, Текст и др., становятся доступными после их создания в результате применения функции СоздатьОбъект; к иным объектам, например Константам, можно обратится по их полному имени. С каждым видом объектов связан набор методов, позволяющих выполнять необходимые для управления объектами действия.

8. Такие объекты, как Таблица и Список значений, становятся доступными в модуле формы после их размещения в диалоге формы (разд. 1.8).

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

10. Методы, применяемые с метаданными, позволяют, в частности, получить перечень объектов определенного в системе типа, например Констант, а также прочитать их свойства; изменить свойства объектов, например задать новое имя идентификатора какой-нибудь константы, можно, лишь находясь в конфигураторе системы. Любое изменение конфигурации выполняется в монопольном режиме.

11. Производительность работы повысится, если на стадии отладки кода модуля использовать возможности команды #ЗагрузитьИзФайла (разд. 1.11).

12. Отчет (обработку) можно открыть из любой другой формы, применив функцию ОткрытьФорму (ОткрытьФормуМодально) или метод ОткрытьПодбор.

13. Контекст обработки - это объект агрегированного типа ГрупповойКонтекст, обеспечивающий доступ к переменным диалога обработки и к определенным для нее методам.

14. Контекст обработки может быть передан в качестве входного/выходного параметра процедуре (функции) модуля самой обработки и глобального модуля;

15. Контекст открываемой формы возвращает функция ОткрытьФорму (Открыть-ФормуМодально) .

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

2. БАЗОВЫЕ ПОНЯТИЯ

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

2.1. ОБЪЕКТЫ И ТИПЫ ДАННЫХ

В программах 1С можно оперировать следующими объектами данных:

• буквальными и системными константами (не путать с рассмотренными выше определенными в конфигурации системы константами);

• переменными.

Объекты данных могут иметь следующие типы:

• числовой;

• символьный;

• дата;

• агрегатные, например Справочник.

Замечания:

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

Сообщить(Лог(2.5));

выведет в окно сообщений число

0.91629073187415

имеющее 14 знаков после десятичной точки. Правда,

Сообщить(Лог(5.0)); //1.6094379124341

вернет число только с 13 знаками после десятичной точки, а

Сообщить( 1.0/Лог( 1.01)); //100.499170807131365574

напечатает число с 18 знаками после десятичной точки:

Оператор

Сообщить(2 / 3); // 0.66666666666666666667

напечатает результат, имеющий рекордное число знаков после десятичной точки - 20.

2. Агрегатный тип данных имеет разновидности. Например, разновидностями типа Справочник являются Справочник.Должности, Справочник. Сотрудники и др. Агрегатный тип данных мы рассмотрим в гл. 3.

3. Некоторые методы, например приведенный в табл. 1.2 метод НазначитьТип, принимают в качестве параметра символьное представление типа данных или разновидности типа. Это символьное представление для числового типа задается как "Число", для символьного - как "Строка". Для остальных типов оно дублирует имя типа или его разновидности. Например, символьное представление разновидности типа Справочник.Города - это строка "Справочник.Города".

2.2. БУКВАЛЬНЫЕ КОНСТАНТЫ

Буквальные константы (далее - просто константы) числового типа - это вещественные числа с точкой или без точки, со знаком или без него, например:

-2.34,2 ,+2.0, .25 // Нуль перед десятичной точкой можно опустить

Константа символьного типа - последовательность символов, обрамленная двойными кавычками, например

"Это строка"

или

// Это константа нулевой длины

Если необходимо двойную кавычку включить в состав символьной константы, то кавычку нужно повторить дважды, например процедура

Сообщить(......Константа, которая начинается и завершается двойными кавычками......);

напечатает в окне сообщений следующий текст:

"Константа, которая начинается и завершается двойными кавычками"

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

стрЗ = "Это длинная символьная константа,

| поскольку она размещается не на одной,

| а на трех строчках";

либо как последовательность однострочных констант, например

стрЗ = "Это длинная символьная константа,"

" поскольку она размещается не на одной,"

" а на трех строчках";

В таком тексте сохраняются символы конца строки. Длинную константу без символов конца строки на двух или более строчках записать нельзя. Заметим, что в виде подобных текстов нередко составляются запросы к базам данных.

Константы типа Дата, если год представляется в виде двух чисел, - это последовательность из трех пар чисел, обрамленных одинарными кавычками и разделенных точками. Формат даты -'ДД.ММ.ГГ', где ДД - число месяца, ММ - номер месяца, ГГ -две последние цифры в номере года. Например:

'03.11.01'

//

3 ноября 2001 г.

Год в константе типа Дата можно задать полностью:

'03.11.1942' // 3 ноября 1942 г.

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

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Рис. 2.1. Задание параметров, относящихся к датам
Так, если в представлении константы типа Дата используются две цифры, то если они меньше или равны последних двух цифр года начала рабочего столетия (в нашем случае он равен 1941), то дата относится к нынешнему веку, в противном случае -к прошедшему. Например:

'03.11.1942' //3 ноября 1942 г.

'03.11.42' // Так же 3 ноября 1942 г.

'03.11.41' // Это 3 ноября 2041 г.

Убедимся в этом визуально, активизировав кнопку 4 (рис. 2.1), сохранив новую настройку и запустив обработку, содержащую два следующих сообщения:

Сообщить('03.11.42'); // Напечатает 03.11.1942

Сообщить('03.11.41'); // Напечатает 03.11.2041

Используя 4 цифры в представлении даты, можно задать любую дату от Рождества Христова, например

'01.01.0001' //1 января 1г.

Константу с датой до Рождества Христова задать нельзя.

Если константа задает несуществующую дату, то она воспринимается как пустое значение, например

Сообщить(ПустоеЗначение('33.12.01')); //Напечатает 1 (нет такой даты) Сообщить('33.12.01'); //Напечатает . .

Сообщить(ПустоеЗначение('23.12.01')); // Напечатает 0 (верная дата)

2.3. СИСТЕМНЫЕ КОНСТАНТЫ

В языке есть 3 системные именованные константы, имеющие символьный тип и следующие имена:

РазделительСтраниц;

РазделительСтрок;

Символ Табуляции.

Они, как правило, употребляются при работе с текстом. Например:

// Константа РазделительСтрок обеспечит вставку пустой строки // вслед за текстом "Список непериодических констант"

текст.ДобавитьСтроку(''Список непериодических констант" + разделительСтрок);

2.4. ПЕРЕМЕННЫЕ ЧИСЛОВЫЕ, СИМВОЛЬНЫЕ

И ДАТЫ

Переменные разделяются на скалярные и массивы. В текущей реализации 1С можно использовать только одномерные массивы, называемые также векторами. Переменные появляются в программе:

• после их объявления, например

перем а, стр; // Объявляем скалярные переменные а и стр

перем мас[20]; // Объявляем вектор из 20 элементов

• после первого размещения имени переменной (числовой, строковой и даты) в правой части оператора присваивания, например

у = Лог(а); // Вводим переменную у, определяем ее тип и значение

• при определении имен идентификаторов редактируемых элементов диалога (см. разд. 1.5);

• при задании формальных параметров процедур, например в пользовательской функции

функция ВычислитьУ(х) // х - формальный параметр функции ВычислитьУ х = 2.0 * х; // употребляется в функции как переменная

у = 2 * Лог(х); // Лог - встроенная функция

возврат у;

конецФункции // ВычислитьУ

формальный параметр x используется как скалярная переменная.

При объявлении переменной ее тип и значение не определяются. Такая переменная имеет пустое значение. Однако ее можно употреблять в выражениях. Например:

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





б = 2 * а;







Объявляем скалярную переменную а // Напечатает 1

Напечатает пустую строку

// Напечатает 1. То есть б имеет пустое значение Напечатает 0, а не пустую строку,

// несмотря на то что б имеет пустое значение Напечатает 3

Напечатает пустую строку

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

Пример 2. Переменные а и стр после выполнения присваивания будут иметь соответственно числовой и символьный тип.

перем а, стр; // Объявляем скалярные переменные а и стр

а = 1.22; // Теперь переменная а имеет числовой тип

стр = "Это строка"; // Теперь переменная стр имеет символьный тип

Пример 3. При вызове функции ВычислитьУ ее формальный параметр х будет определен как числовая переменная (текст функции ВычислитьУ см. выше).

процедура Выполнить()

б = ВычислитьУ(3.0); // При вызове функции ВычислитьУ определяется

Сообщить(''б = " + б); // тип и значение ее формального параметра х конецПроцедуры // Выполнить

Замечание. Переменные, имена которых неизвестны в программном компоненте, нельзя использовать в качестве фактических параметров других программных компонентов. Например, ошибочен следующий код:

процедура ОпределитьХ(х) х = 2.0;

конецПроцедуры // ОпределитьХ процедура Выполнить()

ОпределитьХ(х); // Этот вызов в текущей версии недопустим

Сообщить(х);

конецПроцедуры // Выполнить

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







конецПроцедуры // Выполнить

Объявляем переменную х Теперь этот вызов возможен Напечатает 2

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















Объявляем скалярные переменные а Теперь переменная а имеет числовой тип Напечатает 1.22

Теперь переменная а имеет символьный тип Напечатает Это строка Теперь переменная а имеет тип Дата Напечатает 24.12.01

2.5. ВВОД ЗНАЧЕНИЙ РАЗНЫХ ТИПОВ

Значения имеющихся в программе переменных числового, символьного типа, дат и агрегатных типов можно определить, используя диалоги, вызываемые приведенными в табл. 2.1 функциями; в табл. 2.2 приведен их синтаксис, а в табл. 2.3 - описание их параметров.

Таблица 2.1

Функции ввода значений
ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
Таблица 2.2

Синтаксис функций ввода значений

флаг = ВвестиЧисло(пер, заг, длина, точность, [задержка]); флаг = ВвестиСтроку(пер, заг, длина, [признак], [задержка]); флаг = ВвестиДату(пер, заг, [задержка]); флаг = ВвестиЗначение(пер, заг, тип, [длина], [точность]);

Описание параметров функций ввода значений

Таблица 2.3
Параметр Описание
длина Длина числового или символьного поля ввода. Задается при вводе чисел и строк
задержка Числовое выражение, задающее время ожидания ввода данных в секундах. При его превышении диалог исчезает, функция возвращает -1, значение переменной пер не изменяется. Время ожидания неограниченно, если задержка равна нулю или если этот параметр опущен
заз Текст заголовка окна диалога, например "Ввод сотрудника"
пер Переменная, в которую при нажатии на ОК устанавливается введенное значение; при выборе Отмена значение переменной пер не изменяется. Переменная пер должна появиться в программном компоненте до вызова

диалога ввода данных
Параметр Описание
признак Числовое выражение, задающее вид вводимой строки. Если признак равен единице, то появляется диалог ввода многострочного текста с разделителями (см. разд. 2.2), в противном случае вводится строка без разделителей строк (задано по умолчанию)
тип Тип переменной, значение которой определяется при нажатии на ОК, например "Число", "Строка", "Дата", а также разновидности агрегатных типов

Справочник, Документ и Перечисление, например "Справочник.Сотрудники", "Документ.Договор", "Перечисление.Пол". В случае задания несуществующего типа, например "Символ", или типа, с которым функция не работает, например "Календарь", диалог ввода Ьанных не появляется и значение переменной пер сохраняется, а функция возвращает нуль
точность Число знаков после десятичной точки в поле ввода числового значения.

Задается при вводе чисел
Замечания:
1. Все функции возвращают число 1, если нажата кнопка ОК, или 0 - в противном случае.

2. Функции ВвестиДату и ВвестиЗначение позволяют задавать в поле ввода несуществующие даты. В этом случае в определяемую переменную пер при нажатии ОК устанавливается пустое значение.

Примеры:

перем а, сотр;

флаг = ВвестиЧисло(а, "Введите номер документа", 10, 0); флаг = ВвестиСтроку(а, "Введите подстроку для поиска", 30); стр = "Это длинная символьная константа,

| поскольку она размещается не на одной,

| а на трех строчках";

// Задаем надлежащее (достаточно большое) число символов в тексте // Диалог, появляющийся после вызова функции, приведен на рис. 2.2, а флаг = ВвестиСтроку(стр, "Отредактируйте текст и нажмите ОК", 500, 1);

// Диалог, появляющийся после вызова функции, приведен на рис. 2.2, б // После выбора сотрудника переменная сотр будет иметь тип Справочник флаг = ВвестиЗначение(сотр, "Выберите сотрудника", "Справочник.Сотрудники");

ВЫВОД СПИСКА КОНСТАНТ В ТЕКСТОВЫЙ ФАЙЛ
а

б

Рис. 2.2. Диалоги ввода данных: а - многострочного текста; б - сотрудника
2.6. ВЫРАЖЕНИЯ И ОПЕРАЦИИ

2.6.1. ВЫРАЖЕНИЯ

Выражение - это формула, по которой вычисляется значение.

В выражении 1С могут присутствовать операнды разных типов (при наличии в выражении с несколькими операндами операнда агрегатного типа данных этот операнд воспринимается как пустое значение). Тип выражения определяется типом его результата. Тип результата выражения (или его подвыражения) определяется типом его первого операнда или первого заключенного в круглые скобки подвыражения. Например (выражения располагаются в правых частях операторов присваивания):













- числовое выражение из одного операнда Числовое выражение, возвращающее число 9 Числовое выражение, возвращающее число 3 Символьное выражение, возвращающее строку // "Строка и символ 2"

Числовое выражение, возвращающее число 2452267 Выражение типа Дата, возвращающее дату 23.12.01 Числовое выражение, возвращающее число 5

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

з = "Результат = " + 4 / "2-я строка";

получит символьный тип и значение, равное "Результат = 2". Действительно, операция / имеет более высокий приоритет, чем операция +, поэтому прежде будет вычислено подвыражение 4/"2-я строка", которое, судя по его первому операнду, является числовым и поэтому вернет число 2. Далее это число будет преобразовано в строку "2", которая объединится со строкой "Результат = ".

Результатом выражения будет пустое значение, если первый операнд выражения имеет пустое значение. Например:

перем а; // Объявляем скалярную переменную а

б = 2 + а; // Вернет 2

в = а + 2; // Вернет пустое значение

Переменная агрегатного типа данных воспринимается в выражениях, имеющих более одного операнда, как пустое значение. Например:

табл = СоздатьОбъект("Таблица");

а = табл + 2; // Вернет пустое значение

б = табл; // Типы переменных б и табл совпадают

Выражение называется логическим, если в нем есть хотя бы одна операция отношения или логическая операция. Например:

2.5 /1.33 > 0 //Вернет 1

(а = 5) и (б = 2) // Вернет 0, если, например, а = 1

Логические выражения употребляются в управляющих конструкциях языка, например

если 2.5 /1.33 > 0 тогда Сообщить(''Да''); -иначе

Сообщить("Нет");

конецЕсли;

Замечания:

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

флаг = (а = 5) и (б = 2); // Ошибка! В правой части оператора присваивания

// размещено логическое выражение

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

2. Тип данных выражения возвращают функции ТипЗначения и ТипЗначенияСтр. Первая возвращает число, по которому определяется тип данных ее параметра, вторая - имя типа данных параметра. Например:

а =1.2;

Сообщить(ТипЗначения(а)); // Напечатает 1

Сообщить(ТипЗначенияСір(а)); // Напечатает Число

сСотр = СоздатьОбъект("Справочник.Сотрудники");

Сообщить(ТипЗначенияСтр(сСотр)); // Напечатает Справочник

2.6.2. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ ДЛЯ ЧИСЛОВОГО

ТИПАДАННЫХ

С каждым типом данных связан набор операций. С числовыми данными употребляются известные арифметические операции *, /, +, - и операция %, возвращающая остаток от деления операндов, например:

5 % 2 // Вернет 1
5.2 % 2 // Вернет 1
5.8 % 2 // Вернет 0
5.8 % "2-я строка" // Также вернет 0
Из примеров видно, что при вычислении результата выражения с операцией % числовые операнды округляются до целых значений (если второй операнд является нечисловым, то он прежде приводится к числовому типу), а затем вычисляется остаток от деления двух целых чисел.

2.6.3. ОПЕРАЦИИ ДЛЯ СТРОК И ДАТ

В символьных выражениях допустима только операция +, называемая операцией конкатенации. Например:

"1-я строка и " + "строка 2" // Вернет строку "1-я строка и строка 2"

В выражениях типа Дата можно употреблять операции + и -, например

'21.12.01'+11; // Выражение типа Дата, возвращающее дату 01.01.02

'21.12.01' -11; // Выражение типа Дата, возвращающее дату 10.12.01

Следующее выражение ошибочно:

'21.12.01' * 11 // Операция * недопустима в выражениях типа Дата

2.6.4. "ИСТИНА" И "ЛОЖЬ" В 1С

Констант со значениями истина и ложь во встроенном языке 1С нет. В то же время понятия истина и ложь используются в 1С при оценке логических выражений, появляющихся в управляющих конструкциях языка.

2.6.5. ОПЕРАЦИИ ОТНОШЕНИЯ

В логических выражениях используются приведенные в табл. 2.4 операции отношения.

Таблица 2.4

Операции отношения
Операция Описание
< Меньше
<= Меньше или равно
> Больше
>= Больше или равно
= Равно
<> Не равно
Операндами операций отношения могут быть выражения числового или символьного типа, а также даты. Причем типы операндов должны совпадать. Например:

2 = 5 // Это ложь

"Строка 2">"Строка 1" // Это истина

2<'23.12.01'> // Это неверное выражение отношения, так как его

// операнды имеют разный тип

Также операндами операций = и <> могут быть переменные агрегатного типа. Например:

тЗнач1 = СоздатьОбъект("ТаблицаЗначений"); сСотр = СоздатьО6ъект("Справочник.Сотрупники"); тЗнач2 =тЗнач1;

// Круглые скобки в нижезаписанном логическом выражении обязательны если (тЗначІ = тЗнач2) и (тЗначІ = сСотр) тогда

Сообщить("Да");

иначе

Сообщить("Нет");

конецЕсли;

Если операция отношения выполняется над строками, то они сравниваются посимвольно до тех пор, пока не будут обнаружены несовпадающие символы. Они то и решат судьбу сравнения. Следует помнить, что символ сим_1 больше сим_2, если код символа сим_1 больше кода символа сим_1. Если строки-операнды операции отношения имеют разную длину и если есть необходимость продолжить сравнение символов строк-операндов (все предыдущие сравниваемые символы оказались равными), то в качестве недостающего символа более короткой строки используется символ с нулевым кодом. Например:

"Строка" > "Строка 1" // Это ложь

2.6.6. ЛОГИЧЕСКИЕ ОПЕРАЦИИ

Применяются следующие логические операции:

НЕ - логическое НЕ (отрицание);

И - логическое И;

ИЛИ - логическое ИЛИ.

Операндами логических операций должны быть логические выражения. В табл. 2.5 приведены результаты логических операций над логическими выражениями ЛВ1 и ЛВ2, принимающими значения истина (И) или ложь (Л).

Таблица 2.5

Таблица истинности
ЛВ1 ЛВ2 ЛВ1 ИЛВ2 ЛВ1 ИЛИ ЛВ2 НЕ ЛВ1
И И И И Л
И Л Л И Л
Л И Л И И
Л Л Л Л И
Операция отрицания является унарной операцией, располагаемой слева от операнда. Все остальные рассмотренные операции являются бинарными.

2.6.7. ПРИОРИТЕТ ВЫПОЛНЕНИЯ ОПЕРАЦИЙ

Все операции 1С выполняются в выражении слева направо в соответствии с их приоритетом (старшинством), то есть, если две последовательные операции имеют равный приоритет, первоначально выполняется левая операция. Подвыражения, заключенные в круглые скобки, вычисляются в первую очередь. В табл. 2.6 операции 1С расположены в порядке убывания их приоритета.

Таблица 2. б

Приоритет выполнения операций
% *,/ + , - НЕ И ИЛИ <, <=, >, >=, =, <>
Замечание. Каждая ячейка таблицы содержит операции с равным приоритетом. Пример:

8 % 2 * 3 // Вернет 0

8 % (2 * 3) // Вернет 2

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

3>2и4<5 // Так неверно

так как первоначально оценивается логическое подвыражение 2и4

операнды которого не есть истина или ложь. А это неверно.

Зато верно логическое выражение

(3 > 2) и (4 < 5) // Это истина

Пример. Вычислить результат логического выражения

(х / а = 1) или (б / (а + б) < 1) и не (б = а) или (х <> 6) при х = 6.0, а = 2.0 и б=3.0.

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

ложь или истина и не ложь или ложь.

Далее выполняем пошагово логические операции с учетом их приоритета. После выполнения не ложь:

ложь или истина и истина или ложь.

После выполнения истина и истина: ложь или истина или ложь.

Окончательный результат: истина.

2.7. МАССИВЫ

Массив - это объект данных, содержащий несколько значений, доступ к которым осуществляется по их номеру (индексу).

Число элементов массива называется его размером. Размером массива может быть только целочисленная буквальная константа.

Оператор

перем а[5];

объявляет одномерный массив (вектор) а из пяти элементов. Элементы массива имеют следующие имена: а[1], а[2], а[3], а[4] и а[5]. В этих именах величины 1-5 - индексы элементов массива.

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

для ин = 1 по 5 цикл

а[ин] = 1; // Теперь все элементы массива равны единице

конецЦикла;

Присваивания

а[2] = 3; а[5] = -4.7;

изменят соответственно значения 2-го и 5-го элементов массива а.

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

а[6 / 2] = 9.1; // Меняем значение 3-го элемента массива а

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

а[6 / 5] = 9.1; // Меняем значение 1 -го элемента массива а

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

а[0] = 5; // Индекс не может быть меньше числа 1

а[6] = 9; // Индекс не может быть больше числа 5

Элементы одного и того же массива могут быть разного типа. Например:

а[1] = 5; //Элемент числового типа

а[3] = "Строка"; // Элемент символьного типа

а[5] = '25.11.01'; // Элемент типа Дата

Элементы массива могут быть агрегатного типа. Например:

сСотр= СоздатьОбъект(''Справочник. Сотрудники"); табл = СоздатьОбъект("Таблица");

а[1] = 5; // Элемент числового типа

а[3] = сСотр; // Элемент агрегатного типа

а[5] = табл; // Элемент другого агрегатного типа

Массив не может в качестве элементов содержать другие массивы.

Массив может быть формальным параметром программного компонента (процедуры или функции). При этом размер массива не указывается, а квадратные скобки сохраняются. Для определения размера переданного процедуре (функции) массива используется встроенная функция Разм.

Пример:

процедура ИнициализаиияМассива(а[ ]) перем ин, размА;

размА = Разм(а); // Встроенная функция Разм вернет размер массива а

для ин = 1 по размА цикл

а[ин] = 1; // Теперь все элементы массива равны единице

конецЦикла; а[3] = -5;

конецПроцедуры // ИнициализацияМассива

процедура Выполнить() перем а[5];

// Вызов процедуры, устанавливающей начальные значения элементов массива // Ее фактическим параметром является имя массива ИнициализацияМассива(а);

Сообщить(а[2]); // Напечатает 1

Сообщить(а[3]); // Напечатает -5

конецПроцедуры // Выполнить

2.8. ВСТРОЕННЫЕ ФУНКЦИИ ДЛЯ РАЗНЫХ ТИПОВ ДАННЫХ

2.8.1. ВСТРОЕННЫЕ МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

Приведенные в табл. 2.7 математические функции применяются с числовыми типами данных. Они имеют в качестве аргументов числовые выражения и возвращают (если при их исполнении не возникло ошибки) некоторое число.

Математические функции

Таблица 2.7
Функция Что возвращает
результат = Окр(число, [числоЗнаков],

[способ]);
Округленное значение параметра число. Параметр числоЗнаков, если он присутствует, задает число знаков дробной части результата. Значение по умолчанию - 0. Параметр способ, если он вычисляется со значением 1, устанавливает, что число вида 1.5 округляется до числа 2 или округляется до числа 1 в противном случае.

Значение по умолчанию - 0
результат = Цел(число); Целую часть параметра число
минЗначение = Мин(число1, [число2],..., [числоК); Минимальное значение своих параметров. Может иметь только один параметр - число!
максЗначение = Макс(чнсло1, [число2],..., [числоN); Максимальное значение своих параметров. Может иметь только один параметр - число1
результат = Лог10(число); Десятичный логарифм аргумента число или нуль, если аргумент меньше нуля. Возникнет завершающая ошибка, если аргумент равен нулю
результат - Лог(число); Натуральный логарифм аргумента число или нуль, если аргумент меньше нуля. Возникнет завершающая ошибка, если аргумент равен нулю
Примеры:

Сообщить(Окр(2.45, 1, 1)); //2.5
Сообщить(Окр(2.45, 1, 0)); // 2.4
Сообщить(Окр(2.597)); // 3
Сообщить(Цел(2.9)); // 2
Сообщить(Мин(-2.9,-5, 12)); //-5

2.8.2. ВСТРОЕННЫЕ ФУНКЦИИ ДЛЯ СИМВОЛЬНЫХ ДАННЫХ

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

Таблица 2.8

Функции для строк
функция Что возвращает
длина - СтрДлина(строка); Длину параметра строка
флаг = ПустаяСтрока(строка); Число 1, если строка имеет нулевую длину или состоит из одних пробелов, или 0 -в противном случае
новаяСтрока - СокрЛ(строка); Строку, получаемую в результате удаления ведущих пробелов в аргументе строка
новаяСтрока = Сокр П(строка); Строку, получаемую в результате удаления завершающих пробелов в аргументе строка
новаяСтрока = СокрЛП(строка); Строку, получаемую в результате удаления ведущих и завершающих пробелов в аргументе строка
подстрока = Лев(строка, число); Строку, содержащую первые число символов параметра

строка или всю строку строка, если число =>

СтрДлина(строка). Если число <=0, то возвращается строка нулевой длины
подстрока = Прав(строка, число); Строку, содержащую последние число символов

параметра строка или всю строку строка, если число >

СтрДлина(строка). Если число < 0, то возвращается строка нулевой длины
подстрока = Сред(строка, число1, [число 2]); Строку, содержащую подстроку параметра строка, начинающуюся с символа под номером число 1 длиной число2. Если параметр число2 опущен, возвращается подстрока, начинающаяся с символа под номером число1

длиной до конца строки. Если число1 >

СтрДлина(строка) или число2 < 0, то возвращается

строка нулевой длины. Если параметр число1 < 0, то он принимается равным единице
позиция = Найти(строка, подстрока); Позицию, с которой подстрока начинается в параметре строка, или нуль, если подстрока не найдена в первом параметре
новаяСтрока = СтрЗаменить

(строка, подстрока!, подстрока2);
Строку, в которой все вхождения параметра подстрока 1 в параметр строка заменены на параметр подстрока2
кол = СтрЧислоВхождений(строка, подстрока); Число вхождений параметра подстрока в параметр строка
Функция Что возвращает
кол = СтрКоличествоСтрок {текст); Число строк в тексте текст. Строки в тексте разделены символом РазделительСтрок (см. разд. 2.3)
стр = СтрПолучитьСтроку(текст, номерСтроки); Строку параметра текст, имеющую номер номерСтроки. Если номерСтроки < 0 или номерСтроки больше числа строк в тексте, то возвращается строка нулевой длины
новаяСтрока = Врег(строка); Строку, в которой все символы параметра строка преобразованы в верхний регистр
новаяСтрока - Нрег(строка); Строку, в которой все символы параметра строка преобразованы в нижний регистр
новаяСтрока = OemToAnsi (строка); Строку, в которой OEM-коды символов параметра строка преобразованы в ANSI-коды
новаяСтрока = AnsiToOem (строка); Строку, в которой ANSI-коды символов параметра строка преобразованы в ОЕМ-коды
символ = Симв(кодСимвола); Символ, код которого равен значению параметра кодСимвола
код = КодСимв(строка); Код первого символа параметра строка
| поскольку она размещается не на одной,

| а на трех строчках"; кол = СтрКоличествоСтрок(текст); стр = СтрПолучитьСтроку(текст, 3); новаяСтрока = Врег("ааббсс"); новаяСтрока = Нрег("ААББСС"); стр = "вГСбв DOS"; новаяСтрока = OemToAnsi(CTp); новаяСтрока = АпзіТоОет(новаяСтрока); символ = Симв(200); код = КодСимв("И"); код = КодСимв("ИЛИ");

// Вернет 3

// Вернет "а на трех строчках"

// Вернет "ААББСС"

// Вернет "ааббсс"

// Содержит значение "текст DOS" в DOS-кодировке // Вернет строку "текст DOS" в кодировке ANSI // Вернет вГСбв DOS уже в кодировке OEM // Вернет И // Вернет 200 // Вернет 200

2.8.3. ВСТРОЕННЫЕ ФУНКЦИИ ДЛЯ ДАТ И ВРЕМЕНИ

1С, как и полагается программе бухгалтерского назначения, хранит много различных Дат, для управления которыми и доступа к которым используются приводимые в табл. 2.9

функции. Параметры, имя которых содержит слово дата, - это выражения типа Дата. Параметр вариант может быть либо датой, либо выражением символьного типа. Прочие параметры - это числовые выражения. Большинство функций, если они получают в качестве параметра несуществующую дату, например '33.10.01', возвращают пустое значение типа Дата. Например:

Сообщить(НачМесяца('33.10.01')); //Напечатает . .

Таблица 2.9

Функции для дат
Функция ЧТО возвращает
рДатаТек = РабочаяДата ([рДата], [режимСмены]); Устанавливает/возвращает рабочую дату, то есть дату, используемую при формировании документов и проводок в текущем сеансе. Параметр режимСмены применяется при смене рабочей даты на значение параметра рДата и установки режима смены рабочей даты в полночь. Причем если режимСмены задается равным числу

• 0, то рабочая дата в полночь не меняется;

• 1, то система предлагает изменить рабочую дату в полночь;

• 2, то рабочая дата меняется в полночь автоматически. Если параметр режимСмены не задан, то при вызове функции РабочаяДата сохраняются заданные в системе установки режима смены. Если новое значение даты -это несуществующая дата, то рабочая дата не меняется. Рабочую дату можно также изменить, воспользовавшись в 1 С: Предприятии пунктами меню Сервис- Параметры

и выбрав в появившемся окне закладку Общие (см. рис. 2.1). По умолчанию рабочая и текущие даты

совпадают
тДата = ТекущаяДата(); Текущую (системную) дату
новаяДата = ДобавитьМесяц (дата, числоМесяцев); Дату, получаемую в результате прибавления к значению параметра дата заданного вторым параметром числа месяцев. Значение параметра числоМесяцев может быть меньше нуля
нМесяца = НачМесяца(дата); Дату начала месяца, которому принадлежит дата
кМесяца = КонМесяца(дата); Дату конца месяца, которому принадлежит дата
нКвартала =

НачКвартала(дата);
Дату начала квартала, которому принадлежит дата
кКвартала =

КонКвартала(дата);
Дату конца квартала, которому принадлежит дата
нГода = НачГода(дата); Дату начала года, которому принадлежит дата
кГода = КонГода(дата); Дату конца года, которому принадлежит дата
Функция Что возвращает
нНедели = НачНедели(дата); Дату начала недели, которой принадлежит дата
кНедели - КонНедели(дата); Дату конца недели, которой принадлежит дата
год = ДатаГод(дата); Числовое значение года, которому принадлежит дата
месяц = ДатаМесяц(дата); Номер месяца, которому принадлежит дата
число = ДатаЧисло(дата); Номер дня месяца, заданного параметром дата
неделя =

НомерНеделиГода(дата);
Номер недели года, которой принадлежит дата
деньГода =

НомерДняГода(дата);
Номер дня года, заданного параметром дата
деньНедели =

НомерДняНедели(дата);
Номер дня недели, заданного параметром дата (нумерация дней начинается с понедельника)
период = ПериодС тр

(датаНачПериода,

датаКонПериода);
Символьное представление периода, границы которого задаются значениями параметров функции. Если период -это месяц, квартал, полугодие или год, то выводится соответствующее название периода, например 1 Полугодие 2002 г.
нИнтервала = Начало

СтандартногоИнтервала

([вариант]);
Устанавливает/возвращает вариант задания начала стандартного интервала отображения журнала документов. Параметр вариант, если он имеет тип Дата, задает дату начала интервала журнала документов. Если параметр -это символьное выражение, то оно должно вычисляться со следующими значениями: "День", "Месяц", "Квартал", "Год". Если параметр опущен или содержит неверное значение, имеющаяся в системе установка сохраняется. Начало стандартного интервала можно задать в 1С:Предприятии, обратившись к пунктам меню Сервис -Параметры и выбрав в появившемся окне закладку

Журналы (рис. 2.3)
кИнтервала = Конец

СтандартногоИнтервала

([вариант]);
Устанавливает/возвращает вариант задания конца стандартного интервала отображения журнала документов. Параметр вариант имеет тот же, что и для предшествующей функции, смысл с той разницей, что задает конец стандартного интервала
время = ТекущееВремя

([час], [мин], [сек]);
Строку, отображающую текущее (системное) время. Если заданы параметры час, мин и сек, то функция запишет в них числовые значения соответственно часа, минут и секунд

текущего времени
флаг = ВвестиПериод

(нПер, кПер, заг)
Единицу, если в выведенном диалоге (рис. 2.4) задания даты начала (нПер) и даты конца (кПер) периода нажата кнопка ОК, или нуль, если нажата кнопка Отмена, или клавиша Esc, или кнопка, закрывающая окно диалога. Символьный параметр заг задает заголовок диалогового

окна


Содержание раздела