Язык программирования 1С: основы, примеры, практики разработки
Для кого эта статья:
- Новички в программировании, желающие освоить язык 1С
- Специалисты, работающие в бизнесе и стремящиеся автоматизировать процессы
Разработчики, желающие расширить свои навыки в программировании на платформе 1С
Язык программирования 1С — это ваш ключ к автоматизации бизнес-процессов в российских компаниях. От простых отчетов до сложных интеграций — всё реализуется через написание кода на этом специфическом языке. Многие новички спотыкаются о его особенности, но, имея перед глазами рабочие примеры с детальными объяснениями, вы сможете быстро преодолеть порог входа и стать востребованным 1С-разработчиком. 💻 Давайте рассмотрим ключевые аспекты программирования на 1С через призму практических примеров.
Изучаете язык программирования 1С и хотите расширить свои навыки работы с данными? Освоение SQL станет идеальным дополнением к вашему профессиональному арсеналу! Обучение SQL с нуля от Skypro поможет вам понять принципы запросов к базам данных, что критически важно при разработке на 1С. Вы научитесь эффективно извлекать и обрабатывать информацию — навык, который многократно усилит ваши возможности как 1С-программиста.
Основы языка программирования 1С: синтаксис и структура
Язык программирования 1С относится к высокоуровневым языкам и имеет свою уникальную структуру, оптимизированную для работы с бизнес-логикой и учетными задачами. Прежде чем погрузиться в код, важно понимать фундаментальные особенности этого языка.
Программирование в 1С осуществляется в различных программных модулях, каждый из которых имеет свое назначение:
- Модуль объекта — содержит код, связанный с конкретным объектом конфигурации (документом, справочником и т.д.)
- Модуль формы — отвечает за взаимодействие с пользовательским интерфейсом
- Общие модули — хранят процедуры и функции, доступные из разных частей конфигурации
- Модуль приложения — выполняется при старте программы
- Модуль внешнего соединения — используется при работе с внешними компонентами
Синтаксис языка 1С напоминает смесь Basic и Pascal, что делает его relativamente простым для освоения. Вот базовый пример кода, иллюстрирующий структуру процедуры в 1С:
Процедура ПриветМир()
Сообщить("Здравствуй, мир 1С!");
КонецПроцедуры
В этом примере мы определяем процедуру с именем "ПриветМир", которая выводит сообщение пользователю. Обратите внимание на ключевые особенности синтаксиса:
- Ключевые слова пишутся на русском языке
- Процедура начинается словом "Процедура" и заканчивается "КонецПроцедуры"
- Строки заключаются в двойные кавычки
- Каждая инструкция пишется с новой строки без разделителей
Структура модуля в 1С обычно включает следующие секции:
Секция | Назначение | Пример использования |
---|---|---|
Переменные модуля | Объявление переменных, доступных во всем модуле | Перем ИмяПеременной Экспорт; |
Обработчики событий | Код, выполняемый при наступлении определенных событий | Процедура ПриСозданииНаСервере() |
Процедуры и функции | Подпрограммы, реализующие бизнес-логику | Функция РассчитатьНДС(Сумма) |
Инициализация модуля | Код, выполняемый при загрузке модуля | // Выполняется при загрузке модуля |
Александр Петров, ведущий разработчик 1С
Помню свой первый проект автоматизации склада. Клиент попросил отчет о движении товаров с цветовой индикацией критических остатков. Я потратил три дня, пытаясь разобраться с синтаксисом запросов и правилами форматирования. Мой код был похож на лоскутное одеяло – работал, но никто не понимал как.
Всё изменилось, когда я разложил задачу на составляющие и начал писать код по образцу из документации, адаптируя под свои нужды. Запрос к базе я выделил в отдельную функцию, обработку результатов – в процедуру, а форматирование – в еще одну служебную процедуру. Через структурированный подход код стал понятным и масштабируемым.
Спустя месяц клиент запросил новые функции, и я реализовал их за пару часов, просто дополнив существующие блоки кода. Это был момент, когда я осознал всю мощь правильно организованного кода в 1С.

Переменные и типы данных в 1С: практический код
В языке программирования 1С переменные не требуют предварительного объявления типов — язык использует динамическую типизацию. Это значительно упрощает код, но требует внимательности при работе с данными. 🧩
Рассмотрим основные типы данных и примеры их использования:
Тип данных | Описание | Пример объявления | Пример использования |
---|---|---|---|
Число | Числовые значения | Число = 10; | Результат = Число * 2; |
Строка | Текстовые данные | Строка = "Привет, 1С!"; | ДлинаСтроки = СтрДлина(Строка); |
Дата | Дата и время | ТекущаяДата = ТекущаяДата(); | ДатаЗавтра = ТекущаяДата + 86400; |
Булево | Логические значения | Флаг = Истина; | Если Флаг Тогда ... КонецЕсли; |
СправочникСсылка | Ссылка на элемент справочника | Товар = Справочники.Товары.НайтиПоКоду("123"); | Наименование = Товар.Наименование; |
Вот пример кода, демонстрирующий работу с различными типами данных в 1С:
Процедура ДемонстрацияТиповДанных()
// Числа
Сумма = 1000;
Ставка = 0.2;
НДС = Сумма * Ставка;
// Строки
ФИО = "Иванов Иван Иванович";
Фамилия = Лев(ФИО, СтрНайти(ФИО, " ") – 1);
// Даты
ДатаСегодня = ТекущаяДата();
ДатаЗавтра = ДатаСегодня + 86400; // 86400 секунд = 1 день
ПрошлоДней = (ДатаСегодня – '20200101') / 86400;
// Булево
ЕстьОстаток = Истина;
ТребуетсяОтгрузка = Ложь;
// Массивы
МассивТоваров = Новый Массив;
МассивТоваров.Добавить("Компьютер");
МассивТоваров.Добавить("Принтер");
// Структуры
КлиентИнфо = Новый Структура;
КлиентИнфо.Вставить("Имя", "Иван");
КлиентИнфо.Вставить("Телефон", "+79001234567");
// Соответствие (словарь)
ЦеныТоваров = Новый Соответствие;
ЦеныТоваров.Вставить("Компьютер", 50000);
ЦеныТоваров.Вставить("Принтер", 15000);
// Вывод информации
Сообщить("Сумма с НДС: " + (Сумма + НДС));
Сообщить("Фамилия: " + Фамилия);
Сообщить("Завтра: " + Формат(ДатаЗавтра, "ДФ=dd.MM.yyyy"));
Сообщить("Товаров в массиве: " + МассивТоваров.Количество());
Сообщить("Телефон клиента: " + КлиентИнфо.Телефон);
Сообщить("Цена принтера: " + ЦеныТоваров.Получить("Принтер"));
КонецПроцедуры
Этот код демонстрирует несколько важных концепций работы с данными в 1С:
- Арифметические операции — сложение, умножение чисел
- Строковые функции — извлечение подстроки, поиск в строке
- Работа с датами — получение текущей даты, вычисление разницы между датами
- Коллекции данных — массивы, структуры и соответствия
- Форматирование — преобразование данных для вывода
Особенностью языка 1С является поддержка работы с объектами информационной базы. Например, так можно создать новый элемент справочника:
Процедура СоздатьНовыйТовар()
// Создаем новый элемент справочника
НовыйТовар = Справочники.Товары.СоздатьЭлемент();
// Заполняем реквизиты
НовыйТовар.Наименование = "Ноутбук HP ProBook";
НовыйТовар.Артикул = "HP-12345";
НовыйТовар.Цена = 75000;
НовыйТовар.ЕдиницаИзмерения = Перечисления.ЕдиницыИзмерения.шт;
// Записываем изменения в базу данных
НовыйТовар.Записать();
// Получаем ссылку на созданный элемент
СсылкаНаТовар = НовыйТовар.Ссылка;
Сообщить("Создан новый товар: " + СсылкаНаТовар);
КонецПроцедуры
Этот код создает новый элемент в справочнике "Товары", заполняет его свойства и сохраняет в базе данных. Обратите внимание на использование метода Записать() — это ключевой момент для сохранения изменений.
Операторы условий и циклов в языке 1С: разбор кода
Условные операторы и циклы — фундаментальные конструкции любого языка программирования, и 1С не исключение. Они позволяют создавать гибкие алгоритмы обработки данных, адаптирующиеся к различным ситуациям. 🔄
Рассмотрим основные условные конструкции на примере практического кода.
Оператор Если-Тогда-ИначеЕсли-Иначе-КонецЕсли
Процедура ОпределитьСтатусОплаты(Сумма, СуммаОплаты)
Если СуммаОплаты = 0 Тогда
Статус = "Не оплачено";
ИначеЕсли СуммаОплаты < Сумма Тогда
Статус = "Частично оплачено";
ИначеЕсли СуммаОплаты = Сумма Тогда
Статус = "Полностью оплачено";
Иначе
Статус = "Переплата";
КонецЕсли;
Сообщить("Статус оплаты: " + Статус);
КонецПроцедуры
В этом примере:
- Проверяется последовательность условий с помощью конструкций Если, ИначеЕсли и Иначе
- В зависимости от соотношения суммы и оплаты выбирается соответствующий статус
- Блок завершается ключевым словом КонецЕсли
Тернарный оператор (условное выражение)
В 1С можно использовать конструкцию ?(условие, значениееслиистина, значениееслиложь) для компактной записи условий:
Функция ПолучитьСкидку(СуммаПокупки)
// Если сумма покупки больше 10000, скидка 10%, иначе 5%
Возврат ?(СуммаПокупки > 10000, 0.1, 0.05);
КонецФункции
Процедура РассчитатьИтог()
СуммаПокупки = 15000;
СкидкаПроцент = ПолучитьСкидку(СуммаПокупки);
ИтоговаяСумма = СуммаПокупки * (1 – СкидкаПроцент);
Сообщить("Сумма покупки: " + СуммаПокупки);
Сообщить("Скидка: " + (СкидкаПроцент * 100) + "%");
Сообщить("К оплате: " + ИтоговаяСумма);
КонецПроцедуры
Тернарный оператор особенно полезен, когда нужно присвоить значение переменной в зависимости от простого условия, без создания громоздкой конструкции Если-Тогда-Иначе.
Циклы Для и Пока
В 1С доступны несколько типов циклов для организации повторяющихся операций. Рассмотрим наиболее часто используемые:
- Цикл Для ... По ... Цикл
Процедура ВывестиТаблицуУмножения(Число)
Для Множитель = 1 По 10 Цикл
Результат = Число * Множитель;
Сообщить(Число + " × " + Множитель + " = " + Результат);
КонецЦикла;
КонецПроцедуры
- Цикл Для каждого ... Из ... Цикл
Процедура ПодсчитатьСуммуДокументов(МассивДокументов)
ОбщаяСумма = 0;
Для Каждого Документ Из МассивДокументов Цикл
ОбщаяСумма = ОбщаяСумма + Документ.Сумма;
Сообщить("Обработан документ №" + Документ.Номер + " на сумму " + Документ.Сумма);
КонецЦикла;
Сообщить("Общая сумма по всем документам: " + ОбщаяСумма);
КонецПроцедуры
- Цикл Пока ... Цикл
Функция НайтиНаибольшийОбщийДелитель(Число1, Число2)
// Алгоритм Евклида для нахождения НОД
А = Макс(Число1, Число2);
Б = Мин(Число1, Число2);
Пока Б > 0 Цикл
Остаток = А % Б;
А = Б;
Б = Остаток;
КонецЦикла;
Возврат А;
КонецФункции
Управление циклами: Прервать и Продолжить
В языке 1С доступны операторы для управления выполнением цикла:
Процедура НайтиПервыйПросроченныйПлатеж(МассивПлатежей)
ТекущаяДата = ТекущаяДата();
Найден = Ложь;
Для Каждого Платеж Из МассивПлатежей Цикл
// Пропускаем оплаченные платежи
Если Платеж.Оплачен Тогда
Продолжить;
КонецЕсли;
// Проверяем, просрочен ли платеж
Если Платеж.ДатаПлатежа < ТекущаяДата Тогда
Сообщить("Найден просроченный платеж: " + Платеж.Номер);
Сообщить("Дата платежа: " + Платеж.ДатаПлатежа);
Сообщить("Просрочка: " + (ТекущаяДата – Платеж.ДатаПлатежа) / 86400 + " дней");
Найден = Истина;
Прервать; // Прерываем цикл после нахождения первого просроченного платежа
КонецЕсли;
КонецЦикла;
Если Не Найден Тогда
Сообщить("Просроченных платежей не обнаружено");
КонецЕсли;
КонецПроцедуры
Мария Соколова, тренер по 1С-программированию
Недавно проводила курс для начинающих 1С-разработчиков. Одна студентка, бухгалтер с 10-летним стажем, решила освоить программирование для автоматизации своей работы. Первое задание — написать обработку для расчета амортизации основных средств.
Я наблюдала, как она методично выстраивала алгоритм: сначала цикл по всем основным средствам, затем вложенное условие для проверки метода амортизации, и наконец, формулы расчета в зависимости от метода. Код был технически верным, но работал медленно на больших объемах данных.
Мы вместе оптимизировали решение: заменили вложенные циклы на один цикл с комплексным условием, добавили предварительную фильтрацию данных. Производительность выросла в 8 раз!
Этот случай прекрасно иллюстрирует, как важно не просто знать синтаксис языка, но и понимать особенности работы с данными в 1С. Правильное использование условий и циклов — это 50% успеха оптимизации.
Процедуры и функции в 1С: исходный код с комментариями
Процедуры и функции — это строительные блоки, позволяющие структурировать код и создавать многоразовые компоненты. В языке программирования 1С они играют ключевую роль в организации бизнес-логики. 🧱
Давайте разберемся в различиях между процедурами и функциями:
- Процедура — подпрограмма, которая выполняет определенные действия, но не возвращает значение
- Функция — подпрограмма, которая обязательно возвращает результат своей работы
Рассмотрим базовый синтаксис объявления процедуры:
// Процедура без параметров
Процедура ВывестиТекущуюДату()
Сообщить("Текущая дата: " + ТекущаяДата());
КонецПроцедуры
// Процедура с параметрами
Процедура ВывестиПриветствие(Имя, Должность = "Сотрудник") Экспорт
Сообщить("Здравствуйте, " + Должность + " " + Имя + "!");
КонецПроцедуры
Обратите внимание на несколько важных моментов:
- Процедура может не иметь параметров
- Параметры могут иметь значения по умолчанию (Должность = "Сотрудник")
- Ключевое слово Экспорт делает процедуру доступной из других модулей
Теперь рассмотрим синтаксис объявления функции:
// Простая функция с возвращаемым значением
Функция ПолучитьТекущийГод() Экспорт
Возврат Год(ТекущаяДата());
КонецФункции
// Функция с параметрами и логикой
Функция РассчитатьСтоимостьСДоставкой(Стоимость, Вес, РасстояниеКм) Экспорт
БазоваяСтоимостьДоставки = 300;
ДоплатаЗаВес = ?(Вес > 10, (Вес – 10) * 30, 0);
ДоплатаЗаРасстояние = ?(РасстояниеКм > 5, (РасстояниеКм – 5) * 20, 0);
СтоимостьДоставки = БазоваяСтоимостьДоставки + ДоплатаЗаВес + ДоплатаЗаРасстояние;
ИтоговаяСтоимость = Стоимость + СтоимостьДоставки;
Возврат Новый Структура("Итого, СтоимостьДоставки", ИтоговаяСтоимость, СтоимостьДоставки);
КонецФункции
Ключевые особенности функций в 1С:
- Функция обязательно должна содержать оператор Возврат
- Возвращаемое значение может быть любого типа, включая сложные структуры
- Для возврата нескольких значений можно использовать структуры или массивы
Рассмотрим более сложный пример с рекурсивной функцией:
// Рекурсивная функция для вычисления факториала числа
Функция Факториал(Число) Экспорт
// Проверка входных данных
Если Число < 0 Тогда
ВызватьИсключение "Факториал не определен для отрицательных чисел";
КонецЕсли;
// Базовый случай рекурсии
Если Число <= 1 Тогда
Возврат 1;
КонецЕсли;
// Рекурсивный случай
Возврат Число * Факториал(Число – 1);
КонецФункции
Передача параметров в 1С осуществляется по значению для простых типов и по ссылке для сложных. Это важно учитывать при разработке. Рассмотрим пример:
Процедура ДобавитьТоварВКорзину(Корзина, Товар, Количество = 1)
// Создаем структуру с информацией о товаре
ТоварВКорзине = Новый Структура;
ТоварВКорзине.Вставить("Товар", Товар);
ТоварВКорзине.Вставить("Количество", Количество);
ТоварВКорзине.Вставить("Цена", Товар.Цена);
ТоварВКорзине.Вставить("Сумма", Товар.Цена * Количество);
// Добавляем товар в корзину
Корзина.Добавить(ТоварВКорзине);
КонецПроцедуры
Процедура ОформитьЗаказ()
// Инициализация корзины
Корзина = Новый Массив;
// Получение товаров
Телефон = Справочники.Товары.НайтиПоНаименованию("Смартфон XYZ");
Чехол = Справочники.Товары.НайтиПоНаименованию("Чехол для XYZ");
// Добавление товаров в корзину
ДобавитьТоварВКорзину(Корзина, Телефон);
ДобавитьТоварВКорзину(Корзина, Чехол, 2);
// Подсчет общей суммы заказа
ОбщаяСумма = 0;
Для Каждого Позиция Из Корзина Цикл
ОбщаяСумма = ОбщаяСумма + Позиция.Сумма;
КонецЦикла;
Сообщить("Общая сумма заказа: " + ОбщаяСумма);
КонецПроцедуры
В этом примере массив Корзина передается в процедуру ДобавитьТоварВКорзину по ссылке, поэтому изменения, сделанные в процедуре, отражаются на исходном массиве.
Обработка ошибок в процедурах и функциях
Для обработки исключительных ситуаций в 1С используется конструкция Попытка-Исключение:
Функция БезопаснаяКонвертацияВЧисло(Значение) Экспорт
Попытка
Результат = Число(Значение);
Возврат Результат;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации("Ошибка конвертации",
УровеньЖурналаРегистрации.Ошибка,
,
,
"Не удалось преобразовать значение """ + Значение +
""" в число. " + ИнформацияОбОшибке.Описание);
Возврат 0;
КонецПопытки;
КонецФункции
Этот код демонстрирует безопасную конвертацию значения в число с обработкой возможных ошибок и логированием проблем.
Работа с запросами в языке программирования 1С: код решений
Язык запросов 1С — это мощный инструмент для извлечения и обработки данных из информационной базы. Он имеет сходство с SQL, но обладает своими особенностями, адаптированными под специфику платформы. 📊
Рассмотрим основные компоненты запроса в 1С и их практическое применение в коде.
Базовая структура запроса
Процедура ПолучитьСписокКлиентов()
// Создаем объект запроса
Запрос = Новый Запрос;
// Устанавливаем текст запроса
Запрос.Текст = "ВЫБРАТЬ
| Клиенты.Наименование,
| Клиенты.ИНН,
| Клиенты.АдресЭлектроннойПочты
|ИЗ
| Справочник.Клиенты КАК Клиенты
|ГДЕ
| Клиенты.ПометкаУдаления = ЛОЖЬ
|УПОРЯДОЧИТЬ ПО
| Клиенты.Наименование";
// Выполняем запрос и получаем результат
РезультатЗапроса = Запрос.Выполнить();
// Получаем выборку из результата запроса
Выборка = РезультатЗапроса.Выбрать();
// Обрабатываем результаты
Пока Выборка.Следующий() Цикл
Сообщить("Клиент: " + Выборка.Наименование);
Сообщить("ИНН: " + Выборка.ИНН);
Сообщить("Email: " + Выборка.АдресЭлектроннойПочты);
Сообщить("---");
КонецЦикла;
КонецПроцедуры
Этот код демонстрирует базовую структуру работы с запросами в 1С:
- Создание объекта запроса
- Определение текста запроса
- Выполнение запроса и получение результата
- Обработка результатов с помощью выборки
Использование параметров в запросах
Параметры делают запросы более гибкими и безопасными:
Функция НайтиТоварыПоКатегории(КодКатегории) Экспорт
Запрос = Новый Запрос;
// Запрос с параметром
Запрос.Текст = "ВЫБРАТЬ
| Товары.Код,
| Товары.Наименование,
| Товары.Цена,
| Товары.Остаток
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Категория.Код = &КодКатегории
| И Товары.Остаток > 0
|УПОРЯДОЧИТЬ ПО
| Товары.Наименование";
// Устанавливаем значение параметра
Запрос.УстановитьПараметр("КодКатегории", КодКатегории);
// Выполняем запрос
РезультатЗапроса = Запрос.Выполнить();
// Если нужно вернуть таблицу значений
Возврат РезультатЗапроса.Выгрузить();
КонецФункции
В этом примере мы:
- Используем параметр &КодКатегории в тексте запроса
- Устанавливаем значение параметра через метод УстановитьПараметр
- Возвращаем результат в виде таблицы значений
Соединение таблиц в запросах
Часто требуется объединять данные из нескольких таблиц:
Процедура ПолучитьОтчетПоПродажам(ДатаНачала, ДатаОкончания)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Документы.Номер,
| Документы.Дата,
| Клиенты.Наименование КАК Клиент,
| Менеджеры.Наименование КАК Менеджер,
| Документы.СуммаДокумента,
| Документы.СуммаНДС
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Документы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Клиенты
| ПО Документы.Контрагент = Клиенты.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Менеджеры
| ПО Документы.Менеджер = Менеджеры.Ссылка
|ГДЕ
| Документы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И Документы.Проведен = ИСТИНА
|УПОРЯДОЧИТЬ ПО
| Документы.Дата";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
РезультатЗапроса = Запрос.Выполнить();
ТаблицаРезультата = РезультатЗапроса.Выгрузить();
// Вывод итогов
ИтогоСумма = ТаблицаРезультата.Итог("СуммаДокумента");
ИтогоНДС = ТаблицаРезультата.Итог("СуммаНДС");
Сообщить("Всего продаж: " + ТаблицаРезультата.Количество());
Сообщить("На сумму: " + ИтогоСумма);
Сообщить("В том числе НДС: " + ИтогоНДС);
КонецПроцедуры
Этот запрос объединяет данные из трех таблиц (документы реализации, справочники контрагентов и сотрудников) с помощью операции ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
Агрегирование данных
Часто требуется получить итоговые данные по группам:
Функция ПолучитьОтчетПоПродажамПоМенеджерам(Период) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Документы.Менеджер КАК Менеджер,
| Менеджеры.Наименование КАК ИмяМенеджера,
| СУММА(Документы.СуммаДокумента) КАК СуммаПродаж,
| КОЛИЧЕСТВО(Документы.Ссылка) КАК КоличествоПродаж
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Документы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Менеджеры
| ПО Документы.Менеджер = Менеджеры.Ссылка
|ГДЕ
| Документы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И Документы.Проведен = ИСТИНА
|СГРУППИРОВАТЬ ПО
| Документы.Менеджер,
| Менеджеры.Наименование
|УПОРЯДОЧИТЬ ПО
| СуммаПродаж УБЫВ";
НачалоПериода = НачалоМесяца(Период);
КонецПериода = КонецМесяца(Период);
Запрос.УстановитьПараметр("ДатаНачала", НачалоПериода);
Запрос.УстановитьПараметр("ДатаОкончания", КонецПериода);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Ключевые моменты этого запроса:
- Использование агрегатных функций СУММА() и КОЛИЧЕСТВО()
- Группировка результатов по менеджерам
- Сортировка по сумме продаж в убывающем порядке
Временные таблицы
Для сложных запросов полезно использовать временные таблицы:
Процедура АнализПродажТоваров(ДатаНачала, ДатаОкончания)
Запрос = Новый Запрос;
// Создаем временную таблицу с продажами
Запрос.Текст = "ВЫБРАТЬ
| Товары.Ссылка КАК Товар,
| Товары.Наименование КАК НаименованиеТовара,
| Товары.Категория КАК Категория
|ПОМЕСТИТЬ ВТ_Товары
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.ПометкаУдаления = ЛОЖЬ;
|
|ВЫБРАТЬ
| ДанныеПродаж.Номенклатура КАК Товар,
| СУММА(ДанныеПродаж.Количество) КАК КоличествоПродано,
| СУММА(ДанныеПродаж.Сумма) КАК СуммаПродаж
|ПОМЕСТИТЬ ВТ_Продажи
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ДанныеПродаж
|ГДЕ
| ДанныеПродаж.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ДанныеПродаж.Ссылка.Проведен = ИСТИНА
|СГРУППИРОВАТЬ ПО
| ДанныеПродаж.Номенклатура;
|
|ВЫБРАТЬ
| Товары.НаименованиеТовара,
| Товары.Категория,
| ЕСТЬNULL(Продажи.КоличествоПродано, 0) КАК КоличествоПродано,
| ЕСТЬNULL(Продажи.СуммаПродаж, 0) КАК СуммаПродаж
|ИЗ
| ВТ_Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Продажи КАК Продажи
| ПО Товары.Товар = Продажи.Товар
|УПОРЯДОЧИТЬ ПО
| СуммаПродаж УБЫВ";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
РезультатЗапроса = Запрос.Выполнить();
ТаблицаРезультата = РезультатЗапроса.Выгрузить();
// Дальнейшая обработка результата...
КонецПроцедуры
В этом запросе:
- Создаются две временные таблицы: ВТТовары и ВТПродажи
- Временные таблицы объединяются с помощью ЛЕВОЕ СОЕДИНЕНИЕ
- Используется функция ЕСТЬNULL для обработки отсутствующих данных
Практические советы по оптимизации запросов
- Используйте индексированные поля в условиях отбора (поля ссылочного типа, как правило, индексированы)
- Ограничивайте выборку только необходимыми полями вместо использования "*"
- Применяйте временные таблицы для сложных многоэтапных запросов
- Добавляйте условия отбора как можно раньше в запросе для уменьшения объема обрабатываемых данных
- Используйте параметры вместо непосредственного вставления значений в текст запроса
Освоение языка программирования 1С открывает огромные возможности для автоматизации бизнес-процессов и создания эффективных решений. Мы рассмотрели ключевые аспекты: от базового синтаксиса до сложных запросов, от работы с простыми переменными до структурирования кода с помощью процедур и функций. Помните, что настоящее мастерство приходит с практикой. Экспериментируйте с примерами, адаптируйте их под свои задачи, и вскоре вы обнаружите, что легко создаёте собственные эффективные решения на платформе 1С.
Читайте также
- Какой язык программирования выбрать для изучения
- Приложения для программирования на ПК: лучшие инструменты
- Литература по языкам программирования: что читать
- Топ-15 IT-профессий в программировании: выбери свое направление
- Как выбрать направление программирования: карьерный путь в IT
- Как стать программистом: выбор направления, навыки, карьерный рост
- Книги по программированию: скачать бесплатно
- На каком языке писать мобильные приложения: советы и примеры
- Как выучить язык программирования с нуля: пошаговое руководство
- Языки программирования для ИИ: что выбрать