• Ласкаво просимо на Спільнота для обміну досвідом між користувачами програм УкрБланк, УкрСклад, УкрЗарплата.
 

Отчет - Взаиморасчеты с постащикам

Автор crazyjonyster, Березень 19, 2012, 03:58:21

Попередня тема - Наступна тема

0 Користувачі і 5 Гостей дивляться цю тему.

TheOK

Если есть возможность вывести необходимые данные при помощи отчета, не усложняя значительно структуру складов и групп, думаю, это лучший вариант.
К счастью, в данном случае, судя из комментария crazyjonyster, это именно такой случай)
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

DILEMMA

Прошу помощи у TheOK и semp, какой надо вставить скрипт, что бы получился новый отчет Взаиморасчеты с постащикам в котором после поля ФИО поставщика в моем случае отображался расчетный счет данного поставщика?
Бизнесом занимается тот - кому нечего сдать в аренду.

TheOK

#17
Если вы не изменяли изначальный SQL-запрос отчета Взаиморасчеты с поставщиками (Взаєморозрахунки з постачальниками), то вам необходимо заменить SQL запрос на приведенный ниже (конечно же,это делается в созданном новом, пользовательском отчете, через кнопку Сохранить как новый).
Для добавления в текстовое поле использовать конструкцию: [DataRep."ROZR_R"]
P.S. На форуме минимум 5 человек (не считая разработчиков), которые, как я заметил, обладают некоторыми знаниями по построению запросов. Поэтому, думаю, они могли бы так же включаться в обсуждение


SELECT
  c.fio, 
  CASE         
    WHEN (tm.doc_type_id IN (3,8,16)) THEN tm.from_firma_id         
    ELSE tm.to_firma_id         
  END AS client_id,         
  C.ROZR_R ,   
  SUM(CASE
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate < '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate < '#дата_с#') THEN (-1)*(tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv) 
    ELSE 0 
  END) AS suma_zal,
  SUM(CASE         
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END) AS suma_out,
  SUM(CASE       
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END) AS suma_in
FROM         
  tovar_move tm, 
  client c         
WHERE   
  c.visible = 1 AND   
  c.main_pid = -11 AND
#if #валюта_№# = -1 #then
#else
  tm.curr_type = #валюта_№# AND
#endif
  tm.doc_type_id IN (3,8,4,5,16,18) AND 
  tm.mdate <= '#дата_по#' AND   
  CASE     
    WHEN (tm.doc_type_id = 3) THEN tm.to_firma_id   
    WHEN (tm.doc_type_id = 8) THEN tm.to_firma_id   
    WHEN (tm.doc_type_id = 16) THEN tm.to_firma_id   
    ELSE tm.from_firma_id     
  END = #активная_фирма_№# AND   
  CASE         
    WHEN (tm.doc_type_id = 3) THEN tm.from_firma_id   
    WHEN (tm.doc_type_id = 8) THEN tm.from_firma_id   
    WHEN (tm.doc_type_id = 16) THEN tm.from_firma_id   
    ELSE tm.to_firma_id         
  END = c.num
GROUP BY
  1,2,3
HAVING
  (udf_roundto(SUM(CASE
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate < '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate < '#дата_с#') THEN (-1)*(tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv) 
    ELSE 0 
  END),5) != 0 OR
  udf_roundto(SUM(CASE         
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END),5) != 0 OR
  udf_roundto(SUM(CASE       
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END),5) != 0 )
ORDER BY       
  1
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

DILEMMA

Жаль не заработал запрос выдал такую ошибку
Бизнесом занимается тот - кому нечего сдать в аренду.

DILEMMA

похоже ему не понравилась 34 линия? WHEN (tm.doc_type_id = 3) THEN tm.to_firma_id
Бизнесом занимается тот - кому нечего сдать в аренду.

TheOK

Цитата: DILEMMA від Лютий 06, 2013, 00:59:51
похоже ему не понравилась 34 линия? WHEN (tm.doc_type_id = 3) THEN tm.to_firma_id
Ему не понравилась немножко другая строка (под той, которую вы указали)... я как-то потерял 2-3 символа в запросе....
Запрос исправил, замените SQL запрос в том отчете, где ошибочка выскочила
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

DILEMMA

Бизнесом занимается тот - кому нечего сдать в аренду.

DILEMMA

огромнейшее спасибо за помощь все получилось супер-пупер, р/с все прописываются
Бизнесом занимается тот - кому нечего сдать в аренду.

DILEMMA

Подскажите пожалуйста, а можно в отчете сделать так: если в 4 колонке у клиента оплата стоит 0,00 как у поставщика под номером 4, чтобы данная колонка не появлялась в отчете, а скрывалась, так сказать "ушла в туман".
Бизнесом занимается тот - кому нечего сдать в аренду.

DILEMMA

Точнее сформулирую вопрос: необходимо скрыть строку споставщиком если в колонке ПРИХОД остновного отчета Взаиморасчеты с поставщиками стоит0,00
Бизнесом занимается тот - кому нечего сдать в аренду.

TheOK

#25
Замените SQL запрос отчета на приведенный ниже (или создайте новый отчет на основе того, что вы сейчас сделали и внесите изменения в нем). Вы столкнулись с проблемой округления данных, данные сформировались по поставщику и они округлились до 5 знаков после запятой, а в отчете данные округлились до двух знаков, вот и светит вам в отчете 0, хотя там может быть 0.004



SELECT
  c.fio, 
  CASE         
    WHEN (tm.doc_type_id IN (3,8,16)) THEN tm.from_firma_id         
    ELSE tm.to_firma_id         
  END AS client_id,         
  C.ROZR_R ,   
  SUM(CASE
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate < '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate < '#дата_с#') THEN (-1)*(tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv) 
    ELSE 0 
  END) AS suma_zal,
  SUM(CASE         
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END) AS suma_out,
  SUM(CASE       
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END) AS suma_in
FROM         
  tovar_move tm, 
  client c         
WHERE   
  c.visible = 1 AND   
  c.main_pid = -11 AND
#if #валюта_№# = -1 #then
#else
  tm.curr_type = #валюта_№# AND
#endif
  tm.doc_type_id IN (3,8,4,5,16,18) AND 
  tm.mdate <= '#дата_по#' AND   
  CASE     
    WHEN (tm.doc_type_id = 3) THEN tm.to_firma_id   
    WHEN (tm.doc_type_id = 8) THEN tm.to_firma_id   
    WHEN (tm.doc_type_id = 16) THEN tm.to_firma_id   
    ELSE tm.from_firma_id     
  END = #активная_фирма_№# AND   
  CASE         
    WHEN (tm.doc_type_id = 3) THEN tm.from_firma_id   
    WHEN (tm.doc_type_id = 8) THEN tm.from_firma_id   
    WHEN (tm.doc_type_id = 16) THEN tm.from_firma_id   
    ELSE tm.to_firma_id         
  END = c.num
GROUP BY
  1,2,3
HAVING
  (udf_roundto(SUM(CASE
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate < '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate < '#дата_с#') THEN (-1)*(tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv) 
    ELSE 0 
  END),2) != 0 OR
  udf_roundto(SUM(CASE         
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END),2) != 0 OR
  udf_roundto(SUM(CASE       
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END),2) != 0 )
ORDER BY       
  1
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

DILEMMA

Заменил SQL запрос, в отчете не произошло сокрытия строки с поставщиком если в колонке ПРИХОД основного отчета Взаиморасчеты с поставщиками стоит  0,00. Дело не в округлении данных до определенного знака, основной вопрос ставится так, что надо убрать ( скрыть, спрятать ) хотябы в печатной форме строку с поставщиком у которого в колонке ПРИХОД основного отчета Взаиморасчеты с поставщиками стоит  0,00. Это нужно для того чтобы "портянка" подаваемая мной кассиру в Мегабанке была только с поставщиками у которых есть положительный баланс для оплаты, т.е. если из 200 поставщиков на сегодняшний день у 180 баланс 0,00 , то в "портянке" на оплату должно значится только 20 человек.
Бизнесом занимается тот - кому нечего сдать в аренду.

TheOK

Проблема не только в округлении (и в ней тоже была, но не факт, что ваши 0.00 зависели от нее), а еще и в том, что в отчет выводятся данные по всем поставщикам у которых был остаток (на начало или конец) или движение товара или денежных средств.
Чтобы убрать постивщиков с 0.00, нужно знать какая переменная у вас в отчете выводится в последнем столбце (правом) "Оплата в....".
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

DILEMMA

Так я и спрашиваю: можно ли скрыть и не выводить на печать целую строчку в которой находится ПОСТАВЩИК если в колонке ПРИХОД 0, если нельзя связать колонку ПРИХОД где стоит 0 и сокрытие на печать строки с данным ПОСТАВЩИКОМ скажите нет.
Бизнесом занимается тот - кому нечего сдать в аренду.

TheOK

#29
Цитата: DILEMMA від Лютий 07, 2013, 13:00:30
Так я и спрашиваю: можно ли скрыть и не выводить на печать целую строчку в которой находится ПОСТАВЩИК если в колонке ПРИХОД 0, если нельзя связать колонку ПРИХОД где стоит 0 и сокрытие на печать строки с данным ПОСТАВЩИКОМ скажите нет.
Как это нельзя скрыть? В отчетах можно делать такое.... не то, чтобы скрыть
Вот SQL запрос. Если в поле приход 0.00, то данные не должны выводиться. У себя не тестировал, но думаю, что так и должно работать.



SELECT
  c.fio, 
  CASE         
    WHEN (tm.doc_type_id IN (3,8,16)) THEN tm.from_firma_id         
    ELSE tm.to_firma_id         
  END AS client_id,         
  C.ROZR_R ,   
  SUM(CASE
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate < '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate < '#дата_с#') THEN (-1)*(tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv) 
    ELSE 0 
  END) AS suma_zal,
  SUM(CASE         
    WHEN (tm.doc_type_id IN (4,5,18) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END) AS suma_out,
  SUM(CASE       
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END) AS suma_in
FROM         
  tovar_move tm, 
  client c         
WHERE   
  c.visible = 1 AND   
  c.main_pid = -11 AND
#if #валюта_№# = -1 #then
#else
  tm.curr_type = #валюта_№# AND
#endif
  tm.doc_type_id IN (3,8,4,5,16,18) AND 
  tm.mdate <= '#дата_по#' AND   
  CASE     
    WHEN (tm.doc_type_id = 3) THEN tm.to_firma_id   
    WHEN (tm.doc_type_id = 8) THEN tm.to_firma_id   
    WHEN (tm.doc_type_id = 16) THEN tm.to_firma_id   
    ELSE tm.from_firma_id     
  END = #активная_фирма_№# AND   
  CASE         
    WHEN (tm.doc_type_id = 3) THEN tm.from_firma_id   
    WHEN (tm.doc_type_id = 8) THEN tm.from_firma_id   
    WHEN (tm.doc_type_id = 16) THEN tm.from_firma_id   
    ELSE tm.to_firma_id         
  END = c.num
GROUP BY
  1,2,3
HAVING
  udf_roundto(SUM(CASE       
    WHEN (tm.doc_type_id IN (3,8,16) AND tm.mdate >= '#дата_с#') THEN tm.#валюта_преф#from_suma+tm.#валюта_преф#suma_pdv 
    ELSE 0 
  END),2) != 0
ORDER BY       
  1
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]