Имя: Пароль:
1C
1С v8
ТОРГ 29 БП 2.0.64.35 с отметками для Бухгалтерии
0 ElidanPro
 
31.08.15
07:50
Достался в наследство отчет ТОРГ 29 сотметками для бухгалтерии. все отлично работает, но есть одно НО.
Возврат товаров поставщику попадает в тч приходы если заполнено значение субконто ДТ по счету (42.02 торговая наценка в НТТ) склад.
Если делать ручную корректировку и убрать склад. то документ попадает нормально как в типовом отчете в тч Расходы.
ОТсюда вопрос, что поправить в запросе:

Процедура ОбновитьОтчет()

    Если НЕ ЗначениеЗаполнено(ДатаНач) Или НЕ ЗначениеЗаполнено(ДатаКон) Тогда
        Предупреждение("Не выбран период!");
        Возврат;
    КонецЕсли;

    Если НЕ ЗначениеЗаполнено(Склад) Тогда
        Предупреждение("Не выбран склад!");
        Возврат;
    КонецЕсли;

    мТабДок = ЭлементыФормы.ДокументРезультат;

    мТабДок.Очистить();

    Макет = ЭтотОбъект.ПолучитьМакет("Макет");

    // Выведем заголовок.
    СведенияОПокупателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация, ДатаКон);

    ВыбМОЛ = РегистрыСведений.ОтветственныеЛица.ПолучитьПоследнее(КонецДня(ДатаКон), Новый Структура("СтруктурнаяЕдиница", Склад)).ФизическоеЛицо;

    ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
    ОбластьМакета.Параметры.ОрганизацияПредставление = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе);
    ОбластьМакета.Параметры.ДатаСоставления = РабочаяДата;
    ОбластьМакета.Параметры.ДатаНачала = ДатаНач;
    ОбластьМакета.Параметры.ДатаКонца = ДатаКон;
    ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОПокупателе.КодПоОКПО;
    ОбластьМакета.Параметры.МОЛ = ?(НЕ ЗначениеЗаполнено(ВыбМОЛ), "", ВыбМОЛ);
    ОбластьМакета.Параметры.МОЛТабельныйНомер = ?(НЕ ЗначениеЗаполнено(ВыбМОЛ), "", ВыбМОЛ.Код);

    ОбластьМакета.Параметры.Номер = НомерОтчета;
    ВысотаЗаголовка = ОбластьМакета.ВысотаТаблицы;

    мТабДок.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ПовторятьПриПечатиСтроки = мТабДок.Область(1 + ВысотаЗаголовка, ,2 + ВысотаЗаголовка);

    мТабДок.Вывести(ОбластьМакета);
    
    МассивСчетов = Новый Массив;
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахАТТ);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахНТТ);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ТараПодТоваромИПорожняя);
    МассивСчетов.Добавить(ПланыСчетов.Хозрасчетный.ТорговаяНаценкаНТТ);//дав
    
    МассивСчетов41 = Новый Массив;
    МассивСчетов41.Добавить(ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахАТТ);
    МассивСчетов41.Добавить(ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахНТТ);

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

    ТЗОстатки = РезультатЗапроса.Выгрузить();
    Если ТЗОстатки.Количество() = 0 Тогда
        НачОст = 0;
        КонОст = 0;
        НачОстТары = 0;
        КонОстТары = 0;
        НачОстБух42 = 0;
        КонОстБух42 = 0;
    Иначе
        НачОст = ТЗОстатки[0].НачОст;
        КонОст = ТЗОстатки[ТЗОстатки.Количество() - 1].КонОст;
        НачОстТары = ТЗОстатки[0].НачОстТары;
        КонОстТары = ТЗОстатки[ТЗОстатки.Количество() - 1].КонОстТары;
        НачОстБух42 = ТЗОстатки[0].НачОстБух42;
        КонОстБух42 = ТЗОстатки[ТЗОстатки.Количество() - 1].КонОстБух42;
    КонецЕсли;

    ОбластьМакета = Макет.ПолучитьОбласть("ОстатокНачала");
    ОбластьМакета.Параметры.ДатаНачала = "Остаток на " + Формат(ДатаНач, "ДЛФ=Д");
    ОбластьМакета.Параметры.НачСтоимостьВсего = ОбщегоНазначения.ФорматСумм(НачОст);
    ОбластьМакета.Параметры.НачСтоимостьТара = ОбщегоНазначения.ФорматСумм(НачОстТары);
    ОбластьМакета.Параметры.НачСтоимостьБух42 = ОбщегоНазначения.ФорматСумм(НачОстБух42);
    ОбластьМакета.Параметры.НачСтоимостьБух60 = ОбщегоНазначения.ФорматСумм(НачОст-НачОстБух42);

    мТабДок.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("Приход");
    мТабДок.Вывести(ОбластьМакета);

    ТЗПриходы = ОтобратьСтрокиПоКритериям(РезультатЗапроса, Новый Структура("ПризнакПрихода", 0),
                Новый Структура("ПризнакПрихода", ВидСравнения.НеРавно)).Выгрузить();

    ТЗПриходы.Сортировать("ДатаДок Возр");

    ОбластьМакета = Макет.ПолучитьОбласть("Строка");

    Для Каждого СтрокаПрихода Из ТЗПриходы Цикл
        ОбластьМакета.Параметры.Докум = СтрокаПрихода.Док;
        ОбластьМакета.Параметры.Контрагент = СтрокаПрихода.Док.Контрагент;
        ОбластьМакета.Параметры.Расшифровка = СтрокаПрихода.Док;
        ОбластьМакета.Параметры.ДатаДокумента = СтрокаПрихода.ДатаДок;
        ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(СтрокаПрихода.Док);
        ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.Приход);
        ОбластьМакета.Параметры.СуммаТары = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.ПриходТары);
        ОбластьМакета.Параметры.Суммабух60 = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.Приход-СтрокаПрихода.Приход42); //дав
        ОбластьМакета.Параметры.Суммабух42 = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.Приход42); //дав
        мТабДок.Вывести(ОбластьМакета);
    КонецЦикла;

    Приход = ТЗПриходы.Итог("Приход");
    ПриходТары = ТЗПриходы.Итог("ПриходТары");
    Приход42 = ТЗПриходы.Итог("Приход42");
    Приход60 = Приход-Приход42;
        
    ОбластьМакета = Макет.ПолучитьОбласть("ИтогоПриход");
    ОбластьМакета.Параметры.ПрихСтоимостьВсего = ОбщегоНазначения.ФорматСумм(Приход);
    ОбластьМакета.Параметры.ПрихСтоимостьТара = ОбщегоНазначения.ФорматСумм(ПриходТары);
    ОбластьМакета.Параметры.ИтогоПрих42 = ОбщегоНазначения.ФорматСумм(Приход42);
    ОбластьМакета.Параметры.ИтогоПрих60 = ОбщегоНазначения.ФорматСумм(Приход60);
    мТабДок.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("ВсегоПриход");
    ОбластьМакета.Параметры.ПриходСОстатком = ОбщегоНазначения.ФорматСумм(Приход + НачОст);
    ОбластьМакета.Параметры.ПриходСОстаткомТара = ОбщегоНазначения.ФорматСумм(ПриходТары + НачОстТары);
    ОбластьМакета.Параметры.ВсегоПриход42 = ОбщегоНазначения.ФорматСумм(Приход42 + НачОстБух42);
    ОбластьМакета.Параметры.ВсегоПриход60 = ОбщегоНазначения.ФорматСумм(Приход60 + (НачОст-НачОстБух42));
    
    мТабДок.Вывести(ОбластьМакета);

    мТабДок.ВывестиГоризонтальныйРазделительСтраниц();

    ОбластьМакета = Макет.ПолучитьОбласть("Расход");
    мТабДок.Вывести(ОбластьМакета);

    ТЗРасходы = ОтобратьСтрокиПоКритериям(РезультатЗапроса, Новый Структура("ПризнакРасхода", 0),
                Новый Структура("ПризнакРасхода", ВидСравнения.НеРавно)).Выгрузить();
                
    ТЗРасходы = ОтобратьСтрокиПоКритериям(ТЗРасходы, Новый Структура("ПризнакПрихода", 0),
                Новый Структура("ПризнакПрихода", ВидСравнения.Равно)).Выгрузить();
                

    ТЗРасходы.Сортировать("ДатаДок Возр");

    ОбластьМакета = Макет.ПолучитьОбласть("Строка");

    Для Каждого СтрокаРасхода Из ТЗРасходы Цикл
        ОбластьМакета.Параметры.Докум = СтрокаРасхода.Док;
        ОбластьМакета.Параметры.Контрагент = СтрокаПрихода.Док.Контрагент;
        ОбластьМакета.Параметры.Расшифровка = СтрокаРасхода.Док;
        ОбластьМакета.Параметры.ДатаДокумента = СтрокаРасхода.ДатаДок;
        ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(СтрокаРасхода.Док);
        ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.Расход);
        ОбластьМакета.Параметры.СуммаТары = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.РасходТары);
        мТабДок.Вывести(ОбластьМакета);
    КонецЦикла;

    Расход = ТЗРасходы.Итог("Расход");
    РасходТары = ТЗРасходы.Итог("РасходТары");

    ОбластьМакета = Макет.ПолучитьОбласть("ИтогоРасход");
    ОбластьМакета.Параметры.РасхСтоимостьВсего = ОбщегоНазначения.ФорматСумм(Расход);
    ОбластьМакета.Параметры.РасхСтоимостьТара = ОбщегоНазначения.ФорматСумм(РасходТары);
    мТабДок.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("ОстатокКонец");
    ОбластьМакета.Параметры.ДатаКонца = "Остаток на " + Формат(ДатаКон, "ДЛФ=Д");
    ОбластьМакета.Параметры.КонСтоимостьВсего = ОбщегоНазначения.ФорматСумм(КонОст);
    ОбластьМакета.Параметры.КонСтоимостьТара = ОбщегоНазначения.ФорматСумм(КонОстТары);
    мТабДок.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
    мТабДок.Вывести(ОбластьМакета);

    мТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСтроки;

    НомерОтчета = НомерОтчета + 1;

КонецПроцедуры // ОбновитьОтчет()
1 Мимохожий Однако
 
31.08.15
07:54
Лобовой вариант :
При обходе установить фильтр для этого вида документа.
2 ElidanPro
 
31.08.15
08:00
(1) в какой кусок запроса вставляем?
3 Мимохожий Однако
 
31.08.15
08:03
После строки
Для Каждого СтрокаПрихода Из ТЗПриходы Цикл
4 ElidanPro
 
31.08.15
08:03
Условие Регистратор Ссылка Документ.ПоступлениеТоваровУслуг
5 ElidanPro
 
31.08.15
08:24
Если РегистрыСведений.ДанныеПервичныхДокументов = Документы.ПоступлениеТоваровУслуг
            Тогда;

так в ТЧ приходы вообще нечего не попадает.
6 ElidanPro
 
31.08.15
08:48
Товарищи подскажите пожалуйста как установить этот отбор?
7 Мимохожий Однако
 
31.08.15
10:13
(5)Регистр сведений здесь каким боком?
...
Если ТипЗнч(СтрокаПрихода.Док) = Тип("ДокументСсылка.ABCКлассификацияПокупателей") Тогда
Продолжить;
КонецЕсли;
....
Запусти отладчик, посмотри значения.... и т.д.
8 ElidanPro
 
01.09.15
05:23
Переделал.
В ТЧПриходы теперь все красиво попадает. Но в ТЧРасходы это документ так и не попал.

Для ТЧ ПРИХОДЫ:

ОбластьМакета = Макет.ПолучитьОбласть("Строка");

    Для Каждого СтрокаПрихода Из ТЗПриходы Цикл
        Если ТипЗнч(СтрокаПрихода.Док) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг")
            Тогда
        ОбластьМакета.Параметры.Докум = СтрокаПрихода.Док;
        ОбластьМакета.Параметры.Контрагент = СтрокаПрихода.Док.Контрагент;
        ОбластьМакета.Параметры.Расшифровка = СтрокаПрихода.Док;
        ОбластьМакета.Параметры.ДатаДокумента = СтрокаПрихода.ДатаДок;
        ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(СтрокаПрихода.Док);
        ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.Приход);
        ОбластьМакета.Параметры.СуммаТары = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.ПриходТары);
        ОбластьМакета.Параметры.Суммабух60 = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.Приход-СтрокаПрихода.Приход42); //дав
        ОбластьМакета.Параметры.Суммабух42 = ОбщегоНазначения.ФорматСумм(СтрокаПрихода.Приход42); //дав
        мТабДок.Вывести(ОбластьМакета);
        КонецЕсли;
    КонецЦикла;


ДЛЯ ТЧРасходы

Закоментировал ОтобратьСтрокиПоКритериям, добавил критерий отбора по документам.

//ТЗРасходы = ОтобратьСтрокиПоКритериям(ТЗРасходы, Новый Структура("ПризнакПрихода", 0)).Выгрузить();
                //            Новый Структура("ПризнакПрихода", ВидСравнения.НеРавно)),
                //Новый Структура("ПризнакПрихода", ВидСравнения.Равно)).Выгрузить();
                

    ТЗРасходы.Сортировать("ДатаДок Возр");

    ОбластьМакета = Макет.ПолучитьОбласть("Строка");

    Для Каждого СтрокаРасхода Из ТЗРасходы Цикл
        Если ТипЗнч(СтрокаРасхода.Док) = Тип("ДокументСсылка.ВозвратТоваровПоставщику")
            ИЛИ
             ТипЗнч(СтрокаРасхода.Док) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")
            Тогда
        ОбластьМакета.Параметры.Докум = СтрокаРасхода.Док;
        ОбластьМакета.Параметры.Контрагент = СтрокаРасхода.Док.Контрагент;
        ОбластьМакета.Параметры.Расшифровка = СтрокаРасхода.Док;
        ОбластьМакета.Параметры.ДатаДокумента = СтрокаРасхода.ДатаДок;
        ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(СтрокаРасхода.Док);
        ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.Расход);
        ОбластьМакета.Параметры.СуммаТары = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.РасходТары);
        мТабДок.Вывести(ОбластьМакета);
        КонецЕсли;
    КонецЦикла;


Все работает. Спасибо.
9 ElidanPro
 
01.09.15
07:03
Еще вопрос в некоторых документах реквизит Контрагент отсутствует. таких как переоценка, перемещение товаров. тогда происходит ошибка при формировании отчета (Поле объекта Контрагент не обнаружено)
попытался написать следующее

    //    Если ЗначениеЗаполнено(ОбластьМакета.Параметры.Контрагент)
    //    ТОГДА
    //    ОбластьМакета.Параметры.Контрагент = "Контрагент ЕСТЬ"
    //    Иначе
    //    ОбластьМакета.Параметры.Контрагент = "нет"
    //   КонецЕсли;


затыкается всеравно