Не удается получить доступ к сайту

Проверьте, нет ли опечаток в имени хоста msdx.om.to.

DNS_PROBE_FINISHED_NXDOMAIN
Проверьте, нет ли опечаток в имени хоста msdx.om.to.
MSD BIOS SETUP UTILITY v2.02
CPU: — MEM: — DISPLAY: — SIGNAL: ▓▒░ DEGRADED  
MAIN MENU
1C SYNTAX — два каталога по языкам «1С»: 1С:Элемент (новый, облачный) и 1С:Предприятие 8.3 (классика). Открывается нажатием или Enter.
↑↓ Select Enter Open F10 Save & Exit Esc Exit © MSD 2026 █
MSD BIOS SETUP UTILITY 1C:SYNTAX — SELECT LANGUAGE
CPU: — MEM: — DISPLAY: — SIGNAL: ▓▒░ DEGRADED  
CATALOGS
Два каталога по языкам «1С». Открывается нажатием или клавишей Enter, назад — Esc.
DIFFERENCES

1С:ЭЛЕМЕНТ — облачный язык: код работает в браузере, типы обязательны (Текст: Строка), сравнение ==, блок закрывает одинокая ;.

1С:ПРЕДПРИЯТИЕ 8.3 — платформа на компьютер: код пишут в Конфигураторе, типы не пишутся, сравнение =, каждый оператор заканчивается ;.

Языки несовместимы: один и тот же приём пишется по-разному.

↑↓ Select Enter Open Esc Back © MSD 2026 █
MSD BIOS SETUP UTILITY 1C:SYNTAX
CPU: — MEM: — DISPLAY: — SIGNAL: ▓▒░ DEGRADED  

Встроенный язык 1С:Предприятие 8.3 — руководство

1. Что такое «Элемент»

«1С:Предприятие.Элемент» — облачная технология фирмы «1С»: приложения разрабатывают прямо в браузере, ставить на компьютер ничего не нужно.

  • среда разработки — 1cmycloud.com → «Попробовать»: редактор кода, отладчик и запуск приложения по клику;
  • регистрация по заявке: ФИО, e-mail, телефон и пара слов о задаче — приглашение приходит на телефон;
  • бесплатные тарифы: «Разработка» (10 приложений в режиме разработки) и «Персональный» (1 приложение);
  • язык описан в официальной документации: 1cmycloud.com/console/help/lang/9.0/docs/topics/basic-syntax/
  • файлы скриптов имеют расширение .sbsl.

2. Первая программа

Программа — это метод Скрипт(): с него начинается выполнение кода. Текст выводится методом Консоль.Записать().

метод Скрипт()
    Консоль.Записать("Привет, мир!")
;
  • ключевые слова пишутся только строчными буквами: метод, возврат, если;
  • текст — в двойных кавычках;
  • одинокая ; на своей строке закрывает метод — это } из C#;
  • в конце обычных строк ; не ставят.

3. Комментарии и работа с консолью

Комментарии бывают строчные и блочные.

// строчный комментарий
/* блочный комментарий
   на несколько строк */
метод Скрипт()
    Консоль.Записать("Рабочий код!")
;

Вывод и ввод идут через тип Консоль.

  • Консоль.Записать(Значение) — вывод в поток вывода;
  • Консоль.СчитатьСимвол() — один символ;
  • Консоль.СчитатьСтроку("Подсказка: ") — строка, аргумент добавляется как подсказка ввода;
  • Консоль.СчитатьЧисло() — число (формат зависит от локали);
  • Консоль.СчитатьБулево() — Истина / Ложь / True / False (регистр учитывается);
  • Консоль.СчитатьПароль() — строка без отображения вводимых символов.

Управляющие последовательности внутри строк: \н — перенос строки, \т — табуляция, \ — экранирование кавычек и обратного слэша.

метод Скрипт()
    Консоль.Записать("Список:\н\т1. Первый\н\т2. Второй")
    пер Имя = Консоль.СчитатьСтроку("Ваше имя: ")
    Консоль.Записать("Привет, $Имя!")
;

4. Методы

метод — объявление метода. Деления на «процедуры» и «функции» нет: всегда метод.

  • параметр пишется как Имя: Тип — тип обязателен;
  • возвращаемый тип указывают после скобки: метод Сумма(А: Число, Б: Число): Число;
  • значение возвращает возврат; если ничего не возвращается — тип можно не писать или написать : ничто;
  • аргументы передаются только по значению; перегрузка методов есть;
  • метод может быть объявлен и внутри типа: там он называется так же и имеет доступ к полям типа.
метод Сумма(А: Число, Б: Число): Число
    возврат А + Б
;

метод ВывестиСумму(А: Число, Б: Число): ничто
    Консоль.Записать("Сумма $А и $Б равна ${А + Б}")
;

метод Скрипт()
    пер Итог = Сумма(3, 5)
    Консоль.Записать("Итог: $Итог")
    ВывестиСумму(-1, 8)
;

5. Переменные и типы

Переменные объявляются внутри метода модификатором, именем и, при необходимости, типом.

  • пер — переменная для чтения и записи (аналог var);
  • знч — только для чтения (аналог const);
  • исп — только для чтения; при выходе из области видимости для значения вызывается Закрыть() (файлы, потоки);
  • конст — константа: объявляется вне метода, изменять нельзя;
  • тип выводится автоматически из значения; если объявление без значения — тип указывают явно (пер Радиус: Число);
  • типизация статическая: типы параметров и возврата обязательны, «любой тип» — это неизвестно.
конст ПИ = 3.14

метод АнализКруга(Р: Число)
    пер Радиус: Число
    Радиус = Р
    знч Площадь = ПИ * Радиус * Радиус
    Консоль.Записать("Площадь круга радиуса $Радиус равна $Площадь")
;

6. Строковые шаблоны

Значения вставляются в строку прямо в кавычках.

  • $Имя — простая переменная;
  • ${выражение} — любое выражение или вызов метода;
  • %Имя — форматированный вывод значения (числа — с разделителями разрядов).
метод Скрипт()
    пер Число = 1000000
    пер Строка1 = "Число равно $Число"
    пер Строка2 = "Оно же с разрядами: %Число"
    пер Строка3 = "Сумма: ${Число + 1}, длина строки: ${Строка1.Длина()}"
    Консоль.Записать(Строка1)
    Консоль.Записать(Строка2)
    Консоль.Записать(Строка3)
;

7. Операторы и знаки

  • арифметика: + - * / % (остаток от деления), приоритет задаётся скобками;
  • сравнение: == != > < >= <= — равенство это два знака (в классике 8.3 был один);
  • логика: и или не — словами, как в классике;
  • тернарный оператор: Условие ? Значение1 : Значение2;
  • сокращённая запись: +=, -= и другие;
  • склейка строк — тем же плюсом, при склейке значения приводятся к строке.
метод Скрипт()
    пер А = 7
    А += 3                      // 10
    пер Чётное = А % 2 == 0
    пер Текст = Чётное ? "чётное" : "нечётное"
    Консоль.Записать("Число $А — $Текст")
    если не Чётное или А > 100
        Консоль.Записать("Особый случай")
    ;
;

8. Условия

Инструкция если выполняет блок, когда выражение истинно. Блок условия закрывает одинокая ;.

метод ВДиапазоне(А: Число): Строка
    если А == 0
        возврат "равно нулю"
    иначе если А < 10
        возврат "меньше десяти"
    иначе
        возврат "десять или больше"
    ;
;

метод Скрипт()
    пер Тип = (А > 0 и А < 100) ? "в диапазоне" : "вне диапазона"
;
  • ветки иначе если и иначе необязательны;
  • условия вкладываются друг в друга на любую глубину;
  • после блока ставится ; — это «закрывающая скобка» условия.

9. Выбор

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

метод ВремяГода(Месяц: Число): Строка
    выбор Месяц
    когда 12, 1, 2
        возврат "Зима"
    когда 3, 4, 5
        возврат "Весна"
    когда 6, 7, 8
        возврат "Лето"
    когда 9, 10, 11
        возврат "Осень"
    иначе
        возврат "Неверный месяц"
    ;
;

10. Циклы

  • для И = 0 по Конец — счётный цикл, есть шаг: для Кв = 0 по 11 шаг 3;
  • для Элемент из Коллекция — перебор коллекции (как foreach);
  • пока Условие — цикл с предусловием;
  • прервать — досрочный выход, продолжить — переход к следующей итерации.
метод Скрипт()
    пер Месяцы = ["январь", "февраль", "март", "апрель"]
    для Кв = 0 по Месяцы.Размер()-1 шаг 2
        Консоль.Записать("Пара: ${Месяцы[Кв]}, ${Месяцы[Кв+1]}")
    ;

    для М из Месяцы
        если М.НачинаетсяС("ф")
            продолжить
        ;
        Консоль.Записать(М)
    ;

    пер Счётчик = 0
    пока Счётчик < 3
        Счётчик += 1
    ;
;

11. Области видимости

Область видимости ограничивают: тело метода, блоки циклов и условий, блоки область и аннотации видимости.

метод Демонстрация()
    пер ВиденВезде = "доступна во всём методе"
    для Индекс = 1 по 3
        пер ТолькоВЦикле = "видна только в цикле"
        если Индекс == 2
            пер ТолькоВУсловии = "видна только в этом условии"
            Консоль.Записать(ТолькоВУсловии)
        ;
    ;
    // ТолькоВЦикле = "нет" — ошибка: переменная уже вне области видимости
;

12. Коллекции и массивы

  • массив задаётся литералом [1, 2, 3], типизированный — <Число>[1, 2, 3];
  • нумерация с нуля: Массив[0];
  • Размер() — количество элементов, Пусто() — проверка на пустоту;
  • Содержит(Значение) — проверка наличия элемента;
  • Сортировать(), Сумма() — сортировка и сумма;
  • перебор — циклом для … из.
метод Скрипт()
    пер Числа = [15, 3, 42, 8, 27]
    если Числа.Пусто()
        возврат
    ;
    пер Отсорт = Числа.Сортировать()
    пер Размер = Отсорт.Размер()
    пер Среднее = Отсорт.Сумма() / Размер
    Консоль.Записать("Мин: ${Отсорт[0]}, Макс: ${Отсорт[Размер-1]}, Среднее: $Среднее")
    если Числа.Содержит(8)
        Консоль.Записать("Восьмёрка есть")
    ;
;

13. Лямбды и обработка коллекций

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

  • Фильтровать(Условие) — оставить подходящие элементы;
  • Преобразовать(Функция) — получить новую коллекцию из результатов;
  • СортироватьПо(Функция) — сортировка по вычисленному ключу;
  • запись лямбды: (Имя: Тип) -> выражение или Элемент -> выражение.
метод Скрипт()
    пер Слова = ["айва", "банан", "апельсин", "яблоко", "киви", "ананас"]
    пер Результат = Слова
        .Фильтровать(Элемент -> Элемент.НачинаетсяС("а"))
        .СортироватьПо(Элемент -> Элемент.Длина())
        .Преобразовать(Элемент -> Элемент.ВВерхнийРегистр())
    Консоль.Записать(Результат)     // [АЙВА, АНАНАС, АПЕЛЬСИН]

    пер Умножить = (А: Число, Б: Число) -> А * Б
    пер Четное = (Ч: Число) -> Ч % 2 == 0
    Консоль.Записать("5 * 3 = ${Умножить(5, 3)}, 8 чётное: ${Четное(8)}")
;

14. Структуры

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

структура Прямоугольник
    обз знч Х: Число
    обз знч У: Число

    метод Площадь(): Число
        возврат Х * У
    ;
;

метод Скрипт()
    пер Фигура = новый Прямоугольник(1, 2)
    Консоль.Записать("Стороны (${Фигура.Х}, ${Фигура.У}), площадь ${Фигура.Площадь()}")
;

Экземпляр создаётся словом новый; поля и методы доступны через точку.

15. Перечисления

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

перечисление ОперационныеСистемы
    Linux,
    macOS,
    Windows умолчание      // значение по умолчанию
;

метод Скрипт()
    пер ОС: ОперационныеСистемы
    ОС = ОперационныеСистемы.Windows
    Консоль.Записать("Используемая ОС: " + ОС)
;

16. Обнуляемые значения

Если значение может отсутствовать, тип помечают знаком вопроса: Число?. Отсутствие значения — это Неопределено.

  • ?. — безопасный доступ: если слева Неопределено, выражение не падает;
  • ?? — значение по умолчанию: подставляется, когда слева Неопределено;
  • ! — настойчивая операция: гарантия, что значение не Неопределено;
  • перед использованием обнуляемого значения его всегда сравнивают с Неопределено.
метод Скрипт()
    пер Заказ: Число? = 1200
    пер Скидка: Число? = Неопределено

    пер Номер = "ORD-" + Заказ!.ВСтроку()
    пер Цена = Заказ * (100 - (Скидка ?? 5)) / 100
    пер Статус = Скидка?.ВСтроку() ?? "скидки нет"
    Консоль.Записать("$Номер, цена $Цена, $Статус")
;

17. Проверка и приведение типов

  • это — проверка типа во время выполнения: если Объект это Строка;
  • как — приведение к типу после проверки: Объект как Строка;
  • работает и с параметризованными коллекциями: Массив это Массив<Число>;
  • Объект — базовый тип для параметра «что угодно», неизвестно — «тип не важен»;
  • составной тип пишется через вертикальную черту: Строка|Число.
метод Обработать(Параметр: Объект)
    если Параметр это Строка
        Консоль.Записать("Строка длиной ${(Параметр как Строка).Длина()}")
    иначе если Параметр это Число
        Консоль.Записать("Число: ${Параметр как Число}")
    иначе
        Консоль.Записать("Что-то другое")
    ;
;

18. Исключения

Ошибки перехватывают блоки попытка — поймать — вконце, исключение выбрасывают словом выбросить.

  • попытка … поймать … вконце ; — вконце выполняется всегда;
  • у пойманного исключения есть Описание и (у своих исключений) свои поля;
  • свой тип ошибки объявляется словом исключение, поля — обычные обз пер;
  • создание исключения — выбросить новый ОшибкаПроверкиДанных(Описание = "...", КодОшибки = 1001).
исключение ОшибкаПроверкиДанных
    обз пер КодОшибки: Число
;

метод ПроверитьПочту(Почта: Строка)
    если не Почта.Содержит("@")
        выбросить новый ОшибкаПроверкиДанных(
            Описание = "Ошибка проверки данных",
            КодОшибки = 1001)
    ;
;

метод Скрипт()
    попытка
        ПроверитьПочту("user.example.com")
    поймать Искл: ОшибкаПроверкиДанных
        Консоль.Записать("Код ${Искл.КодОшибки}: ${Искл.Описание}")
    вконце
        Консоль.Записать("Проверка завершена")
    ;
;

19. Модули, импорт, аннотации

  • #требуется ./Логирование.sbsl — подключение другого скрипта; все подключения объявляют в начале файла;
  • путь можно указывать относительный или абсолютный;
  • @Глобально — элемент виден в подключающих скриптах;
  • @Локально — элемент виден только в своём скрипте;
  • @ПроверятьИспользованиеЗначения — компилятор требует использовать возвращённое значение.
#требуется Константы.sbsl

@Глобально
конст КГ_В_ПУДЕ = 16.38

@Локально
метод ПереводВКилограммы(Пуды: Число): Число
    возврат Пуды * Константы.КГ_В_ПУДЕ
;

метод Скрипт()
    Консоль.Записать("${ПереводВКилограммы(10)} кг")
;

20. C# → Элемент

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 Тип(...)новый Тип(...)
{ } блокзакрывает одинокая ;

21. Мини-программа целиком

Всё вместе: структура, массив, лямбды, исключение и вывод.

структура Товар
    обз знч Название: Строка
    обз пер Цена: Число
;

исключение ОшибкаКаталога
    обз пер Код: Число
;

метод СамаяДорогая(Товары: Массив<Товар>): Товар
    если Товары.Пусто()
        выбросить новый ОшибкаКаталога(Описание = "Каталог пуст", Код = 1)
    ;
    пер Отсорт = Товары.СортироватьПо(Т -> Т.Цена)
    возврат Отсорт[Отсорт.Размер() - 1]
;

метод Скрипт()
    пер Каталог = <Товар>[
        новый Товар("Хлеб", 45),
        новый Товар("Сыр", 520),
        новый Товар("Молоко", 89)
    ]
    пер Дорогие = Каталог.Фильтровать(Т -> Т.Цена > 100)
    Консоль.Записать("Дороже 100: ${Дорогие.Размер()} шт.")
    попытка
        пер Топ = СамаяДорогая(Каталог)
        Консоль.Записать("Самое дорогое: ${Топ.Название} за ${Топ.Цена}")
    поймать Искл: ОшибкаКаталога
        Консоль.Записать("Ошибка ${Искл.Код}: ${Искл.Описание}")
    ;
;

1. Что за язык и где писать код

1С:Предприятие 8.3 — платформа, которая ставится на компьютер. Код пишут в Конфигураторе, а выполняют в режиме 1С:Предприятие. Встроенный язык программирования по-английски называется BSL (1С:Enterprise Script Language).

  • код живёт в модулях: модуль формы, модуль объекта документа или справочника, модуль менеджера, общие модули;
  • имя модуля (имя формы, объекта) видно в дереве конфигурации, там же открывается двойным щелчком;
  • часть кода на форме выполняется на клиенте (директива &НаКлиенте), часть — на сервере (&НаСервере); переменные клиента и сервера не видны друг другу;
  • быстрый способ посмотреть результат — Сообщить("текст"): вывод уходит в служебные сообщения;
  • для обучения есть бесплатная версия платформы: online.1c.ru/catalog/free/28765768/ (она же на карточках /28766057/ для macOS и /28766016/ для Linux).

2. Первая программа

Объявление процедуры и функции: открывает Процедура, закрывает КонецПроцедуры. Каждый оператор заканчивается точкой с запятой.

Процедура ПриветствиеНаСервере()
    Имя = "студент";
    Сообщить("Привет, " + Имя + "!");
КонецПроцедуры
  • перед процедурой пишут директиву: &НаКлиенте или &НаСервере;
  • точка с запятой нужна после каждого оператора, а не на отдельной строке;
  • ключевые слова нечувствительны к регистру: Процедура и процедура — одно и то же (в «Элементе» — нельзя).

3. Комментарии, директивы препроцессора и области

  • // — комментарий до конца строки, других видов нет;
  • #Если Условие … #КонецЕсли — участок кода включается или исключается при загрузке конфигурации (видны служебные переменные вроде Сервер, Клиент, ТонкийКлиент, МобильноеПриложениеКлиент);
  • #Область Имя … #КонецОбласти — сворачиваемая группа в редакторе, на работу кода не влияет.
#Область СлужебныеПроцедуры
// расчёт входных документов
#Если Сервер Тогда
Процедура Пересчитать()
КонецПроцедуры
#КонецЕсли
#КонецОбласти

4. Типы данных

  • Число — например 42, 3.14, 100.50;
  • Строка — текст в двойных кавычках, склеивается знаком +;
  • Булево — Истина и Ложь;
  • Дата — литерал пишется цифрами в порядке год-месяц-день: '20261231' — это 31 декабря 2026 года;
  • Неопределено — значение не задано;
  • Null — «нет данных» в базе данных (отличается от Неопределено);
  • тип переменной менять можно: А = 5; А = "пять"; — язык «динамический» (в «Элементе» типы статические).

5. Переменные и присваивание

Переменная не объявляется заранее — достаточно присвоить значение. Но у переменных есть область видимости: процедура видит только свои переменные.

Процедура Пример()
    Строка1 = "текст";            // переменная создана присваиванием
    Дата1 = Неопределено;         // значение-заготовка
    Массив1 = Новый Массив;       // сложное значение создаётся словом Новый
КонецПроцедуры
  • Новый Массив, Новый Структура, Новый ТаблицаЗначений — создание сложных значений (в «Элементе» есть ключевое слово новый и литералы);
  • переменные, объявленные в модуле через Перем, видны всем процедурам этого модуля: Перем Счётчик;
  • форма может объявлять &НаКлиенте Перем и &НаСервере Перем.

6. Операторы и выражения

  • арифметика: + - * / %; % — остаток от деления: 10 % 3 = 1;
  • сравнение: = <> > < >= <= — равенство это один знак (в «Элементе» — ==);
  • логика: И ИЛИ НЕ словами;
  • тернарный оператор — функция: ?(Условие, ЗначениеЕслиИстина, ЗначениеЕслиЛожь);
  • приоритет задают скобками;
  • склейка строк — +; если значение не строка, платформа сама приводит его к тексту.
Число = 7;
Число = Число + 3;                       // 10
Текст = ?(Число % 2 = 0, "чётное", "нечётное");
Сообщить("Число " + Число + " — " + Текст);
Если НЕ (Число > 100 ИЛИ Число = 0) Тогда
    Сообщить("Обычное число");
КонецЕсли;

7. Условия

Условная конструкция открывается словом Если и закрывается КонецЕсли; после Тогда — первая строка тела.

Если А = 0 Тогда
    Сообщить("равно нулю");
ИначеЕсли А < 10 Тогда
    Сообщить("меньше десяти");
Иначе
    Сообщить("десять или больше");
КонецЕсли;
  • ветки ИначеЕсли и Иначе необязательны;
  • вложенность — любая;
  • отдельной конструкции «выбор» в коде нет: её роль играют цепочка ИначеЕсли и функция ?(…);
  • короткая замена ветвления — функция ?(Условие, Значение1, Значение2).

8. Циклы

  • Для И = 1 По Конец Цикл … КонецЦикла; — счётный цикл (шаг всегда 1);
  • Для Каждого Элемент Из Коллекция Цикл … КонецЦикла; — перебор коллекции;
  • Пока Условие Цикл … КонецЦикла; — цикл с предусловием;
  • Прервать — выйти из цикла, Продолжить — перейти к следующей итерации.
Для Сч = 1 По 5 Цикл
    Сообщить("Шаг " + Сч);
КонецЦикла;

Массив = Новый Массив;
Массив.Добавить("яблоко");
Массив.Добавить("банан");
Для Каждого Фрукт Из Массив Цикл
    Если Фрукт = "банан" Тогда
        Продолжить;
    КонецЕсли;
    Сообщить(Фрукт);
КонецЦикла;

Попыток = 0;
Пока Попыток < 3 Цикл
    Попыток = Попыток + 1;
КонецЦикла;

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

  • Процедура ничего не возвращает, Функция возвращает значение словом Возврат;
  • параметры перечисляют через запятую; у параметра может быть значение по умолчанию: Функция Округлить(Число, Знаков = 2);
  • по умолчанию параметр передаётся по ссылке: изменение параметра внутри метода меняет саму переменную в месте вызова;
  • слово Знач перед именем параметра в объявлении передаёт его по значению — метод работает с копией: Процедура Увеличить(Знач Число);
  • вызов метода тоже пишется со скобками: Площадь(3, 4).
Функция ПлощадьПрямоугольника(А, Б)
    Возврат А * Б;
КонецФункции

Процедура ВывестиПлощадь(А, Б)
    Сообщить("Площадь: " + ПлощадьПрямоугольника(А, Б));
КонецПроцедуры

10. Коллекции: массивы и структуры

  • Массив — список значений, нумерация с нуля: Массив[0];
  • методы: Добавить(Значение), Количество(), Вставить(Индекс, Значение), Удалить(Индекс), Найти(Значение);
  • Структура — именованные значения: обращение через точку Структура.Ключ;
  • метод Вставить("Ключ", Значение) добавляет поле, Свойство("Ключ") проверяет наличие.
Массив = Новый Массив;
Массив.Добавить("яблоко");
Сообщить(Массив.Количество());        // 1

Данные = Новый Структура("Имя, Возраст", "Иван", 20);
Сообщить(Данные.Имя + ", " + Данные.Возраст);

11. Таблица значений и список значений

ТаблицаЗначений — таблица в памяти: колонки, строки, поиск и свёртка. СписокЗначений — список с отметками.

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

Стр = ТЗ.Добавить();
Стр.Товар = "Хлеб";
Стр.Количество = 2;

Выборка = ТЗ.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Товар + " — " + Выборка.Количество);
КонецЦикла;

Отбор = Новый Структура("Товар", "Хлеб");
Сообщить(ТЗ.НайтиСтроки(Отбор).Количество());

12. Строки

  • СокрЛ(Строка), СокрП(Строка), СокрЛП(Строка) — убрать пробелы слева, справа, с обеих сторон;
  • ДлинаСтроки(Строка) (старое имя — СтрДлина(Строка)) — количество символов;
  • ВРег(Строка) и НРег(Строка) — верхний и нижний регистр;
  • Лев(Строка, Количество), Прав(Строка, Количество), Сред(Строка, Начало, Количество) — часть строки;
  • СтрНайти(Строка, Подстрока) — позиция подстроки, 0 — не найдена;
  • СтрЗаменить(Строка, Что, НаЧто) — замена;
  • СтрРазделить(Строка, Разделитель) — массив частей, СтрСоединить(Массив, Разделитель) — обратно в строку;
  • СтрШаблон("Привет, %1!", Имя) — подстановка значений вместо %1, %2, …;
  • перенос строки внутри текста — Символы.ПС, табуляция — Символы.Таб.
Текст = "  Иван  ";
Имя = СокрЛП(Текст);
Части = СтрРазделить("хлеб,сыр,молоко", ",");
Сообщить(СтрШаблон("Привет, %1! Позиций: %2", Имя, Части.Количество()));
Сообщить(ВРег(Имя) + " | " + СтрЗаменить(Имя, "И", "А"));

13. Числа, даты и время

  • % — остаток от деления: Остаток = 10 % 3; (результат 1);
  • Цел(Число) — целая часть, Окр(Число, Разрядность, РежимОкругления) — округление;
  • режим округления задаёт системное перечисление: РежимОкругления.Окр15как20 (1,5 → 2) или РежимОкругления.Окр15как10 (1,5 → 1);
  • Мин(А, Б), Макс(А, Б) — меньшее и большее значение;
  • ТекущаяДата() и ТекущаяДатаСеанса() — дата и время;
  • к дате можно прибавить число — это секунды: Дата + 3600 — плюс час;
  • Год(Дата), Месяц(Дата), День(Дата), Час(Дата), Минута(Дата), Секунда(Дата) — части даты;
  • НачалоМесяца(Дата), КонецМесяца(Дата), НачалоГода(Дата), КонецДня(Дата) — границы периода;
  • Формат(Значение, "ДФ=dd.MM.yyyy") — оформление значения строкой формата;
  • ДобавитьМесяц(Дата, 1) — сдвиг на месяц.
Цена = 123.456;
Сообщить(Окр(Цена, 2));                              // 123.46
Сообщить(Окр(1.5, 0, РежимОкругления.Окр15как10));    // 1
Сообщить(Цел(123.9));                                 // 123

Сегодня = ТекущаяДата();
Сообщить(Формат(Сегодня, "ДФ=dd.MM.yyyy"));
Сообщить(Формат(НачалоМесяца(Сегодня), "ДФ=dd.MM.yyyy"));

14. Язык запросов: структура

Запросы пишут на языке запросов — он похож на SQL, но с русскими ключевыми словами. Общий порядок разделов фиксирован.

ВЫБРАТЬ [РАЗЛИЧНЫЕ] [ПЕРВЫЕ 10]
    Ссылка, Наименование КАК Имя
ИЗ
    Справочник.Товары КАК Товары
ГДЕ
    Цена > &ПорогЦены
СГРУППИРОВАТЬ ПО
    Наименование
ИМЕЮЩИЕ
    СУММА(Цена) > 1000
УПОРЯДОЧИТЬ ПО
    Наименование ВОЗР
  • &ИмяПараметра — параметр запроса: подставляется из кода и защищает от ошибок;
  • КАК задаёт псевдоним поля или таблицы;
  • склейка строк запроса — символ | в начале строки;
  • сравнение — =, условие диапазона — МЕЖДУ … И …, поиск по образцу — ПОДОБНО "%текст%";
  • агрегаты: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ;
  • ГДЕ отбирает строки до группировки, ИМЕЮЩИЕ — уже сгруппированные;
  • СОЕДИНЕНИЕ … ПО … и ЛЕВОЕ СОЕДИНЕНИЕ — соединение таблиц;
  • функции: ДАТАДОБАВИТЬ, ГОД, МЕСЯЦ, ПОДСТРОКА, ВЫРАЗИТЬ(Поле КАК СТРОКА);
  • своя условная конструкция запроса: ВЫБОР КОГДА … ТОГДА … ИНАЧЕ … КОНЕЦ;
  • обращение к табличной части — через точку: Документ.Продажа.Товары.

15. Выполнение запроса из кода

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |   Товары.Наименование КАК Наименование,
    |   Товары.Цена КАК Цена
    |ИЗ
    |   Справочник.Товары КАК Товары
    |ГДЕ
    |   Товары.Цена > &Порог
    |УПОРЯДОЧИТЬ ПО
    |   Товары.Цена УБЫВ";
Запрос.УстановитьПараметр("Порог", 100);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование + " — " + Выборка.Цена);
КонецЦикла;
  • Выполнить() возвращает результат, Выбрать() — выборку по строкам;
  • Следующий() в условии цикла перебирает строки;
  • Пустой() — проверка, что строк нет;
  • второй способ: Результат.Выгрузить() — получить таблицу значений и работать с ней как с таблицей;
  • данные объектов читают через ссылки: СсылкаНаТовар.Наименование.
Ссылка = Справочники.Товары.НайтиПоНаименованию("Хлеб");
Если ЗначениеЗаполнено(Ссылка) Тогда
    Сообщить(Ссылка.Цена);
КонецЕсли;

16. Работа с объектами и ссылками

  • Справочники.Товары.НайтиПоНаименованию("Хлеб") — поиск элемента справочника;
  • СоздатьЭлемент() — новый элемент, Ссылка.ПолучитьОбъект() — объект для изменения;
  • изменения сохраняют методом Записать(): объекта без записи в базе не существует;
  • ЗначениеЗаполнено(Значение) — проверка, что ссылка или текст не пустые;
  • Документы.Продажа.СоздатьДокумент(), затем заполняют табличную часть и вызывают Записать(РежимЗаписиДокумента.Проведение);
  • у ссылки и у объекта доступны свойства и табличные части: Объект.Товары.Добавить().
Новый = Справочники.Товары.СоздатьЭлемент();
Новый.Наименование = "Печенье";
Новый.Записать();
Сообщить("Создан: " + Новый.Ссылка);

17. Обработка ошибок

Ошибки перехватывают блоки Попытка — Исключение — КонецПопытки. Свою ошибку создают словом ВызватьИсключение.

  • Попытка … Исключение … КонецПопытки; — обязательны все три слова;
  • ОписаниеОшибки() — текст ошибки, ИнформацияОбОшибке() — сведения об ошибке (описание и позиция в коде);
  • ВызватьИсключение "Текст ошибки" — выбросить ошибку самому;
  • без повторного ВызватьИсключение пойманная ошибка «проглатывается» и не покажется пользователю.
Попытка
    Результат = 10 / 0;
Исключение
    Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;

18. Типичные ошибки

  • забытая точка с запятой в конце оператора;
  • перепутанные знаки: в 8.3 сравнение — одиночное =, двойного == в языке нет (это «Элемент»);
  • русские слова в коде на «элементовском» манер: ключевые слова 8.3 — Если/Тогда/КонецЕсли, а не если … ;;
  • обращение к переменной из другой процедуры: она там не видна;
  • попытка изменить реквизит ссылки напрямую: нужно получить объект и записать его;
  • использование строки вместо ссылки: "Хлеб" и Справочники.Товары.НайтиПоНаименованию("Хлеб") — разные значения;
  • забытый Возврат в функции — функция вернёт Неопределено.

19. Мини-программа целиком

&НаСервере
Функция СредняяЦенаТоваров()
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Товары.Наименование КАК Наименование,
        |   Товары.Цена КАК Цена
        |ИЗ
        |   Справочник.Товары КАК Товары
        |ГДЕ
        |   Товары.Цена > 0");
    Выборка = Запрос.Выполнить().Выбрать();

    Сумма = 0;
    Количество = 0;
    Пока Выборка.Следующий() Цикл
        Сумма = Сумма + Выборка.Цена;
        Количество = Количество + 1;
    КонецЦикла;

    Если Количество = 0 Тогда
        Возврат 0;
    КонецЕсли;
    Возврат Окр(Сумма / Количество, 2);
КонецФункции

&НаКлиенте
Процедура ПоказатьСреднее(Команда)
    Сообщить("Средняя цена: " + СредняяЦенаТоваров());
КонецПроцедуры

Здесь собрано всё сразу: директива, функция, запрос с текстом, перебор выборки, условия, арифметика и вывод сообщения.

CONTENTS
↑↓ Select Enter Open Esc Back © MSD 2026 █