подскажите как из глобального модуля перенести переменну.

Новая тема
Показывать по сообщений
т.е. если выбрали или не выбрали все равно будет по нужному сотруднику
"Для вашей функции будет по всем сотрудникам.<br>Поскольку переменная Сотрудник объявлена внутри запроса<br>> |Сотрудник = Документ.Отпускные.Сотрудник;<br>Затем идет условия сравнения этой переменной с ею самой<br>> |Условие(Сотрудник = Сотрудник);<br>Которое будет всегда истиной<br><br>В приведенном мною примере, функцию нужно будет вызывать так<br>Пока Запрос.Группировка() = 1 Цикл<br>Премия =Окр(ОтработаноЗаМесяц*0.3*Запрос.ПремияПроцент/100,2);//мы вычислили премию теперь объявляем функцию, для нахождения сред.<br>// подразумеваем что в запросе по котором делается цикл  Пока Запрос.Группировка() = 1  есть Сотрудник<br>   СформироватьСредний(Запрос.Сотрудник);//это функция объявления, которая находится в глобальнике т.е.ушли в глобальник сформировали там запрос:<br>"
Условие это я прописывала для того (оно не правильное я с вами согласна), чтобы взять средний по нужному человеку не выбирая его в диалоге, т.е.нажимая сформировать он пошел обрабатывать всех сотрудников -нашел их средний вычислил отпускные, пошел дальше но получается он по одному сотруднику вычислил средний и пропечатал его по всем, получается он не берёт за период а берет последний документ(который находится в июне нашел по нему и высчитал всем по этой цифре).
"Вы когда запросы пишете, следите, чтобы идентификаторы внутренних переменных запросов не совпадали с идентификаторами, задействованными в контексте. То есть, не надо, что бы внутри запроса использовались для описания внутренней переменной "Код", "Наименование", идентификатор любого реквизита, если запрос выполняется в контексте формы списка справочника или форме элемента справочника, аналогично по документам - не надо в запросе использовать в качестве внутренних переменных названия общих реквизитов, реквизитов шапки или табличной части. Кроме того, следите за тем, чтобы не пересечься с названиями глобальных переменных. Я так же стараюсь не использовать в качестве внутренних переменных предикаты, например "Сумма", "НачОст" и т.п. Это все логические ошибки, на которые никакой интерпритатор или компилятор вам не ругнется, а в отладке такое ищется проблемно.<br><br>Ваш текст запроса конечно же не должен содержать строку вида:<br>|Условие(Сотрудник = Сотрудник);<br>потому что в ней, прямо скажем, смысла нет никакого. Подозреваю, что вы имели ввиду что то вроде:<br>|Условие(Сотрудник = НужныйСотрудник);<br>где Сотрудник - внутренняя переменная запроса, а НужныйСотрудник - внешняя по отношению к запросу переменная, значение которой задается где то перед выполнением запроса"
"получается я должна в первом запросе присвоить какой-то переменной: Наимен = Запрос.Сотрудники;и перенести её во-второй запрос(в глобальник), и по этой переменной сделать запрос ? И вы хотите сказать что во втором запросе <br> |Сумма = Документ.Отпускные.Сумма;<br>   |Функция СуммаСреднее = Среднее(Сумма);сумма объявлена не правильно, тогда как?"
"> ... и перенести её во-второй запрос(в глобальник)<br>я бегло посмотрел пост, не понял зачем вообще нужно создавать глобальную переменную. С моей точки зрения задача решается так:<br>пусть у вас есть документ, в котором есть какая то подзадача по расчету этого самого среднего и данные сведения нужны в контексте модуля проведения документа.<br>Первая мысль, которая возникает, - зачем нам ДВА запроса вообще?<br>Вариант решения "а" (все в одном запросе):<br><br>Процедура ОбработкаПроведения()<br>   СписокНужныхСотрудников=СоздатьОбъект("СписокЗначений");<br>   ВыгрузитьТабличнуюЧасть(СписокНужныхСотрудников,"Сотрудник");<br>   <br>   НачДата=ДобавитьМесяц(НачМесяца(ДатаДок),-3)<br>   КонДата=НачМесяца(ДатаДок)-1;<br>   ТекстЗапроса="Период с НачДата По КонДата;<br>   |ОбрабатыватьДокументы Проведенные;<br>   |ВПСотрудник=Документ.НачислениеОтпускных.Сотрудник; //ВПСотрудник - это "внутренняя переменная сотрудник" :)<br>   |НачисленнаяСумма=Документ.НачислениеОтпускных.Сумма;<br>   |Условие(ВПСотрудник в СписокНужныхСотрудников);<br>   |Функция СуммаСреднее=Среднее(НачисленнаяСумма);<br>   |Группировка ВПСотрудник без групп без упорядочивания;";<br><br>   Запрос=СоздатьОбъект("Запрос");<br>   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда<br>      Сообщить("Ошибка выполнения запроса");<br>      СтатусВозврата(0);<br>      Возврат;<br>   КонецЕсли;<br><br>   //и дальше по нужному вам алгоритму... я не знаю что у вас там задумано, ну пусть, например так:<br>   ВыбратьСтроки();<br>   Пока ПолучитьСтроку()=1 Цикл<br>      СредняяСуммаОтпускных=0;<br>      Запрос.ВНачалоВыборки();<br>      Если Запрос.Получить(Сотрудник)=1 Тогда<br>         СредняяСуммаОтпускных=Запрос.СуммаСреднее;<br>      КонецЕсли;<br>      ....<br><br>Вариант "б" (два запроса, цель примера - показать как надо использовать вызовы функций с передачей параметров, а то у вас недопонимание по этому вопросу, отсюда и странное решение по созданию глобальной переменной):<br><br>Процедура ОбработкаПроведения()<br>   //формируем и выполянем запрос на выборку сотрудников, правда непонятно зачем это надо, так как они в табличной части документа, вероятно и так уже перечислены, напишем запрос на выборку всех элементов, которые есть в справочнике для примера<br><br>   ТекстЗапроса="ВПСотрудник=Справочник.Сотрудники.ТекущийЭлемент;<br>   |Группировка ВПСотрудник без групп без упорядочивания;"<br>   Запрос=СоздатьОбъект("Запрос");<br>   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда<br>      Сообщить("Ошибка выполнения запроса");<br>      СтатусВозврата(0);<br>      Возврат;<br>   КонецЕсли;<br><br>   НачДата=ДобавитьМесяц(НачМесяца(ДатаДок),-3)<br>   КонДата=НачМесяца(ДатаДок)-1;<br>   Пока Запрос.Группировка("ВПСотрудник")=1 Цикл<br>      СредняяСуммаОтпускных=СформироватьСредний(Запрос.ВПСотрудник,НачДата,КонДата);<br>      ...<br><br><br>при этом может быть в глобальном модуле (только неполянтно зачем), либо прямо в модуле проведения нашего документа чуть выше имеется функция:<br><br>Функция СформироватьСредний(НужныйСотрудник,НачДата,КонДата)<br>   ТекстЗапроса="Период с НачДата По КонДата;<br>   |ОбрабатыватьДокументы Проведенные;<br>   |ВПСотрудник=Документ.НачислениеОтпускных.Сотрудник;<br>   |НачисленнаяСумма=Документ.НачислениеОтпускных.Сумма;<br>   |Условие(ВПСотрудник = НужныйСотрудник);<br>   |Функция СуммаСреднее=Среднее(НачисленнаяСумма);<br>   |Группировка ВПСотрудник без групп без упорядочивания;";<br><br>   Запрос=СоздатьОбъект("Запрос");<br>   Если Запрос.Выполнить(ТекстЗапроса)=1 Тогда<br>      Возврат(Запрос.СуммаСреднее);<br>   Иначе<br>      Возврат(0);<br>   КонецЕсли;<br>КонецФункции<br><br><br><br><br>> сумма объявлена не правильно, тогда как?<br>да нет, правильно, но я бы так не стал.<br>"
спасибо вам огромное что пытаетесь мне помочь, просто что я делаю это палка о двух концах, но ладно не будем об этом, обьясню что я делаю: я пишу отчет в самодельной конфигурации, который берёт начальные данные за месяц по всем сотрудникам(мы указываем период в диалоге) из документов,например за июнь он должен посчитать оплату по табелю и т.д.это все работает замечательно, но для расчета отпускных надо среднюю сумму взятую за три месяца из документа НачислениеОтпускных,(я его назвала не много не так и теперь все запутались, в нем отражается фиксированная сумма по сдельной оплате),и в этой средней я запуталась, мне помогли вытащить из глобальника эту переменную но она идет одна для всех и по одному документу.
Читают тему
(гостей: 1)

Быстрый переход