IT Студия Programmist1C
Услуги
  • Внедрение и сопровождение 1С
    • Маркировка импорта обуви
    • Hастройка 1С
    • Обслуживание 1С
    • Программирование 1С
    • Доработка 1С
    • Автоматизация 1С
    • Сопровождение 1С
    • Внедрение 1С
  • Создание сайтов
    • Посадочные страницы
    • Корпоративные сайты
    • Интернет-магазины
  • Битрикс24
    • Техническая поддержка Битрикс24
    • Внедрение Битрикс24
    • Интеграции Битрикс24
  • Реклама и продвижение
    • Оптимизация сайтов
    • Контекстная реклама
    • SEO для интернет-магазинов
    • Продвижение сайтов
Проекты
  • Внедрение 1С
  • Создание WEB Сайтов
Компания
  • О компании
  • Партнеры
  • Реквизиты
  • Вопрос ответ
Пресс-центр
Контакты
Ещё
    Задать вопрос
    +7 (985) 141-74-63
    info@programmist1c.ru
    Москва, ул. Генерала Кузнецова, 17Б
    +7 (985) 141-74-63
    IT Студия Programmist1C
    Услуги
    • Внедрение и сопровождение 1С
      • Маркировка импорта обуви —
      • Hастройка 1С —
      • Обслуживание 1С —
      • Программирование 1С —
      • Доработка 1С —
      • Автоматизация 1С —
      • Сопровождение 1С —
      • Внедрение 1С
    • Создание сайтов
      Создание сайтов
      • Посадочные страницы —
      • Корпоративные сайты —
      • Интернет-магазины
    • Битрикс24
      Битрикс24
      • Техническая поддержка Битрикс24 —
      • Внедрение Битрикс24 —
      • Интеграции Битрикс24
    • Реклама и продвижение
      Реклама и продвижение
      • Оптимизация сайтов —
      • Контекстная реклама —
      • SEO для интернет-магазинов —
      • Продвижение сайтов
    Проекты
    • Внедрение 1С
    • Создание WEB Сайтов
    Компания
    • О компании
    • Партнеры
    • Реквизиты
    • Вопрос ответ
    Пресс-центр
    Контакты
      IT Студия Programmist1C
      Услуги
      • Внедрение и сопровождение 1С
        • Маркировка импорта обуви —
        • Hастройка 1С —
        • Обслуживание 1С —
        • Программирование 1С —
        • Доработка 1С —
        • Автоматизация 1С —
        • Сопровождение 1С —
        • Внедрение 1С
      • Создание сайтов
        Создание сайтов
        • Посадочные страницы —
        • Корпоративные сайты —
        • Интернет-магазины
      • Битрикс24
        Битрикс24
        • Техническая поддержка Битрикс24 —
        • Внедрение Битрикс24 —
        • Интеграции Битрикс24
      • Реклама и продвижение
        Реклама и продвижение
        • Оптимизация сайтов —
        • Контекстная реклама —
        • SEO для интернет-магазинов —
        • Продвижение сайтов
      Проекты
      • Внедрение 1С
      • Создание WEB Сайтов
      Компания
      • О компании
      • Партнеры
      • Реквизиты
      • Вопрос ответ
      Пресс-центр
      Контакты
        IT Студия Programmist1C
        IT Студия Programmist1C
        • Услуги
          • Назад
          • Услуги
          • Внедрение и сопровождение 1С
            • Назад
            • Внедрение и сопровождение 1С
            • Маркировка импорта обуви
            • Hастройка 1С
            • Обслуживание 1С
            • Программирование 1С
            • Доработка 1С
            • Автоматизация 1С
            • Сопровождение 1С
            • Внедрение 1С
          • Создание сайтов
            • Назад
            • Создание сайтов
            • Посадочные страницы
            • Корпоративные сайты
            • Интернет-магазины
          • Битрикс24
            • Назад
            • Битрикс24
            • Техническая поддержка Битрикс24
            • Внедрение Битрикс24
            • Интеграции Битрикс24
          • Реклама и продвижение
            • Назад
            • Реклама и продвижение
            • Оптимизация сайтов
            • Контекстная реклама
            • SEO для интернет-магазинов
            • Продвижение сайтов
        • Проекты
          • Назад
          • Проекты
          • Внедрение 1С
          • Создание WEB Сайтов
        • Компания
          • Назад
          • Компания
          • О компании
          • Партнеры
          • Реквизиты
          • Вопрос ответ
        • Пресс-центр
        • Контакты
        • +7 (985) 141-74-63
        info@programmist1c.ru
        Москва, ул. Генерала Кузнецова, 17Б
        • Главная
        • Примеры программирования

        v8: Альтернатива стеку - передача параметров контекстом.

        Мы всегда на связи
        Заказать звонок
        Написать сообщение
        Я на практике применяю довольно удачный способ передачи переменных. Такой способ позволяет мне обходиться без глобальных переменных.
        Автор статьи: Гений 1С | Редакторы:
        Последняя редакция №2 от 08.02.07 |


        Ключевые слова: стек,переменная,параметр


        Альтернатива стеку


        Часто функции 1С обрастают большим числом параметров.
        Но ладно бы, если бы только одна функция обрастала такими параметрами, но при вызове из этой функции другой функции, той  могут понадобиться параметры первой функции, следовательно,  число параметров будет расти во всех функциях.

        Альтернативой такой организации передачи данных являются глобальные переменные или передача данных в виде структуры (контекста). Глобальные данные нарушают прозрачность и изолированность кода, поэтому остановимся на втором способе.

        Удобнее всего, чтобы функции имели только один параметр П.
        Тогда можно передавать весь контекст от функции к функции.

        Однако как быть, если в контексте есть уже некий параметр, а нам нужно вычислить функцию с другим значением этого параметра? Причем исходный контекст нам менять нельзя? Такое часто встречается в рекурсивных или сложнозависимых функциях, которые непредсказуемым образом вызывают друг друга.

        Предлагаю использовать вот такие простые функции:
        Функция НовПрм(П, Стр) Экспорт
            Стр.Вставить("___Родитель", П);
            Возврат Стр;
        КонецФункции
        
        //Ищет свойство сначала в структуре П, а затем во всех ее родительских структурах
        Функция Прм(П, Свойство) Экспорт
            Перем Р;
            Если П.Свойство(Свойство, Р) Тогда
                Возврат Р;
            КонецЕсли;
            
            Если П.Свойство("___Родитель", Р) Тогда
                Возврат Прм(Р, Свойство);
            КонецЕсли;
            
            Возврат Неопределено;
        КонецФункции
        

        Вот пример использования:
        Функция А(П)
            Если П.Рост>100 Тогда
                А(НовПрм(П, Новый Структура("Рост", П.Рост%100)));
            КонецЕсли;
            Сообщить("Рост:"+Прм(П, "Рост"));
        КонецФункции
        
        А(Новый Структура("Рост, Вес", 90, 35));
        А(Новый Структура("Рост, Вес", 176, 79));
        

        В результате будет выведено:
        Рост:90
        Рост:76
        Рост:176

        Как видно из примера, если нам нужно организовать вычисления с перекрывающимся параметром, мы не меняем, а просто расширяем контекст.

        Возможен конечно и вариант, когда контекст меняется, а затем восстанавливается, но он чреват ошибками, если забыть восстановить контекст, да и менее элегантен:
        Функция А(П)
            Если П.Рост>100 Тогда
                _Рост=П.Рост(П.Рост%100);
                А(П);
                П.Рост=_Рост;
            КонецЕсли;
            Сообщить("Рост:"+Прм(П, "Рост"));
        КонецФункции
        
        А(Новый Структура("Рост, Вес", 90, 35));
        А(Новый Структура("Рост, Вес", 176, 79));
        
        Услуги
        Внедрение и сопровождение 1С
        Создание сайтов
        Битрикс24
        Реклама и продвижение
        Компания
        О компании
        Партнеры
        Реквизиты
        Вопрос ответ
        Проекты
        Пресс-центр
        Контакты
        Возможности
        Подписка на рассылку
        +7 (985) 141-74-63
        Заказать звонок
        info@programmist1c.ru
        Москва, ул. Генерала Кузнецова, 17Б
        Версия для печати
        Политика конфиденциальности
        © 2021 Все права защищены.
        Заказать звонок
        Написать сообщение