helpf.pro
Регистрация

v8.2 УП: отчет Взаиморасчеты с Комиссионерами

farkhod
05.10.2011 08:09Прочитано: 2667
Ут 10.3
Платформа 8.2
Отчет: взаиморасчеты с Комиссионерами
РегистрНакопления: ТоварыПереданные

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

Уже больше неделю ломаю голову как это правильно сделать в СКД.
Так как я на 8.2 не давно не могу найти правильную технологию чтоб товары в рамке одного договора с контрагента группировались по документу "РеализацияТоваровУслуг" и БезДвижения (то есть нету реализации есть только отчет продавца или возврат)

Да трудно объяснить смысл вопроса, но кто работал с этим отчетом на УТ 10.3 поймет (там это реализовано по заказам)

Спасибо за ранее
Yandex
Возможно, вас также заинтересует
Реклама на портале
typeharley
05.10.2011 11:05Ответ № 1
Названия и типы полей регистра в студию
farkhod
06.10.2011 11:44Ответ № 2
РегистрНакопления.ТоварыПереданные

Измерения: ДоговорКонтрагента, Сделка (ДокЗаказы), СтатусПередачи (Перечисление), Номенклатура, Контрагент, Организация
Ресурсы: Количество, Сумма
typeharley
06.10.2011 13:00Ответ № 3
Приведи табличный пример, как ты хочешь это видеть
farkhod
06.10.2011 13:44Ответ № 4
Отрывок из отчета:
title


У меня получился вот такой вот отчет, это все в СКД, таблица собрана по частям сперва из Регистра вытащил только по Регистратору (РеализацияТоваровУслуг), к нему приплюсовал (полное соединение) остатки на начало периода, обороты и остатки. Плюс ко всему этому достал долг контрагента по договору комиссии на начало периода из регистра (ВзаиморасчетыСКонтрагентами), суммуОплаты и СуммуВознаграждения из регистра (НДСРасчетыСПоставщиками)

Мне кажется что я иду лесом. и Сумма Оплаты, СуммаВознаграждения и Долг повторяются в итоговом отчете по регистратору. Пробовал убрать в настройках СКД "Ресурсы" не получается.... Если не скучно могу еще выставить код
Изменено 06.10.11 13:56:49
typeharley
06.10.2011 14:17Ответ № 5
Давай свой код, а еще лучше cf-ку на мыло (typeharley@mail.ru).
farkhod
06.10.2011 14:23Ответ № 6
Код 1C v 8.2 УП
 
/////////////////////Долг комиссионера

ВЫБРАТЬ
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.Контрагент,
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.ДоговорКонтрагента,
ВзаиморасчетыСКонтрагентамиОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
Поместить ДолгКомиссионера
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентами.ОстаткиИОбороты(&ДатаНачало, &ДатаОкончания, , , ДоговорКонтрагента.ВидДоговора = &ВидДоговора) КАК ВзаиморасчетыСКонтрагентамиОстаткиИОбороты;

///////////////////Вознаграждение за период
ВЫБРАТЬ
НДСРасчетыСПоставщиками.Поставщик КАК Контрагент ,
НДСРасчетыСПоставщиками.ДоговорКонтрагента,
СУММА(НДСРасчетыСПоставщиками.Сумма) КАК СуммаВознаграждения
ПОМЕСТИТЬ Вознаграждение
ИЗ
РегистрНакопления.НДСРасчетыСПоставщиками КАК НДСРасчетыСПоставщиками
ГДЕ
НДСРасчетыСПоставщиками.Период МЕЖДУ &ДатаНачало И &ДатаОкончания
И НДСРасчетыСПоставщиками.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

СГРУППИРОВАТЬ ПО
НДСРасчетыСПоставщиками.Поставщик,
НДСРасчетыСПоставщиками.ДоговорКонтрагента
;
/////СуммаОплатыЗаПериод
ВЫБРАТЬ
ДвиженияДенежныхСредств.Контрагент КАК Контрагент,
ДвиженияДенежныхСредств.ДоговорКонтрагента КАК ДоговорКонтрагента,
СУММА(ДвиженияДенежныхСредств.Сумма) КАК СуммаОплаты
ПОМЕСТИТЬ СуммаОплатыЗаПериод
ИЗ
РегистрНакопления.ДвиженияДенежныхСредств КАК ДвиженияДенежныхСредств
ГДЕ
ДвиженияДенежныхСредств.Период МЕЖДУ &ДатаНачало И &ДатаОкончания

СГРУППИРОВАТЬ ПО
ДвиженияДенежныхСредств.Контрагент, ДвиженияДенежныхСредств.ДоговорКонтрагента
;
//////////////Оборот по документу РеализаицияТоваровУслуг

ВЫБРАТЬ
ТоварыПереданные.Контрагент,
ТоварыПереданные.ДоговорКонтрагента,
ТоварыПереданные.Регистратор,
ТоварыПереданные.Номенклатура,
ТоварыПереданные.КоличествоНачальныйОстаток,
ТоварыПереданные.СуммаВзаиморасчетовНачальныйОстаток,
ТоварыПереданные.КоличествоПриход,
ТоварыПереданные.СуммаВзаиморасчетовПриход,
ТоварыПереданные.КоличествоРасход,
ТоварыПереданные.СуммаВзаиморасчетовРасход,
ТоварыПереданные.КоличествоКонечныйОстаток,
ТоварыПереданные.СуммаВзаиморасчетовКонечныйОстаток
ПОМЕСТИТЬ ОборотЗаПереодПоДокРеализация
ИЗ
РегистрНакопления.ТоварыПереданные.ОстаткиИОбороты(
&ДатаНачало,
&ДатаОкончания,
Регистратор,
,
ВЫБОР
КОГДА &Контрагент = НЕОПРЕДЕЛЕНО
ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА ИСТИНА
ИНАЧЕ Контрагент = &Контрагент
КОНЕЦ
И
СтатусПередачи = &СтатусПередачи) КАК ТоварыПереданные
ГДЕ
ТоварыПереданные.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
;

////////////////////////////////////////////////////////////////////////////////
////Общий оборот по остаткам
ВЫБРАТЬ
ТоварыПереданныеОстаткиИОбороты.Контрагент,
ТоварыПереданныеОстаткиИОбороты.ДоговорКонтрагента,
НЕОПРЕДЕЛЕНО КАК Регистратор,
ТоварыПереданныеОстаткиИОбороты.Номенклатура,
ТоварыПереданныеОстаткиИОбороты.КоличествоНачальныйОстаток,
ТоварыПереданныеОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток,
ТоварыПереданныеОстаткиИОбороты.КоличествоПриход,
ТоварыПереданныеОстаткиИОбороты.СуммаВзаиморасчетовПриход,
ТоварыПереданныеОстаткиИОбороты.КоличествоРасход,
ТоварыПереданныеОстаткиИОбороты.СуммаВзаиморасчетовРасход,
ТоварыПереданныеОстаткиИОбороты.КоличествоКонечныйОстаток,
ТоварыПереданныеОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток
Поместить ОбщийОборотЗаПереод
ИЗ
РегистрНакопления.ТоварыПереданные.ОстаткиИОбороты(
&ДатаНачало,
&ДатаОкончания,
,
,
ВЫБОР
КОГДА &Контрагент = НЕОПРЕДЕЛЕНО
ИЛИ &Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА ИСТИНА
ИНАЧЕ Контрагент = &Контрагент
КОНЕЦ
И
СтатусПередачи = &СтатусПередачи) КАК ТоварыПереданныеОстаткиИОбороты;
////////////////////////////////////

//////объединение

Выбрать
ЕстьNull(ОборотЗаПереодПоДокРеализация.Контрагент, ОбщийОборотЗаПереод.Контрагент) КАК Контрагент,
ЕстьNull(ОборотЗаПереодПоДокРеализация.ДоговорКонтрагента,ОбщийОборотЗаПереод.ДоговорКонтрагента) КАК ДоговорКонтрагента,
ЕстьNull(ОборотЗаПереодПоДокРеализация.Регистратор,ОбщийОборотЗаПереод.Регистратор) КАК Регистратор,
ЕстьNull(ОборотЗаПереодПоДокРеализация.Номенклатура,ОбщийОборотЗаПереод.Номенклатура) КАК Номенклатура,
Выбор Когда ОборотЗаПереодПоДокРеализация.КоличествоНачальныйОстаток = 0 ИЛИ ОбщийОборотЗаПереод.КоличествоНачальныйОстаток <>0 Тогда
ОбщийОборотЗаПереод.КоличествоНачальныйОстаток Иначе
ОборотЗаПереодПоДокРеализация.КоличествоНачальныйОстаток Конец
КАК КоличествоНачальныйОстаток,
Выбор когда ОборотЗаПереодПоДокРеализация.СуммаВзаиморасчетовНачальныйОстаток = 0 ИЛИ ОбщийОборотЗаПереод.КоличествоНачальныйОстаток <>0 Тогда
ОбщийОборотЗаПереод.СуммаВзаиморасчетовНачальныйОстаток Иначе
ОборотЗаПереодПоДокРеализация.СуммаВзаиморасчетовНачальныйОстаток Конец
КАК СуммаНачальныйОстаток,
Выбор Когда ОборотЗаПереодПоДокРеализация.КоличествоПриход = 0 Тогда
ОбщийОборотЗаПереод.КоличествоПриход Иначе
ОборотЗаПереодПоДокРеализация.КоличествоПриход Конец
КАК КоличествоПередано,
Выбор Когда ОборотЗаПереодПоДокРеализация.СуммаВзаиморасчетовПриход = 0 Тогда
ОбщийОборотЗаПереод.СуммаВзаиморасчетовПриход Иначе
ОборотЗаПереодПоДокРеализация.СуммаВзаиморасчетовПриход Конец
КАК СуммаПередано,
Выбор Когда ОборотЗаПереодПоДокРеализация.КоличествоРасход = 0 ИЛИ ОбщийОборотЗаПереод.КоличествоРасход<> 0 Тогда
ОбщийОборотЗаПереод.КоличествоРасход Иначе
ОборотЗаПереодПоДокРеализация.КоличествоРасход Конец
КАК КоличествоРеализовано,
Выбор Когда ОборотЗаПереодПоДокРеализация.СуммаВзаиморасчетовРасход = 0 ИЛИ ОбщийОборотЗаПереод.СуммаВзаиморасчетовРасход <> 0 Тогда
ОбщийОборотЗаПереод.СуммаВзаиморасчетовРасход Иначе
ОборотЗаПереодПоДокРеализация.СуммаВзаиморасчетовРасход Конец
КАК СуммаРеализовано,
Выбор когда ОборотЗаПереодПоДокРеализация.КоличествоКонечныйОстаток = 0 ИЛИ ОбщийОборотЗаПереод.КоличествоКонечныйОстаток<>0 Тогда
ОбщийОборотЗаПереод.КоличествоКонечныйОстаток Иначе
ОборотЗаПереодПоДокРеализация.КоличествоКонечныйОстаток Конец
КАК КоличествоКонечныйОстаток,
Выбор Когда ОборотЗаПереодПоДокРеализация.СуммаВзаиморасчетовКонечныйОстаток = 0 ИЛИ ОбщийОборотЗаПереод.СуммаВзаиморасчетовКонечныйОстаток<>0 Тогда
ОбщийОборотЗаПереод.СуммаВзаиморасчетовКонечныйОстаток Иначе
ОборотЗаПереодПоДокРеализация.СуммаВзаиморасчетовКонечныйОстаток Конец
КАК СуммаКонечныйОстаток,
СуммаОплатыЗаПериод.СуммаОплаты,
Вознаграждение.СуммаВознаграждения,
ДолгКомиссионера.СуммаВзаиморасчетовКонечныйОстаток КАК Долг,
0 КАК СуммаНоль

Из ОборотЗаПереодПоДокРеализация КАК ОборотЗаПереодПоДокРеализация

Полное Соединение ОбщийОборотЗаПереод КАК ОбщийОборотЗаПереод
По ОборотЗаПереодПоДокРеализация.Контрагент = ОбщийОборотЗаПереод.Контрагент
И ОборотЗаПереодПоДокРеализация.ДоговорКонтрагента = ОбщийОборотЗаПереод.ДоговорКонтрагента
И ОборотЗаПереодПоДокРеализация.Номенклатура = ОбщийОборотЗаПереод.Номенклатура

Левое Соединение СуммаОплатыЗаПериод КАК СуммаОплатыЗаПериод
По ОборотЗаПереодПоДокРеализация.Контрагент = СуммаОплатыЗаПериод.Контрагент
И ОборотЗаПереодПоДокРеализация.ДоговорКонтрагента = СуммаОплатыЗаПериод.ДоговорКонтрагента

Левое Соединение Вознаграждение КАК Вознаграждение
По ОборотЗаПереодПоДокРеализация.Контрагент = Вознаграждение.Контрагент
И ОборотЗаПереодПоДокРеализация.ДоговорКонтрагента = Вознаграждение.ДоговорКонтрагента

Левое Соединение ДолгКомиссионера КАК ДолгКомиссионера
По ОборотЗаПереодПоДокРеализация.Контрагент = ДолгКомиссионера.Контрагент
И ОборотЗаПереодПоДокРеализация.Контрагент = ДолгКомиссионера.Контрагент


typeharley
06.10.2011 14:24Ответ № 7
Никогда не пользуюсь полным соединением (только левое)!
1) Посмотри размножило ли тебе таблицу полное соединение и как размножило.
2) Посмотри "уникально" ли условие соединения таблиц.
farkhod
06.10.2011 14:24Ответ № 8
cf ка около 90 мб получилось, попробую залить куда нить, напишу, спасибо
farkhod
06.10.2011 14:34Ответ № 9
Без полного соединения никак, потому что номенклатура может быть в остатках но не быть в документе реализация или наоборот. На этот случай поставил проверку в "Объединении" типа Выбор когда ОбщийОборотЗаПереод.СуммаВзаиморасчетовРасход <> 0 Тогда. Так что все ок. В результате нет повторений и товары все попадают в отчет по факту, проверял не раз.
Одна проблема, суммы Сумма Оплаты, СуммаВознаграждения и Долг повторяются по Регистратору в Рамках одного договора. не могу понять в чем фишка..... Проверял в объединении эти суммы приплюсовываются только к тем строкам где есть "Регистратор" хотя соединение по Контрагенту и ДоговоруКонтрагента
typeharley
06.10.2011 14:52Ответ № 10
Примерно разобрался...
У тебя множится результирующая таблица и множит его полное соединение (и за одно множит результаты остальных таблиц).
Тебе нужно разделить операцию в два шага:
1) Сначала соединить полное соединение (т.е. первые две таблицы).
2) Подзапросом соединить все остальные вместе.
3) Потом соединить таблицы, с первого шага и со второго!
А вообще я бы полностью переписал весь запрос в один - без временных таблиц, но это как кому нравится.....
Изменено 06.10.11 14:54:25
typeharley
06.10.2011 14:58Ответ № 11
А и еще, для полной уверенности первую таблицу еще и прогруппируй, а потом соединяй дальше.
Изменено 06.10.11 14:59:08
typeharley
06.10.2011 15:00Ответ № 12
Дело в том, что MS SQL не позволяет вязать в один шаг разные соединения (полное и левое), поэтому как там это вяжется в 1С вопрос если честно сложный, надо пробовать...
typeharley
06.10.2011 15:15Ответ № 13
И еще нужно предусмотреть момент когда у тебя пустой регистратор, нужно как-то исключить строки с пустым регистратором. Возможно вообще сделать по-другому:
Сначала сделать все левые соединения, а только потом вязать полное соединение, так вроде точно не размножит, но вязать сразу все вместе точно не стоит.
Изменено 06.10.11 15:16:52
farkhod
07.10.2011 07:14Ответ № 14
Попробовал варианты выше описанные, все равно получается одно и тоже. Проблема кажется в том что Ресурс "Регистратор" у меня группируется в выводимом отчете. Поэтому суммы Сумма Оплаты, СуммаВознаграждения и Долг там дублируются, стоит группировку убрать по этому реквизиту так суммы не повторяются (должен уточнить что в "Наборе данных" в Выражение представления стоит "Ноль" чтоб не повторять эту сумму в полях номенклатуры)
farkhod
23.11.2011 12:25Ответ № 15
Вопрос закрыт!
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.