Имя: Пароль:
1C
1С v8
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);
                                    ТабличныйДокумент.Вывести(Секция);
                                КонецЕсли;
                        //===================================================================================        
                            КонецЕсли;
                        Иначе
                            Сообщить(ЗаписьКниги.СчетФактураДокумент);
                        КонецЕсли;

То всё ок.
Независимо от того, куда вы едете — это в гору и против ветра!