Встроенный язык программирования 1С:Предприятие | |
---|---|
Класс языка | процедурный, предметно-ориентированный |
Тип исполнения | предварительно компилируемый |
Появился в | 1996 |
Автор | 1С |
Выпуск | 1С:Предприятие 8.3.9 |
Тестовая версия | 1С:Предприятие 8.4.1 |
Система типов | динамическая типизация |
Основные реализации | 1С:Предприятие 7.0-8.x |
Сайт | 1c-dn.com |
Встроенный язык программирования 1С:Предприятие — язык программирования, который используется в семействе программ «1С:Предприятие». Данный язык является интерпретируемым языком высокого уровня. Интерпретация текста программного модуля в байт-код выполняется в момент обращения к этому модулю в процессе работы, таким образом обычно интерпретируется только часть текстов программных модулей (в версиях 7.7 и старше). Начиная с версии 8.2 модули компилируются.
Средой исполнения языка является программная платформа «1С:Предприятие». Визуальная среда разработки («Конфигуратор») является неотъемлемой частью пакета программ «1С:Предприятие».
Диалекты языка для платформ 1С седьмых версий (7.0, 7.5, 7.7) совместимы «снизу вверх» с незначительными исключениями. Языки для платформ 1С:7.х и 1С:8.х совместимы по основным операторам, но значительно отличаются в работе с прикладными объектами, вследствие чего перенос кода из 1С:7.х в 1С:8.х не имеет смысла.
Встроенный язык 1С:8 наиболее подобен по своему синтаксису языку Visual Basic.
Платформой предоставляется фиксированный набор базовых классов, ориентированных на решение типовых задач прикладной области:
- Константа,
- Справочник,
- Документ,
- Журнал документов,
- Перечисление,
- Отчёт,
- Обработка
- План счетов и др.
На основании базовых классов средствами визуального конфигурирования можно создавать любое количество порождённых классов (возможность определить новый класс программно — отсутствует). Допускается только одна явная ступень наследования классов. Как правило, объекты порождённых классов представляют собой записи (или некоторые наборы записей) в базе данных. Такие классы образуют «Дерево метаданных». В терминах встроенного языка программирования 1С такие классы называются объектами метаданных.
Основными видами объектов метаданных являются: Справочники, Документы, Отчёты, Обработки, Планы видов характеристик, Планы счетов, Планы видов расчёта, Регистры сведений, Регистры накопления, Регистры расчёта, Бизнес-процессы, Задачи.
Поддерживаются русский и английский синтаксис команд.
Проекты на встроенном языке 1С:Предприятия называются конфигурациями. Распространение (продажа) и внедрение таких конфигураций — это основная коммерческая деятельность фирм-партнёров 1С.
Рабочее название языка — «1Сик» («одинэсик») — очень быстро исчезло из официальных источников. Сейчас при упоминании этого языка в письменных документах нужно писать 1С Язык программирования [ источник? ] . Впрочем, часто этот язык называют «встроенный язык», в контексте обсуждения 1С:Предприятия.
Содержание
История развития [ править | править код ]
Объектно-ориентированные диалекты [ править | править код ]
Существует несколько дополнительных компонентов, расширяющих основные классы, их свободное добавление и изменение; фирмой-разработчиком они не рекомендованы к использованию. Это означает, что фирма 1С и её франчайзи отказываются от какой-либо технической поддержки конфигураций, использующих такие компоненты.
Так компонента 1С++ [1] расширяет язык 1С средствами полноценного объектно-ориентированного программирования. Её использование значительно расширяет возможности конфигурирования 1С. Это свободный программный продукт, распространяемый под лицензией GPL.
Более того — существует полностью свободный проект 2C [2] [3] , не использующий каких-либо проприетарных модулей фирмы 1С или других производителей. Это переписанное «с нуля» свободно распространяемое под лицензией GPL расширяемое ядро 1С-подобной системы, в котором даже такие «встроенные объекты» 1C как справочники и регистры — переопределяемые прикладным программистом классы.
Язык платформы 2С проектировался с целью максимальной преемственности с существующими для 1С наработками, и является расширением базового языка 1С. Путём написания соответствующих базовых классов язык 2С может быть приближен как к 1С 7.7, так и к 1С 8.0, хотя 2С:Платформа и не может обеспечить 100 % автоматическую переносимость конфигураций [4] из той или иной версии 1С:Предприятия.
Пример программы [ править | править код ]
Пример вывода сообщения в специальное окно для версии 8.3:
Язык 1С весьма прост в изучении по сравнению с любым другим языком программирования.
На территории России для многих большое значение имеет то, что можно писать код прямо на русском языке. «Можно» – значит не обязательно — можно писать и на английском, все операции и операторы имеют английский синоним.
Мы изучим язык 1С между делом сейчас, за пять минут.
Общие принципы программирования
Вне изучения языка, для тех кто не сталкивался с программированием, стоят общие принципы. Остальные — читайте дальше.
Программирование – это написание программного кода на программном языке.
Программный код – это последовательность команд (слов), которые поддерживает этот язык программирования.
Команды делятся на:
- Переменные
- Операторы
- Функции и процедуры.
Рассмотрим их в первом приближении.
Переменные
Есть цифра 12. Это значение. Сама по себе эта цифра нигде не хранится. Подули и ее уже нет 🙂 Она должна где-то храниться. Переменные – это место хранения значений. Переменная может называться любым словом.
Например:
Чтото = 12;
Чтото = Чтото + 10;
Сообщить(Чтото); //будет выведено «22»
Переменная, которая является частью объекта 1С (например поле справочника) и хранится в базе данных – называется реквизит.
В 1С переменные не типизированы, это значит, что одной и той же переменной сначала можно назначить значение одного типа (например цифру), а потом другого типа (например строку) и ошибки не будет.
Однако реквизиты объектов – типизированы. Но проверки на типы при этом не происходит. Мы можем попытаться назначить реквизиту значение не того типа. 1С попытается его преобразовать (например из цифры в строку), но если не получится, то значение реквизита останется пустым.
Длина строки в переменной – неограниченная. Длина строки реквизита – задается точно, но можно задать неограниченную (поставив длину строки 0).
По буквам к строке обращаться нельзя. Но можно искать или выделять части (Найти(), Лев(), Прав(), Сред()).
Сложные переменные
Если значение одно – это просто. А когда значений – много?
Это одна колонка Excel. В каждой ячейке – переменная. У нее одно название, так же как и у обычной переменной. А к ячейке можно обратиться по номеру.
Чтото = Новый Массив;
Чтото.Добавить(22); //в ячейке 1 значение 22
Чтото.Добавить(33); //в ячейке 2 значение 33
Сообщить(Чтото[0]); //выводим значение 1й ячейки
СписокЗначений
То же, что и массив, только к каждой ячейке можно подписать комментарий.
Чтото = Новый СписокЗначений;
Чтото.Добавить(22, «Это 22»); //в ячейке 1 значение 22
Чтото.Добавить(33, «Это 33»); //в ячейке 2 значение 33
Сообщить(Чтото.Получить(0).Значение); //выводим значение 1й ячейки
//а могли бы вывести и комментарий, тогда бы написали .Представление а не .Значение
ТаблицаЗначений
Это – уже полноценная страница Excel со строчками и колонками.
Как с ней работать – посмотрим в другом уроке.
ДеревоЗначений
Таблица представленная в виде дерева. Пример – окно конфигурации. Ветки, у каждой ветки может быть подчиненная ветка.
Обратите внимание – нумерация ячеек в 1С начинается не с 1, а с 0.
Если Вам необходимо вспомнить где происходит написание программы в 1С — мы обсуждали это в уроке про модули 1С.
Строки программы
Строки заканчиваются на точку с запятой «;».
Комментарий начинается с «//» — то есть эта строчка или часть строчки не будет выполняться и будет пропущена.
Значение строк нужно указывать в кавычках «Значение». Если нужно указать в значении кавычку, то она удваивается – «Значение ««а»»!».
Значение строки может быть с включением переноса строки, тогда в начале следующей строки должен стоять «|», например:
«Это начало
| и продолжение значения»
Если нужно указать специальные символы в значении строки, для этого есть специальный объект: «Символы.», например:
«Это начало» + Символы.ПС + «и продолжение значения» //ПС – перенос строки
Операторы
Это конструкции языка, которые заложены в нем самом и позволяют создавать простейшую последовательность выполнения программы.
Определенные строки кода будут выполнены если будет выполнено условие.
Чтото = 12;
Если Чтото 200 Тогда
Сообщить(«Условие выполнено»);
ИначеЕсли Чтото > 200 Тогда
Сообщить(«Условие не выполнено»);
Иначе
Сообщить(«Что-то еще»);
КонецЕсли;
Цикл
Определенные строки кода будут выполнены указанное количество раз.
//считаем по-одному
Для Чтото = 1 по 20 Цикл
Сообщить(Чтото);
КонецЦикла;
//считаем по-другому
Чтото = 1;
Пока Чтото
//если у нас список значений, то можно обойти каждое из его значений
Чтото = Новый СписокЗначений;
Для каждого ЗначениеСписка из Чтото Цикл
Сообщить(ЗначениеСписка.Значение);
КонецЦикла;
//обратите внимание, что «ЗначениеСписка» — это переменная, она может называться как угодно
Для того, чтоб прервать цикл, можно внутри написать команду «Прервать», для того чтобы прервать только одну итерацию цикла – команду «Продолжить».
Работа с объектами
Все объекты, с которыми мы работаем в языке – является полноценными объектами, то есть могут иметь свои данные и свои методы.
Объекты языка создаются с помощью команды «Новый», например:
Чтото = Новый Массив();
Чтото = Новый СписокЗначений();
И т.п.
Объекты 1С нельзя создать – доступ к ним можно получить с помощью так называемых менеджеров, названных соответственно по веткам конфигурации: Справочники, Документы и т.п. Методы менеджера можно расширять (см. урок по модулям 1С, модуль менеджера объекта).
Свои объекты программировать нельзя, как и наследовать или переопределять типовые.
Ошибки
Программист не всегда может догадаться, будет ли ошибка при выполнении определенной строчки кода.
Например если написать в коде внешней обработки:
Справочники.Номенклатура.НайтиПоКоду(«…») и открыть эту обработку в базе, где нет справочника с названием Номенклатура, то будет ошибка.
Чтобы этого не произошло, можно использовать следующую конструкцию:
Попытка
Справочники.Номенклатура.НайтиПоКоду(«…»);
Исключение
Чтото = ОписаниеОшибки();
Сообщить(«Ой-ой-ой»);
Сообщить(Чтото);
КонецПопытки;
Если в момент выполнения строчек программы между Попытка и Исключение возникнет ошибка, то выполнение будет прервано и перейдет на строчки между Исключение и КонецПопытки. Если не будет ошибки – эти строчки не будут выполнены.
Функция ОписаниеОшибки() работает только между Исключение и КонецПопытки и возвращает описание произошедшей ошибки.
Функции и Процедуры
Функции и Процедуры – это способ взять несколько строчек кода и назвать их каким-то словом, как переменную. Когда мы потом напишем ее название в другом месте – будет вызвана эта функция (то есть выполнены эти строки кода).
Мы неоднократно обсуждали методы объектов и обработчики событий. Функции и процедуры и являются этими методами и обработчиками.
//Программируем
Процедура КакоетоДействие()
Сообщить(«Чтото»);
КонецПроцедуры
Функция отличается от процедуры тем, что она может вернуть значение, которое было вычислено в результате выполнения этих строк когда.
Функция Посчитать(Переменная1, Переменная2)
Возврат Переменная1 + Переменная2;
КонецФункции
//Вызываем
Чтото = Посчитать(12, 20);
Сообщить(Чтото); //будет сообщение «32»
Как программировать
Программирование проводится в модуле. Соответственно Вы должны найти нужный модуль и написать там код программы.
- Создаем внешнюю обработку
- Создаем форму, добавляем на нее кнопку и делаем обработчик события – будет выполнен по открытию обработки в режиме Предприятие и по нажатию кнопки
- Или открываем модуль объекта обработка и пишем код там – будет выполнен сразу при открытии в режиме Предприятие.
Программированию конкретных объектов языка 1С мы коснемся в ближайших уроках.
Откройте ее в конфигураторе и Вы можете посмотреть программу или изменить ее.
Программный код написан в модуле объекта обработки.
Проголосовать за этот пост:
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
В шестом юните мы познакомились со сложными логическими выражениями, которые образуются из простых при помощи логических операций И, Или, Не.
В этом юните мы разберемся, зачем эти логические выражения вообще нужны и научимся применять их на практике.
А понадобятся они нам при изучении новой команды языка программирования 1С, которая называется Условная команда.
Простая условная команда
Если коротко, то правила и суть этой команды можно представить так:
- 1. Частью условной команды являются следующие три слова: Если, Тогда и КонецЕсли.
- 2. Между словами Если и Тогда всегда находится некоторое логическое выражение, которое принимает значение Истина или Ложь.
- 3. Между словами Тогда и КонецЕсли может находиться любое количество команд компьютеру (например, Сообщить, ВвестиЧисло, ОткрытьЗначение и другие).
- 4. И, наконец, главное: команды компьютеру, заключенные между словами Тогда и КонецЕсли выполняются только в том случае, если логическое выражение, заключенное между Если и Тогда принимает значение Истина.
Примеры использования условной команды с подробным объяснением.
Число От Пользователя = 0;
Между словами Тогда и КонецЕсли находится всего одна команда ОткрытьЗначение, которая, как следует из правила для условной команды, выполнится только в том случае, если логическое выражение окажется верным. А значит, сообщение для пользователя "Вы ввели отрицательное число" выведется только если значение, введенное пользователем, окажется отрицательным. Иначе ничего не выведется. Что и требуется логикой программы.
Если (ИмяПользователя = "Александр") Тогда ОткрытьЗначение("Вас зовут Александр!");
В этом примере мы вводим имя пользователя и, если оно равно "Александр", то выводим сообщение "Вас зовут Александр!".
ВвестиСтроку( Имя П ол ьзователя);
Если (ИмяПользователя <> "Александр") Тогда ОткрытьЗначение("Ваше имя точно не Александр!"); ОткрытьЗначение("На самом деле, вас зовут" + ИмяПользователя);
В этом примере мы вводим имя пользователя и, если оно не равно "Александр", то выводим сообщение "Ваше имя точно не Александр!" и следом выводим настоящее имя пользователя.
ЧислоОтПользователя = 0; ВвестиЧисло(ЧислоОтПользователя);
Если (ЧислоОтПользователя > 0) И (ЧислоОтПользователя Эти команды выполняются,
// если (логическое выражение)=Истина
Различные команды; КонецЕсли
// Эти команды выполняются,
// если (логическое выражение)=Ложь
Разберем расширенную форму условной команды на примере.
Число От Пользователя = 0;
Если (ЧислоОтПользователя >= 0) Тогда
ОткрытьЗначение("Вы ввели положительное число.");
ОткрытьЗначение("Вы ввели отрицательное число.");
Пользователь вводит число. И в случае, если введенное значение больше или равно нулю, программа выводит строку "Вы ввели положительное число", иначе "Вы ввели отрицательное число".
Задание №18. Напишите программу, которая вводит от пользователя два числа. Если первое число больше или равно второму, то выводит "Первое число больше или равно второму", иначе "Второе число больше первого ".
Если ПервоеЧисло >= ВтороеЧисло Тогда ОткрытьЗначение("Первое число больше или равно второму");
ОткрытьЗначение("Второе число больше первого");
Задание №19 Напишите программу, которая вводит от пользователя два числа. Если оба числа положительные, то выводит сумму этих чисел, иначе выводит произведение этих чисел.
ПервоеЧисло = 0; ВвестиЧисло( ПервоеЧисло);
Если ПервоеЧисло > 0 И ВтороеЧисло > 0 Тогда ОткрытьЗначение(ПервоеЧисло + ВтороеЧисло);
Более сложные конструкции условной команды представлены ниже в виде следующих программ:
Пример сложной конструкции "Если" в 1с
Если А>Б Тогда // блок операторов Иначе Если Б>С Тогда // блок операторов Иначе
// блок операторов КонецЕсли;
Конструкция тернарной команды "?" в 1с
Тернарная команда содержит три параметра. Первый параметр — логическое выражение. На втором и третьем местах — выражения любых типов. Выполнение данной команды начинается с вычисления логического выражения. Если результат вычисления — "Истина", то далее вычисляется выражение 1, в противном случае — выражение 2).