Использование рекурсии в 1С
-

Использование рекурсии в 1С

0
7858
10.04.2020 Щербаков Кирилл

Содержание:

1.    Понятие рекурсии в 1С

 

Рекурсией в программировании называется явление вызова функции или процедуры по ее же алгоритму выполнения. В случае, когда функция вызывает себя опосредованно, рекурсия называется сложной или косвенной (а не простой или прямой, как в случае непосредственного вызова функцией самой себя).


Из определения рекурсии следует вывод, что во избежание бесконечного увеличения стека вызовов, необходимо предусмотреть условие выхода – условие, при котором очередной рекурсивный вызов не произойдет, что положит начало «заворачиванию» стека, по окончании которого получим конечный результат.

 

&НаКлиенте

Процедура Сосчитать(Команда)

            СчетДоДесяти(Число);

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

 

Процедура СчетДоДесяти(НачальноеЧисло)

    Если НачальноеЧисло <= 10 Тогда

        Сообщить(Строка(НачальноеЧисло));

        НачальноеЧисло = НачальноеЧисло + 1;

        СчетДоДесяти(НачальноеЧисло);

    Иначе //выход из рекурсии

                        Сообщить("Счет окончен.");

                        Возврат;

    КонецЕсли;

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

 

Результат выполнения команды «Начать» из приведенного примера, можно получить просто используя цикл, а не рекурсию. Такой вариант был бы лучше и с точки зрения производительности, ведь каждый вызов процедуры подразумевает выделение памяти под значения локальных переменных.


Такой счет до десяти – пример линейной рекурсии в 1С. То есть каждый очередной вызов процедуры инициирует лишь один рекурсивный вызов или при выполнении условия выхода не инициирует вовсе.


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

 

Функция ПолучитьЧислоРядаФибоначчиПоНомеру(НомерЧислаВРяду)

            Если НомерЧислаВРяду < 2 Тогда

                        Возврат НомерЧислаВРяду;

            КонецЕсли;

           

            Возврат ПолучитьЧислоРядаФибоначчиПоНомеру(НомерЧислаВРяду - 1) + ПолучитьЧислоРядаФибоначчиПоНомеру(НомерЧислаВРяду - 2)

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

 

&НаКлиенте

Процедура Фибоначчи(Команда)

            Сообщить(ПолучитьЧислоРядаФибоначчиПоНомеру(Число));

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


2.    Как используется рекурсия в 1С

 

Практическим примером использования рекурсии в 1С является алгоритм получения верхнеуровнего элемента справочника с иерархией элементов.


Получим для указанной организации главную организацию в иерархии элементов. Здесь условие выхода - Элемент.Уровень() = 0:

 

&НаКлиенте

Процедура УзнатьГлавнуюОрганизацию(Команда)

           

            Если Не ЗначениеЗаполнено(Организация) Тогда

                        Сообщить("Укажите Организацию");

                        Возврат;

            КонецЕсли;

           

            УзнатьГлавнуюОрганизациюНаСервере();

           

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

 

&НаСервере

Процедура УзнатьГлавнуюОрганизациюНаСервере()

           

            Если Организация.Уровень() = 0 Тогда

                        Сообщить("Указана организация верхнего уровня");

            КонецЕсли;

           

            ГоловнаяОрганизация = ПолучитьРодителя(Организация);

           

            Сообщить(ГоловнаяОрганизация);

           

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

 

&НаСервереБезКонтекста

Функция ПолучитьРодителя(Элемент)

           

            Если Элемент.Уровень() = 0 Тогда

                        Возврат Элемент;

            КонецЕсли;

           

            Возврат ПолучитьРодителя(Элемент.Родитель);

           

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

 

 

Другой обычный случай использования рекурсии в 1С – обход дерева значений. Устройство этой иерархической структуры позволяет реализовать такой алгоритм:

 

&НаСервере

Процедура ОбойтиРекурсивно(Дерево)

           

            Для Каждого Строка Из Дерево.Строки Цикл

                       

      Сообщить(Строка.Организация);

            Если Строка.Строки.Количество()>0 Тогда //Иначе выход из рекурсии

                       

         ОбойтиРекурсивно(Строка);

                       

            КонецЕсли;

           

КонецЦикла;

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

 

Если у строки два или более подчиненных, наблюдаем каскадную рекурсию.


Специалист компании ООО «Кодерлайн»

Щербаков Кирилл

 

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Теги
# абота Риелторского Агентства # Управление торговлей 11 #Забалансовый счет #Контекстное меню #Параметры запуска #Работа Риелторского Агентства # 1C # CRM-система # Cинтаксис-помощник # Cинхронные методы работы # Cправочник номенклатуры # PDF документами # PowerShell # XML-файл # Бизнес-процесс # Виды событий оповещения # Возврат товаров # Глубина анализа # Графические объекты # Динамический список # Документ заказ клиентов # Документ заполнен # Документ Отбор (размещение) товаров # Документ Отгрузка товаров ИС МП # Документ Приобретение товаров и услуг # Документ УПД # Документы продажи # Доступ на ТСД # ДтКт # ЕАЭС # Задержка зарплаты работодателем # Заказ на перемещение # Закладка Администрирование # Зарплата и кадры # Имя таблицы # ИТС # Кабель NYM(Севкабель) 3x5.5 # Книга учета доходов и расходов # Курс валюты # Лицо с правом подписи # Лицо, имеющее право подписи документов # Маркировка цифровыми кодами # Минимальные цены продажи в 1С # Настройка НСИ и разделов # Настройка ценообразования # НДФЛ # Нематериальные активы # Нормативно-правовые документы # Обмен электронными документами # Оплата через банк # Оптовые продажи # Основное ответственное лицо организации # Остаток товара на складе # Отчет комиссионера # Передача на комиссию # Перемещение ТС и оборудования # Проведение инструктажа # Продажи или Закупки # Прочие доходы # Пункт Подключить обработки # Пункт Сервис # ПФР и ФФОМС # Работа ТС # Расчёт зарплаты # Расчет налога УСН # Расчетные счета # Режим использования модальности # Система «Честный знак» # Система GS1 # Списание на расходы # Справка-расчет налога УСН # Страховые взносы # Табель учёта рабочего времени # Таблица формы # Таблица формы «Сотрудники» # Товары # Установка цен на товары # Формат Цифровой Маркировки # Форматированное письмо # Функция Дата # Функция ДеньГода # Функция ДеньНедели # Центральный Банк России # Цены номенклатуры 2.5 # Эквайринговый терминал # Элементы #1.6-НДФЛ #1С Бухгалтерия #1С Договоры #1С: CRM #1С: ERP #1С: ERP Управление строительной организацией #1С: ERP. Управление буровой компанией #1С: WMS Управление складом #1С: Аренда и управление недвижимостью #1С: БУХ #1С: Договорчики #1С: Документооборот #1С: ЗУП #1С: Интеграция #1С: КА #1С: Колледж #1С: Конвертация данных #1С: Модули #1С: Платформа #1С: Предприятие #1С: Розница #1С: Сценарное тестирование #1С: ТОИР #1С: УАТ #1С: УКФ #1С: Университет #1С: УНФ #1С: УПП #1С: Управление строительной организацией #1С: УТ #1С: УХ #1С:ERP #1С:БГУ #1С:БП #1С:Риелтор #1С:Управление холдингом #1С.6-НДФЛ #ADO #APACHE #API #canonical #com-объекты #Cинтаксис-помощник #Cопроводительных документов #Cправочник БИК #Excel #Excel в 1С #FTP-сервер #GoogleDrive #Googleаккаунт #GUID #HTTP #ITIL #Koderline: Управление медиа-холдингом #Koderline: Управление проектами строительства скважин #LINUX #MS SQL Server #PDF #ragent.exe #SOAP-протокол #USB- ключ #WEB #WEB-сервисы 1С #Word #WS-ссылки #XDTO-объект #XML #XML-обмен #Авансовый платеж #Администрирование 1С #Адрес URL описания #Адресный классификатор #акты в 1С #Аппаратная часть сервера #Аутентификации операционной системы #База XML #База данных #Балансовый метод #Балансовый расчет #Банковские счета #Безопасность сервера #Бесшовная интеграция #Бизнес-процесс #БИТ.Финанc #Битрикс24 #Блокировка данных #Блокировки в 1С #БСП #БУ #Бурение скважин #Бухгалтерская отчётность в МСФО #Бухгалтерский отчет #Бюджетирование #Валовая прибыль #Ввод команд #Ввод пароля #Ввоз товаров #Веб-сервер #Веб-сервер Apache #Вид договора #Вид тарифа #Вид Характеристики #Вкладка Документы #Внедрение #Внедрение ERP #Внесение правок #Внешний вид формы #Внешнюю обработку #Возврат от покупателя #Восстановление данных #Временные разницы #Временные таблицы #Всплывающие ошибки #Выбор каталога #Выбранные файлы #Вызов процедуры #Выпадающий список #Выплата аванса #Выплата отпускных сотруднику #Выполнение запроса #Выполнение кода #Выполнение транзакций #График отпусков #ГТД #Данные сотрудника #Дата действия договора #Дата документа #Движение документа #Декларация по НДС #Диагностика ошибки #Директория сервера #Дистрибутивы программ #Документ Заказ клиента #Документ Отпуск #Документ1 #Дополнительный оплачиваемый отпуск #Доработка конфигурации #Доступ к файлам #Журнал проводок #Журнал регистрации #Журнал транзакций #Журналы #Загрузить Значения #Загрузка цен в 1С #Задача для 1С #Заказ-наряд #Закладка Торговля #Закрытие месяца #Закрытие сделки #Заменить #Запись регистра сведений #Заполнения полей #Запросы 1С #Заработная плата #Зарплата и управление персоналом #Импорт товара #Имущество предприятия #инвентаризационная опись #Инвентаризация склада #Интеграционный банк-клиент #Интеграция 1С #Интервал dpi #Интерпретатор языка #Интерфейс пользователя #Информационная база #История пользователя #Источник данных #ИТС ТЕХНО #Кадровые документы #Кадровый документ #КАК ОТРАЖАЮТСЯ ТОВАРЫ В ПУТИ 1С #Как сделать в 1С #Карточка должности #Карточка номенклатуры #Карточка Объекта недвижимости #Касса ККМ #Кассовый документ #Квалификационные надбавки #Классификаторы и курсы валют #Классификаторы и курсы валют #Клиент-серверная схема #Клиент-серверный режим #Код доступа #Код ЦМТ #Код языка #Кодировка формата #Команда вызова #Командная строка #Конвертация данных #Контроль документов #Конфигурация 1С #Конфигурация 1С ЗУП 3.1 #Конфигурация системы 1С #Копирование настроек пользователей #Корпоративное сопровождение #Корректировка базы данных #Корректировка расчётов с учредителем #Криптография данных #Критерии отбора документов #Курс валюты #Курсовые разницы #Левое соединение #Лизинг #Лимит стоимости #Лицензии 1С #Лицензионный договор #Лицензия 1С КОРП #Лицензия 1С ПРОФ #Личные документы #Локальный каталог #Маркетинговая акция #Массив Номенклатур #Массовая регистрация отгулов #Меню Отчет #Место хранения #Метод объекта #Метод устранения ошибки #Методы устранения ошибки #Механизм Анализа Данных в 1С #Механизм записи #Мобильное приложение #Мобильный клиент #Моделирование #Модель данных #Модуль Диадок #Монопольный режим #МРОТ #МСФО #Налоги #Налоговая декларация #Налоговый актив #Налоговый регистр #Налоговый учет #Написание запроса #Настройка отчета #Настройка панели #Настройка параметров #Настройка пользователя #Настройка системы #Настройки пользователя по умолчанию #Начальная таблица #Начисления Арендной платы #Неверные данные #Новый Массив #Норма времени #Нормативно-справочная информация #Облачный сервис #Обмен между базами #Обмен сведениями #Обновления #Обособленное подразделение #Обработка проведения документов #Общие ознакомительные рассылки #Объект системы #Объективность информации #Объектная база данных #Окно сообщений #Оперативная аналитика #Операции в 1С #Оплата агента #Оплата по квитанции #Оплата труда #Оповещение по видам события #Оптимизация #Организация #Организация хранения #ОС и НМА #Основное окно #Основное средство #Остатки взаиморасчетов #Остатки товаров на складах #Остаток товара #Отпуск #Отчет комитенту #Отчетность #Отчетный период #Отчеты в 1С #Оформление документа #Оформление перевода работника #Охрана труда #Оценка задач #Панель инструментов #Параллельный учет #Параметр «Количество» #Параметры отбора #Параметры подключения #Партнер #Перевод сотрудника #Передача данных #Передача неисключительных прав #Перемещение отчета #Перенос данных #Перенос цен из Excel в 1С #Перечисление денежных средств #Период отбора #Периодичность ДЕНЬ #Периодичность МЕСЯЦ #Печатная форма #Печатная форма документа #План счетов #Планирование #Планировать события #Платежный документ #Погашение обязательств #Подчиненный справочник #Поле Ввода Значение Субконто #Полезные обработки #Политика учета #Пользователь Администратор #Пользовательский режим #Поступление денежных средств #Поступление основных средств #Поступление основных средств #Потенциальный контрагент #Права доступа #Правила обмена #Правое соединение #предопределенные элементы справочников #Прием на работу #Принцип работы 1С #Приходная накладная #Приходно-кассовый ордер #Проведение документов #Проведение инвентаризации #Проводки 1С #Проводок документации #Программа 1С #Программирование в 1С #Программные права #Программный код #Продажа маркированной продукции #Продажа ТМЦ #Продажа товара #Продажи #Продление #Производственный план #Производство #Просмотр #Процедура и функция #Пункт «Касса» #Путь к файлу #Работа с объектами в 1С #Рабочий сервер #Раздел Справочники #Расположение ссылки #Расторжение #Расходная накладная #Расходный ордер #Расходы по амортизации #Расчет зарплаты #Расчет НДФЛ #Расчетные документы #Расширение конфигурации #Расширение прав доступа #Расширение функционала #Регистр бухгалтерского учета #Регистр бухучета #Регистр данных #Регистры бухгалтерии #Регистры движения документов #Регламентированная отчетность #Регламентное задание #Режим записи #Режим использования модальности #Режим конфигуратор #Режим налогообложения #Режим РИБ #Резерв отпусков #Результаты поиска #Реквизит «СпЗнч» #РМК #РМК кассира #РСБУ #С # #Сверка данных учёта НДС #Свойства характеристики номенклатуры #Свойство ячейки таблицы #Сдельный заработок #Сеанс Администратор #Сегмент номенклатуры #Сервис-деск #Сетевой ключ защиты #Сетевой ключ защиты #Сетевые структуры системы #СЗВ-СТАЖ #Синхронизация данных #Система программы #СКД #Служба ИТ #Служба НСИ #Соединение COM в 1С платформе #Соединение СОМ в 1С платформе #Спецификация на товар #Список документа #Список документов #Список номенклатуры #Список прав #Справочник Лиды #Сравнение конфигураций #Строка «Касса (ККМ)» #Сумма налога #Схема отчетности #Счет-фактура #Табличная часть #Табличная часть обработки #Таможенные пошлины #Текстовый формат #Текущая Строка #Территориальная привязка #Территориальные рамки #Тестирование 1С #Техническое задание #Тип данных #Тип свойства #Тип строки #Типы данных ссылки #Толстый клиент #Тонкий клиент #Торговое оборудование #Транспортная логистика #Увольнение сотрудника #Универсальные коллекции #Управление проектами #Управленческое взаимодействие #Условие предоставления скидки #Условия труда #Установка цен номенклатуры #Учет зарплаты #Учетная политика организации #Файл обмена данными #Файловая база #Файлы обмена #Физический ключ #Финансовый результат #Финансовый учет #Форма ввода #Форма выбора элемента #Форма файла XML #Формат MicrosoftExcel #Формат даты #Формат потока #Формирование отчета #Формирование отчета #Функционал МРМ #Х-точка #Характеристики Товаров #Хранение информации #Хранилище настроек #Хранить историю изменений #Ценообразование #Центральный узел #Чтение #Шаблон обновления #Шапка отчета #Эквайринговая операция #Экзамен 1С #Экспорт товаров #Экспортная процедура #Электронная подпись #электронные подписи #элемент справочника #Элемент языка #Язык программирования #Яндекс-диск или Google-диск #Яндекс.Касса 1С под Linux 1С:УНФ Email или телефон Работа с объектами в 1С тип да Функциональные опции в 1С
Услуги программиста 1С
Получите специалиста  
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.