Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 21:41

Как переделать функцию

Автор tmpnikl, 08 апр 2015, 09:39

0 Пользователей и 1 гость просматривают эту тему.

tmpnikl

есть функция (утриравано, сократил, чтоб не отвлекаться на мелочи)

если ПроверкаДублейКонтрагентов() = 0 Тогда

Функция ПроверкаДублейКонтрагентов()
Если НайтиЗначение(Контр, СтрокаТек, "Контр") = 1 Тогда
Возврат 0;
иначе
Возврат 1;
КонецЕсли;
Мне надо, чтоб не только возвращался 1 или 0, но и СтрокаТек
как это сделать?, если записать внутри скобок, ПроверкаДублейКонтрагентов(Параметр_СтрокаТек), то будет ли передаваться 0-1, непонятно...


Mitay_D

Цитировать
Перем Стр;   
//***************************************************
Функция  ВашеИмяФункции (Параметр1,Параметр2,Стр )
   
    Параметр1 = Параметр1 + 10;
    РезультатФункции = Параметр1+Параметр2;
    Стр = "Что нибудь";     
    Возврат РезультатФункции;   
КонецФункции
//*******************************************************
Процедура  Сформировать()
   
    ПередаваемыйПараметр1 = 15;       
    Результат =  ВашеИмяФункции (ПередаваемыйПараметр1,10,Стр);     
    Сообщить(ПередаваемыйПараметр1);
    Сообщить(Стр);
КонецПроцедуры
что-то такое надо?

tmpnikl

Спасибо, не совсем понятно с переменой "Стр"
Перем Стр;
Функция  ВашеИмяФункции (Параметр1,Параметр2,Стр )
Т.к. она объявляется в блоке переменных, то она видна во всех ниже расположенных функциях и передавать её это лишнее(напишите, если это не так),
Как я заметил, вызываемая функция должна располагаться выше процедуры откуда происходит вызов
....нет, ничего не понятно.. :-(
если бы было вроде этого
Сообщить(ПередаваемыйПараметр1);  //Передали 15 а на выходе получили 25
"Результат" стал = "Возврат РезультатФункции;"
не, не понятно....
т.е. передали Параметр1=""
в функции изменили его, получили Параметр1="....", и какой-то результат (1-0), правильно или нет?

Дмитрий@

Можно записать возвращаемые параметры в структуру, и возвращать структуру.

tmpnikl

Цитата: Дмитрий@ от 09 апр 2015, 13:32
Можно записать возвращаемые параметры в структуру, и возвращать структуру.
А можно показать на примере?

fipolaz

Непонятно изложенно, но попробуем разобраться. Есть функция:

Функция ПроверкаДублейКонтрагентов()
//
Если НайтиЗначение(Контр, СтрокаТек, "Контр") = 1 Тогда
Возврат 0;
Иначе
Возврат 1;
КонецЕсли;
КонецФункции//ПроверкаДублейКонтрагентов

Упрощаем:

Функция ПроверкаДублейКонтрагентов()
//
Возврат ?(НайтиЗначение(Контр,СтрокаТек,"Контр")=1,0,1);
КонецФункции//ПроверкаДублейКонтрагентов

Функция возвращает 0 или 1, а надо чтобы возвращался не только 1 или 0, но и СтрокаТек определённая в функции.

Функцию вызывает:

Если ПроверкаДублейКонтрагентов()=0 Тогда


Воспользуйся советом Mitay_D и добавь перед вызовом:

СтрокаТек=0;

расширь вызов функции:

Если ПроверкаДублейКонтрагентов(СтрокаТек)=0 Тогда

расширь функцию:

Функция ПроверкаДублейКонтрагентов(СтрокаТек)

в итоге:

Функция ПроверкаДублейКонтрагентов(СтрокаТек)
//
Возврат ?(НайтиЗначение(Контр,СтрокаТек,"Контр")=1,0,1);
КонецФункции//ПроверкаДублейКонтрагентов

СтрокаТек=0;
Если ПроверкаДублейКонтрагентов(СтрокаТек)=0 Тогда
// в СтрокаТек значение вычисленное в функции ПроверкаДублейКонтрагентов


Добавлено: 13 апр 2015, 13:24


Можно по совету
Дмитрий@ записать возвращаемые параметры в структуру, используя в качестве структуры базовые виды структур: СписокЗначений или ТаблицаЗначений - или же структуру Структура внешней компоненты 1СРР.dll.

Дмитрий@

ЦитироватьА можно показать на примере?
СтруктураПроверки = ПроверкаДублейКонтрагентов();
если СтруктураПроверки.Значение = 0 Тогда
СтрокаТек = СтруктураПроверки.СтрокаТек;

Функция ПроверкаДублейКонтрагентов()
Структура = Новый Структура;
Если НайтиЗначение(Контр, СтрокаТек, "Контр") = 1 Тогда
Структура.Вставить("Значение",0);
Структура.Вставить("СтрокаТек",СтрокаТек);
иначе
Структура.Вставить("Значение",1);
Структура.Вставить("СтрокаТек",СтрокаТек);
КонецЕсли;
Возврат Структура;
КонецФункции

tmpnikl


fipolaz

Дмитрий@, по поводу:
Цитировать

Функция ПроверкаДублейКонтрагентов()
Структура = Новый Структура;
//          ^^^^^
//             \
//             это
Если НайтиЗначение(Контр, СтрокаТек, "Контр") = 1 Тогда

поясни как это работает в 7.7?

ProSoft


Теги:

Похожие темы (3)

Рейтинг@Mail.ru

Поиск