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

Работа с запросом

Автор sail, 10 июн 2014, 12:41

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

sail

Добрый день! Подскажите, пожалуйста: нужно из журнала расчетов Зарплата выбрать все начисления, при этом пользователь выбирает подразделение, по которому надо выбрать значения и указывает виды расчетов, которые нужно исключить из результата. результатом всего будет таблица : ФИО сотрудника из заданного подразделения, всего начислено по данному сотруднику без учета начислений, указанных пользователем. Я делаю запрос

   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)   
   |Период С {ДатаАктуальности} По {КонПериода};


   |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч; 
   |Вид = ЖурналРасчетов.Зарплата.Вид;


   |Результат = ЖурналРасчетов.Зарплата.Результат;
   |Подр = ЖурналРасчетов.Зарплата.Объект.Подразделение;
   |Объект = ЖурналРасчетов.Зарплата.Объект;
   |Условие(Результат<>0);
   |Условие(ВидРасч.входитвгруппу(Группарасчетов.Всеначисления)=1);
      |Группировка Объект без групп;
   
   |"//}}ЗАПРОС
   ;
   Если Подразделение.Выбран()=1 Тогда
      ТекстЗапроса = ТекстЗапроса + "
      |Условие (ПринадлПодмножеству(Подр, Подразделение) = 1);";
   КонецЕсли;
   Если ИсключитьВидРасч.РазмерСписка() > 0 Тогда
      ТекстЗапроса=ТекстЗапроса+"


   |Функция РезультатСумма = Сумма(Результат) Когда (ИсключитьВидРасч.Принадлежит(ВидРасч) = 0);";
   КонецЕсли;


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

Herby

Цитата: sail от 10 июн 2014, 12:41|Условие (ПринадлПодмножеству(Подр, Подразделение) = 1)

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

sail

Т.е. прямо написать оператор условие
| Условие (ИсключитьВидРасч.Принадлежит(ВидРасч) = 0);
Так?

Кошки рулят

Цитата: sail от 10 июн 2014, 12:41т.е. не отнимает суммы по тем видам расчета, которые я задаю

Пиши по русскому языку.

Herby

Цитата: sail от 10 июн 2014, 12:58Т.е. прямо написать оператор условие
| Условие (ИсключитьВидРасч.Принадлежит(ВидРасч) = 0);
Так?

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

Ну а чтобы подобное условие переложить в текст запроса 1с, то это должно выглядеть так:

|Условие (НЕ(ВидРасч в ИсключитьВидРасч));


sail

Подставила такое условие в запрос, но все равно включаются не нужные виды расчетов.

Herby

Цитата: sail от 10 июн 2014, 15:08Подставила такое условие в запрос, но все равно включаются не нужные виды расчетов.

в списке "ИсключитьВидРасч" точно правильные данные?

sail

Да, они выбираются из справочника и в журнале они есть.

Herby

Цитата: sail от 10 июн 2014, 16:38
Да, они выбираются из справочника и в журнале они есть.

визуально могут и не отличаться, но типы могут быть разные.

ну дальше мне сложно что-то подсказать, это нужно на месте разбираться и отладчиком смотреть.



Добавлено: 11 июн 2014, 10:04


попробуйте с условием

|Условие (ВидРасч в ИсключитьВидРасч);

ну т.е. без ключевого слова НЕ.

Если запрос будет пустой, значит все таки что-то не то со списком ИсключитьВидРасч.

Кошки рулят

Цитата: sail от 10 июн 2014, 16:38
Да, они выбираются из справочника и в журнале они есть.
Из какого еще справочника?
Расчеты ни в каком справочнике не нуждаются.
Задачу (и решение) ставишь криво, поэтому и не получается ничего ...

Теги:

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

Рейтинг@Mail.ru

Поиск