TestIB8x - Безопасный код - Option Explicit

Публикация № 17083

Разработка - Практика программирования

2
Предварительное решение следующей ситуации: "Мы берём некую "универсальную" экспортную функцию, включаем её в свою конфигурацию и эта функция в качестве побочного эффекта затирает значения наших переменных (уровня приложения, уровня модуля, ...)."

А откуда бы автор этой функции мог догадаться, что мы будем использовать такие же "редкие" идентификаторы как "Валюта", "Индикатор", прочее ... ;-)!?

Желающих приглашаю к обсуждению данного решения, может что важное упущено?


Безопасный код – Option Explicit


Категория: Безопасный код
Название: Option Explicit
GUID: 5c11d53e-1dda-4ccb-9ce2-4ea01a9a142c
Версия: 1 от 26.12.07

Введение

Достаточно распространенной является ситуация, когда некая универсальная функция, объявленная с ключевым параметром Экспорт, в своём теле содержит присваивание неявно объявленных переменных.

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

Пример:
Перем  х;
Функция  Универсальная()   Экспорт

х = 1;
Сообщить("Внутри функции: "+ х);

Возврат "";
КонецФункции 

Функция ИспользуетУниверсальную() 

х = 6;
	
	
Сообщить("До вызова функции: "+ х);
Рез = Универсальная();
Сообщить("После вызова функции: "+ х);

// В этом месте значение х будет равно 1, // а должно быть х = 6 
Возврат "";

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

 


Для исключения подобных коллизий необходимо проверить каждую экспортную функцию на предмет полноты блока объявления переменных.

Но, как мы понимаем, это очень тяжелая задача для любой достаточно сложной функции. Поэтому помощь компьютера будет не лишней.

Реализация

При программировании универсальной функции любая внутренняя переменная должна быть объявлена в блоке объявления переменных. Использование переменных уровня приложения, внешнего соединения или модуля желательно свести к минимуму и "всячески документировать".

Тестирование

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

В ходе теста формируется готовый, предположительно правильный блок объявлений переменных, который можно вставить в тело экспортной функции.

Шаг 1 Проверка общих модулей


Для каждой экспортной функции:
1. Создать список объявленных переменных
2. Найти все переменные из операции присваивание
3. Сформировать, при необходимости правильный блок объявлений переменных

Шаг 2 Проверка модулей объектов и модулей формы


1. Создать список реквизитов объекта
2. Создать список объявленных переменных
3. Создать список переменных модуля
4. Найти все переменные из операции присваивание
5. Сформировать, при необходимости правильный блок объявлений переменных
2

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. CheBurator 27.12.07 15:16 Сейчас в теме
2. vasilykushnir 27.12.07 16:40 Сейчас в теме
Дык это вроде азы... Как бы основа "правильного" стиля программирования. Честно говоря за конструкцию

Перем х;

Функция Универсальная() Экспорт
х = 1;
Сообщить("Внутри функции: "+х);

Возврат "";
КонецФункции

сразу в дыню надо давать - функция принимает параметры через вызов и отдает результат через Возврат, все остальное д.б. внутри априори.
3. vasilykushnir 27.12.07 16:45 Сейчас в теме
Хотя ты, пожалуй, прав - каких только "чудачеств" не увидишь...
Поэтому статью считаю полезной для начинающих типа "Я только начал изучать1С, как мне написать конфигурацию с нуля для металлургического завода?". И посему будет +1
4. Shaman100M 1191 29.12.07 10:59 Сейчас в теме
Каждый раз, по завершении причесывая код, занимаюсь подобной глазоломалкой..., - неплохая идея автоматизировать этот процесс. При окончательном формировании блока объявлений добавил бы к проверяемым спискам еще параметры самой функции и переменные-параметры вызываемых процедур и функций
Оставьте свое сообщение

См. также

Дистрибьюция 7.7. Часть 1. Жизненный цикл заявки покупателя. Одна заявка покупателя, много адресов доставки. 1

Статья Программист Нет файла v7.7 1С7:Комплекс 1С7:ТиС УУ Бесплатно (free) Практика программирования Адаптация типовых решений

Описан способ работы с учетом расписания с приоритетными покупателями - торговыми сетями (основными покупателями) в торговой или комплексной учетной системе на 1С 7.7. Множественная заявка покупателя на несколько торговых точек.

14.10.2019    383    ksnik    0       

Проверка часового пояса 9

Статья Программист Нет файла v7.7 Windows Бесплатно (free) Практика программирования

При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.

16.05.2016    8128    kudenzov    3       

[ПОЛЕЗНЯШКА, 7.7] Как посчитать итоги по документам черным запросом с изподвывертом? 13

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования

Мелкая полезняшка, считает запросом итоговую сумму документов и количество документов.

12.03.2016    15442    CheBurator    18       

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция 111

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования WEB

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    48271    Serginio    33       

.Net в 1С. Асинхронные HTTP запросы, отправка Post нескольких файлов multipart/form-data, сжатие трафика с использованием gzip, deflate, удобный парсинг сайтов и т.д. 37

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент WEB

Очень часто нужно при работе с HTTP сервисами или сайтами использовать Асинхронные HTTP запросы, отправку на сервер нескольких файлов, использование сжатия трафика. Эта статья про то, как этого легко добиться.

09.03.2016    25303    Serginio    22       

Использование классов .Net в 1С для новичков 147

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент Универсальные функции

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    62655    Serginio    104       

Пример HTTP запроса к УТМ ЕГАИС на платформе 1С 7.7 15

Статья Программист Нет файла v7.7 1cv7.md Россия Windows Оптовая торговля Розничная торговля Бесплатно (free) Практика программирования Внешние источники данных

Запрос реализован на объекте ServerXMLHTTP из встроенной в Windows библиотеки MSXML, результатом запроса является XML объект DOMDocument из той же библиотеки MSXML со встроенным интерфейсом его обработки

16.12.2015    19924    Palmer1976    3       

Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм 20

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).

23.11.2015    13901    etmarket    14       

Процедура расшифровки ячейки таблицы в отчетах 1С 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования Универсальные функции

Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.

24.09.2015    13725    Anzhey    13       

Универсальный способ сравнения таблиц 15

Статья Программист Нет файла v7.7 v8 Бесплатно (free) Практика программирования

На эту тему уже есть статьи, но этот способ нигде не описан. Хотя я его использую с тех пор, как занимаюсь программированием. Его преимущество в простоте и универсальности: можно применять на 1С, SQL, а также в любом другом языке программирования.

05.07.2015    14721    json    1       

Числа прописью в родительном падеже в 7.7? Легко! 13

Статья Программист Нет файла v7.7 1cv7.md Windows Бесплатно (free) Практика программирования

Вывод числительных прописью в родительном падеже штатными средствами в три строчки кода.

20.06.2015    9981    gimalaj    3       

Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним 78

Статья Программист Нет файла v7.7 v8 1cv8.cf 1cv7.md Windows Бесплатно (free) Практика программирования Загрузка и выгрузка в Excel

Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл. Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат Excel.

16.01.2015    70673    shmellevich    35       

Исправление в типовой комплексной конфигурации глобальной функции глВсеРеквизитыДокументаЗаполнены() 4

Статья Программист Нет файла v7.7 1С7:Комплекс Россия Windows Бесплатно (free) Практика программирования

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

20.08.2014    5940    hvv2002    0       

ЗаполнитьЗначенияСвойств - заставляем работать в 7.7 11

Статья Программист Нет файла v7.7 1cv7.md Бесплатно (free) Практика программирования

Если вы используете в работе 1С:Предприятие 8.х, то наверняка знакомы и с замечательной системной процедурой, как ЗаполнитьЗначенияСвойств(). Ее использование помогает значительно упростить написание программного кода в ряде случае, делает его (код) более наглядным и простым. Но что же делать тем, кто до сих пор использует (постоянно или иногда) 1С:Предприятие 7.7?

24.07.2014    18694    tomvlad    5       

Полезные функции. Склонение (должность и фамилия подписантов). Любой язык 3

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования

Уехал директор в командировку, отпуск... , оставил доверенность на хозяйственные операции на другого сотрудника. Все договора и другие документы в обмороке - "подписант" теперь другой, по тексту тоже много правок... Пересмотрел много публикаций, вариантов много, не приглянулось. Сделал свой "Баян" . У меня всего-то крутится пять фигурантов ... Нет простого, наглядного и всепогодного варианта без языкового барьера. Всем процессом управляет пользователь.

03.03.2014    15293    kompas-dm    5       

Реализация Ctrl+Z в 1С 7.7 (ТиС) 7

Статья Программист Нет файла v7.7 1С7:ТиС Windows Бесплатно (free) Практика программирования

В семерке отсутствует возможность отменять последнее действие в формах документов. В данной статье будет рассмотрен пример реализации данной функции. Возможно, кому-нибудь пригодится.

15.07.2013    5494    a.o.popova    10       

Копия напечатанного документа или как спрятать документ. 2

Статья Программист Нет файла v7.7 Бесплатно (free) Журнал регистрации Практика программирования

Возникла необходимость, чтобы при печати определённого документа (даже потом не сохранённого), создавалась его копия, т.е. запись всех напечатанных документов. (В результате чего возникла такая потребность, полагаюсь на вашу фантазию). В итоге получилось два варианта решения, остановился на втором.

11.04.2013    13068    Dima_    8       

Автосохранение документа в 1С 7.7 3

Статья Программист Нет файла v7.7 1cv7.md Россия Windows Бесплатно (free) Практика программирования

В данной статье мы рассмотрим автосохранение документа в 1С 7.7!

22.03.2013    11021    aagubarev    25       

Конвертация данных 2.1 (2.1.3.1) 1С 7.7 - 1С 8.Х передача параметра ПКО 14

Статья Системный администратор Программист Нет файла v7.7 v8 КД Бесплатно (free) Практика программирования Перенос данных из 1С7.7 в 1C8.X

Передача параметров по умолчанию доступна только для баз 1С 8.х -1С 8.х. Показан пример, как передать параметры из 1С 7.7 - 1С 8.х

10.12.2012    22136    serg_gres    6       

Устранение проблемы при работе с полем, которое ограничено маской ввода 3

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Для поля, у которого установлена маска ввода, перед программной инициализацией необходимо начальное значение преобразовать к значению в соответствии с маской, иначе буду потеряны символы в местах разделителях. В данной публикации приведена функция, которая универсально выполняет данное действие.

08.08.2012    14085    www2000    4       

Динамическая фильтрация в справочнике при вводе наименования 15

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

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

02.07.2012    14193    maxpiter    62       

Обновление базы 1с 7.7. с помощью движка 1с 8.х 92

Статья Системный администратор Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования Администрирование данных 1С

Если Вас угораздило в стандартную типовую конфу внести правки, причем в самый большой модуль, а именно глобальный. Если к тому же Вы внесли изменение в какую-то стандартную функцию, в которой 1с сама регулярно чего-то меняет, то любое обновление начинает доставать. Используя возможности движка платформы 1с 8.х можно существенно сэкономить себе время и нервы.

28.04.2012    15818    Valerich    31       

v77. Робот 43

Инструменты и обработки no Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Исполнитель Робот. Учебное пособие по программированию для детей дошкольного возраста. Без внешних компонент.

09.04.2012    10134    54    item    18       

Запуск внешней обработки по расписанию v7.7 39

Статья Программист Нет файла v7.7 1cv7.md Россия Windows Бесплатно (free) Практика программирования Администрирование данных 1С

Неоднократно возникали задачи организовать, например ежедневную выгрузку и отправку отчетов по эл.почте, и вот…

20.03.2012    39446    Yury1001    17       

v77. Закладки в многоуровневом справочнике аля Total Commander 28

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

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

09.03.2012    8772    44    item    17       

v77. Паинт 53

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

v77. 1С:Паинт :) Такая вот игрушка. Без внешних компонент.

06.03.2012    11861    81    item    38       

Как уменьшить количество заблокированных объектов 26

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

История о том как я решил пересобрать форму справочника клиентов и чем это все закончилось...

12.01.2012    13159    ShEvOvIcH    18       

Регистрация текста окна сообщений 4

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Для контроля работы пользователей потребовалось записывать текст окна сообщений в файл. Получился простейший механизм регистрации лог-файла. Удержать роста папки "Temp", в качестве рекомендации, может использование bat-файла, который будет чистить или архивировать получаемые логи. Таких батников в инете полным-полно. P.S. Особо по форуму не смотрел, может, есть уже такое.

28.11.2011    6322    sdin101    9       

7.7.: Готовим md-файл для публикации. В картинках. 46

Статья Программист Нет файла v7.7 1cv7.md Россия Бесплатно (free) Практика программирования

Вы доработали типовую конфигурацию: скажем, добавили новый Документ, и хотите им поделиться с обществом ИС. Но нельзя же выложить МД-шник целиком, это будет нарушением правил. И как тут быть?

14.09.2011    15004    Арчибальд    21       

Учет доверенностей 6

Статья Программист Нет файла v7.7 1С7:Бух 1С7:Комплекс 1С7:ТиС 1С7:ПУБ Документооборот и делопроизводство Бесплатно (free) Практика программирования

В расходных документах есть необходимость проставления доверенности. Но заносить каждый раз одни и те же данные бывает утомительно. особенно при больших оборотах.

08.09.2011    9520    Sykoku    8       

Методика расчета резервов отпусков (счет 96) в 1С Зарплата и Кадры 7.7 с 2011 года (вариант) 32

Статья Программист Нет файла v77::Расчет 1С7:Бух 1С7:ЗиК Россия БУ Зарплата Бесплатно (free) Практика программирования

В статье рассмотрен один из возможных вариантов расчета резервов отпусков (счет 96) в 1С Зарплата и Кадры 7.7 с 2011 года.

14.06.2011    19370    vkr    48       

Выбор Движений документа по конкретному регистру, с помощью прямого запроса 0

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 openconf 1cv7.md Россия Бесплатно (free) Практика программирования

Чтобы узнать какие движения сделал документ по конкретному регистру, в моем случае это регистр "ОстаткиПоСчетам" (оборотный), была написана следующая функция в глобальном модуле. Работает только для SQL версии и установленной внешнй компонентой 1С++!

26.05.2011    10502    Vix    4       

Прямой запрос на выборку подчиненных документов 6

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 openconf 1cv7.md Россия Бесплатно (free) Практика программирования

Иногда необходимо получить список или таблицу документов, подчиненных выбранному. Для этого в глобальном модуле была написана функция с прямым запросом на выборку подчиненных документов. Работает только в SQL версии и при установленной внешней компоненте 1С++ !

26.05.2011    16819    Vix    5       

Некоторые ошибки и «проблемные» особенности реализации встроенного языка платформы 1С:Предприятие 7.7 96

Статья Программист Нет файла v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Бесплатно (free) Практика программирования

Описание некоторых ошибок и особенностей реализации встроенного языка, которые создают «подводные камни» при программировании, а также возможных способов обхода этих проблем из собственного опыта работы на платформе 1С:Предприятие 7.7.

08.04.2011    41956    AleksR    102       

Монопольно ли запущена база 7.7 для SQL. Снятие single user в sql 9

Статья Системный администратор Программист Нет файла v7.7 openconf 1cv7.md Россия Бесплатно (free) Информационная безопасность Практика программирования

T-SQL скрипт, позволяющий определить монопольно ли запущена база на сервере SQL, а также перевести базу в multi user

11.03.2011    16382    d0dger    12       

Отпуск по уходу за ребенком. Расчет по-новому и по-старому 32

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Россия Управление персоналом (HRM) Бесплатно (free) Практика программирования

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

11.03.2011    10155    Nicholas    9       

Ошибки формата файла 2-НДФЛ в ЗиК релиз 306 100

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Россия НУ Зарплата НДФЛ Бесплатно (free) Практика программирования

Ошибки 2НДФЛ в релизе: файл формируется как для ЮЛ, даже если работодатель ИП, опечатка "Отчетсвто", и указание имени файла с расширением. Нужно подправить отчет "СправкиПоНДФЛ".

02.02.2011    17073    1st    6       

ЗиК 305 ЗиК 306 Больничный лист. 107

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Россия Зарплата Бесплатно (free) Практика программирования

Для переходящих больничных листов за счет работодателя оплачивается 2 дня, а не 3. Первоисточник: http://forums.kuban.ru/forum/viewtopi...669&page=2

25.01.2011    12176    Cvetic    26