Отправляет email-рассылки с помощью сервиса Sendsay

Записки программиста

  Все выпуски  

Записки программиста Отчет по реализации (продолжение)


Записка №2

Как заставить отчет по реализации товара учитывать возвраты от покупателей?


Исходный материал: конфигурация "Простой учет v7.040.18" (загрузить можно по адресу http://programmer.com.ua)

"Каменты рулят". Да, именно так - помог комментарий на сайте (написал DenisKa). На самом деле, зачем вставлять ссылку на количество и суммы из документа возврата вместе со ссылками из других документов, если мы собрались выводить их отдельной секцией?! В-общем та часть текста запроса, где идут реквизиты количественного типа (Количество, СуммаСНДС и т.д.) должна преобразиться следующим образом:
оригинальные ссылки на реквизиты накладных оставляем в неизменном виде, отдельными строками прописываем новые переменные со ссылками на реквизиты возвратной накладной.

Было:
|Кво = Документ.РасходнаяНакладная.Кво,Документ.РасходнаяРозничная.Кво;

Дописываем:
|Кво = Документ.РасходнаяНакладная.Кво,Документ.РасходнаяРозничная.Кво;
|КвоВ = Документ.РасходнаяВозврат.Кво;

Аналогично я прописал сумму:
|СуммаВ    = Документ.РасходнаяВозврат.СуммаСНДС;

Для подсчетов по группировкам понадобятся функции с использованием новых переменных, значит добавим:
|Функция ИтогКвоВ = Сумма(КвоВ);
|Функция ИтогСуммаВ = Сумма(глПересчет(СуммаВ,Валюта,Гривня,Курс,ДатаДок));


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

Пример:
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
КонецЕсли;
    
тз=СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(тз);
тз.ВыбратьСтроку();
Возврат;


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

Запрос.Выгрузить(тз,3);

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

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

ps конечно жду комментариев ;)


В избранное