12+  Свидетельство СМИ ЭЛ № ФС 77 - 70917
Лицензия на образовательную деятельность №0001058
Пользовательское соглашение     Контактная и правовая информация
 
Педагогическое сообщество
УРОК.РФУРОК
 
Материал опубликовал
Федорова Анна Николаевна50




























А.Н. ФЕДОРОВА

ПРОГРАММИРОВАНИЕ В «1С: ПРЕДПРИЯТИЕ

УЧЕБНОЕ ПОСОБИЕ


Специальность: 230701 Прикладная информатика (по отраслям)































Томск 2021





Оглавление


1. Программирование в "1С: Предприятие 8" 4

1.1. Наша первая обработка 4

1.2. Модули 8

1.3. Структура программного модуля 10

1.4. Переменные и константы 12

1.5. Объявление переменной 12

1.6. Типы данных 12

1.7. Окончание строки: точка с запятой (;) 15

1.8. Комментарии // 15

2. Процедуры и функции 16

3. Операции 20

3.1. Арифметические операции 20

3.2. Операция конкатенации 20

3.3. Логические операции 21

3.4. Булевы операции 21

3.5. Присваивание 21

3.6. Диалог с пользователем 21

4. Обработка, преобразование и форматирование данных 26

4.1. Значения типа "Число". Основные функции 26

4.2. Значения типа "Строка". Основные функции 26

4.3. Значения типа "Дата". Основные функции 28

4.4. Функции преобразования значений 33

4.5. Форматирование данных 34

4.6. Прочие функции работы с данными 36

5. Условия 37

5.1. Оператор ? 37

5.2. Оператор Если 37

6. Циклы 41

6.1. Оператор Для 41

6.2. Оператор Для каждого 42

6.3. Оператор Пока 42

7. Массивы 44

8. Список значений 46

9. Таблица значений 49

10. Исключительные ситуации 55

10.1. Оператор Попытка 55

10.2. Работа с файлами 55

11. Справочная система и синтаксис-помощник 58

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ 60

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 61



ВВЕДЕНИЕ


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

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

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

Итак, вы решили освоить профессию программиста 1С (или хотя бы её основы) и не знаете, с чего начать? Растерянность на этом этапе вполне понятна. И тут бесполезно лезть в конфигуратор и сразу пытаться делать новые справочники, документы и прочие объекты, которые создаются при помощи мышки.

Самое главное, что вам нужно сделать, это усвоить суть программирования. Ухватить сам принцип выполнения программы. А для этого нужно не объекты новые создавать в базе, а изучать основы самого языка программирования 1С 8. А всё остальное уже потом приложится и будет изучено быстро и легко.









Программирование в "1С: Предприятие 8"


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

Мы разберем основные, наиболее применимые команды, с остальными при желании вы всегда сможете ознакомиться в синтаксис-помощнике системы "1С: Предприятие" (режим Конфигуратора, меню Справка | Синтаксис-помощник) или в документации, предоставляемой фирмой "1С" вместе со своими программными продуктами.

В языке программирования 1С все операторы имеют два написания: русское и английское. К примеру, оператор Новый ("") аналогичен по смыслу и действию оператору New (""). Обычно все же пишут код на одном языке (чаще русском), однако не возбраняется (хотя считается плохим стилем программирования) смешивать оба языка в одном модуле. Мы в описании языковых конструкций будем приводить только русский вариант написания.

Каждая языковая конструкция будет описана в следующем формате: ЭлементЯзыка(Параметр1, Параметр2,..., ПараметрN) [КлючевоеСлово]

Здесь: Параметр1, Параметр2, ..., ПараметрN — список параметров; КлючевоеСлово — дополнительное ключевое слово, которое может присутствовать или отсутствовать в данной языковой конструкции.

Если у элемента языка нет параметров, скобки опускаются.

Квадратные скобки [] означают, что параметр или ключевое слово, заключенные в них, необязательны и могут как присутствовать, так и отсутствовать.

Если среди элементов необходимо выбрать только один, они будут разделены следующим образом: Элемент1|Элемент2|Элемент3.


Наша первая обработка

В упрощенном определении Обработка — это программа, написанная на языке 1С и выполняемая в системе "1С: Предприятие". Обработка может быть, как внутренней, входящей в конфигурацию и присутствующей в дереве конфигурации в разделе Обработки, так и внешней, имеющей расширение epf и запускаемой через пункт меню Файл | Открыть.

Мы будем экспериментировать на внешней обработке. Давайте создадим ее. Для этого в режиме Конфигуратора мы должны выбрать меню Файл | Новый и в открывшемся списке выбрать вариант Внешняя обработка. Откроется окно создания новой обработки (рис. 1.1).

t1636539038aa.png

Рис. 1.1. Создаем внешнюю обработку


Обработка, как и справочник или документ, может иметь реквизиты, несколько форм и печатных форм-макетов. В данном случае мы пока создадим самую простенькую обработку с одной формой. Нам ее вполне хватит.

Дадим нашей обработке имя (рис. 1.2).


t1636539038ab.pngt1636539038ac.png

Рис. 1.2. Задаем имя и примечание


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

Синоним — это представление имени, его записывают для того, чтобы в окнах системы "1С: Предприятие" вместо имени пользователь мог видеть название объекта в привычном и более читаемом виде. При этом обращение в программном коде, конечно, идет по имени, а не по синониму. Обратите внимание, что при вводе имени обработки синоним заполняется автоматически с правильным разделением слова по прописным буквам. Если бы мы назвали обработку "нашаперваяобработка", это бы не сработало.

Комментарий предназначен для записи дополнительной информации об объекте.

Теперь создадим форму обработки. Для этого щелкнем правой кнопкой мыши на пункте Формы окна создания обработки и выберем пункт Добавить. Откроется окно конструктора формы обработки (рис. 1.3).


t1636539038ad.png

Рис. 1.3. Конструктор формы обработки


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

Оставим все по умолчанию и нажмем кнопку Готово. Готовая пустая форма выглядит так, как показано на рис. 1.4.

t1636539038ae.png

Рис. 1.4. Пустая форма обработки


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

Ниже расположены вкладки, относящиеся к данной форме: Диалог (собственно форма с элементами, размещенными на ней), Модуль (здесь пишется программный модуль формы) и вкладка со списком реквизитов.

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


t1636539038af.png

Рис. 1.5. Модуль формы новой обработки с одной-единственной пустой процедурой


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


Модули

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

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

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

Локальный контекст конкретного модуля. Образуется значениями переменных, процедур и функций, находящимися в конкретном программном модуле. Эти значения являются локальными и доступны только внутри модуля, в котором находятся. Исключение — использование в качестве параметров. Например, переменные определены в каком-либо модуле, а потом из этого модуля следует вызов процедуры (или функции), находящейся в одном из общих модулей. В этом случае, значения локальных переменных могут быть использованы в качестве параметров.

Типы модулей:

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

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

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

Модуль приложения. Срабатывает в момент запуска приложения (загрузки конфигурации) и завершения его работы. Сюда помещают программный код, который должен быть выполнен при запуске/закрытии приложения. Модуль доступен в контекстном меню, по щелчку правой кнопкой мыши в самом верхнем пункте дерева конфигурации (там, где название конфигурации). Существуют две разновидности: модуль обычного приложения и модуль управляемого приложения. Модуль обычного приложения предназначен для обычной работы (в режиме "толстого" клиента), режим управляемого приложения — в основном для работы через Интернет (веб-приложение, "тонкий" клиент или "толстый" клиент в режиме управляемого приложения).

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

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

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

Модуль команды. Команды — это объекты, подчиненные объектам дерева конфигурации. У каждой команды есть модуль команды, где можно описать предопределенную процедуру ОбработкаКоманды(), которая будет срабатывать для данной команды. Если мы пройдемся по дереву конфигурации, то увидим, что для каждого из объектов: справочников, документов, перечислений и т. д. имеется пункт Команды. По щелчку на нем правой кнопкой мыши мы можем добавить новую команду и задать для нее обработчик ОбработкаКоманды().

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


Структура программного модуля

Программный модуль делится на три части.

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

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

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

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

Пример программного модуля:


Перем a;

Перем b;

Перем c;


Процедура Расчет()

с=a*b;

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

КонецПроцедуры


a=2;

b=3;


Это простенький программный модуль. Тем не менее он имеет все три части. Сначала объявляются переменные, при открытии модуля они инициализируются числами 2 и 3, а когда выполняется обработка, рассчитывается результат умножения и выдается результат — "6".

Модуль можно было написать и по-другому:


Процедура Расчет()

a=2;

b=3;

с=a*b;

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

КонецПроцедуры


В этом примере отсутствуют разделы объявления переменных и раздел основной программы, имеется только процедура. Переменные a и b объявляются прямо в начале процедуры, без использования оператора Перем, не являющегося обязательным, а переменная с вообще объявляется неявно, посредством присваивания. Язык программирования 1С допускает такой стиль программирования, в отличие от более "строгих" языков. Главное — не забывать меру, чтобы написанные вами программные модули оставались понятными.

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

Ключевые слова — это команды языка программирования, зарезервированные и запрещенные к использованию в качестве имен переменных.

Переменными являются величины, которые мы сами объявляем и используем, присваивая им имена и определенные значения. Именем переменной, процедуры или функции может быть любая последовательность букв, цифр и знаков подчеркивания "_", начинающаяся с буквы или знака подчеркивания "_". Имена не должны повторять ключевые слова, используемые в языковых конструкциях. Имена являются регистро независимыми, т. е. Тов, тов и ТоВ— это одна и та же переменная.

Методами переменных называются действия, которые могут выполнять данные такого типа. Например, в конструкции Спр.НайтиПоКоду("12345"), где

Спр — переменная типа "Справочник" (типы переменных мы сейчас рассмотрим подробней)

Найти-ПоКоду() — ее метод, в скобках указывается, какой именно код мы пытаемся найти.

К какому именно справочнику относится переменная Спр, задается отдельно, например, так: Спр = Справочники.Контрагенты. В этом случае последующая строка кода Спр.НайтиПоКоду("12345") будет искать контрагента с кодом 12345.


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

Константы — это постоянные (условно-постоянные) величины. Они хранят информацию, которая не изменяется или изменяется достаточно редко. Например, константой может быть название фирмы, ее адрес, ФИО директора и т. д.

Переменная — это величина, которая в ходе выполнения программного модуля может принимать различные значения.

Значения, которые принимаются константой или переменной, имеют один из используемых в системе "1С: Предприятие" типов данных.


Объявление переменной

Оператор Перем объявляет переменную. В процедурах и функциях он не является обязательным, и переменная может быть объявлена путем инициализации, например присваиванием нуля:


A=0;


Синтаксис:

Перем ИмяПеременной [Экспорт];

Пример:

Перем ОбщаяСумма;


Здесь Экспорт— необязательное ключевое слово, означающее, что данная переменная, помещенная в глобальный модуль (в Конфигураторе меню Действия | Глобальный модуль), будет доступна всем остальным модулям конфигурации. Ключ Экспорт имеет смысл использовать только в глобальном модуле.


Типы данных

Данные в языке программирования 1С делятся на две категории: базовые и агрегатные.

Базовые типы данных являются общими и не привязаны непосредственно к объектам конфигурации. Существуют следующие базовые типы данных:

числовой — любое десятичное число;

строковый — любая последовательность символов, в том числе и пустая;

дата — любая дата и время из допустимого диапазона;

булево — принимает одно из двух возможных значений: Истина или Ложь;

не определено — пустое значение, не принадлежащее ни к какому другому типу.

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

В значениях типа "Число", имеющих дробную часть, в тексте программного целая и дробная части разделяются точкой. Вот так: 5.25.

Значения типа "Строка" в тексте программного модуля заключаются в кавычки. Вот так: "это — строка".

Значения типа "Дата" в тексте программного модуля заключаются в одинарные кавычки. Вот так: '20120310' или '20120310195900'. Первый пример означает 10 марта 2012 года (2012 год, 03 месяц, 10 день), второй пример — 10 марта 2012 года 19 часов 59 минут 00 секунд (2012 год, 03 месяц, 10 день, 19 час, 59 минута, 00 секунд).

Агрегатные типы данных — специальные типы данных, соответствующие типам объектов дерева конфигурации системы "1С: Предприятие". Сюда же относятся универсальные коллекции значений, такие как СписокЗначений или Массив, а также специфические типы данных, такие как ТекстовыйДокумент или ТабличныйДокумент.

Для наглядности приведем пример работы с агрегатными типами данных:


Товары = Справочники.Номенклатура;

РезультатПоиска = Товары.НайтиПоНаименованию("Зеркало круглое");

Если

РезультатПоиска <> Товары.ПустаяСсылка() Тогда

Сообщить("Артикул " + РезультатПоиска.Артикул);

Иначе

Предупреждение("Нет такого товара!");

КонецЕсли;


Где мы объявляем новую переменную Товары типа Справочники.Номенклатура. Это и есть агрегатный тип данных — тип, представленный в дереве конфигурации конкретным объектом.

Используя метод справочника НайтиПоНаименованию(), ищем конкретное наименование товара в справочнике, присваивая результат переменной РезультатПоиска. У каждого объекта метаданных есть набор собственных методов, которые пишутся в формате ИмяПеременной.Метод, т. е. через точку. Аналогично, если у объекта есть поля (например, в справочнике товаров поле "Артикул"), к ним также можно обратиться в формате ИмяПеременной.ИмяПоля. Дальше в этой главе мы будем рассматривать методы агрегатных типов данных. Полный список методов можно найти в синтаксис-помощнике (меню Сервис | Ситаксис-помощник), где команды и методы сгруппированы по типам. На рис. 1.6 представлено дерево синтаксис-помощника, открытое как раз на методе НайтиПоНаименованию(), принадлежащем объектам типа "Справочник":


t1636539038ag.png Рис. 1.6. Пример использования синтаксис-помощника


Далее мы сравниваем переменную РезультатПоиска с пустой ссылкой типа Справочники.Номенклатура (переменная Товары именно этого типа, мы это задали в первой строке программного кода). То есть если мы что-то нашли, то ссылка не пуста, если не нашли — пуста. Если результат поиска не равен пустой ссылке на элемент справочника номенклатуры (знак <> означает "не равно"), тогда мы сообщаем артикул найденного товара (предваряя его текстовой строкой "Артикул "; если бы мы это не сделали, то получили бы в сообщении просто значение артикула, без пояснения, что это). В противном случае (Иначе) выводится предупреждение в центре экрана о том, что такого товара нет.

Агрегатные типы данных могут быть как неопределенные, так и конкретизированные. Например, тип "Константа", "Справочник", "Документ", "Перечисление" и т. п. — неопределенные агрегатные типы, которые могут обращаться к любому объекту данного типа. Не существует данных типа "Отчет" или "Обработка", потому что эти элементы дерева метаданных не являются данными, а только средствами манипуляции данными и их обработки.

Тип Справочники.Номенклатура Документы.ПоступлениеТоваровУслуг, Перечисления.ДаНет и т. п. являются конкретизированными агрегатными типами данных, поскольку переменная данного типа ссылается не просто на какой-либо справочник, документ или перечисление, а на конкретно указанный.





Окончание строки: точка с запятой (;)

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


Пример:

A=2;

B=2;

C=A*B;

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


Комментарии //

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


Синтаксис:

// любое количество любых символов в строке


Пример:

А = 5; // а дальше идет комментарий

// это тоже комментарий, начинающийся с начала строки

// Сообщить(А);


Примечание:

Выделить код мышью и нажать кнопку Добавить комментарий t1636539038ah.png. Удаляется блок комментариев аналогично: нужно выделить раскомментируемый блок мышью и нажать кнопку Удалить комментарий t1636539038ai.png.


Процедуры и функции


Процедура


Процедура — часть программного модуля, которая может быть выполнена обращением к ней по имени. Например, если имеется процедура Печать(), а также кнопка на форме в обработчике нажатия которой прописано имя процедуры – Печать(), то при нажатии кнопки процедура будет выполнена. Обратите внимание, что скобки ставятся, даже если процедура не имеет параметров. Работа процедуры может быть остановлена, если по ходу ее выполнения в программном коде встретился оператор Возврат.


Процедура()

...

КонецПроцедуры


Синтаксис:

Процедура ИмяПроцедуры(Параметр1, Параметр2,..., ПараметрN) [Экспорт]


Пример:

Процедура Перемножить()

A=1;

B=2;

C=3;

D= A*B*C;

КонецПроцедуры


Здесь: Параметр1, Параметр2, ..., ПараметрN — список параметров; Экспорт— ключевое слово, которое может присутствовать или отсутствовать и означает, что данная процедура, помещенная в глобальном модуле (в Конфигураторе меню Действия | Глобальный модуль), будет доступна всем остальным модулям конфигурации. Ключ Экспорт имеет смысл использовать только в глобальном модуле.


ПРИМЕЧАНИЕ

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


Функция


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


Функция()

...

Возврат

...

КонецФункции


Синтаксис:

Функция ИмяПроцедуры(Параметр1, Параметр2,..., ПараметрN) [Экспорт]


Пример:


Перем Первая;

Перем Вторая;


Функция Сложение(A, B)

C=A+B;

Возврат C;

КонецФункции


Первая=2; Вторая=3;

Сообщить(Сложение(Первая, Вторая));


Здесь: Параметр1, Параметр2, ..., ПараметрN — список параметров; Экспорт— ключевое слово, которое может присутствовать или отсутствовать и означает, что данная функция, помещенная в глобальном модуле (в Конфигураторе меню Действия | Глобальный модуль), будет доступна всем остальным модулям конфигурации. Ключ Экспорт имеет смысл использовать только в глобальном модуле.

В итоге получим результат "5". Мы передаем в функцию значения переменных Первая и Вторая, там они присваиваются параметрам функции A и B, складываются, после чего возвращается результат. Попробуйте ввести подобный код в нашей обработке для экспериментов. При этом модуль формы обработки должен выглядеть так, как показано на рис. 1.7.


t1636539038aj.png

Рис. 1.7. Простейшая функция сложения чисел


Сохраните обработку, затем откройте ее в режиме "1С: Предприятие" через меню Файл | Открыть. Будет выдан результат: 5.


ПРИМЕЧАНИЕ

Ключевые слова Функция и КонецФункции являются не операторами, а так называемыми операторными скобками, поэтому их не следует заканчивать точкой с запятой.


ПРИМЕЧАНИЕ

Работу обработки следует проверять в режиме "1С: Предприятие" через меню Файл | Открыть. Если пример отработал, и вы стерли его код в обработке и ввели новый, не забудьте перед выполнением сохранить его, а в режиме предприятия — закрыть обработку, после чего открыть на выполнение снова. Открывать обработку заново следует потому, что уже открытая в режиме предприятия обработка — это старая версия обработки на момент предыдущего открытия. В Конфигураторе вы ее уже изменили и сохранили, но в уже открытой ранее обработке эти изменения еще не зафиксированы, и будет выполняться старая версия.


Оператор Возврат


Этот оператор завершает выполнение процедуры или функции, причем в функции возвращает значение в формате Возврат ИмяПеременной.





Синтаксис:

Возврат [Значение];


Пример:

Функция ОпределениеДняНедели(Номер)

Если Номер=1 Тогда

Возврат "понедельник";


ИначеЕсли Номер=2 Тогда

Возврат "вторник";

ИначеЕсли Номер=3 Тогда

Возврат "среда";

ИначеЕсли Номер=4 Тогда

Возврат "четверг";

ИначеЕсли Номер=5 Тогда

Возврат "пятница";

ИначеЕсли Номер=6 Тогда

Возврат "суббота";

ИначеЕсли Номер=7 Тогда

Возврат "воскресенье";

Иначе

Возврат "В неделе семь дней!";

КонецЕсли;

КонецФункции




Операции


Арифметические операции

Арифметические операции предназначены для выполнения между операндами арифметических действий. В языке программирования 1С существуют следующие виды арифметических операций (табл. 1.1).


Таблица 1.1. Арифметические операции

Операция

Символ операции

Пример

Сложение

+

Если A=2 и B=3, A+B=5

Вычитание

-

Если A=5 и B=3, A-B=2

Умножение

*

Если A=2 и B=3, A*B=6

Деление

/

Если A=8 и B=2, A/B=4

Остаток от деления

%

Если A=25 и B=5, A%B=0 (нет остатка от деления)

Унарный минус

-

Если A=1, -А=-1


Арифметические операции могут выполняться между числами, датами, а также обоими типами данных вместе. Например, выполнение следующего кода выдаст результат 10.03.2012 0:00:05:


Перем A, B, C;

A= '20120310';


B=5;

C=A+B;

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

К дате 10.03.2012 мы прибавили 5. По умолчанию, если указана только дата без времени, время считается 0 часов 00 минут 00 секунд. Прибавление 5 дает нам 0 часов 00 минут 05 секунд той же даты.


Операция конкатенации

Конкатенация — это присоединение нескольких строк друг к другу, для чего используется знак + (плюс). Если какая-либо из соединяемых строк не имеет тип "Строка", она преобразуется к нему.


Пример:

Фамилия= "Иванов";

Имя="Петр";

Отчество="Васильевич";

ФИО=Фамилия+" "+Имя+" "+Отчество;

Сообщить (ФИО);


В результате конкатенации трех строковых переменных и двух пробелов (" ") между ними мы получим сообщение "Иванов Петр Васильевич".


Логические операции

Логические операции предназначены для сравнения операндов (табл. 1.2) и возвращают логическое значение Истина или Ложь. В числовом представлении Истина= 1, Ложь= 0.

Таблица 1.2. Логические операции

Операция

Символ операции

Пример

Больше

>

A>B

Больше или равно

>=

A>=B

Меньше

<

A<B

Меньше или равно

<=

A<=B

Равно

=

A=B

Не равно

<>

A<>B


Булевы операции

С логическими операциями тесно связаны так называемые булевы операции: И; ИЛИ; НЕ.


Пример:


Если (A>B) И (A<>5) Тогда

Сообщить ("A больше B и не равно 5");

КонецЕсли;


Пример:


Если (А > 10 = Ложь) ИЛИ (Б > 10 = Ложь) Тогда

Сообщить ("Хотя бы одна из двух переменных меньше или равно 10");

КонецЕсли;


Присваивание

Оператор присваивания =присваивает переменной определенное значение.


Синтаксис:

Переменная=Значение;


Пример:

A=5;

Стр="строка текста"; Выч=A+10;

Товары = Справочники.Номенклатура;



Диалог с пользователем

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

ВвестиЗначение. Пользователю предлагается ввести значение заданного типа.


Синтаксис:

ВвестиЗначение(3начение, Подсказка, Тип);

Пример:

Перем КакаяНибудьПеременная;

ВвестиЗначение(КакаяНибудьПеременная,

"Введите строковое значение",

Тип("Число"));

Сообщить(КакаяНибудьПеременная);


Пример:

Перем КакаяНибудьПеременная;

Если ВвестиЗначение(КакаяНибудьПеременная,

"Введите строковое значение",

Тип("ДокументСсылка.ПоступлениеТоваровУслуг")) Тогда

Сообщить(КакаяНибудьПеременная);

КонецЕсли;


Здесь: Значение — имя переменной, которой будет присвоено введенное значение; Подсказка— текст подсказки пользователю; Тип — тип вводимого значения ("строка", "число", элемент справочника или документ и т. п.).

Приведенные примеры практически идентичны, за исключением того, что в первом случае вводилось число, а во втором — документ поступления товаров и услуг (иначе говоря, приходная накладная). При выполнении такой обработки будет открыт журнал документов "Поступление товаров и услуг", и пользователю нужно будет выбрать один из них. Обратите внимание, что при открытии кавычки в параметре "Тип" система предоставляет выбор из списка возможных значений.


ВвестиЧисло. Пользователю предлагается ввести значение числового типа.


Синтаксис:

ВвестиЧисло(Значение[, Подсказка][, Длина][, Точность]);

Пример:

Перем Количество;

Если ВвестиЧисло(Количество, "Введите количество", 10, 2) Тогда

КвадратКоличества = Количество*Количество;

КонецЕсли;

Сообщить("Квадрат введенного значения равен "+КвадратКоличества);


Здесь: Значение — имя переменной, которой будет присвоено введенное значение; Подсказка— текст подсказки пользователю; Длина— длина вводимого значения; Точность— количество знаков после запятой.


ВвестиСтроку. Пользователю предлагается ввести значение строкового типа.



Синтаксис:

ВведитеСтроку (Значение [, Подсказка] [, Длина] [, Многострочьность]);


Здесь: Значение — имя переменной, которой будет присвоено введенное значение; Подсказка — текст подсказки пользователю; Длина— длина строки; Многострочность— может принимать значение истина или ложь и определяет ввод простой строки или многострочной. ВвестиДату пользователю предлагается ввести значение типа "дата".


ВвестиДату. Пользователю предлагается ввести значение типа "Дата".


Синтаксис:

ВведитеДату (Значение [, Подсказка] [, ЧастьДаты]);

Пример:

ДатаНапоминания = РабочаяДата; Подсказка = "Введите дату и время"; ЧастьДаты = ЧастиДаты.ДатаВремя;

Если

ВвестиДату(ДатаНапоминания, Подсказка, ЧастьДаты) Тогда

Сообщить(ДатаНапоминания); КонецЕсли;


Здесь: Значение — имя переменной, которой будет присвоено введенное значение; Подсказка — текст подсказки пользователю; ЧастьДаты— задаваемая пользователем часть даты.

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

t1636539038ak.png

Рис. 1.8. Ввод даты и времени


Это и будет ЧастьДаты— та часть, которую нам предложено вводить. Если бы строка выглядела так:

ЧастьДаты = ЧастьДаты.Время; то нам было бы предложено вводить только время, без даты.


Вопрос. Выдает на экран диалоговое окно, в котором выбирается диапазон дат.

Синтаксис:

Вопрос(ТекстВопроса, Кнопки[, Таймаут][, КнопкаПоУмолчанию] [, Заголовок][, КнопкаТаймаута]);


Здесь: ТекстВопроса — собственно текст вопроса; Кнопки — состав и текст кнопок в диалоговом окне (табл. 1.3); Таймаут — время ожидания системы в секундах (по умолчанию не ограничено, т. е. равно 0); КнопкаПоУмолчанию — кнопка по умолчанию; Заголовок— заголовок окна вопроса; КнопкаТаймаута— кнопка, на которой отображается количество секунд, оставшихся до истечения тайм-аута.


Таблица 1.3. Режимы вопроса в языке программирования 1С системы "1С:Предприятие 8.2"

Параметр Кнопки

Кнопки в окне диалога

ДаНет

Кнопки Да и Нет

ДаНетОтмена

Кнопки Да, Нет, Отмена

OK

Кнопка OK

ОКОтмена

Кнопки OK и Отмена

ПовторитьОтмена

Кнопки Повторить, Отмена

ПрерватьПовторитьПропустить

Кнопки Прервать, Повторить, Пропустить


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

Да;

Нет;

OK;

Отмена;

Повторить;

Прервать;

Пропустить;

Таймаут.


Пример:

Ответ = Вопрос("Продолжить?", РежимДиалогаВопрос.ДаНет);

Если

Ответ = КодВозвратаДиалога.Да Тогда

Сообщить ("Пользователь ответил ДА");

ИначеЕсли

Ответ = КодВозвратаДиалога.Нет Тогда

Сообщить("Пользователь ответил НЕТ");

КонецЕсли;

Пример:

А = Вопрос ("Вы довольны вашей зарплатой?", РежимДиалогаВопрос.ДаНетОтмена);

Если

А = КодВозвратаДиалога.Да Тогда

Сообщить ("Ого");

ИначеЕсли

А = КодВозвратаДиалога.Нет Тогда

Сообщить("НЕТ!");

ИначеЕсли

А = КодВозвратаДиалога.Нет Тогда

Сообщить ("Я еще подумаю...");

КонецЕсли;

Предупреждение. Выводит на экран предупреждение.


Синтаксис:

Предупреждение (ТекстСообщения [, Таймаут] [, Заголовок]);

Пример:

Предупреждение ("Ошибка! ");



Здесь: Таймаут— время ожидания ответа от пользователя в секундах, по умолчанию 0 (неограниченное); Заголовок— заголовок окна предупреждения.


Сообщить. Выводит сообщение в табло, в нижней части экрана.


Синтаксис:

Сообщить (ТекстСообщения);

Пример:

Сообщить ("Обработка завершена! ");


Пример:

Сообщить ("Итого сумма равна! "+ВычСумма);



Обработка, преобразование и форматирование данных


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


Значения типа "Число". Основные функции

Цел. Возвращает целую часть переданного числа без дробной части.


Синтаксис:

Цел (Число);

Пример:

Сообщить (Окр(10.784));


Если записать такую строку кода в обработку и запустить, будет выдано 10.


Окр. Возвращает целую часть округленного числа без дробной части.


Синтаксис:

Окр (Число);

Пример:

Сообщить (Окр(10.784));


Если записать такую строку кода в обработку и запустить, будет выдано 11.


Значения типа "Строка". Основные функции

СтрДлина. Возвращает количество символов в строке.


Синтаксис:

СтрДлина (Строка);

Пример:

Сообщить (СтрДлина("Определим длину этой строки"));


Если записать такую строку кода в обработку и запустить, будет выдано 27.

Пример:

Стр = " А это другая строка, и мы присвоим ее переменной";

Сообщить (СтрДлина(Стр));


Если записать такую строку кода в обработку и запустить, будет выдано 48.

СокрЛ. Отсекает незначащие символы (пробелы) в левой части строки.


Синтаксис:

СокрЛ(Строка);


СокрП. Отсекает незначащие символы (пробелы) в правой части строки.


Синтаксис:

СокрП(Строка);


СокрЛП. Отсекает незначащие символы (пробелы) в левой и правой частях строки.


Синтаксис:

СокрЛП(Строка);

Пример:

Сообщить(СокрЛП("Текстовая строка"));


Если записать такую строку кода в обработку и запустить, будет выдано "Текстовая строка".


Лев. Выбирает указанное количество символов в левой части строки.


Синтаксис:

Лев(Строка, ЧислоСимволов);

Пример:

ПроверочнаяСтрока = "Доброе утро, страна!";

ПорезаннаяСтрока = Лев(ПроверочнаяСтрока, 11); Сообщить(ПорезаннаяСтрока);


Если записать такую строку кода в обработку и запустить, будет выдано "Доброе утро".


Прав. Выбирает указанное количество символов в правой части строки.


Синтаксис:

Прав(Строка, ЧислоСимволов);


Пример:

ПроверочнаяСтрока = "Доброе утро, страна!";

ПорезаннаяСтрока = Прав(ПроверочнаяСтрока, 7); Сообщить(ПорезаннаяСтрока);


Если записать такую строку кода в обработку и запустить, будет выдано "страна!".


Сред. Выбирает указанное количество символов, начиная с указанного символа строки.


Синтаксис:

Сред(Строка, НомерСимвола[, ЧислоСимволов]);


Если число символов не указано, то выбирается вся строка.

Пример:

ПроверочнаяСтрока = "Доброе утро, страна!";

ПорезаннаяСтрока = Сред(ПроверочнаяСтрока, 8, 4); Сообщить(ПорезаннаяСтрока);


Если записать такую строку кода в обработку и запустить, будет выдано "утро".


Операция конкатенации +. Соединяет несколько строк в одну.


Синтаксис:

Строка1+Строка2+...+СтрокаN;


Пример:

Строка1 = "Изучение языка программирования 1С"; Строка2 = "не только интересно";

Строка3 = "но и полезно";

Строка4 = Строка1+" "+Строка2+", "+Строка3+"!";

Сообщить(Строка4);


При запуске этот программный код выдаст следующее: "Изучение языка программирования 1С не только интересно, но и полезно!".

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


Значения типа "Дата". Основные функции

ТекущаяДата. Возвращает текущую дату.


Синтаксис:

ТекущаяДата();


ДобавитьМесяц. Добавляет к указанной дате указанное количество месяцев. Если это количество отрицательное, то вычитает его из даты.


Синтаксис:

ДобавитьМесяц(Дата, ЧислоМесяцев);



Пример:

Сообщить(ДобавитьМесяц (ТекущаяДата(), -12));


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


ДеньНедели. Определяет номер дня недели для указанной даты.


Синтаксис:

ДеньНедели(Дата);


Пример:

Сообщить(ДеньНедели (ТекущаяДата()));

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


ДеньГода. Определяет номер дня в году для указанной даты.


Синтаксис:

ДеньГода(Дата);


НеделяГода. Определяет номер недели в году для указанной даты.


Синтаксис:

НеделяГода(Дата);


Год. Определяет год в указанной дате.


Синтаксис:

Год(Дата);


Пример:

Сообщить(Год (ТекущаяДата()));

Этот фрагмент кода проверялся 13 марта 2012 года. Если записать такую строку кода в обработку и запустить, будет выдан текущий год — 2012.


Месяц. Определяет месяц в указанной дате.


Синтаксис:

Месяц(Дата);


Пример:

Сообщить(Месяц (ТекущаяДата()));

Этот фрагмент кода проверялся 13 марта 2012 года. Если записать такую строку кода в обработку и запустить, будет выдан текущий месяц — 3.


День. Определяет календарный день в указанной дате.


Синтаксис:

День(Дата);

Пример:

Сообщить(День (ТекущаяДата()));

Этот фрагмент кода проверялся 13 марта 2012 года. Если записать такую строку кода в обработку и запустить, будет выдан текущий день — 13.


Час. Определяет час в указанной дате.


Синтаксис:

Час(Дата);

Пример:

Сообщить(Час (ТекущаяДата()));


Этот фрагмент кода проверялся в 14:44:15. Если записать такую строку кода в обработку и запустить, будет выдан текущий час — 14.


Минута. Определяет минуту в указанной дате.


Синтаксис:

Минута(Дата);

Пример:

Сообщить(Минута (ТекущаяДата()));


Этот фрагмент кода проверялся в 14:44:15. Если записать такую строку кода в обработку и запустить, будет выдана текущая минута — 44.


Секунда. Определяет секунду в указанной дате.


Синтаксис:

Секунда(Дата);

Пример:

Сообщить(Секунда (ТекущаяДата()));


Этот фрагмент кода проверялся в 14:44:15. Если записать такую строку кода в обработку и запустить, будет выдана текущая секунда — 15.


НачалоГода. Определяет дату и время начала года для указанной даты.


Синтаксис:

НачалоГода(Дата);

Пример:

Сообщить(НачалоГода ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.01.2012 0:00:00.


НачалоКвартала. Определяет дату и время начала квартала для указанной даты.


Синтаксис:

НачалоКвартала(Дата);

Пример:

Сообщить(НачалоКвартала ('20120801'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.07.2012 0:00:00.


НачалоМесяца. Определяет дату и время начала месяца для указанной даты.


Синтаксис:

НачалоМесяца (Дата);

Пример:

Сообщить(НачалоМесяца ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.03.2012 0:00:00.


НачалоНедели. Определяет дату и время начала недели для указанной даты.



Синтаксис:

НачалоНедели (Дата);

Пример:

Сообщить(НачалоНедели ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 27.02.2012 0:00:00 (поскольку 27 февраля 2012 года начинается неделя, в которую входит 1 марта 2012 года).


НачалоДня. Определяет дату и время начала дня для указанной даты.


Синтаксис:

НачалоДня (Дата);

Пример:

Сообщить(НачалоДня ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.03.2012 0:00:00.


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


Синтаксис:

НачалоЧаса (Дата);

Пример:

Сообщить(НачалоЧаса ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.03.2012 0:00:00.


НачалоМинуты. Определяет дату и время начала минуты для указанной даты.


Синтаксис:

НачалоМинуты (Дата);

Пример:

Сообщить(НачалоМинуты ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.03.2012 0:00:00.


КонецГода. Определяет дату и время конца года для указанной даты.

Синтаксис:

КонецГода (Дата);

Пример:

Сообщить(КонецГода ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 31.12.2012 23:59:59.


КонецКвартала. Определяет дату и время конца квартала для указанной даты.


Синтаксис:

КонецКвартала (Дата);

Пример:

Сообщить(КонецКвартала ('20120801'));


Если записать такую строку кода в обработку и запустить, будет выдано 30.09.2012 23:59:59.


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


Синтаксис:

КонецМесяца (Дата);

Пример:

Сообщить(КонецМесяца ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 31.03.2012 23:59:59.


КонецНедели. Определяет дату и время конца недели для указанной даты.


Синтаксис:

КонецНедели (Дата);

Пример:

Сообщить(КонецНедели ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 04.03.2012 23:59:59 (поскольку 4 марта 2012 года заканчивается неделя, в которую входит 1 марта 2012 года).


КонецДня. Определяет дату и время конца дня для указанной даты.


Синтаксис:

КонецДня (Дата);

Пример:

Сообщить(КонецДня ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.03.2012 23:59:59.


КонецЧаса. Определяет дату и время конца часа для указанной даты.


Синтаксис:

КонецЧаса (Дата);

Пример:

Сообщить(КонецЧаса ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.03.2012 0:59:59.


КонецМинуты. Определяет дату и время конца минуты для указанной даты.


Синтаксис:

КонецМинуты (Дата);

Пример:

Сообщить(КонецМинуты ('20120301'));


Если записать такую строку кода в обработку и запустить, будет выдано 01.03.2012 0:00:59.


ПРИМЕЧАНИЕ

Прибавим к текущей дате сутки:

СекундВМинуте = 60;

СекундВЧасе = СекундВМинуте*60;

СекундВСутках = СекундВЧасе*24;


Прибавим к заданной дате полгода:

ПолученнаяДата = ДобавитьМесяц('20120315', 6);


Вычислим от введенной пользователем даты 2 месяца:

Перем ВводимаяДата;

ВведеннаяДата = ВвестиДату(ВводимаяДата,"Введите дату"); ВводимаяДата = ДобавитьМесяц(ВводимаяДата, -2);


Функции преобразования значений

Число. Преобразует переданное значение в число.


Синтаксис:

Число (Значение);

Пример:

А = "12345"; ПреобразованноеА = Число(А);

Сообщить(КонецМинуты ("ПреобразованноеА");


Здесь мы преобразуем строковое представление числа (А = "12345", если бы мы присваивали переменной А числовое значение, то писали бы А = 12345). Преобразование происходит успешно, после выполнения функции обработка выдаст нам 12345.


Пример:

Б = " какая-то надпись "; ПреобразованноеБ = Число(Б);

Сообщить(КонецМинуты ("ПреобразованноеБ ");


А здесь мы пытаемся преобразовать в число явно несхожее с числом значение. Такая обработка выдаст 0.

Строка. Преобразует переданное значение в строку. Синтаксис:


Синтаксис:

Строка (Значение);

Пример:

А = 1000;

Б = Строка(А);


Примером использования цифровых литералов в значениях текстового типа может служить, например, справочник номенклатуры конфигурации "Управление Торговлей". Имея код типа "Строка", он, тем не менее, вполне может хранить также визуально "цифровые" коды, например 20245.


Дата. Преобразует переданное значение в дату. Значение может передаваться целиком или по составляющим.


Синтаксис:

Дата (Значение);

Дата(Год, Месяц, День[, Час][, Минута][, Секунда]);

Пример:

ПреобразованиеВДату = Дата("20120313181637");


Данный код преобразует введенное значение в значение, равное 13 марта 2012 года 18:16:37.


ПреобразованиеВДату = Дата("2012,03,13,18,16,37");


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


Форматирование данных

Формат. Форматирует переданное значение в зависимости от заданной форматной строки. В случае отсутствия форматной строки происходит форматирование по умолчанию (как правило, преобразование значения к строковому типу).


Синтаксис:

Формат (Значение[, ФорматнаяСтрока]);

Дата(Год, Месяц, День[, Час][, Минута][, Секунда]);

Пример:

Стр = Формат(587950.471, "ЧЦ=10; ЧДЦ=2"); Сообщить(Стр);



Здесь ЧЦ=10 означает длину значения, ЧДЦ=2 — количество знаков после запятой. Результат выполнения: 587 950,47.


Пример:

Стр = Формат(587950.471, "ЧЦ=10; ЧГ=0; ЧДЦ=2"); Сообщить(Стр);


Этот пример практически идентичен предыдущему, за исключением параметра ЧГ, означающего способ группировки разрядов числа. ЧГ=0 означает, что разрядность выводиться не будет (это важно при операциях экспорта-импорта данных в другие программы). Результат выполнения: 587950,47.


Пример:

Стр = Формат(587950.471, "ЧЦ=10; ЧРГ=.; ЧДЦ=2"); Сообщить(Стр);


А здесь разделители групп разрядов будут выводиться в виде точки, за что отвечает параметр ЧРГ. Результат выполнения: 587.950,47.


Пример:

Стр = Формат('20120313204547', "ДФ=""дд ММММ гггг ЧЧ:мм:сс"""); Сообщить(Стр);


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

параметр дд означает номер дня в 12-часовом варианте с лидирующим нулем (т. е. 3 марта будет отражено, как 03 марта);

параметр ММММ— полное название месяца;

параметр гггг— номер года с веком;

параметр ЧЧ— час в 12-часовом формате с лидирующим нулем; параметр мм— минута с лидирующим нулем;

параметр сс— секунда с лидирующим нулем.

Результат выполнения: 13 марта 2012 20:45:47.


Пример:

Стр = Формат('20120313204547', "ДФ=""дд ММММ гггг 'г.' ЧЧ:мм:сс"""); Сообщить(Стр);


Этот пример идентичен предыдущему, за исключением того, что в форматную строку добавлено сокращение года 'г.'. Результат выполнения: 13 марта 2012 г. 20:45:47.


Пример:

Стр = Формат('20120313204547', "ДЛФ=Д"); Сообщить(Стр);


А это та же самая дата, но в формате "ДЛФ=Д", т. е. просто дата. Результат выполнения: 13.03.2012.


Стр = Формат('20120313204547', "ДЛФ=В"); Сообщить(Стр);


И это та же самая дата, но в формате "ДЛФ=В", т. е. просто время, без даты. Результат выполнения: 20:45:47.

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


ЧислоПрописью. Представление числового значения прописью в зависимости от заданной форматной строки.


Синтаксис:

ЧислоПрописью (Число[, ФорматнаяСтрока]);

[, Параметры]);

Пример:

Стр = "Л = ru_RU; ДП = Истина";

Вал = "рубль,рубля,рублей,м,копейка,копейки,копеек,м,2"; Результат = ЧислоПрописью(12751.94, Стр, Вал); Сообщить(Результат);


Здесь: Л означает локализация (русская); ДП — выводить ли дробную часть (Истина значит выводить); параметры склонения мы присвоили переменной Вал. Результат выполнения: Двенадцать тысяч семьсот пятьдесят один рубль девяносто четыре копейки.


Прочие функции работы с данными

Мин. Определяет минимальное значение из заданных параметров.


Синтаксис:

Мин(Значение1, Значение2, ..., ЗначениеN);


Пример:

Сообщить(Мин(1,14,56,33,2,0,70));


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


Пример:

Сообщить(Мин("А","Б","И","Я"));


Результат выполнения: "А".


Макс. Определяет максимальное значение из заданных параметров.


Синтаксис:

Макс(Значение1, Значение2, ..., ЗначениеN);


Пример:

Сообщить(Макс(1,14,56,33,2,0,70));


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


Пример:

Сообщить(Макс("А","Б","И","Я"));


Результат выполнения: "Я".


Условия


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


Оператор ?


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


Синтаксис:

?(Условие, Выражение1, Выражение2);


Пример:

ПроверочнаяПеременная = 7;

БольшеДесятиИлиМеньше = ?(ПроверочнаяПеременная>10, "Да, больше 10","Нет, меньше или равно 10");

Сообщить(БольшеДесятиИлиМеньше);


В приведенном примере мы присваиваем переменной ПроверочнаяПеременнаязначение 7, а затем, сравнивая это значение с 10, присваиваем результат проверки другой переменной и выводим результат в виде сообщения. Поскольку 7 меньше 10, будет выведен ответ: "Нет, меньше или равно 10".


Пример:

Перем ПроверочнаяПеременная;

ВвестиЧисло(ПроверочнаяПеременная, "Введите число");

БольшеДесятиИлиМеньше = ?(ПроверочнаяПеременная>10, Истина, Ложь);

Сообщить(БольшеДесятиИлиМеньше);


Тот же самый пример, только немного усложненный. Пользователь не проверяет заданные значения, а предлагает пользователю ввести число самому и сравнивает с 10. Если больше 10 — Истина, если меньше либо равно 10 — Ложь. В зависимости от введенного пользователем числа обработка выдаст "Да"(если Истина) или "Нет" (если Ложь).


Оператор Если


Оператор условия управляет выполнением программы на основании истинности или ложности одного или более логических выражений.


Синтаксис:


Если ЛогическоеВыражение Тогда; ...

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

[ИначеЕсли ЛогическоеВыражение Тогда] ...

// Этот блок программного кода сработает, если первое условие // не выполняется, а это — выполняется

... [Иначе] ...

// Этот блок программного кода сработает, если ни одно условие // из приведенных выше не выполнилось

... КонецЕсли;


Задается условие, если оно истинно, то выполняется блок программного кода, идущий следом за Если...Тогда. Если выражение ложно, то блок игнорируется.

Могут быть заданы необязательные блоки ИначеЕсли и Иначе. Блоков ИначеЕсли может быть несколько. Такой блок будет выполнен в том случае, если первое условие Если, а также все условия ИначеЕсли, находящиеся выше, оказались ложными и не выполнились.

Блок программного кода, следующий после слова Иначе, выполняется в том случае, если ни одно из предшествующих условий не было выполнено: ни Если, ни ИначеЕсли.


Пример:

Перем ПроверочнаяПеременная;

ВвестиЧисло(ПроверочнаяПеременная, "Введите число");

Если ПроверочнаяПеременная>10 Тогда

Сообщить(Истина);

Иначе Сообщить(Ложь);

КонецЕсли;


Пример, аналогичный разобранному для оператора ?. Пользователь вводит число, после чего это число сравнивается с 10. Если число больше 10, выдается Истина, если меньше либо равно 10 — выдается Ложь.


Пример:


Перем ПервоеЧисло, ВтороеЧисло;


ВвестиЧисло(ПервоеЧисло, "Введите первое число"); ВвестиЧисло(ВтороеЧисло, "Введите второе число");


Если ПервоеЧисло > ВтороеЧисло Тогда

Сообщить("Первое число больше второго");

Если ПервоеЧисло >= ВтороеЧисло*10 Тогда

Сообщить("Причем намного больше");

ИначеЕсли

ПервоеЧисло >= ВтороеЧисло*3 Тогда

Сообщить("Ощутимо больше"); Иначе

Сообщить("Менее чем в три раза");

КонецЕсли;

ИначеЕсли ПервоеЧисло = ВтороеЧисло Тогда

Сообщить("Первое число равно второму");

ИначеЕсли ПервоеЧисло < ВтороеЧисло Тогда

Сообщить("Первое число меньше второго");

Если ПервоеЧисло ВтороеЧисло*10 Тогда

Сообщить("Причем намного меньше");

ИначеЕсли ПервоеЧисло <= ВтороеЧисло*3 Тогда

Сообщить("Ощутимо меньше"); Иначе

Сообщить("Менее чем в три раза");

КонецЕсли;

Иначе

//а без блока Иначе тут вообще можно обойтись КонецЕсли;


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

Такие вложенные друг в друга "матрешки" условий используются в практике программирования очень часто, причем их может быть и больше двух. В таких случаях для удобства чтения программного кода очень помогает форматирование кода. Для форматирования нужно выделить текст кода и нажать комбинацию клавиш <Alt>+<Shift>+<F>.


Пример:

Перем Номер;


ВвестиЧисло (Номер, "Введите номер дня недели");

Если Номер=1 Тогда Сообщить ("понедельник");

ИначеЕсли

Номер=2 Тогда Сообщить ("вторник");

ИначеЕсли

Номер=3 Тогда Сообщить ("среда");

ИначеЕсли

Номер=4 Тогда Сообщить ("четверг");

ИначеЕсли

Номер=5 Тогда Сообщить ("пятница");

ИначеЕсли

Номер=6 Тогда Сообщить ("суббота");

ИначеЕсли

Номер=7 Тогда Сообщить ("воскресенье");

Иначе Сообщить ("В неделе семь дней!");

КонецЕсли;

Если Номер=6 ИЛИ Номер=7 Тогда Сообщить ("это выходной день");

КонецЕсли;


В этом примере используется булева операция ИЛИ. Пользователь вводит номер дня недели, в зависимости от этого ему сообщается название дня недели.

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

Чтобы данное условие выполнилось, нужно чтобы номер дня был или 6 или 7.

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


Пример:

Перем Номер, СубботникВоскресник, Ответ;


ВвестиЧисло (Номер, "Введите номер дня недели");

Если Номер=1 Тогда Сообщить ("понедельник");

ИначеЕсли

Номер=2 Тогда Сообщить ("вторник");

ИначеЕсли

Номер=3 Тогда Сообщить ("среда");

ИначеЕсли

Номер=4 Тогда Сообщить ("четверг");

ИначеЕсли

Номер=5 Тогда Сообщить ("пятница");

ИначеЕсли

Номер=6 Тогда Сообщить ("суббота");

ИначеЕсли

Номер=7 Тогда Сообщить ("воскресенье");

Иначе Сообщить ("В неделе семь дней!");

КонецЕсли;

Если

Номер=6 ИЛИ Номер=7 Тогда Сообщить ("это выходной день");

КонецЕсли;

Ответ=Вопрос("Сегодня уборка территории?",РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда

СубботникВоскресник = "Да";

ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда СубботникВоскресник = "Нет";

КонецЕсли;

КонецЕсли;

Если (Номер=6 ИЛИ Номер=7) И (СубботникВоскресник = "Да") Тогда

Сообщить ("вернее БЫЛ БЫ выходной день, но мы выходим на уборку территории...");

КонецЕсли;


Этот пример отличается от предыдущего дополнительными условиями в случае, если день выходной. Если (Номер=6 ИЛИ Номер=7) И (СубботникВоскресник = "Да"), тогда выдается дополнительное сообщение. Такие условия с булевыми операциями И, ИЛИ и НЕ должны отделяться друг от друга скобками.



Циклы


Операторы циклов предназначены для циклического выполнения заданного программного кода, пока выполняются или пока не выполнятся определенные условия.


Оператор Для

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


Синтаксис:

Для Имяпеременной = Выражение1 По Выражение2

Цикл ... // программный код

[Продолжить;]

... // программный код

[Прервать;]

... // программный код

КонецЦикла;


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

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

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


Пример:

Перем Счетчик;

Для Счетчик = 1 По 100

Цикл

Сообщить("Значение счетчика = "+Счетчик);

КонецЦикла;


В данном примере перебираются элементы от 1 до 100, текущее значение присваивается переменной Счетчики выводится в виде сообщения. Цикл выполняется "по кругу" до тех пор, пока значение переменной Счетчик не дойдет до 100.


Пример:

Перем Счетчик;

Для Счетчик = 1 По 100

Цикл

Если Счетчик > 81 Тогда

Прервать;

КонецЕсли;

Сообщить("Значение счетчика = "+Счетчик);

КонецЦикла;


Тот же самый цикл, но выполнение его должно прерваться, когда значение счетчика превысит 81. Когда Счетчик будет равняться 82, сработает прерывание цикла. Сообщение о том, что Счетчик = 82, выведено уже не будет.


Оператор Для каждого

Данный оператор предназначен для циклического обхода коллекции значений.


Синтаксис:

Для каждого Переменная из КоллекцияЗначений

Цикл ... // программный код

[Продолжить;]

... // программный код

[Прервать;]

... // программный код

КонецЦикла;


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


Пример:

НДС = 1.2;

Для каждого Стр ИЗ СписокПлатежей Цикл

Стр.СуммаСНДС = Стр.СуммаБезНДС * НДС;

КонецЦикла;


В данном примере перебираются строки таблицы СписокПлатежей, в которую внесены суммы платежей без НДС и высчитываются суммы платежей с НДС.


Оператор Пока

Данный оператор предназначен для циклического повторения операторов, находящихся внутри языковой конструкции Цикл...КонецЦикла. Цикл выполняется, пока логическое выражение равно Истина.


Синтаксис:

Пока Выражение Цикл

... // программный код

[Продолжить;]

... // программный код

[Прервать;]

... // программный код

КонецЦикла;


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


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

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


Пример:

Счетчик = 1 ;

Пока Счетчик <= 100 Цикл

Сообщить("Значение счетчика = "+Счетчик);

Счетчик = Счетчик + 1;

КонецЦикла;


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


ПРИМЕЧАНИЕ:


Убывающий счетчик в цикле, пример:

НачЗначение = 10;

КонЗначение = 1;

Счетчик = НачЗначение;

Пока Счетчик >= КонЗначение Цикл

Счетчик = Счетчик - 1;

КонецЦикла;



Массивы


Массив — это пронумерованная коллекция значений произвольного типа. К элементу массива можно обращаться по его индексу. Представьте, например, школьную тетрадь "в клеточку". В таком случае тетрадь можно рассматривать как массив, а значение, записанное в каждую из клеточек, — как элемент массива. У каждой такой клеточки есть номер, называемый индексом. Массивы бывают одномерные и многомерные (состоящие из нескольких коллекций значений).

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


Добавить. Добавляет элемент в конец массива.


Синтаксис:

Добавить([Значение]);


Пример:

НашМассив = НовыйМассив();

НашМассив.Довавить("Новый элемент");

НашМассив.Довавить("Еще один элемент");

Сообщить(НашМассив[0]);


В этом примере мы создаем новый массив командой Новый, затем командой Добавить последовательно добавляем к массиву два значения строкового типа. После этого мы даем команду сообщить первый элемент массива. Обратите внимание, нумерация массива начинается с нуля. Поэтому, чтобы обратиться к значению "Наш новый элемент", мы должны обращаться к элементу НашМассив[0]. Номер элемента массива указывается в квадратных скобках [].

Вставить. Вставляет значение в массив по указанному индексу.


Синтаксис:

Вставить(Индекс[, Значение]);


Пример:

НашМассив = НовыйМассив();

НашМассив.Довавить("Новый элемент");

НашМассив.Довавить("Еще один элемент");

НашМассив.Вставить(0, "Измененный элемент");

Сообщить(НашМассив[0]);



Здесь мы создаем новый массив, добавляем в него элементы, а потом значение одного из элементов меняем на новое.


Количество. Определяет количество элементов в массиве.


Синтаксис:

Количество();


Пример:

НашМассив = НовыйМассив();

НашМассив.Довавить("Новый элемент");

НашМассив.Довавить("Еще один элемент");

Сообщить(НашМассив.Количество());


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


Найти. Выполняет поиск элемента в массиве.


Синтаксис:

Найти([Значение]);


Пример:

НашМассив = НовыйМассив();

НашМассив.Довавить("Новый элемент");

НашМассив.Довавить("Еще один элемент");

НашМассив.Довавить("Третий элемент");

Если НашМассив.Найти(" Еще один элемент") = 1 Тогда

Сообщить("Элемент найден");

Иначе

Сообщить("Нет такого элемента!"); КонецЕсли;


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


Удалить. Удаляет из массива значение с указанным индексом.


Синтаксис:

Удалить([Индекс]);


Пример:

НашМассив = НовыйМассив();

НашМассив.Довавить("Новый элемент");

НашМассив.Довавить("Еще один элемент");

НашМассив.Удалить[1];



Очистить. Удаляет все значения из массива.


Синтаксис:

Очистить();


Пример:

НашМассив.Очистить();




ВГраница. Получает наибольший индекс массива.


Синтаксис:

ВГраница();


Пример:

НашМассив = НовыйМассив();

НашМассив.Довавить("Новый элемент");

НашМассив.Довавить("Еще один элемент");

Сообщить(НашМассив.ВГраница);



При выполнении этот программный код выдаст результат 1(максимальный из имеющихся двух элементов с индексами 0 и 1).


Список значений


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

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


Добавить. Добавляет новый элемент в конец списка значений.


Синтаксис:

Добавить([Значение][, Представление][, Пометка][, Картинка]);


Здесь: Значение — значение, добавляемое в список значений; Представление — строковое представление значения; Пометка— определяет, добавляется ли значение с меткой или нет; Картинка — визуальное представление значения.

Все эти параметры не являются обязательным, даже Значение.


Пример:

СписокПокупок = Новый СписокЗначений;

СписокПокупок.Добавить("Хлеб");

СписокПокупок.Добавить("Мясо");

СписокПокупок.Добавить("Молоко");

СписокПокупок.Добавить("Масло");


Вставить. Вставляет новый элемент в список значений на позицию с указанным индексом.


Синтаксис:

Вставить(Индекс[Значение][, Представление][, Пометка][, Картинка]);


Здесь: Индекс — номер индекса, куда будем вставлять значение; Значение — значение, добавляемое в список значений; Представление — строковое представление значения; Пометка— определяет, добавляется ли значение с меткой или нет; Картинка— визуальное представление значения.

Из этих параметров полностью обязательным к использованию является только Индекс.


Количество. Получает количество элементов списка значений.


Синтаксис:

Количество();


Пример:

СписокПокупок = Новый СписокЗначений;

СписокПокупок.Добавить("Хлеб");

СписокПокупок.Добавить("Мясо");

СписокПокупок.Добавить("Молоко");

СписокПокупок.Добавить("Масло");

Сообщить(СписокПокупок.Количество());


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


Удалить. Удаляет элемент из списка значений.


Синтаксис:

Удалить(Индекс);


Пример:

СписокПокупок = Новый СписокЗначений;

СписокПокупок.Добавить("Хлеб");

СписокПокупок.Добавить("Мясо");

// индекс [0]

// индекс [1]

СписокПокупок.Добавить("Молоко"); // индекс [2]

СписокПокупок.Добавить("Масло");

СписокПокупок.Удалить("3");

// индекс [3]

// масло


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


Синтаксис:

Очистить();


НайтиПоЗначению. Осуществляет поиск значения элемента списка значений.


Синтаксис:

НайтиПоЗначению(Значение);


СортироватьПоЗначению. Сортирует список значений в порядке возрастания или убывания хранимых элементами значений.


Синтаксис:

СортироватьПоЗначению(Направление);


Пример:

СписокПокупок = Новый СписокЗначений;

СписокПокупок.Добавить("Хлеб");

СписокПокупок.Добавить("Мясо"); СписокПокупок.Добавить("Молоко");

СписокПокупок.Добавить("Масло");

СписокПокупок.Удалить("3");

СписокПокупок.СортироватьПоЗначению(НаправлениеСортировки.Возр); // Сортировка по возрастанию, при сортировке по убыванию было бы // СписокПокупок.СортироватьПоЗначению(НаправлениеСортировки.Убыв);



ВыбратьЭлемент. Вызывает окно для интерактивного выбора одного из элементов, входящих в список значений.


Синтаксис:

ВыбратьЭлемент([Заголовок1][, Элемент]);


Здесь: Заголовок — заголовок окна выбора; Элемент — элемент, на котором изначально позиционируется список значений при выборе.


Пример:

Перем Переменная;

СписокПокупок = Новый СписокЗначений;

СписокПокупок.Добавить("Хлеб");

СписокПокупок.Добавить("Мясо"); СписокПокупок.Добавить("Молоко");

СписокПокупок.Добавить("Масло");

СписокПокупок.Удалить("3");

СписокПокупок.СортироватьПоЗначению(НаправлениеСортировки.Возр);

Выбор = СписокПокупок.ВыбратьЭлемент("Выберите элемент списка", Переменная);

Сообщить(Выбор);


При выполнении этого программного кода будет выведен список значений, как на рис. 1.9.

Выбранное значение будет присвоено переменной Выбор и выведено в сообщении.


t1636539038al.png

Рис. 1.9. Выбор из списка значений



Таблица значений


Таблица значений — это не сохраняемый в базе данных объект, который позволяет строить динамически изменяемые наборы значений и манипулировать ими (добавлять, редактировать, сортировать и удалять элементы). Ограничений на типы хранимых значений нет, т. е. в одном списке значений могут храниться данные разных типов. В отличие от списка значений, в каждой строке которого записано одно значение (по сути, таблица из одного столбца), таблица значений имеет большое количество строк и столбцов.

Далее мы рассмотрим основные методы работы с таблицами значений.

Добавить. Добавляет строку в конец таблицы значений.


Синтаксис:

Добавить();


Пример:

ТабЗн = Новый ТаблицаЗначений; ТабЗн.Колонки.Добавить("Товар"); ТабЗн.Колонки.Добавить("Вес");


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Макароны весовые"; НоваяСтрока.Вес = 3;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Рис круглый";

НоваяСтрока. Вес = 5;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Крупа гречневая"; НоваяСтрока. Вес = 7;


Выбор = ТабЗн.ВыбратьСтроку("Выберите строку таблицы значений");

Сообщить(Выбор.Товар);


В этом примере мы создали новую таблицу значений, описали для нее два столбца — "Товар" и "Вес", а затем командой Добавить() добавили три новых строки и заполнили их значениями.

Далее, аналогично тому, что мы это делали со списком значений, мы выбираем строчку таблицы значений и выводим значение поля "Товар" для выбранной строки.


Вставить. Вставляет новый элемент в таблицу значений на позицию с указанным индексом.


Синтаксис:

Вставить(Индекс);


Пример:

ТабЗн = Новый ТаблицаЗначений; ТабЗн.Колонки.Добавить("Товар"); ТабЗн.Колонки.Добавить("Вес");


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Макароны весовые"; НоваяСтрока.Вес = 3;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Рис круглый";

НоваяСтрока. Вес = 5;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Крупа гречневая"; НоваяСтрока. Вес = 7;


НоваяСтрока = ТабЗн.Вставить(2); НоваяСтрока.Товар = "Крупа манная"; НоваяСтрока. Вес = 4;


Выбор = ТабЗн.ВыбратьСтроку("Выберите строку таблицы значений");

Сообщить(Выбор.Товар);


Здесь Индекс— номер индекса, по которому будем вставлять строку.

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


Количество. Возвращает количество строк таблицы значений.


Синтаксис:

Количество();


Пример:

ТабЗн = Новый ТаблицаЗначений; ТабЗн.Колонки.Добавить("Товар"); ТабЗн.Колонки.Добавить("Вес");


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Макароны весовые"; НоваяСтрока.Вес = 3;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Рис круглый";

НоваяСтрока. Вес = 5;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Крупа гречневая"; НоваяСтрока. Вес = 7;


НоваяСтрока = ТабЗн.Вставить(2); НоваяСтрока.Товар = "Крупа манная"; НоваяСтрока. Вес = 4;


Сообщить(ТабЗн.Количество());



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


Удалить. Удаляет строку таблицы значений.


Синтаксис:

Удалить(Строка);


Здесь Строка— номер строки таблицы значений, которую необходимо удалить.


Очистить. Удаляет все строки таблицы значений.


Синтаксис:

Очистить();


Пример:

ТабЗн.Очистить ();



Найти. Осуществляет поиск значения в указанных колонках таблицы значений.


Синтаксис:

Найти(Значение[, Колонки]);


Здесь: Значение — искомое значение; Колонки— колонки, в которых осуществляется поиск. Если параметра Колонки нет — поиск производится во всей таблице значений.


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


Синтаксис:

Сортировать(Колонки);


Пример:

ТабЗн = Новый ТаблицаЗначений; ТабЗн.Колонки.Добавить("Товар"); ТабЗн.Колонки.Добавить("Вес");


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Макароны весовые"; НоваяСтрока.Вес = 3;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Рис круглый";

НоваяСтрока. Вес = 5;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Крупа гречневая"; НоваяСтрока. Вес = 7;


НоваяСтрока = ТабЗн.Вставить(2); НоваяСтрока.Товар = "Крупа манная"; НоваяСтрока. Вес = 4;


ТабЗн.Сортировать("Вес Убыв");

Выбор = ТабЗн.ВыбратьСтроку("Выберите строку таблицы значений");


Сообщить(Выбор.Товар);



В этом примере мы сортируем таблицу значения по убыванию значений поля "Вес".


ВыбратьСтроку. Вызывает модальное диалоговое окно для интерактивного выбора строки из таблицы значений.


Синтаксис:

ВыбратьСтроку([Заголовок][, НачальнаяСтрока]);


Здесь: Заголовок — заголовок окна выбора; НачальнаяСтрока указывает строку таблицы значений, на которой будет установлен курсор при открытии окна выбора.


Пример:

Выбор = ТабЗн.ВыбратьСтроку("Выберите строку таблицы значений");


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


Синтаксис:

Свернуть(КолонкиГруппировки[, КолонкиСуммирования]);


Пример:

ТабЗн = Новый ТаблицаЗначений; ТабЗн.Колонки.Добавить("Товар");

ТабЗн.Колонки.Добавить("ПроизведеноУпаковок");

ТабЗн.Колонки.Добавить("Вес");


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Макароны весовые";

НоваяСтрока.ПроизведеноУпаковок = 10;

НоваяСтрока. Брак = 1;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Рис круглый";

НоваяСтрока.ПроизведеноУпаковок = 15;

НоваяСтрока. Брак = 2;


НоваяСтрока = ТабЗн.Добавить(); НоваяСтрока.Товар = "Крупа гречневая"; НоваяСтрока.ПроизведеноУпаковок = 114;

НоваяСтрока. Брак = 11;



НоваяСтрока = ТабЗн.Вставить(2); НоваяСтрока.Товар = "Крупа манная"; НоваяСтрока.ПроизведеноУпаковок = 114;

НоваяСтрока. Брак = 7;


НоваяСтрока = ТабЗн.Вставить(2); НоваяСтрока.Товар = "Макароны весовые"; НоваяСтрока.ПроизведеноУпаковок = 81;

НоваяСтрока. Брак = 9;


ТабЗн.Сортировать("Вес Убыв");

Выбор = ТабЗн.ВыбратьСтроку("Выберите строку таблицы значений");


ВыборДоСвертки = ТабЗн.ВыбратьСтроку("Выберите строку таблицы значений");

Сообщить("Товар: " + ВыборДоСвертки.Товар);


Сообщить("Упаковок: " + ВыборДоСвертки.ПроизведеноУпаковок); Сообщить("Брак: " + ВыборДоСвертки.Брак);


ТабЗн.Свернуть("Товар","ПроизведеноУпаковок, Брак");

ТабЗн.Сортировать("ПроизведеноУпаковок Возр");


Выбор = ТабЗн.ВыбратьСтроку("Выберите строку таблицы значений");

Сообщить("Товар: " + Выбор.Товар);

Сообщить("Всего упаковок: " + Выбор.ПроизведеноУпаковок);

Сообщить("Всего брака: " + Выбор.Брак);


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

На рис. 1.10 показана таблица значений до сворачивания.

t1636539038am.png

Рис. 1.10. Таблица значений до сворачивания


Исходная таблица значений была свернута и отсортирована, результат мы можем видеть на рис. 1.11.

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

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


Синтаксис:

Итог(Колонка);


Здесь Колонка— колонка таблицы значений, по которой производится суммирование.

t1636539038an.png

Рис. 1.11. Таблица значений после сворачивания и сортировки


Пример:

Сообщить(ТабЗн.Итог("Брак"));


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




Исключительные ситуации


Оператор Попытка

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


Синтаксис:

Попытка

... // операторы попытки Исключение

Исключение

... // операторы исключения

КонецПопытки;


Пример:

Перем ПервоеЧисло, ВтороеЧисло, ТретьеЧисло; ВвестиЧисло(ПервоеЧисло, "Введите первое число");

ВвестиЧисло(ВтороеЧисло, "Введите второе число");

Попытка

ТретьеЧисло = ПервоеЧисло/ВтороеЧисло; Сообщить("ПервоеЧисло/ВтороеЧисло = "+ТретьеЧисло);

Исключение

Сообщить("На 0 делить нельзя!");

КонецПопытки;



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


Работа с файлами

Язык программирования системы "1С: Предприятие" позволяет также работать с файловой системой Windows. Далее мы рассмотрим основные из этих команд.

СоздатьКаталог. Создает новый каталог (папку).


Синтаксис:

СоздатьКаталог(ИмяКаталога);


Пример:

СоздатьКаталог("D:\Работа");


Создает каталог Работа на диске D:.


НайтиФайлы. По заданной маске осуществляет поиск файлов и каталогов, расположенных в заданном каталоге.


Синтаксис:

НайтиФайлы(Путь[, Маска][, ИскатьВПодкаталогах]);


Пример:

Найдено = НайтиФайлы ("D:\Работа", "*.txt");


Параметр ИскатьВПодкаталогах имеет тип "Булево". Если он принимает значение Истина, то поиск производится также во вложенных подкаталогах текущего каталога.


КопироватьФайл. Копирует файл-источник в файл-приемник.


Синтаксис:

КопироватьФайл(ИмяФайлаИсточника, ИмяФайлаПриемника);


Пример:

КапироватьФайл ("D:\Работа", "C:\test.txt");

КапироватьФайл ("D:\Работа, "D:\Работа\тестовый.txt");\ test.txt "


В этом примере в каталоге исходного файла создается его копия с другим именем.


ПереместитьФайл. Выполняет перемещение указанного файла из адреса-источника по адресу-приемнику.


Синтаксис:

ПереместитьФайл(ИмяФайлаИсточника, ИмяФайлаПриемника);

Пример:

КапироватьФайл ("D:\Работа", "C:\test.txt");

ПереместитьФайл ("D:\Работа, "D:\test.txt");\ test.txt "



ПолучитьФайл. Получает файл и сохраняет его в файловой системе пользователя.


Синтаксис:

ПолучитьФайл(Адрес, [ИмяФайла] [, Интерактивно]);


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


Синтаксис:

РазделитьФайл(ИмяФайла, РазмерЧасти[, Путь]);


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


Пример:

ПереместитьФайл ("D:\Работа, 1024*2);\ test.txt "


В каталоге D:\Работа имеется файл test.txt объемом 12 Кбайт. Программный код данного примера делит его на части по 2 Кбайт ((1024 байт = 1 Кбайт) 2). В итоге создаются шесть файлов с именами test.txt .1, test.txt .2, test.txt .3, test.txt .4, test.txt .5 и test.txt .6.

ОбъединитьФайлы. Объединяет несколько файлов (частей) в один файл.


Синтаксис:

ОбъединитьФайлы(Шаблон, ИмяРезультирующегоФайла);

Пример:

ОбъединитьФайлы ("D:\Работа, "D:\Работа\собранный.txt");\ test.txt "



А этот пример противоположен предыдущему. Из полученных в этом примере шести файлов мы опять собираем один, используя в шаблоне символ *(любое количество любых символов). В результате получим файл собранный.txt размером 6 2 Кбайт = 12 Кбайт.


Обратите внимание на объем нового файла. Если у вас он получился в два раза больше, чем суммарный размер шести исходных файлов, это значит, что вы не удаляли из каталога файл test.txt из предыдущего примера. А ведь он тоже под-падает под шаблон test.txt .* и объединяется вместе с шестью остальными файлами.


УдалитьФайлы. Удаляет заданные файлы.


Синтаксис:

УдалитьФайлы(Путь[,Маска]);

Пример:

УдалитьФайлы ("D:\Работа");



Этот программный код удаляет наш каталог D:\Работа вместе со всем содержимым.


Справочная система и синтаксис-помощник


Кроме встроенного языка программирования система "1С: Предприятие" также располагает справочной системой, посвященной языку программирования и среде разработки.

Вызывается справочная система через пункт меню Справка в режиме Конфигуратора.

Окно справки выглядит так, как показано на рис. 1.12.

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

Также режим Конфигуратора располагает бесценным помощником программиста — синтаксис-помощником. Мы уже неоднократно упоминали этот полезный инструмент и видели, как он выглядит.



t1636539038ao.png

Рис. 1.12. Окно справки


Запускается синтаксис-помощник через пункт меню Справка | Синтаксис-помощник.

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

t1636539038ap.png

Рис. 1.13. Выбор нужного раздела в синтаксис-помощнике


Для многих команд список гораздо обширнее, например, для команды Выбрать.

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

На рис. 1.14 показан синтаксис-помощник после нажатия этой кнопки.

В верхней части окна расположено дерево команд встроенного языка, а в нижней части — описание выбранного оператора.

t1636539038aq.png

Рис. 1.14. Синтаксис-помощник


ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ


1. Данные типа строка заключаются в…?

2. Данные типа дата заключаются в …?

3. Верно ли утверждение что дробная часть от целой отделяется точкой?

4. Как на языке компьютера будет написано 31 декабря 1568 года?

5. Какой тип будет иметь результат следующего выражения: "123" +456

6. Какой тип будет иметь результат следующего выражения: 100 + "001"

7. Как вывести введенную пользователем дату в формате "8 марта 2012 г."?

8. Как программно создать список значений и наполнить его значениями?

9. Как теперь найти нужный элемент в списке значений и вывести его индекс?

10. Как создать массив и программно заполнить его данными?

11. Как теперь перебрать этот массив и показать, что в нем хранится?

12. Как создать копию массива со всеми данными?

13. Как программно создать таблицу значений и наполнить ее данными?

14. Как просмотреть записи таблицы значений?

15. Как удалить строку таблицы значений по номеру?

16. Как удалить строку колонку значений по номеру?

17. Как заполнить всю колонку таблицы значений нужным значением?

18. Как запрограммировать диалог выбора файла пользователем?



СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


1С: Программирование для начинающих. Детям и родителям, менеджерам и руководителям. Разработка в системе «1С: Предприятие 8.3» М. Г. Радченко [Электронный ресурс] – Режим доступа: https://its.1c.ru/db/pubprogforbeginners#content:3:hdoc

Разработка интерфейса прикладных решений на платформе «1С: Предприятие» В.А. Ажеронок, А.В. Островерх, М.Г. Радченко, Е.Ю. Хрусталева [Электронный ресурс] – Режим доступа: https://its.1c.ru/db/pubv8devui

«1C: Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы» Радченко М. Г. (фирма "1С"), Хрусталева Е. Ю. [Электронный ресурс] – Режим доступа: https://its.1c.ru/db/pubdevguide83

Разработка интерфейса прикладных решений на платформе "1С: Предприятие 8" В.А. Ажеронок, А.В. Островерх, М.Г. Радченко, Е.Ю. Хрусталева [Электронный ресурс] – Режим доступа: https://its.1c.ru/db/publab82021#content:31:hdoc.

Расширения конфигураций. Адаптация прикладных решений с сохранением поддержки в облаках и на земле. Разработка в системе 1С: Предприятие 8.3. Издание 2
продолжение названия Е. Ю. Хрусталева [Электронный ресурс] — Режим доступа: https://its.1c.ru/db/pubextensions#content:122:hdoc


61


Опубликовано


Комментарии (0)

Чтобы написать комментарий необходимо авторизоваться.