jonik_joker
Участник
Offline
|
|
« : 12-11-2013 09:43 » |
|
Всем привет. Помогите разобраться: в документе ЗаявкаНаПоставку есть ТабЧ, которая содержит инфу по счетам (Инвойсам). Соответственно регистрируется это все в регистре накоплений ОборотыДенежныхСредств. Инвойс может быть оплачен (Приход,соот-но нужна СуммаПриход) и неоплачен (Расход,соот-но нужна СуммаРасход). В заявке может быть как оплаченные так и неоплаченные Инвойсы. Код: ВЫБРАТЬ ОборотыДенежныхСредствОстаткиИОбороты.СуммаПриход, ОборотыДенежныхСредствОстаткиИОбороты.СуммаРасход, ОборотыДенежныхСредствОстаткиИОбороты.Инвойс, ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомер КАК НомерЗаказ, ЗаявкаНаПоставкуУсловиеОплаты.Ссылка КАК Заявка, ОборотыДенежныхСредствОстаткиИОбороты.Период ИЗ Документ.ЗаявкаНаПоставку.УсловиеОплаты КАК ЗаявкаНаПоставкуУсловиеОплаты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты ПО ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = ОборотыДенежныхСредствОстаткиИОбороты.Заявка ГДЕ (&Клиент = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент = &Клиент) И (&Грузополучатель = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель = &Грузополучатель) И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ПометкаУдаления = ЛОЖЬ И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Проведен = ИСТИНА И ЗаявкаНаПоставкуУсловиеОплаты.ВариантОплаты = &ВариантОплаты ИТОГИ ПО Заявка
в результате получаю таблицу СуммаРасход, а хотелось бы СуммаРасход(что хочется).
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #1 : 12-11-2013 09:44 » |
|
сорри
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #2 : 12-11-2013 09:49 » |
|
пробовал ч\з объединить. ВЫБРАТЬ ОборотыДенежныхСредствОстаткиИОбороты.СуммаПриход, ОборотыДенежныхСредствОстаткиИОбороты.Инвойс, ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомер КАК НомерЗаказ, ЗаявкаНаПоставкуУсловиеОплаты.Ссылка КАК Заявка, ОборотыДенежныхСредствОстаткиИОбороты.Период ИЗ Документ.ЗаявкаНаПоставку.УсловиеОплаты КАК ЗаявкаНаПоставкуУсловиеОплаты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты ПО ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = ОборотыДенежныхСредствОстаткиИОбороты.Заявка ГДЕ (&Клиент = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент = &Клиент) И (&Грузополучатель = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель = &Грузополучатель) И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ПометкаУдаления = ЛОЖЬ И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Проведен = ИСТИНА И ЗаявкаНаПоставкуУсловиеОплаты.ВариантОплаты = &ВариантОплаты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ ОборотыДенежныхСредствОстаткиИОбороты.СуммаРасход, ОборотыДенежныхСредствОстаткиИОбороты.Инвойс, ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомер, ЗаявкаНаПоставкуУсловиеОплаты.Ссылка, ОборотыДенежныхСредствОстаткиИОбороты.Период ИЗ Документ.ЗаявкаНаПоставку.УсловиеОплаты КАК ЗаявкаНаПоставкуУсловиеОплаты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты ПО ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = ОборотыДенежныхСредствОстаткиИОбороты.Заявка ГДЕ (&Клиент = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент = &Клиент) И (&Грузополучатель = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель = &Грузополучатель) И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ПометкаУдаления = ЛОЖЬ И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Проведен = ИСТИНА И ЗаявкаНаПоставкуУсловиеОплаты.ВариантОплаты = &ВариантОплаты ИТОГИ ПО Заявка
получил СуммаРасход(объединение)
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #3 : 12-11-2013 09:51 » |
|
ч\з пакетный ВЫБРАТЬ ОборотыДенежныхСредствОстаткиИОбороты.СуммаПриход, ОборотыДенежныхСредствОстаткиИОбороты.Инвойс, ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ВнутреннийНомер КАК НомерЗаказ, ЗаявкаНаПоставкуУсловиеОплаты.Ссылка КАК Заявка, ОборотыДенежныхСредствОстаткиИОбороты.Период ПОМЕСТИТЬ Приход ИЗ Документ.ЗаявкаНаПоставку.УсловиеОплаты КАК ЗаявкаНаПоставкуУсловиеОплаты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты ПО ЗаявкаНаПоставкуУсловиеОплаты.Ссылка = ОборотыДенежныхСредствОстаткиИОбороты.Заявка ГДЕ (&Клиент = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Клиент = &Клиент) И (&Грузополучатель = ЗНАЧЕНИЕ(Справочник.Клиенты.ПустаяСсылка) ИЛИ ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Грузополучатель = &Грузополучатель) И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.ПометкаУдаления = ЛОЖЬ И ЗаявкаНаПоставкуУсловиеОплаты.Ссылка.Проведен = ИСТИНА И ЗаявкаНаПоставкуУсловиеОплаты.ВариантОплаты = &ВариантОплаты ;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ОборотыДенежныхСредствОстаткиИОбороты.СуммаРасход, Приход.СуммаПриход, Приход.Заявка КАК Заявка, Приход.Инвойс КАК Инвойс, Приход.НомерЗаказ, Приход.Период ИЗ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ Приход КАК Приход ПО ОборотыДенежныхСредствОстаткиИОбороты.Заявка = Приход.Заявка ИТОГИ ПО Заявка
результат
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #4 : 13-11-2013 08:41 » |
|
jonik_joker, нет желания выкачивать все варианты и разбираться что там отличчается. Напиши конкретный вопрос: что ты не можешь получить (или что не так)
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #5 : 13-11-2013 20:36 » |
|
Kivals, в результате выполнения запроса получается таблица вида
СуммПриход СуммРасход Инвойс расх3 расх2 расх1 прих1 инв1 прих2 инв2
прих1=расх1,прих2=расх2
хотелось бы получить
СуммПриход СуммРасход Инвойс расх3 прих1 инв1 прих2 инв2
Добавлено через 1 минуту и 2 секунды: но сойдет и
СуммПриход СуммРасход Инвойс расх3 прих1 расх1 инв1 прих2 расх2 инв2
|
|
« Последнее редактирование: 13-11-2013 20:37 от jonik_joker »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #6 : 14-11-2013 18:36 » |
|
По какому признаку у теб связаны "прих1=расх1,прих2=расх2" ? В регистре ОборотыДенежныхСредств есть измерение Инвойс ?
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #7 : 18-11-2013 09:58 » |
|
спасибо,сделал так:выгрузил результат запроса в 2 таблицы значений потом объединил.
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #8 : 18-11-2013 11:23 » |
|
Вывод: свою задачу решил, с запросами так и не разобрался
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #9 : 18-11-2013 18:40 » |
|
к сожалению, проще не получается: В регистре ОборотыДенежныхСредств есть измерение Инвойс ? измерение то есть, но оно заполняется только для регистра прихода. По какому признаку у теб связаны "прих1=расх1,прих2=расх2" ? прих - кол-во поступивших ден.средств, расх - кол-во ден. средств на изготовление.
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #10 : 19-11-2013 11:28 » |
|
jonik_joker, если ты каким-то образом объединил данные в таблицах - значит условие есть, нужно с ним правильно работать в запросах. Если запрос получается слишком сложным или тормозит, а получаемые данные это необходимый результат от ввода документов - значит нужно менять (дорабатывать) структуру данных. Почему измерение Инвойс не заполняется для расхода? Если будет 2 инвойса с одинаковыми суммами - кк ты с ними разберешься?
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #11 : 25-11-2013 19:45 » |
|
Kivals, запрос и правда все в себя вобрал: 3 временные таблицы, вложенный и 4 пакетных запроса, в конце последнего - объединение 2 врем. таб. Короче развлекся как мог. Если запрос получается слишком сложным или тормозит, а получаемые данные это необходимый результат от ввода документов - значит нужно менять (дорабатывать) структуру данных. Хотелось бы,но эта прерогатива для меня в перспективе. Почему измерение Инвойс не заполняется для расхода? Так написан конструктор движений для расхода, туда детально не заглядывал, главное результат - измерение Инвойс не заполняется. Если будет 2 инвойса с одинаковыми суммами - кк ты с ними разберешься? По номеру
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #12 : 25-11-2013 20:02 » |
|
Kivals, не знаю в этой теме продолжать или новую начать...ладно, попробуем здесь начать: как писал выше я соединил 2 ТЗ в 3-ю посредством периода, т.е. отсортировал каждую таблицу по периоду и посредством циклов сравнивал строчку одной ТЗ с другой. Что такое период для каждой из таблиц : для таблицы прихода это дата прихода денежных средств, для таблицы расхода - соответственно дата производства. Сначала изготавливаем(ДатаРасхода), потом отгружаем(ДатаПрихода), отсюда, к примеру, для 1-го инвойса в заявке получаем приход-расход и т.д. И все чудесно, пока тестировал отчет мне попадались только заявки, где не оплачен был последний по дате производства (!) инвойс в заявке, но вот незадача...
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #13 : 25-11-2013 20:13 » |
|
а если не оплачен инвойс в середине? получается после сортировки по периоду строка инвойса без оплаты табрасхода присоединится к строке табприхода, но уже следующего оплаченного инвойса, что неверно...сделал сортировку в каждой ТЗ по номеруинвойса,что более-менее приблизило меня к решению,теперь вопрос: как после нахождения нужного неоплаченного инвойса при сравнении строк этих таблиц сдвинуть строку с уже оплаченным инвойсом табприход вниз, чтобы восстановить порядок? пробовал метод Сдвинуть() , но выдается ошибка Неправильное смещение внутри коллекции скорее всего неправильно понимаю метод
|
|
|
Записан
|
|
|
|
jonik_joker
Участник
Offline
|
|
« Ответ #14 : 26-11-2013 03:53 » |
|
все, сам разобрался.
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #15 : 27-11-2013 09:47 » |
|
jonik_joker, ты будешь постоянно натыкаться на какие-то проблемы в связи данных, пока не сделаешь конкретную связь между таблицами (в твоем случае напрашивается по инвойсу) ИМХО инвойс должен заполнятся при расходе, если это не так - значит это баг. Если не можешь сам это сделать по причине политики разработки - сообщи ответственным за эти движения. Если дело не в политике и ты сам полностью отвечаешь за конфигурацию - тогда пытайся разобраться почему не заполняется.
Главная суть: весь программный анализ должен идти при проведении документов (сохранении данных), в отчетах должны работать только запросы. Тогда все необходимые отчеты будут на раз-два строиться с помощью СКД.
|
|
|
Записан
|
|
|
|
|