Не удается получить доступ к сайту
Проверьте, нет ли опечаток в имени хоста msdx.om.to.
- Если все правильно, воспользуйтесь инструментом "Диагностика сетей Windows".
Проверьте, нет ли опечаток в имени хоста msdx.om.to.
1С:ЭЛЕМЕНТ — облачный язык: код работает в браузере, типы обязательны (Текст: Строка), сравнение ==, блок закрывает одинокая ;.
1С:ПРЕДПРИЯТИЕ 8.3 — платформа на компьютер: код пишут в Конфигураторе, типы не пишутся, сравнение =, каждый оператор заканчивается ;.
Языки несовместимы: один и тот же приём пишется по-разному.
«1С:Предприятие.Элемент» — облачная технология фирмы «1С»: приложения разрабатывают прямо в браузере, ставить на компьютер ничего не нужно.
Программа — это метод Скрипт(): с него начинается выполнение кода. Текст выводится методом Консоль.Записать().
метод Скрипт()
Консоль.Записать("Привет, мир!")
;
Комментарии бывают строчные и блочные.
// строчный комментарий
/* блочный комментарий
на несколько строк */
метод Скрипт()
Консоль.Записать("Рабочий код!")
;
Вывод и ввод идут через тип Консоль.
Управляющие последовательности внутри строк: \н — перенос строки, \т — табуляция, \ — экранирование кавычек и обратного слэша.
метод Скрипт()
Консоль.Записать("Список:\н\т1. Первый\н\т2. Второй")
пер Имя = Консоль.СчитатьСтроку("Ваше имя: ")
Консоль.Записать("Привет, $Имя!")
;
метод — объявление метода. Деления на «процедуры» и «функции» нет: всегда метод.
метод Сумма(А: Число, Б: Число): Число
возврат А + Б
;
метод ВывестиСумму(А: Число, Б: Число): ничто
Консоль.Записать("Сумма $А и $Б равна ${А + Б}")
;
метод Скрипт()
пер Итог = Сумма(3, 5)
Консоль.Записать("Итог: $Итог")
ВывестиСумму(-1, 8)
;
Переменные объявляются внутри метода модификатором, именем и, при необходимости, типом.
конст ПИ = 3.14
метод АнализКруга(Р: Число)
пер Радиус: Число
Радиус = Р
знч Площадь = ПИ * Радиус * Радиус
Консоль.Записать("Площадь круга радиуса $Радиус равна $Площадь")
;
Значения вставляются в строку прямо в кавычках.
метод Скрипт()
пер Число = 1000000
пер Строка1 = "Число равно $Число"
пер Строка2 = "Оно же с разрядами: %Число"
пер Строка3 = "Сумма: ${Число + 1}, длина строки: ${Строка1.Длина()}"
Консоль.Записать(Строка1)
Консоль.Записать(Строка2)
Консоль.Записать(Строка3)
;
метод Скрипт()
пер А = 7
А += 3 // 10
пер Чётное = А % 2 == 0
пер Текст = Чётное ? "чётное" : "нечётное"
Консоль.Записать("Число $А — $Текст")
если не Чётное или А > 100
Консоль.Записать("Особый случай")
;
;
Инструкция если выполняет блок, когда выражение истинно. Блок условия закрывает одинокая ;.
метод ВДиапазоне(А: Число): Строка
если А == 0
возврат "равно нулю"
иначе если А < 10
возврат "меньше десяти"
иначе
возврат "десять или больше"
;
;
метод Скрипт()
пер Тип = (А > 0 и А < 100) ? "в диапазоне" : "вне диапазона"
;
выбор заменяет длинную цепочку если — иначе если: сравнивается одно выражение с несколькими вариантами.
метод ВремяГода(Месяц: Число): Строка
выбор Месяц
когда 12, 1, 2
возврат "Зима"
когда 3, 4, 5
возврат "Весна"
когда 6, 7, 8
возврат "Лето"
когда 9, 10, 11
возврат "Осень"
иначе
возврат "Неверный месяц"
;
;
метод Скрипт()
пер Месяцы = ["январь", "февраль", "март", "апрель"]
для Кв = 0 по Месяцы.Размер()-1 шаг 2
Консоль.Записать("Пара: ${Месяцы[Кв]}, ${Месяцы[Кв+1]}")
;
для М из Месяцы
если М.НачинаетсяС("ф")
продолжить
;
Консоль.Записать(М)
;
пер Счётчик = 0
пока Счётчик < 3
Счётчик += 1
;
;
Область видимости ограничивают: тело метода, блоки циклов и условий, блоки область и аннотации видимости.
метод Демонстрация()
пер ВиденВезде = "доступна во всём методе"
для Индекс = 1 по 3
пер ТолькоВЦикле = "видна только в цикле"
если Индекс == 2
пер ТолькоВУсловии = "видна только в этом условии"
Консоль.Записать(ТолькоВУсловии)
;
;
// ТолькоВЦикле = "нет" — ошибка: переменная уже вне области видимости
;
метод Скрипт()
пер Числа = [15, 3, 42, 8, 27]
если Числа.Пусто()
возврат
;
пер Отсорт = Числа.Сортировать()
пер Размер = Отсорт.Размер()
пер Среднее = Отсорт.Сумма() / Размер
Консоль.Записать("Мин: ${Отсорт[0]}, Макс: ${Отсорт[Размер-1]}, Среднее: $Среднее")
если Числа.Содержит(8)
Консоль.Записать("Восьмёрка есть")
;
;
Лямбда — короткая функция без имени. Коллекции умеют фильтровать, сортировать и преобразовывать по лямбде.
метод Скрипт()
пер Слова = ["айва", "банан", "апельсин", "яблоко", "киви", "ананас"]
пер Результат = Слова
.Фильтровать(Элемент -> Элемент.НачинаетсяС("а"))
.СортироватьПо(Элемент -> Элемент.Длина())
.Преобразовать(Элемент -> Элемент.ВВерхнийРегистр())
Консоль.Записать(Результат) // [АЙВА, АНАНАС, АПЕЛЬСИН]
пер Умножить = (А: Число, Б: Число) -> А * Б
пер Четное = (Ч: Число) -> Ч % 2 == 0
Консоль.Записать("5 * 3 = ${Умножить(5, 3)}, 8 чётное: ${Четное(8)}")
;
структура — собственный тип из нескольких значений, со своими полями и методами. Поля бывают обз знч (только чтение) и обз пер (изменяемые).
структура Прямоугольник
обз знч Х: Число
обз знч У: Число
метод Площадь(): Число
возврат Х * У
;
;
метод Скрипт()
пер Фигура = новый Прямоугольник(1, 2)
Консоль.Записать("Стороны (${Фигура.Х}, ${Фигура.У}), площадь ${Фигура.Площадь()}")
;
Экземпляр создаётся словом новый; поля и методы доступны через точку.
перечисление — набор именованных констант для ограниченного набора значений.
перечисление ОперационныеСистемы
Linux,
macOS,
Windows умолчание // значение по умолчанию
;
метод Скрипт()
пер ОС: ОперационныеСистемы
ОС = ОперационныеСистемы.Windows
Консоль.Записать("Используемая ОС: " + ОС)
;
Если значение может отсутствовать, тип помечают знаком вопроса: Число?. Отсутствие значения — это Неопределено.
метод Скрипт()
пер Заказ: Число? = 1200
пер Скидка: Число? = Неопределено
пер Номер = "ORD-" + Заказ!.ВСтроку()
пер Цена = Заказ * (100 - (Скидка ?? 5)) / 100
пер Статус = Скидка?.ВСтроку() ?? "скидки нет"
Консоль.Записать("$Номер, цена $Цена, $Статус")
;
метод Обработать(Параметр: Объект)
если Параметр это Строка
Консоль.Записать("Строка длиной ${(Параметр как Строка).Длина()}")
иначе если Параметр это Число
Консоль.Записать("Число: ${Параметр как Число}")
иначе
Консоль.Записать("Что-то другое")
;
;
Ошибки перехватывают блоки попытка — поймать — вконце, исключение выбрасывают словом выбросить.
исключение ОшибкаПроверкиДанных
обз пер КодОшибки: Число
;
метод ПроверитьПочту(Почта: Строка)
если не Почта.Содержит("@")
выбросить новый ОшибкаПроверкиДанных(
Описание = "Ошибка проверки данных",
КодОшибки = 1001)
;
;
метод Скрипт()
попытка
ПроверитьПочту("user.example.com")
поймать Искл: ОшибкаПроверкиДанных
Консоль.Записать("Код ${Искл.КодОшибки}: ${Искл.Описание}")
вконце
Консоль.Записать("Проверка завершена")
;
;
#требуется Константы.sbsl
@Глобально
конст КГ_В_ПУДЕ = 16.38
@Локально
метод ПереводВКилограммы(Пуды: Число): Число
возврат Пуды * Константы.КГ_В_ПУДЕ
;
метод Скрипт()
Консоль.Записать("${ПереводВКилограммы(10)} кг")
;
| C# | 1С:Элемент |
|---|---|
| void Main() | метод Скрипт() |
| void Метод(string text) | метод Метод(Текст: Строка) |
| int Сумма(int a, int b) | метод Сумма(А: Число, Б: Число): Число |
| return x; | возврат х |
| var / const | пер / знч (конст — вне метода) |
| if / else if / else | если / иначе если / иначе |
| switch / case | выбор / когда |
| for (int i = 0; i < n; i++) | для И = 0 по Конец |
| foreach (var x in list) | для Элемент из Коллекция |
| while, break, continue | пока, прервать, продолжить |
| string, double, bool, DateTime | Строка, Число, Булево, Дата |
| null | Неопределено |
| string? | Строка? |
| a ?? b | а ?? б |
| a?.B() | а?.Б() |
| x is string | х это Строка |
| (string)x | х как Строка |
| object / dynamic | Объект / неизвестно |
| $"{x} и {y}" | "$х и ${у}" |
| x => x * 2 | х -> х * 2 |
| try / catch / finally | попытка / поймать / вконце |
| throw new Exception("...") | выбросить новый Исключение("...") |
| class / public readonly | структура / обз знч |
| enum | перечисление |
| new Тип(...) | новый Тип(...) |
| { } блок | закрывает одинокая ; |
Всё вместе: структура, массив, лямбды, исключение и вывод.
структура Товар
обз знч Название: Строка
обз пер Цена: Число
;
исключение ОшибкаКаталога
обз пер Код: Число
;
метод СамаяДорогая(Товары: Массив<Товар>): Товар
если Товары.Пусто()
выбросить новый ОшибкаКаталога(Описание = "Каталог пуст", Код = 1)
;
пер Отсорт = Товары.СортироватьПо(Т -> Т.Цена)
возврат Отсорт[Отсорт.Размер() - 1]
;
метод Скрипт()
пер Каталог = <Товар>[
новый Товар("Хлеб", 45),
новый Товар("Сыр", 520),
новый Товар("Молоко", 89)
]
пер Дорогие = Каталог.Фильтровать(Т -> Т.Цена > 100)
Консоль.Записать("Дороже 100: ${Дорогие.Размер()} шт.")
попытка
пер Топ = СамаяДорогая(Каталог)
Консоль.Записать("Самое дорогое: ${Топ.Название} за ${Топ.Цена}")
поймать Искл: ОшибкаКаталога
Консоль.Записать("Ошибка ${Искл.Код}: ${Искл.Описание}")
;
;
1С:Предприятие 8.3 — платформа, которая ставится на компьютер. Код пишут в Конфигураторе, а выполняют в режиме 1С:Предприятие. Встроенный язык программирования по-английски называется BSL (1С:Enterprise Script Language).
Объявление процедуры и функции: открывает Процедура, закрывает КонецПроцедуры. Каждый оператор заканчивается точкой с запятой.
Процедура ПриветствиеНаСервере()
Имя = "студент";
Сообщить("Привет, " + Имя + "!");
КонецПроцедуры
#Область СлужебныеПроцедуры // расчёт входных документов #Если Сервер Тогда Процедура Пересчитать() КонецПроцедуры #КонецЕсли #КонецОбласти
Переменная не объявляется заранее — достаточно присвоить значение. Но у переменных есть область видимости: процедура видит только свои переменные.
Процедура Пример()
Строка1 = "текст"; // переменная создана присваиванием
Дата1 = Неопределено; // значение-заготовка
Массив1 = Новый Массив; // сложное значение создаётся словом Новый
КонецПроцедуры
Число = 7;
Число = Число + 3; // 10
Текст = ?(Число % 2 = 0, "чётное", "нечётное");
Сообщить("Число " + Число + " — " + Текст);
Если НЕ (Число > 100 ИЛИ Число = 0) Тогда
Сообщить("Обычное число");
КонецЕсли;
Условная конструкция открывается словом Если и закрывается КонецЕсли; после Тогда — первая строка тела.
Если А = 0 Тогда
Сообщить("равно нулю");
ИначеЕсли А < 10 Тогда
Сообщить("меньше десяти");
Иначе
Сообщить("десять или больше");
КонецЕсли;
Для Сч = 1 По 5 Цикл
Сообщить("Шаг " + Сч);
КонецЦикла;
Массив = Новый Массив;
Массив.Добавить("яблоко");
Массив.Добавить("банан");
Для Каждого Фрукт Из Массив Цикл
Если Фрукт = "банан" Тогда
Продолжить;
КонецЕсли;
Сообщить(Фрукт);
КонецЦикла;
Попыток = 0;
Пока Попыток < 3 Цикл
Попыток = Попыток + 1;
КонецЦикла;
Функция ПлощадьПрямоугольника(А, Б)
Возврат А * Б;
КонецФункции
Процедура ВывестиПлощадь(А, Б)
Сообщить("Площадь: " + ПлощадьПрямоугольника(А, Б));
КонецПроцедуры
Массив = Новый Массив;
Массив.Добавить("яблоко");
Сообщить(Массив.Количество()); // 1
Данные = Новый Структура("Имя, Возраст", "Иван", 20);
Сообщить(Данные.Имя + ", " + Данные.Возраст);
ТаблицаЗначений — таблица в памяти: колонки, строки, поиск и свёртка. СписокЗначений — список с отметками.
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Товар");
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Стр = ТЗ.Добавить();
Стр.Товар = "Хлеб";
Стр.Количество = 2;
Выборка = ТЗ.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Товар + " — " + Выборка.Количество);
КонецЦикла;
Отбор = Новый Структура("Товар", "Хлеб");
Сообщить(ТЗ.НайтиСтроки(Отбор).Количество());
Текст = " Иван ";
Имя = СокрЛП(Текст);
Части = СтрРазделить("хлеб,сыр,молоко", ",");
Сообщить(СтрШаблон("Привет, %1! Позиций: %2", Имя, Части.Количество()));
Сообщить(ВРег(Имя) + " | " + СтрЗаменить(Имя, "И", "А"));
Цена = 123.456; Сообщить(Окр(Цена, 2)); // 123.46 Сообщить(Окр(1.5, 0, РежимОкругления.Окр15как10)); // 1 Сообщить(Цел(123.9)); // 123 Сегодня = ТекущаяДата(); Сообщить(Формат(Сегодня, "ДФ=dd.MM.yyyy")); Сообщить(Формат(НачалоМесяца(Сегодня), "ДФ=dd.MM.yyyy"));
Запросы пишут на языке запросов — он похож на SQL, но с русскими ключевыми словами. Общий порядок разделов фиксирован.
ВЫБРАТЬ [РАЗЛИЧНЫЕ] [ПЕРВЫЕ 10]
Ссылка, Наименование КАК Имя
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Цена > &ПорогЦены
СГРУППИРОВАТЬ ПО
Наименование
ИМЕЮЩИЕ
СУММА(Цена) > 1000
УПОРЯДОЧИТЬ ПО
Наименование ВОЗР
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Наименование КАК Наименование,
| Товары.Цена КАК Цена
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Цена > &Порог
|УПОРЯДОЧИТЬ ПО
| Товары.Цена УБЫВ";
Запрос.УстановитьПараметр("Порог", 100);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование + " — " + Выборка.Цена);
КонецЦикла;
Ссылка = Справочники.Товары.НайтиПоНаименованию("Хлеб");
Если ЗначениеЗаполнено(Ссылка) Тогда
Сообщить(Ссылка.Цена);
КонецЕсли;
Новый = Справочники.Товары.СоздатьЭлемент();
Новый.Наименование = "Печенье";
Новый.Записать();
Сообщить("Создан: " + Новый.Ссылка);
Ошибки перехватывают блоки Попытка — Исключение — КонецПопытки. Свою ошибку создают словом ВызватьИсключение.
Попытка
Результат = 10 / 0;
Исключение
Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
&НаСервере
Функция СредняяЦенаТоваров()
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Товары.Наименование КАК Наименование,
| Товары.Цена КАК Цена
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Цена > 0");
Выборка = Запрос.Выполнить().Выбрать();
Сумма = 0;
Количество = 0;
Пока Выборка.Следующий() Цикл
Сумма = Сумма + Выборка.Цена;
Количество = Количество + 1;
КонецЦикла;
Если Количество = 0 Тогда
Возврат 0;
КонецЕсли;
Возврат Окр(Сумма / Количество, 2);
КонецФункции
&НаКлиенте
Процедура ПоказатьСреднее(Команда)
Сообщить("Средняя цена: " + СредняяЦенаТоваров());
КонецПроцедуры
Здесь собрано всё сразу: директива, функция, запрос с текстом, перебор выборки, условия, арифметика и вывод сообщения.