Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменение запроса  (Прочитано 12102 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Glebby
Интересующийся

ua
Offline Offline

« : 27-01-2010 13:53 » 

В регламентированных отчетах есть сверка по входящим счетам и налоговым накладным, необходимо сделать возможность формировать данный отчет отдельно по организации.

Собственно, в отчете есть запрос, который и получает все данные:

"//{{ЗАПРОС(Сверка)
   |Период с ДатаС По ДатаПо;
   |Счет = Документ.СчетВход.ТекущийДокумент,
   |       Документ.СчетВходПр.ТекущийДокумент;
   |Орг  = Документ.СчетВход.Поставщик,
   |       Документ.СчетВходПр.Поставщик;
   |НДС  = Документ.СчетВход.НДС,
   |       Документ.СчетВходПр.НДСВ;
   |Обрабатывать НеПомеченныеНаУдаление;
   |Функция ВхНДС = Сумма(НДС);
   |Группировка Орг без групп;
   |Группировка Счет;
   |"//}}ЗАПРОС
;

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

Как можно либо после запроса вытянуть данные только по одной необходимой организации, либо самим запросом получить данные только по необходимой организации?

П.С. просьба не кидать тапками, если вопрос глупый, так как 1с 7.7 только начинаю осваивать и с языком запросов вообще полное непонимание.
Заранее спасибо.
« Последнее редактирование: 27-01-2010 17:35 от Sel » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 27-01-2010 16:05 » 

Язык запросов 7.7 - это вещь в себе, которая уже не пригодится в других местах (ну разве что расширишь кругозор "а можно оказывается сделать и вот так")
Если тебе нужно отобрать по одной органицации - то в конец запроса достаточно добавить строку Условие():
Код:
...
   |Группировка Орг без групп;
   |Группировка Счет;
   |Условие (Орг=ВыбОрг);
   |"//}}ЗАПРОС
;
...
где ВыбОрг - любая переменная, видимая в области кода Запрос.Выполнить();, заполненная соответствующим значением. В подавляющем большинстве случаев подобную переменную делают реквизитом формы отчета.
Записан
Glebby
Интересующийся

ua
Offline Offline

« Ответ #2 : 28-01-2010 15:50 » 

Ух, спасибо, до меня дошло теперь. Завтра попробую через эту переменную.
До этого пробовал точно так же только забыл, что надо присвоить значение переменной.
Так же пробовал указать конкретное имя организации
|Группировка Орг без групп;
   |Группировка Счет;
   |Условие (Орг="Организация1");
   |"//}}ЗАПРОС
и почему то у меня ничего не получилось, наверно 7.7 не воспринимает так.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 30-01-2010 15:06 » 

Ну во-первых у тебя неправильный синтаксис (нужно задваивать кавычки):
Условие(Орг=""Организация1"")
во-вторых Орг у тебя элемент справочника а ты сравниваешь со строкой:
а) Это замедляет работу, т.к. будет для каждого документа преобразовывать элемент в строку
б) скорее всего будет несовпадение, т.к. 1С наименование преобразовывает в строку с правыми пробелами, т.е. что-то вроде:
Условие(Орг=""Организация1     "")
(количество пробелов зависит от конкретной конфигурации)
Записан
Glebby
Интересующийся

ua
Offline Offline

« Ответ #4 : 01-02-2010 07:31 » 

Ага, еще раз спасибо, понял свои ошибки, даже и не думал что надо два раза кавычки ставить(в книге этого не написали).
В пятницу сделал все с помощью "Условия", а организация заполняется с помощью реквизита формы отчета.

оффтоп: могу ли я продолжать задавать свои вопросы в этой теме, чтоб не создавать новых?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 02-02-2010 16:27 » 

Offtopic:
>могу ли я продолжать задавать свои вопросы в этой теме, чтоб не создавать новых?
Я склонен к тому чтобы для каждой отдельной темы (вопроса) создавалась отдельная тема (на форуме). Уж простите за тавтологию Улыбаюсь
Так что если вопрос касасется чего-то другого, а не проблем с этим запросом - то лучше создавай новую тему

Записан
Glebby
Интересующийся

ua
Offline Offline

« Ответ #6 : 04-02-2010 11:33 » 

После запроса в 1м после у меня идет обработка полученных данных:

Код:
	Пока Зап.Группировка("Орг") = 1 Цикл        
    Таб.ВывестиСекцию("Орг");
Пока Зап.Группировка("Счет") = 1 Цикл   
Счет = Зап.Счет;
НН = ПолучитьПустоеЗначение("Документ");
ННСтр = "";
Внимание = "";
НН_НДС = "";
СуммаНН_НДС = 0;
ИтНН_НДС = 0;
ННВх.ВыбратьПодчиненныеДокументы(,, Счет);
Пока ННВх.ПолучитьДокумент() = 1 Цикл
Если (ННВх.ПометкаУдаления() = 0) И (ННВх.Вид() = "РеестрПолученныхНН") Тогда
НН = ННВх.ТекущийДокумент();

НН.ВыбратьСтроки();

Пока НН.ПолучитьСтроку() = 1 Цикл

Если НН.НалНакл = Счет Тогда
Если ПустаяСтрока(ННСтр) = 0 Тогда
ННСтр  = ННСтр  + РазделительСтрок;
НН_НДС = НН_НДС + РазделительСтрок;
Внимание = "!!!";
КонецЕсли;
ННСтр  = ННСтр  + НН.ПредставлениеВида() + " №" + НН.НомерДок + " от " + НН.ДатаДок;
//НН_НДС = НН_НДС + ЧВП(НН.Итог("Гр8") + НН.Итог("Гр10") + НН.Итог("Гр12") + НН.Итог("Гр14"));
СуммаНН_НДС = НН.Гр8 + НН.Гр10 + НН.Гр12 + НН.Гр14;
НН_НДС = НН_НДС + ЧВП(СуммаНН_НДС);           
ИтНН_НДС = ИтНН_НДС + СуммаНН_НДС;
   

КонецЕсли;
КонецЦикла;

//Прервать;
КонецЕсли;
КонецЦикла;
Если ИтНН_НДС <> СуммаНН_НДС Тогда
НН_НДС = НН_НДС + РазделительСтрок + "Всего: " + СокрЛП(ЧВП(ИтНН_НДС));
КонецЕсли;
ИтогНДС=ИтогНДС+зап.ВхНДС;
        ИтогНДС2=ИтогНДС2+зап.ндс;
инн=зап.орг.инн;
Таб.ВывестиСекцию("Строка"); 

КонецЦикла; 
Таб.ВывестиСекцию("Итоги");
ИтогНДС2=0;
ИтогНДС=0;

КонецЦикла;

после выполнения кода получаем результат, как на картинке

и так, вопросы:
1. можно ли, при формировании таблицы посчитать итог НДС по организации(последняя колонка на изображении, переменная "итогНДС2"), именно сложив значения ячеек в колонке? При моей реализации "итогНДС2" не по каждой организации считается корректно.
2. необходимо получать ИНН организации, переменная "инн", в данном случае ИНН получается, но, например, ИНН организации1, то есть 1й проход цикла, отображается только лишь у второй организации. есле в справочнике не указан ИНН то ИНН прошлой организации дублируется(это в принципе легко решаемо). Как лучше реализовать вывод ИНН по каждой организации корректно?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 04-02-2010 13:04 » 

1. Можно. Для этого нужно:
а) добавить переменные ИтогНДС и ИтогНДС2, которые обнулить перед циклом "Пока Зап.Группировка("Счет") = 1 Цикл"
б) инкрементировать эти переменные в конце цикла "Пока ННВх.ПолучитьДокумент() = 1 Цикл": ИтогНДС=ИтогНДС+ИтНН_НДС
в) изменить область Итоги таким образом, чтобы вместо реквизитов запроса использовались переменные ИтогНДС и ИтогНДС2

2. Перенеси строку "инн=зап.орг.инн;" перед строкой "Таб.ВывестиСекцию("Орг");" (в самом начале)
Записан
Glebby
Интересующийся

ua
Offline Offline

« Ответ #8 : 04-02-2010 14:30 » new

Все работает как положено теперь Улыбаюсь Огромное спасибо.

Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines