|
v8 БП 2.0 КнигаПродаж - добавить условия отбора | ☑ | ||
---|---|---|---|---|
0
YurAnt
05.09.13
✎
13:18
|
Доброго времени суток, господа - форумчане.
Не 1й час пытаюсь сделать следующее: добавить в Отчеты/КнигаПродаж возможность вывода списка с сортировкой по типу СФ (на аванс, на реализацию и т.п.) Нашел вот такой кусок... Процедура ПолучитьСчетаФактурыДокументы(Запрос) МассивДокументовСДаннымиСФ = УчетНДС.ПолучитьИменаДокументовСДаннымиСФ(); ТекстЗапросаПоДокументамСДаннымиСФ = ""; Если МассивДокументовСДаннымиСФ.Количество() <> 0 Тогда Для Каждого ИмяДокумента Из МассивДокументовСДаннымиСФ Цикл ТекстЗапросаПоДокументамСДаннымиСФ = ТекстЗапросаПоДокументамСДаннымиСФ + " ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | ДокументСДаннымиСФ.Ссылка, | ДокументСДаннымиСФ.НомерВходящегоСчетаФактуры, | ДокументСДаннымиСФ.ДатаВходящегоСчетаФактуры, | ДокументСДаннымиСФ.Ссылка, | ЛОЖЬ, | ЛОЖЬ, | НЕОПРЕДЕЛЕНО, | НЕОПРЕДЕЛЕНО, | 4 | ИЗ | Документ." + ИмяДокумента + " КАК ДокументСДаннымиСФ | ГДЕ | ДокументСДаннымиСФ.ПредъявленСчетФактура | И ДокументСДаннымиСФ.Проведен | И (НЕ ДокументСДаннымиСФ.ПометкаУдаления) | И ДокументСДаннымиСФ.Организация В (&Организация)"; КонецЦикла; КонецЕсли; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗаписиКнигиПродаж.СчетФактура, | СчетаФактурыДокументы.ДатаСчетаФактуры, | СчетаФактурыДокументы.НомерСчетаФактуры, | СчетаФактурыДокументы.СчетФактураДокумент, | СчетаФактурыДокументы.ДоговорАванса, | СчетаФактурыДокументы.СтавкаНДСАванса, | СчетаФактурыДокументы.Приоритет |ПОМЕСТИТЬ ТаблицаСчетаФактурыДокументы |ИЗ | ЗаписиКнигиПродаж КАК ЗаписиКнигиПродаж | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ОтчетОРозничныхПродажах.Ссылка КАК СчетФактура, | ОтчетОРозничныхПродажах.Номер КАК НомерСчетаФактуры, | ОтчетОРозничныхПродажах.Дата КАК ДатаСчетаФактуры, | ОтчетОРозничныхПродажах.Ссылка КАК СчетФактураДокумент, | ЛОЖЬ КАК НаАванс, | ЛОЖЬ КАК НаСуммовуюРазницу, | НЕОПРЕДЕЛЕНО КАК СтавкаНДСАванса, | НЕОПРЕДЕЛЕНО КАК ДоговорАванса, | 1 КАК Приоритет | ИЗ | Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах | ГДЕ | ОтчетОРозничныхПродажах.Проведен | И (НЕ ОтчетОРозничныхПродажах.ПометкаУдаления) | И ОтчетОРозничныхПродажах.Организация В(&Организация) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ПриходныйКассовыйОрдер.Ссылка, | ПриходныйКассовыйОрдер.Номер, | ПриходныйКассовыйОрдер.Дата, | ПриходныйКассовыйОрдер.Ссылка, | ЛОЖЬ, | ЛОЖЬ, | НЕОПРЕДЕЛЕНО, | НЕОПРЕДЕЛЕНО, | 2 | ИЗ | Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер | ГДЕ | ПриходныйКассовыйОрдер.Проведен | И (НЕ ПриходныйКассовыйОрдер.ПометкаУдаления) | И ПриходныйКассовыйОрдер.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПКО.РозничнаяВыручка) | И ПриходныйКассовыйОрдер.Организация В(&Организация) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | СчетФактураВыданный.ДокументОснование, | СчетФактураВыданный.Ссылка.Номер, | СчетФактураВыданный.Ссылка.Дата, | СчетФактураВыданный.Ссылка, | ВЫБОР | КОГДА СчетФактураВыданный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.НаАванс) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ, | ВЫБОР | КОГДА СчетФактураВыданный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.НаСуммовуюРазницу) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ, | ВЫБОР | КОГДА СчетФактураВыданный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.НаАванс) | ТОГДА ЕСТЬNULL(Авансы.СтавкаНДС, НЕОПРЕДЕЛЕНО) | КОГДА СчетФактураВыданный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.НаСуммовуюРазницу) | ТОГДА СчетФактураВыданный.Ссылка.СтавкаНДС | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ, | ВЫБОР | КОГДА (НЕ(СчетФактураВыданный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.НаРеализацию) | ИЛИ СчетФактураВыданный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.НаСуммовуюРазницу) | ИЛИ СчетФактураВыданный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыВыставленного.Корректировочный))) | ТОГДА СчетФактураВыданный.Ссылка.ДоговорКонтрагента | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ, | 3 | ИЗ | Документ.СчетФактураВыданный.ДокументыОснования КАК СчетФактураВыданный | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураВыданный.Авансы КАК Авансы | ПО СчетФактураВыданный.Ссылка = Авансы.Ссылка | ГДЕ | СчетФактураВыданный.Ссылка.Проведен | И (НЕ СчетФактураВыданный.Ссылка.ПометкаУдаления) | И СчетФактураВыданный.Ссылка.Организация В(&Организация) | И (НЕ СчетФактураВыданный.Ссылка.Исправление) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | СчетФактураПолученный.ДокументОснование, | СчетФактураПолученный.Ссылка.НомерВходящегоДокумента, | СчетФактураПолученный.Ссылка.ДатаВходящегоДокумента, | СчетФактураПолученный.Ссылка, | ВЫБОР | КОГДА СчетФактураПолученный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыПолученного.НаАванс) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ, | ЛОЖЬ, | ВЫБОР | КОГДА СчетФактураПолученный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыПолученного.НаАванс) | ТОГДА ЕСТЬNULL(Авансы.СтавкаНДС, НЕОПРЕДЕЛЕНО) | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ, | ВЫБОР | КОГДА СчетФактураПолученный.Ссылка.ВидСчетаФактуры = ЗНАЧЕНИЕ(Перечисление.ВидСчетаФактурыПолученного.НаАванс) | ТОГДА СчетФактураПолученный.Ссылка.ДоговорКонтрагента | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ, | 5 | ИЗ | Документ.СчетФактураПолученный.ДокументыОснования КАК СчетФактураПолученный | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураПолученный.Авансы КАК Авансы | ПО СчетФактураПолученный.Ссылка = Авансы.Ссылка | ГДЕ | СчетФактураПолученный.Ссылка.Проведен | И (НЕ СчетФактураПолученный.Ссылка.ПометкаУдаления) | И СчетФактураПолученный.Ссылка.Организация В(&Организация) | И (НЕ СчетФактураПолученный.Ссылка.Исправление) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ГТДИмпорт.Ссылка, | ГТДИмпорт.НомерГТД, | ГТДИмпорт.Дата, | ГТДИмпорт.Ссылка, | ЛОЖЬ, | ЛОЖЬ, | НЕОПРЕДЕЛЕНО, | НЕОПРЕДЕЛЕНО, | 6 | ИЗ | Документ.ГТДИмпорт КАК ГТДИмпорт | ГДЕ | ГТДИмпорт.Проведен | И (НЕ ГТДИмпорт.ПометкаУдаления) | И ГТДИмпорт.Организация В(&Организация)) КАК СчетаФактурыДокументы | ПО ЗаписиКнигиПродаж.СчетФактура = СчетаФактурыДокументы.СчетФактура | И ЗаписиКнигиПродаж.СтавкаНДС_Аванс = СчетаФактурыДокументы.СтавкаНДСАванса | И ЗаписиКнигиПродаж.ДоговорАванса = СчетаФактурыДокументы.ДоговорАванса"; Если ТекстЗапросаПоДокументамСДаннымиСФ <> "" Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, ") КАК СчетаФактурыДокументы", ТекстЗапросаПоДокументамСДаннымиСФ + ") КАК СчетаФактурыДокументы"); КонецЕсли; Запрос.Выполнить(); КонецПроцедуры если верно понимаю, самая первая выборка - это то ОТКУДА будет всё выгребаться... так ? Т.е. делаю еще выборку по НомеруСчетаФактуры, левым соединением цепляю, определяю тип, и кхм... отбираю уже указав тип параметром, не? иль я перемудрил ? Благодарен за любые советы, С ув. yurant. |
|||
1
YurAnt
05.09.13
✎
13:24
|
PS кусок выдран из КнигаПродаж/МодульОбъекта
|
|||
2
YurAnt
05.09.13
✎
13:43
|
ТекстЗапросаПоДокументамСДаннымиСФ = ТекстЗапросаПоДокументамСДаннымиСФ + " ОБЪЕДИНИТЬ ВСЕ
| ВЫБРАТЬ | ДокументСДаннымиСФ.Ссылка, | ДокументСДаннымиСФ.НомерВходящегоСчетаФактуры, | ДокументСДаннымиСФ.ДатаВходящегоСчетаФактуры, | ДокументСДаннымиСФ.Ссылка КАК Ссылка1, | ЛОЖЬ КАК Поле1, | ЛОЖЬ КАК Поле2, | НЕОПРЕДЕЛЕНО КАК Поле3, | НЕОПРЕДЕЛЕНО КАК Поле4, | 4 КАК Поле5 |ИЗ | Документ." + ИмяДокумента + " КАК ДокументСДаннымиСФ | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | СчетФактураВыданный.Ссылка КАК Ссылка, | СчетФактураВыданный.ВидСчетаФактуры КАК ВидСчетаФактуры | ИЗ | Документ.СчетФактураВыданный КАК СчетФактураВыданный | ГДЕ | СчетФактураВыданный.ВидСчетаФактуры = &Вид) КАК ВложенныйЗапрос | ПО ДокументСДаннымиСФ.Ссылка = ВложенныйЗапрос.Ссылка |ГДЕ | ДокументСДаннымиСФ.ПредъявленСчетФактура | И ДокументСДаннымиСФ.Проведен | И НЕ ДокументСДаннымиСФ.ПометкаУдаления | И ДокументСДаннымиСФ.Организация В(&Организация) | И ВложенныйЗапрос.ВидСчетаФактуры = &Вид"; Не взлетает...( курю бамбук дальше |
|||
3
YurAnt
05.09.13
✎
14:03
|
Подправил вот так, в предыдущем случае - косяк был в том, что СФ выданные и полученные сравнивал)
ВЫБРАТЬ ДокументСДаннымиСФ.Ссылка, ДокументСДаннымиСФ.НомерВходящегоСчетаФактуры, ДокументСДаннымиСФ.ДатаВходящегоСчетаФактуры, ЛОЖЬ КАК Поле1, ЛОЖЬ КАК Поле2, НЕОПРЕДЕЛЕНО КАК Поле3, НЕОПРЕДЕЛЕНО КАК Поле4, 4 КАК Поле5, ВложенныйЗапрос.Ссылка КАК Ссылка1 ИЗ Документ.ПоступлениеТоваровУслуг КАК ДокументСДаннымиСФ ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СчетФактураПолученный.Ссылка КАК Ссылка, СчетФактураПолученный.ВидСчетаФактуры КАК ВидСчетаФактуры ИЗ Документ.СчетФактураПолученный КАК СчетФактураПолученный ГДЕ СчетФактураПолученный.ВидСчетаФактуры = &Вид) КАК ВложенныйЗапрос ПО ДокументСДаннымиСФ.Ссылка = ВложенныйЗапрос.Ссылка ГДЕ ДокументСДаннымиСФ.ПредъявленСчетФактура И ДокументСДаннымиСФ.Проведен И НЕ ДокументСДаннымиСФ.ПометкаУдаления И ДокументСДаннымиСФ.Организация В(&Организация) Однако косяк все равно есть...( Не выводится ссылка на соотв-ю док-ту СФ...(( PS вот так люди и зарабатывают шизу) сижу "foreveralone" сам с собой общаюсь =/ |
|||
4
YurAnt
05.09.13
✎
14:11
|
подсоветуйте кто-нибудь, я вообще в ту сторону копаю ? а то вдруг я не в ту степь забрел(
|
|||
5
YurAnt
06.09.13
✎
06:19
|
ап(
давайте вернемся к началу... быть может я не в тот запрос полез? как определить запрос, которым формируется список КнигиПродаж? ... так ну вроде бы вот то самое место. Поскольку // и по данным запроса заполняет таблицу значений, на основании которой, будет напечатана книга продаж Думаю логичным будет начать с этого места. А вот каким образом отсеять типы СФ... курю дальше // Функция вызывается из тела процедуры "СформироватьКнигуПродаж". // Функция осуществляет первичную обработку результатов запроса к движениям регистра НДСПродажи, // и по данным запроса заполняет таблицу значений, на основании которой, будет напечатана книга продаж // Параметры: // Результат - ссылка на результаты выполнения запроса к данным регистра "НДСПродажи" // МоментОпределенияНалоговойБазыНДС Функция ПолучитьЗаписиКнигиПродаж(СписокОрганизаций, Периодичность = Неопределено, СписокСчетовФактур) // Создаем запрос по счетам-фактурам Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("НачалоПериода" , НачалоПериода); Запрос.УстановитьПараметр("КонецПериода" , КонецДня(КонецПериода)); Запрос.УстановитьПараметр("Организация" , СписокОрганизаций); Запрос.УстановитьПараметр("ОтбиратьПоКонтрагенту", Не СформироватьОтчетПоСтандартнойФорме И ОтбиратьПоКонтрагенту); Запрос.УстановитьПараметр("КонтрагентДляОтбора", КонтрагентДляОтбора); Запрос.УстановитьПараметр("ВыводитьПродавцовПоАвансам", ВыводитьПродавцовПоАвансам); |
|||
6
YurAnt
06.09.13
✎
06:53
|
есть подозрение что там все завязано на "ВидыЦенностей_
по идее у нас 6 типов выданных СФ: реализ-я, аванс, налог. учет, на суммов. разницу, корректировоч-й, на аванс комитента; и 4 типа полученных: на поступл-е, на аванс, корректир-й, на аванс комитента; пытаюсь понять как их завязать с видами ценностей господа-магистры... нужна помощь( |
|||
7
YurAnt
09.09.13
✎
14:06
|
Разобрался.
Модуль объекта, в Процедура СформироватьОсновнойРаздел(СписокОрганизаций, ЭлементыФормы, УчетнаяПолитикаНУ) Экспорт Кусок: Если ЗаписьКниги.Строки.Количество() > 1 И ЗаписьКниги.Покупатель = "Розничная продажа" Тогда Для Каждого ЗаписьКнигиДетальная Из ЗаписьКниги.Строки Цикл ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКнигиДетальная, ЕстьЗаписиПоКолонке20, Истина); ТабличныйДокумент.Вывести(Секция); КонецЦикла; Иначе ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20); ТабличныйДокумент.Вывести(Секция); КонецЕсли; Вот если его запихивать в условия типа Если (ТипЗнч(ЗаписьКниги.СчетФактураДокумент) = ТипЗнч(Документы.СчетФактураВыданный.ПустаяСсылка())) ИЛИ (ТипЗнч(ЗаписьКниги.СчетФактураДокумент) = ТипЗнч(Документы.СчетФактураПолученный.ПустаяСсылка())) Тогда Если (ЗаписьКниги.СчетФактураДокумент.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыПолученного.НаАванс) ИЛИ (ЗаписьКниги.СчетФактураДокумент.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыставленного.НаСуммовуюРазницу) Тогда //=================================================================================== Если ЗаписьКниги.Строки.Количество() > 1 И ЗаписьКниги.Покупатель = "Розничная продажа" Тогда Для Каждого ЗаписьКнигиДетальная Из ЗаписьКниги.Строки Цикл ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКнигиДетальная, ЕстьЗаписиПоКолонке20, Истина); ТабличныйДокумент.Вывести(Секция); КонецЦикла; Иначе ЗаполнитьСтрокуКнигиПродаж(Секция, ЗаписьКниги, ЕстьЗаписиПоКолонке20); ТабличныйДокумент.Вывести(Секция); КонецЕсли; //=================================================================================== КонецЕсли; Иначе Сообщить(ЗаписьКниги.СчетФактураДокумент); КонецЕсли; То всё ок. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |