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

Наши программы => УкрСклад => Тема розпочата: bkost від Березень 25, 2013, 22:11:11

Назва: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 25, 2013, 22:11:11
Нужен такой отчет. Можно ли сделать его "малой кровью"? Работали в SLS-склад. Присматриваемся к этой программе.
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 26, 2013, 13:54:06
Такое сделать, думаю, возможно.
Если кто-то возьмется помогать здесь на форуме, смогу подсказывать. К сожалению, выделить время на полное создание отчета не могу.
Кстати, сразу опишите, чтобы было понятно:
1) возможны ли у вас случаи, когда товар в одной накладной с различных складов?. Если да, то название склада логичнее ставить напротив каждой позиции товара.
2) Откуда брать текст "наличный рассчет" , в каких случаях он должен проставляться?
3) данные должны выводиться по текущей активной фирме, если я все правильно понял
4) что значат ***  в заголовке, где выводятся данные по расходной накладной?
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 26, 2013, 18:45:15
1) да возможны
2) я поствил его в накладной в графу "Условие продаж"
3) да, у нас одна активная
4) это "красявости" SLS склада - никакой информативности
В принципе, не нужны даже клиенты. Только товар, кол-во, цена, сумма, но офильтрованный  по полю "Условие продаж" (или по другому, куда можно внести слово "нал".
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 26, 2013, 21:33:20
В таком случае, все немного проще, если я все правильно понял.

Вот вам запрос для отчета.
Создавайте новый.
Параметры: период дат.
Выводятся данные только по одной активной фирме.
Данные сортируются по условию продажи, затем по дате, после по отдельным документам, ну и в конце по названию товара.
Цены и суммы указываются сразу с учетом скидки.
Запрос слегка избыточен, но это для универсальности.
Шаблон пробуйте создать сами. На форуме есть пользователи, готовые подсказать, как это делается...  я так думаю


Select
    tm.curr_to_cena + tm.curr_cena_pdv as cena_with_znizhka,
    tm.curr_to_suma + tm.curr_suma_pdv as suma_with_znizhka,
    tm.from_kolvo,
    tm.mdate,
    c.short_name,
    c.name as curr_name,
    sn.name as sklad_name,
    v.nu,
    v.prod_umov ,
    v.client,
    tn.*
From
    Tovar_move tm
        left join tovar_name tn on (tm.tovar_id=tn.num)
        left join currency c on (tm.curr_type=c.num)
        left join sklad_names sn on (tm.from_sklad_id=sn.num)
        left join vnakl v on (tm.doc_id=v.num)


where
    tm.doc_type_id =1
    and tm.from_firma_id=#активная_фирма_№#
    and tm.mdate>='#дата_с#'
    and tm.mdate<='#дата_по#'
order by
   v.prod_umov,
   tm.mdate,
   v.num,
   tn.name
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 26, 2013, 23:14:46
Спасибо. Как танкисту: Открываю "Создать новый отчет", ставлю птицу "Период дат", копирую-вставляю ваш SQL-код в нижнее поле, нажимаю кнопку "Редактировать шаблон", редактирую (сильны сомнения  :) ), сохраняю новый файл, новый отчет. Все должно работать! Я нигде не ошибся?
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 27, 2013, 00:49:28
Так точно!
Вы совершенно правы!

Для уточнения. После выставления параметров и добавления отчета, просто редактировать шаблон, а после (на самом деле можно и не  редактировать, а сразу сохранить) сохранить (при нажатии кнопки Редактировать создается новый шаблон автоматически).
Что же, тогда продолжим.

Я для всех бэндов: ReportTitle, Header, MasterData, Footer, GroupFooter, GroupHeader выставляю свойство stretched=true. Это значит, что эти поля будут растягиваться под содержимое, которое находится внутри них (т.е. данные не будут накладываться друг на друга).
А для всех текстовых полей, кроме тех, которые не хочу, чтобы растягивались (например, если в заголовках колонок одно текстовое поле располагается над другим, то не стоит делать описанное далее), выставляю свойство StretchMode=smMaxHeight, что значит, что текстовое поле будет автоматически увеличиваться (в общем случае по вертикали вниз) до длины самого "высокого" поля на бенде (чтобы получилась красивая табличка, а не одна ячейка больше, другая меньше).

Итак выставили strethed = true (я ставлю для всех бэндов), и StretchMode=smMaxHeight (для текстовых полей, которые должны выводиться в виде таблички). Это, конечно, делается, обычно в конце или в процессе добавления.

Добавьте заголовок группы (GroupHeader), где в поле Условие: Поле БД, выберите PROD_UMOV.
Перетянуть заголовок группы над MasterData. Здесь вы можете вывести текстовое поле с переменной [PROD_UMOV], а ниже просуммировать по группе значений поля Условия продажи.

Добавьте подвал группы (GroupFooter), здесь после добавьте текстовое поле с суммированием по группе. Для этого разместить на этом Бэнде текстовое поле и вписать в него значение [SUM(<DataRep."SUMA_WITH_ZNIZHKA">,MasterData1,1)].

На MasterFooter (подвал данных) скопируйте текстовое поле из GroupFooter (то, где все суммируется), это будет ваша конечная сумма по всему товару в накладных.

Остальные поля (Название товара, сумма, склад (т.к. в накладных может быть товар  с  различных складов) и т.д.) киньте на MasterData.

Если с этим все получится, вы можете сгруппировать еще данные и по накладным. Т.е. добавить GroupHeader и GroupFooter в которых выставить Условие: Поле БД=NU. Данные группы должны находиться внутри Группы по Условию продажи

Таким образом у вас должна получиться следующая структура (для данного отчета она вполне подходит):


ReportTitle
   Header (здесь можно разместить заголовки колонок)
      GroupHeader (Группировка по Условию продажи)
         GrouHeader (Группировка по № документа, можно пропустить)
            MasterData (вывод данных по товару)
         GroupFooter (Если пропущена группировка по документу, не добавлять.
                           Вывод итогов/сумм по документу)
      GroupFooter (Подвал группы по условию продажи)
  MasterFooter (Вывод итогов по отчету)

Расписал это, т.к. судя по предыдущему посту вы поймете или полностью или в каком направлении двигаться. Я рад, что все больше пользователей УкрСклада осваивают механизмы работы с отчетами)

Сори за "радугу",  но данное форматирование несет в себе некий смысл.
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 27, 2013, 08:42:05
Да уж, пару вечеров уже не будут томными  :D. Попробую разобраться, об успехах (неудачах) доложу. Еще раз премного благодарен за участие!
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 27, 2013, 21:35:26
TheOK
Да осилит дорогу  идущий :) Чую, где-то что-то не так. При Просмотре вылазит такое
А шаблон методом "научного тыка" такой получился. Слишком быстро слепил, поэтому не верю в правильность.
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 27, 2013, 22:22:32
1) Очень странно, что выскакивает такая ошибка...
Просмотрите внимательно запрос, который вы вставили в поле SQL запрос отчета. Не появились ли там вместо слов #активная_фирма_№# , #дата_с# и #дата_по# крокозябр, наподобии #??????_??# или вроде того.
Если такое есть, то с сайта скопируйте текст сначала в WordPad а затем из него в поле SQL запрос.
Если с этим все нормально, то попробуйте удалите все из поля SQL запрос и добавьте по новой.


2) Скиньте сюда свой шаблон на всякий случай ( в режиме редактирования Файл->Сохранить как)
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 27, 2013, 22:33:21
Да нет, все 1:1
Select
    tm.curr_to_cena + tm.curr_cena_pdv as cena_with_znizhka,
    tm.curr_to_suma + tm.curr_suma_pdv as suma_with_znizhka,
    tm.from_kolvo,
    tm.mdate,
    c.short_name,
    c.name as curr_name,
    sn.name as sklad_name,
    v.nu,
    v.prod_umov ,
    v.client,
    tn.*
From
    Tovar_move tm
        left join tovar_name tn on (tm.tovar_id=tn.num)
        left join currency c on (tm.curr_type=c.num)
        left join sklad_names sn on (tm.from_sklad_id=sn.num)
        left join vnakl v on (tm.doc_id=v.num)


where
    tm.doc_type_id =1
    and tm.from_firma_id=#активная_фирма_№#
    and tm.mdate>='#дата_с#'
    and tm.mdate<='#дата_по#'
order by
   v.prod_umov,
   tm.mdate,
   v.num,
   tn.name
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 27, 2013, 22:50:48


Внешний вид не корректировал.

Исправил:
Добавил одну группировку по ProdUmov.
Было выставлено ограничение на кол-во выводимых данных = 8 в свойствах MasterData.
Скорее всего были выставлены дополнительные источники данных в Отчет->данные или что-то подобное.
Текстовое поле с кол-вом не находилось на MasterData (хотя визуально казалось, что оно там)
Может быть еще что-то убрал автоматом.
У меня все работает..
Замените свой шаблон на данный (Имя вашего шаблона "светится" в верху шаблона. Если знаете где он "лежит" то скиньте туда (предварительно переименовав)
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 27, 2013, 23:32:48
Все так и сделал, в папке rus нашел свой шаблон, заменил вашим, все равно вылазит та ошибка. В блоке "Выбор нужных компонентов для отчета", у меня птица только "Период дат", может надо еще проставить в других позициях? То, что у меня пока не зарегистрированная версия, не может влиять на работу?
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 28, 2013, 00:17:06
Вот так выглядит. Пару верхних строк не видно
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 28, 2013, 01:04:00
Странная штука..... у меня все ОК. Почему-то программе кажется, что что-то не так.
Может ли это быть изза незарегистрированной версии программы... не знаю никогда не сталкивался с такими проблемами, скорее всего дело в другом...

У меня есть некоторые предположения, но они далековаты от здравого смысла...

Давайте попробуем вот этот запрос. Если он будет работать, то останется 2 места для ошибки (вариантов при этом будет больше). Если же не захочет работать... но об этом позже

Select
    tm.curr_to_cena + tm.curr_cena_pdv as cena_with_znizhka,
    tm.curr_to_suma + tm.curr_suma_pdv as suma_with_znizhka,
    tm.from_kolvo,
    tm.mdate,
    c.short_name,
    c.name as curr_name,
    sn.name as sklad_name,
    v.nu,
    v.prod_umov ,
    v.client,
    tn.*
From
    Tovar_move tm
        left join tovar_name tn on (tm.tovar_id=tn.num)
        left join currency c on (tm.curr_type=c.num)
        left join sklad_names sn on (tm.from_sklad_id=sn.num)
        left join vnakl v on (tm.doc_id=v.num)
where
    tm.doc_type_id =1
order by
   v.prod_umov,
   tm.mdate,
   v.num,
   tn.name



Но, согласно тексту ошибки, или непечатаемый символ где-то или какой-то символ стоит где-то за полями запроса (т.е. где-то за пределами "окошка".
Вариант:
Очистите все-все-превсе поле SQL запрос, добавьте туда текст из вложенного файла. Открывать в WordPad, в других программах (как word не желательно , впрочем как и в Notepad и тому подобных).
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 28, 2013, 09:31:03
Почти победили  ;)
Вот результат. Только не считает сумму и не фильтрует "нал", но уже работает
Скажем у Хопланда было 58*40 эко 4,78тыс по 37 грн/1тыс. В итоговой таблице этой позиции нет
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 28, 2013, 12:49:43
Цитата: bkost від Березень 28, 2013, 09:31:03
Почти победили  ;)
Вот результат. Только не считает сумму и не фильтрует "нал", но уже работает
Скажем у Хопланда было 58*40 эко 4,78тыс по 37 грн/1тыс. В итоговой таблице этой позиции нет
Может быть из-за следующего:
а) Документ выписан из другой активной фирмы (не текущей)
б) Документ не вошел в период дат выставляемый в отчете
в) Документ не был проведен ("галочка" в правом нижнем углу документа  в режиме редактирования)
Других причин на данный момент не вижу....

Можно было бы отфильтровать по слову нал, но об этом позже, не ранее выходных (если не забуду..)
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 28, 2013, 16:40:14
Попробовал на работе: первый ваш запрос выдает ту же ошибку, второй проходит, выдает 8 позиций товара из первых двух накладных (хотя их там 37 позиций товара), причем эти накладные с пустым полем "Условия продажи".
а) Активная фирма всего одна
б) Входят все накладные
в) Галочка всегда установлена, как по-умолчанию.
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 28, 2013, 21:45:25
Я вроде бы исправлял настройку, из-за которой выводилось только 8 строк данных.... Это из за нее у вас выводятся частичные данные.
А по поводу ошибок 104, это проблемы с кодировкой, где-то затесывается нечитаемый символ...


Кстати, к сведениями разработчиков, до изменения поля на другое, с поддержкой форматирования (если не ошибаюсь поле ранее было без форматирования) проблем с особенностями кодировки никогда не было при добавлении отчета (может быть и были.... но у меня ни разу).... может быть из-за этого? :) Все равно никто не будет писать в поле SQL запрос сразу. Я, например, в Notpad++ или сразу в IBExpert пишу...


Но не будем отвлекаться. Я посчитал, что будет дольше объяснять чем самому подправить некоторые вещи.
Во вложенном файле отчет (запрос + файл).
Надеюсь, что все будет работать. Хотя, 104 ошибочка все равно может выскочить... я не особо разбирался в кодировках, не знаю как решать такие проблемы... вернее не хочу знать...
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 28, 2013, 22:41:48
УРА!!! Свершилось чудо. Заработало и дома и на работе безошибочно. Низкий поклон!
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 29, 2013, 14:00:25
Одна мелочь осталась: отчет берет цену Приходную, а не Расходную, а как поменять, я не понял  :(
Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: TheOK від Березень 29, 2013, 18:24:08
Да, правда, цена выводится из справочника.
Вставьте в ячейку, где выводится цена, следующий текст
[DataRep."CENA_WITH_ZNIZHKA"]
Это фактическая цена за товар (с учетом скидки и НДС).




Назва: Re: Как (можно ли) создать такой отчет?
Відправлено: bkost від Березень 30, 2013, 08:36:54
В яблочко!!! Теперь точно всё!