подскажите как из глобального модуля перенести переменну.
18.06.2009
14:59
#21
"А если сделать так:
объявить в глобальном модуле переменную Среднее тоже как Экспорт
и написать:
Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
Среднее =Запрос.СуммаСреднее;
Возврат Среднее;
КонецЕсли;
"
объявить в глобальном модуле переменную Среднее тоже как Экспорт
и написать:
Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
Среднее =Запрос.СуммаСреднее;
Возврат Среднее;
КонецЕсли;
"
18.06.2009
15:02
#22
"> господин belicovS вы я смотрю смый умный , вы только критикуете, а сами дали дельный совет.Не суди и судим не будешь-плохие програмеры всегда злятся и критикуют других.
Зачем обижаться? Просто то, что вы пишете,лишено смысла.
Вам belicovS дал правильный совет, который понял бы любой программист! Использовать следующее:
> НачисленоЗаОтпуск = СформироватьСредний();
Элементарные вещи: функция возвращает не переменную, а ее значение!!! Переменная существовала только внутри самой функции, вышли-исчезла. Это азы программирования, но вы этого не поняли. Вам еще раз это же посоветовали и shindi, и ЗаЕц. Но вы все равно не понимаете.
естественно, после этого совет
> Позовите наконец программиста - он вам это сделает за 5 минут
"
Зачем обижаться? Просто то, что вы пишете,лишено смысла.
Вам belicovS дал правильный совет, который понял бы любой программист! Использовать следующее:
> НачисленоЗаОтпуск = СформироватьСредний();
Элементарные вещи: функция возвращает не переменную, а ее значение!!! Переменная существовала только внутри самой функции, вышли-исчезла. Это азы программирования, но вы этого не поняли. Вам еще раз это же посоветовали и shindi, и ЗаЕц. Но вы все равно не понимаете.
естественно, после этого совет
> Позовите наконец программиста - он вам это сделает за 5 минут
"
18.06.2009
15:04
#23
"> А если сделать так:
> объявить в глобальном модуле переменную Среднее тоже как Экспорт
> и написать:
> Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
> Среднее =Запрос.СуммаСреднее;
> Возврат Среднее;
> КонецЕсли;
>
А зачем? ведь строки НачисленоЗаОтпуск = СформироватьСредний(); более, чем достаточно.
"
> объявить в глобальном модуле переменную Среднее тоже как Экспорт
> и написать:
> Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
> Среднее =Запрос.СуммаСреднее;
> Возврат Среднее;
> КонецЕсли;
>
А зачем? ведь строки НачисленоЗаОтпуск = СформироватьСредний(); более, чем достаточно.
"
18.06.2009
15:10
#24
ну не получается же у нее так все равно. Пусть попробует по-другому. страшного-то ничего нет.
18.06.2009
15:13
#25
"Ладно начну с начала, а то я вижу что меня не понимают:
///это в отчете , получили данные за месяц по одному запросу ,
Пока Запрос.Группировка() = 1 Цикл
Премия =Окр(ОтработаноЗаМесяц*0.3*Запрос.ПремияПроцент/100,2);//мы вычислили премию теперь объявляем функцию, для нахождения сред.
СформироватьСредний();//это функция объявления, которая находится в глобальнике т.е.ушли в глобальник сформировали там запрос:
Функция СформироватьСредний() Экспорт
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
ЗначениеМесяца = ДатаМесяц(РабочаяДата());
Если ЗначениеМесяца = 6 тогда
Мес1 = Дата("30.06.2009");
Мес3 = Дата("01.04.2009");
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Мес3 по Мес1;
|Обрабатывать НеПомеченныеНаУдаление;
|Сотрудник = Документ.Отпускные.Сотрудник;
|Сумма = Документ.Отпускные.Сумма;
|ДатаДок = Документ.Отпускные.ДатаДок;
|ТекущийДокумент = Документ.Отпускные.ТекущийДокумент;
|Функция СуммаСреднее = Среднее(Сумма);
|Функция ТекущийДокументСуммаСумма = Сумма(ТекущийДокумент);
|Группировка Сотрудник без упорядочивания без групп;
|Условие(Сотрудник = Сотрудник);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Среднее = Запрос.СуммаСреднее;
Возврат Среднее ;//вот это должно уйти в отчет, но после перехода в отчет он выдает ошибку, поле агрегатного объекта не обнаружено или ещё что-нибудь, вот этот переход меня и волнует я прошу подсказать что я делаю не так, а в ответ читаю только.....,мне нужна помощь а не критика .
"
///это в отчете , получили данные за месяц по одному запросу ,
Пока Запрос.Группировка() = 1 Цикл
Премия =Окр(ОтработаноЗаМесяц*0.3*Запрос.ПремияПроцент/100,2);//мы вычислили премию теперь объявляем функцию, для нахождения сред.
СформироватьСредний();//это функция объявления, которая находится в глобальнике т.е.ушли в глобальник сформировали там запрос:
Функция СформироватьСредний() Экспорт
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос
ЗначениеМесяца = ДатаМесяц(РабочаяДата());
Если ЗначениеМесяца = 6 тогда
Мес1 = Дата("30.06.2009");
Мес3 = Дата("01.04.2009");
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с Мес3 по Мес1;
|Обрабатывать НеПомеченныеНаУдаление;
|Сотрудник = Документ.Отпускные.Сотрудник;
|Сумма = Документ.Отпускные.Сумма;
|ДатаДок = Документ.Отпускные.ДатаДок;
|ТекущийДокумент = Документ.Отпускные.ТекущийДокумент;
|Функция СуммаСреднее = Среднее(Сумма);
|Функция ТекущийДокументСуммаСумма = Сумма(ТекущийДокумент);
|Группировка Сотрудник без упорядочивания без групп;
|Условие(Сотрудник = Сотрудник);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Среднее = Запрос.СуммаСреднее;
Возврат Среднее ;//вот это должно уйти в отчет, но после перехода в отчет он выдает ошибку, поле агрегатного объекта не обнаружено или ещё что-нибудь, вот этот переход меня и волнует я прошу подсказать что я делаю не так, а в ответ читаю только.....,мне нужна помощь а не критика .
"
18.06.2009
15:30
#26
Смотритре, вот вы пишете, если в запросе не выполнен, то как же вы присваиваете переменной Среднее значение, которое должно получиться при выполнении запроса? Как-то я сразу на это не обратила внимания.
18.06.2009
15:38
#28
"Ну тогда вам правильно советовали в отчете просто написать НачисленоЗаОтпуск = СформироватьСредний(); "
18.06.2009
15:41
#29
я присваивала и добавляла сразу в формулу, и вот эту формулу т.е.её название выводила в печ-форму, она показывала 0, я её убрала сделала на прямую и все заработала, но это опять мой косяк что-то я не внимательно делаю, ну теперь легче , ч/з отладчик увижу.спасибо.
18.06.2009
15:49
#30
"Одно тут настораживает, для чего условие? |Условие(Сотрудник = Сотрудник);
Надо полагать, что хотели сделать отбор по некоему конкретному сотруднику, но в приведенном случае
условие выполняется всегда.
Либо надо сделать какую-нибудь глобальную переменную глСотрудник, присваивать ей значения и затем вызывать вашу функцию, либо (как мне кажется правильнее) добавить в функцию параметр.
Тогда объявление вашей функции будет выглядеть как нибудь так:
Функция СформироватьСредний(ВыбСотрудник) Экспорт
// ...... и соответственно поменять вышеуказанную строчку на
|Условие(Сотрудник = ВыбСотрудник);
//.........................................................."
Надо полагать, что хотели сделать отбор по некоему конкретному сотруднику, но в приведенном случае
условие выполняется всегда.
Либо надо сделать какую-нибудь глобальную переменную глСотрудник, присваивать ей значения и затем вызывать вашу функцию, либо (как мне кажется правильнее) добавить в функцию параметр.
Тогда объявление вашей функции будет выглядеть как нибудь так:
Функция СформироватьСредний(ВыбСотрудник) Экспорт
// ...... и соответственно поменять вышеуказанную строчку на
|Условие(Сотрудник = ВыбСотрудник);
//.........................................................."
Читают тему
(гостей: 1)