Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:25

УТ 10.3 Отчет комитенту о продажах товаров

Автор AIFrame, 03 дек 2018, 09:46

0 Пользователей и 1 гость просматривают эту тему.

AIFrame

У кого есть последняя УТ 10.3 (Или постарше 10.3.29.1)
Скиньте пжлст процедуру
Процедура ЗаполнитьРеализованными(ДокументПоставки = Неопределено) Экспорт
Из модуля документа ОтчетКомитентуОПродажах
Мне надо посмотреть, 1С поправили этот косяк или я чего-то не понимаю.

oleg-x


Из версии: "Управление торговлей", редакция 10.3 (10.3.47.3)
Процедура ЗаполнитьРеализованными(ДокументПоставки = Неопределено) Экспорт

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
Запрос.УстановитьПараметр("ДокументПоставки", ДокументПоставки);
Если НЕ ЗначениеЗаполнено(Сделка) Тогда
Запрос.УстановитьПараметр("Сделка", Неопределено);
Иначе
Запрос.УстановитьПараметр("Сделка", Сделка);
КонецЕсли;

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

Пока Выборка.Следующий() Цикл

КоличествоРеализованных = ?(Выборка.КоличествоРеализованных = NULL, 0, Выборка.КоличествоРеализованных);
КоличествоПолученных    = ?(Выборка.КоличествоПолученных = NULL, 0, Выборка.КоличествоПолученных);
Выручка                 = ?(Выборка.Выручка = NULL, 0, Выборка.Выручка);
Количество              = Мин(КоличествоПолученных, КоличествоРеализованных);

Если Количество = 0 Тогда
Продолжить;
КонецЕсли;

НоваяСтрока = Товары.Добавить();
НоваяСтрока.Покупатель                 = Выборка.Покупатель;
НоваяСтрока.ДатаРеализации             = Выборка.ДатаРеализации;
НоваяСтрока.ДокументПоступления        = Выборка.ДокументПоставки;
НоваяСтрока.Номенклатура               = Выборка.Номенклатура;
НоваяСтрока.ЕдиницаИзмерения           = Выборка.ЕдиницаИзмерения;
НоваяСтрока.Коэффициент                = Выборка.Коэффициент;
НоваяСтрока.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры;
НоваяСтрока.СерияНоменклатуры          = Выборка.СерияНоменклатуры;
НоваяСтрока.Количество                 = Количество;
НоваяСтрока.Сумма                      = ?(КоличествоРеализованных = 0, 0, Выручка * НоваяСтрока.Количество / КоличествоРеализованных);
НоваяСтрока.СуммаПоступления           = ?(КоличествоПолученных = 0, 0, Выборка.СуммаПоступления * НоваяСтрока.Количество / КоличествоПолученных);
НоваяСтрока.Цена                       = ?(НоваяСтрока.Количество = 0, 0, НоваяСтрока.Сумма / НоваяСтрока.Количество);
НоваяСтрока.ЦенаПоступления            = ?(НоваяСтрока.Количество = 0, 0, НоваяСтрока.СуммаПоступления / НоваяСтрока.Количество);

Если СпособРасчетаКомиссионногоВознаграждения
= Перечисления.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтСуммыПродажи Тогда
НоваяСтрока.СуммаВознаграждения = ПроцентКомиссионногоВознаграждения
                                    * НоваяСтрока.Сумма / 100;
НоваяСтрока.СуммаНДСВознаграждения = УчетНДС.РассчитатьСуммуНДС(НоваяСтрока.СуммаВознаграждения,
Истина, Истина,
УчетНДС.ПолучитьСтавкуНДС(СтавкаНДСВознаграждения));
ИначеЕсли СпособРасчетаКомиссионногоВознаграждения = Перечисления.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтПрибыли Тогда
НоваяСтрока.СуммаВознаграждения = ПроцентКомиссионногоВознаграждения
                                    * (НоваяСтрока.Сумма - НоваяСтрока.СуммаПоступления) / 100;
НоваяСтрока.СуммаНДСВознаграждения = УчетНДС.РассчитатьСуммуНДС(НоваяСтрока.СуммаВознаграждения,
Истина, Истина,
УчетНДС.ПолучитьСтавкуНДС(СтавкаНДСВознаграждения));
КонецЕсли;

КонецЦикла;

КонецПроцедуры // ЗаполнитьРеализованными()
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

AIFrame

Получается, что это косяк и он так и остался.
В .29.1 текст модуля идентичен.
Если НЕ ЗначениеЗаполнено(Сделка) Тогда
        Запрос.УстановитьПараметр("Сделка", Неопределено);

При создании документа сделка не заполняется и заполнить ее нельзя, для рядового пользователя поле ввода скрыто да и нелогично, отчет должен формироваться по нескольким сделкам, т.е. "за период".
___
Поправлюсь - при создании отчета не на основании первоначальной сделки.
Уже есть подтверждение, что в БУХ 2.0 он заполняется без создания на основании сделки корректно.

|    РегистрНакопления.РеализованныеТовары.Остатки(, ДоговорКонтрагента = &ДоговорКонтрагента И Сделка = &Сделка
Вот тут получается:
    ДоговорКонтрагента = некаяСсылка
        И Сделка = неопределено

И отчет вернется пустым, потому что при продаже товара на комиссии в движениях сделка есть, она подтягивается (Заказ поставщику, ПТиУ или Возврат). Нет движений, где Сделка = неопределено.
Я вижу правильным запрос только так:
| РегистрНакопления.РеализованныеТовары.Остатки(, ДоговорКонтрагента = &ДоговорКонтрагента
|   " + ?(НЕ ЗначениеЗаполнено(Сделка), "", "И Сделка = &Сделка ") + "
|                                                 " + ?(НЕ ЗначениеЗаполнено(ДокументПоставки), "", "И ДокументПоставки = &ДокументПоставки ") + ") КАК Реализованные

Тогда ТЧ документа отчета при выборе заполнения "Заполнить реализованными по заказу (договору)" начнет заполняться.

oleg-x

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

В любом случае таких моментов хватает, клиент всегда доработает программу под себя. Из коробки ни что не должно работать сразу. А то программисты 1С останутся без работы. С уважением фирма 1С :-)
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

AIFrame

Если уже сформировали один раз такой отчет, то
второй документ в таком исполнении (с правкой запроса) заполнится дублями. Половину с +, половину с -, итоговая сумма будет 0.
Т.е. оно задумывалось, что заполнение по реализованным только при условии заполненной сделки?
Жесть, это ж манагеру придется придется сидеть и отслеживать закрытие всех заказов. А вменяемых отчетов не написали.
Добавлено: 03 дек 2018, 13:58


Мда. Даже при создании на основании сделки, отчет не заполняется (в оригинальном исполнении от 1С).
Объясню почему - насколько я понял, как Сделка понимается первый документ в цепочке получения товаров на комиссию. В нашем случае это заказ. Вот только Заказ поставщику регистр ТоварыПолученные не двигает
|ЛЕВОЕ СОЕДИНЕНИЕ
    |   РегистрНакопления.ТоварыПолученные.Остатки(, ДоговорКонтрагента = &ДоговорКонтрагента
    |                                                И Сделка = &Сделка) КАК Полученные

Даже если вводишь на основании ПТиУ, Сделка все равно будет выбрана по корневому документу в цепочке (Заказ поставщику).
И тогда отчет не заполняется товарами, потому что по сделке продажи есть, а по поступления по этой сделке записей нет, потому что при проведении ПТиУ сделка не заполняется в движениях ТоварыПолученные. :ooifh:
        Количество              = Мин(КоличествоПолученных, КоличествоРеализованных);

        Если Количество = 0 Тогда
            Продолжить;
        КонецЕсли;

КоличествоПолученных всегда 0.

Г_споди, это божественно.


Добавлено: 03 дек 2018, 14:21


Короче, прогнал быстро-обработкой заполнение реквизита ТЧ ЗаказПоставщику в ПТиУ, Сделка в регистр накопления встала.
Теперь заполняется.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск