8.х Вопрос по функции. Как организовать

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем CSCO12103692, 18 апр 2013.

  1. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Всем доброго дня.

    Есть некая софтина на 1С. Она довольно большая, разбита на несколько модулей и я допиливаю в ней кусочек.

    У этой софтины есть некая главная процедура, которая вызывается по нажатию в одной из форм кнопки, скажем "ОК", пользователем. И эта главная процедура собственно вызывает шушеру поменьше из разных модулей и форм, которые и выполняют всю работу. (На самом деле таких "главных" процедур в софтине куча, потому как в ней есть ряд форм и и действия пользователя в них могут быть довольно разнообразны).

    Вопрос:
    Имеется функция, которая по вызову из этой "центральной" процедуры, сперва проверят некие данные, есть они или нет, и если есть, то выполняет определенные действия.
    Так вот, мне не нравится возвращаемый результат. То есть если данных нет и ничего функция не предпринимает, то возвращается False. Если данные есть и функция их обработала, то возвращается массив.

    Хотя это все будет работать, но чутье подсказывает, что бездумно мешать типы не стоит и вообще это не тру вертать что попало.

    Что делать?
    Да, можно конечно сразу создавать массив, и в случае отсутствия данных просто возвращать его пустым. А в управляющей процедуре проверять, скажем, на Количество(). Но как-то тоже не правильно.
    Другой вариант: раз возвращаются разные типы данных, то функцию, возможно, стоит просто разделить на две, в первой из которых будет происходить проверка, а во второй обработка, если что обрабатывать.

    Может что-то еще?

    зы
    В последние несколько месяцев, подобные размышления отнимают львиную долю моего времени. Хочется писать так, чтобы читать мои поделки было легко и понятно, да вот пока не всегда выходит...
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    функция возвращает true или false. Сам массив (результат) возвращать в параметре функции.
  3. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    можно вместо false возвращать Неопределено
  4. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    То есть массив инициализировать вовне функции и скидывать его как один из параметров?
    Не подумал об этом... может быть. Нужно попробовать
  5. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    +1 я тоже за неопределено. либо что-то возвращаешь, либо ничего.
  6. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура Главная ()
    ...
    Результат = НашаФункция();
    Если результат <> Неопределено Тогда
    //Какие-то действия
    КонецЕсли;
    ...
    КонецПроцедуры
    Функция НашаФункция()
    Результат = Неопределено;
    ...
    //Если данные есть и обработаны, то
    Результат = НашМассив;
    Возврат Результат;
    КонецФункции
    Примерно так?
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
  8. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    можно так..

    Код:
    Процедура Главная ()
    ...
    Результат = НашаФункция();
    Если результат <> Неопределено Тогда
    //Какие-то действия
    КонецЕсли;
    ...
    КонецПроцедуры
    
    Функция НашаФункция()
    
    Если блабла Тогда
    Возврат Результат;
    Иначе
    Возврат Неопределено;
    КонецЕсли;
    
    КонецФункции
    [/code]
  9. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Мне, под вашим давлением :) , и самому начало казаться, что True и False здесь лишние.....
  10. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    просто если посмотреть резльтат работы многих штатных функций, то они возвращают либо результат определенного типа, либо Неопределено. Исключения пожалуй ссылки на элементы - там пустая ссылка может вернуться
  11. TopicStarter Overlay
    CSCO12103692
    Offline

    CSCO12103692 Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Хочу еще немного поспрашать.

    Предположим в управляющей процедуре есть (близко к оригиналу) есть функции:
    .....
    .....
    1. Залезть на сервер и скачать определенные файлы.
    2. Скачанные файлы прочитать и проверить, что они нужного формата и не повреждены при передаче. И что они вообще то, что ожидается, а не какой-то мустор с правильным расширением.
    3. Получить определенные служебные данные из загаловка файла нужные для дальнейшей работы (хотя после прочтения файла правильнее сказать из строки).
    4. Получение и детальный разбор уже пользовательских данных из этого файла.
    5. Обработка пользовательских данных
    6. что-то еще...
    ....


    Если все делать через Неопределено и Если, то управляющая функция принимает вид:

    Код:
    Процедура ЯЗаВсемиПрисмотрю()
    ...
    результатПервойФункции = ФункцияАдын(...);
    Если результатПервойФункции <> Неопределено Тогда
    //Что-то делаем
    Иначе
    Возврат;
    КонецЕсли;
    ...
    ...
    результатВторойФункции = ФункцияДжва(...);
    Если результатВторойФункции <> Неопределено Тогда
    //Что-то делаем
    Иначе
    Возврат;
    КонецЕсли;
    ...
    ...
    // И так 100500 раз.
    КонецПроцедуры
    
    Да, работать будет, и даже все прозрачно. Но эстет во мне матерится!

    Это нормальная практика или можно сделать красивее?
  12. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    можно вот такой вариант предложить
    Код:
    Процедура ЯЗаВсемиПрисмотрю()
    ...
    результатПервойФункции = ФункцияАдын(...);
    Если результатПервойФункции <> Неопределено Тогда
    //Что-то делаем
    ...
    результатВторойФункции = ФункцияДжва(...);
    Если результатВторойФункции <> Неопределено Тогда
    //Что-то делаем
    ....
    //и т.д.
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
    но первый вариант более наглядный и понятный лично для меня
  13. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    ЫЫЫ - извращусь..


    Код:
    Если
    Функция1()=Неопределено
    ИЛИ Функция2()=Неопределено
    ИЛИ Функция3()=Неопределено
    ИЛИ Функция4()=Неопределено
    Тогда
    сообщить("ах ты ж...");
    возврат;
    КонецЕсли;

Поделиться этой страницей