Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Объединить запрос сам с собой (объединить все)

[Волшебник, 27.01.20 - 12:08]
Объединить запрос сам с собой (объединить все)
Я
   SkillUp
 
27.01.20 - 11:34
Здравсвуйте, помогите плохо соображающему в этом вопросе. Впервые с таким сталкиваюсь.

У меня есть Процедура "УстановитьТекстЗапроса()", после формированиея текстаЗапроса, пытаюсь объеденить запрос сам с собой.

Т.Е.

СНАЧАЛО ФОРМИРОВАНИЕ ТЕКСТА ЗАПРОСА.

пытаюсь объеденить:

ТекстЗапроса = ТекстЗапроса + "
            | ОБЪЕДИНИТЬ ВСЕ " + ТекстЗапроса+"
            | ";

И ошибка на этой строке:
УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;

Текст ошибки:
{ВнешнийОтчет.ДебиторскаяЗадолженностьПоСрокамДолга.МодульОбъекта(261)}: Ошибка при установке значения атрибута контекста (Текст)
    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
по причине:
{(109, 2)}: Синтаксическая ошибка "ОБЪЕДИНИТЬ"
<<?>>ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ


Подскажите как правильно объеденить, что делаю не так? Вроде подробно объяснил ситуацию...
 
 
   SkillUp
 
1 - 27.01.20 - 11:36
ТекстЗапроса объеденить с этим же ТекстЗапроса
   Ненавижу 1С
 
2 - 27.01.20 - 11:37
(1) например раздел УПОРЯДОЧИТЬ может быть один на весь запрос
   Ненавижу 1С
 
3 - 27.01.20 - 11:37
+(2) тоже самое с ИТОГИ
   SkillUp
 
4 - 27.01.20 - 11:38
(2) (3) Блин, точно...
   SkillUp
 
5 - 27.01.20 - 11:38
Сейчас гляну...
   SkillUp
 
6 - 27.01.20 - 11:40
(3) Да, правильно. Есть итоги . Вопрос: Как объеденить в моем случае? Убрать итоги с первого "ТекстЗапроса", объеденить сам с собой, потом добавить итоги?
   Ненавижу 1С
 
7 - 27.01.20 - 11:41
(6) верно
   SkillUp
 
8 - 27.01.20 - 11:41
(7) Спасибо!
   Ненавижу 1С
 
9 - 27.01.20 - 11:42
+(7) соответственно понимать что итоги возможно будут как бы другими, чем без объединения
   SkillUp
 
10 - 27.01.20 - 11:44
(9) Как в воду смотрел... Все правильно, данные та будут другие.
   SkillUp
 
11 - 27.01.20 - 11:45
Блин, а что делать? Ковырять надо запрос... (
   Sasha_H
 
12 - 27.01.20 - 11:53
(11) это смотря . что тебе надо. Обычно для этого служат временные таблицы.
   SkillUp
 
13 - 27.01.20 - 11:59
(12) Идея!
   SkillUp
 
14 - 27.01.20 - 12:05
(12) В универсальный отчет, задублировать данные таблицы.

Т.е. Раньше было
Остаток  Долг

  3       10

А надо:
№1 таблица Остаток: Долг:  №2 таблица  Остаток:  Долг:
             3       10                  3        10
   Sasha_H
 
15 - 27.01.20 - 12:07
вот чего чего , а задачу задублировать данные еще никогла не поступала
   Sasha_H
 
16 - 27.01.20 - 12:08
если Вам необходимо испортить данные например для скрытия факта реальности. НУ в научных каких-то целях. То воспользуйтесь полным соединением например
   Sasha_H
 
17 - 27.01.20 - 12:09
если не ошибаюсь в СКЛ есть такой крос джойн в 1с его нет
   SkillUp
 
18 - 27.01.20 - 12:09
(17) Можно с универсального отчета вывестир в СКД?
   SSSSS_AAAAA
 
19 - 27.01.20 - 12:10
(14) Батенька, вы занимаетесь извращениями, основанными на плохом понимании типа Запрос.
Пример генерации текста запроса для шахматки можно посмотреть в любой бухгалтерии.
   Sasha_H
 
20 - 27.01.20 - 12:10
в одном запросе сделайте полное соединение таблицы саму на себя и будет вам дублирование
   Sasha_H
 
21 - 27.01.20 - 12:11
(17) что значит можно с универсально в СКД?
   SkillUp
 
22 - 27.01.20 - 12:12
(20) ПОЖ., разъясни как попдробней!
   Sasha_H
 
23 - 27.01.20 - 12:12
Построитель это Тип такой его используют старые конфигурации и еще он может использовать в узких целях например вывод таблицы значений в отчет и т.д. Но даже в старых конфигурациях стараются новые отчеты повесить на СКД
   SkillUp
 
24 - 27.01.20 - 12:12
Вот всен процедура:
Процедура УстановитьТекстЗапроса()

    ТекстЗапросаПоОстаткам =
    "ВЫБРАТЬ
    |    ВзаиморасчетыПоДокументамОстатки.Организация,
    |    ВзаиморасчетыПоДокументамОстатки.Контрагент,
    |    ВзаиморасчетыПоДокументамОстатки.ДоговорКонтрагента,
    |    ВзаиморасчетыПоДокументамОстатки.Сделка,
    |    ВзаиморасчетыПоДокументамОстатки.ДокументРасчетовСКонтрагентом,
    |    ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток КАК ОстатокДолга0
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(
    |            &ДатаОстатков, 
    |            {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыПоДокументамОстатки
    |ГДЕ
    |    ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток > 0
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ВзаиморасчетыБезДокументовОстатки.Организация,
    |    ВзаиморасчетыБезДокументовОстатки.Контрагент,
    |    ВзаиморасчетыБезДокументовОстатки.ДоговорКонтрагента,
    |    ВзаиморасчетыБезДокументовОстатки.Сделка,
    |    НЕОПРЕДЕЛЕНО,
    |    ВзаиморасчетыБезДокументовОстатки.СуммаВзаиморасчетовОстаток
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(
    |            &ДатаОстатков, 
    |            (НЕ ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом) {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыБезДокументовОстатки
    |ГДЕ
    |    ВзаиморасчетыБезДокументовОстатки.СуммаВзаиморасчетовОстаток > 0";
    
    ТекстЗапросаПоОборотам =
    "ВЫБРАТЬ
    |    ВзаиморасчетыПоДокументамОбороты.Организация,
    |    ВзаиморасчетыПоДокументамОбороты.Контрагент,
    |    ВзаиморасчетыПоДокументамОбороты.ДоговорКонтрагента,
    |    ВзаиморасчетыПоДокументамОбороты.Сделка,
    |    ВзаиморасчетыПоДокументамОбороты.ДокументРасчетовСКонтрагентом,
    |    ВЫБОР
    |        КОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовПриход > 0
    |            ТОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовПриход
    |        ИНАЧЕ 0
    |    КОНЕЦ - ВЫБОР
    |        КОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовРасход < 0
    |            ТОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовРасход
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК УвеличениеДолга1
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(
    |            &НачалоИнтервала1,
    |            &КонецИнтервала1,
    |            ,
    |            {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыПоДокументамОбороты
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ВзаиморасчетыБезДокументовОбороты.Организация,
    |    ВзаиморасчетыБезДокументовОбороты.Контрагент,
    |    ВзаиморасчетыБезДокументовОбороты.ДоговорКонтрагента,
    |    ВзаиморасчетыБезДокументовОбороты.Сделка,
    |    НЕОПРЕДЕЛЕНО,
    |    ВЫБОР
    |        КОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовПриход > 0
    |            ТОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовПриход
    |        ИНАЧЕ 0
    |    КОНЕЦ - ВЫБОР
    |        КОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовРасход < 0
    |            ТОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовРасход
    |        ИНАЧЕ 0
    |    КОНЕЦ
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
    |            &НачалоИнтервала1,
    |            &КонецИнтервала1,
    |            ,
    |            (НЕ ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом) 
    |            {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыБезДокументовОбороты";
    
    КолИнтервалов = ТабИнтервалы.Количество();
    
    ТекстЗапросаОстатокИОбороты = 
    "ВЫБРАТЬ
    |    Остатки.Организация,
    |    Остатки.Контрагент,
    |    Остатки.ДоговорКонтрагента,
    |    Остатки.Сделка,
    |    Остатки.ДокументРасчетовСКонтрагентом,
    |    Остатки.ОстатокДолга0";
    Для Ном = 1 По КолИнтервалов - 1 Цикл
        ОборотыНом = "Обороты" + Ном;
        ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + ",
        |    ЕСТЬNULL(Обороты" + Ном + ".УвеличениеДолга" + Ном + ", 0) КАК УвеличениеДолга" + Ном;
    КонецЦикла;
    ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + "
    |ИЗ
    |    (" + ТекстЗапросаПоОстаткам + ") КАК Остатки";
    Для Ном = 1 По КолИнтервалов - 1 Цикл
        ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотам, "УвеличениеДолга1", "УвеличениеДолга" + Ном);
        ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотамИнтервала, "&НачалоИнтервала1", "&НачалоИнтервала" + Ном);
        ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотамИнтервала, "&КонецИнтервала1", "&КонецИнтервала" + Ном);
        ОборотыНом = "Обороты" + Ном;
        ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + "
        |ЛЕВОЕ СОЕДИНЕНИЕ
        |    (" + ТекстЗапросаПоОборотамИнтервала + ") КАК " + ОборотыНом + "
        |    ПО
        |        Остатки.Организация = " + ОборотыНом + ".Организация
        |            И Остатки.Контрагент = " + ОборотыНом + ".Контрагент
        |            И Остатки.ДоговорКонтрагента = " + ОборотыНом + ".ДоговорКонтрагента
        |            И Остатки.Сделка = " + ОборотыНом + ".Сделка
        |            И Остатки.ДокументРасчетовСКонтрагентом = " + ОборотыНом + ".ДокументРасчетовСКонтрагентом";
    КонецЦикла;
    
    ТекстЗапросаОстаткиПоПериодам =
    "ВЫБРАТЬ
    |    ОстатокИОбороты.Организация,
    |    ОстатокИОбороты.Контрагент,
    |    ОстатокИОбороты.ДоговорКонтрагента,
    |    ОстатокИОбороты.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
    |    ОстатокИОбороты.Сделка,
    |    ОстатокИОбороты.ДокументРасчетовСКонтрагентом,
    |    ОстатокИОбороты.ОстатокДолга0";
    Для Ном = 1 По КолИнтервалов - 1 Цикл
        ВыражениеОстатка = "ОстатокИОбороты.ОстатокДолга0";
        Для й = 1 По Ном Цикл
            ВыражениеОстатка = ВыражениеОстатка + " - ОстатокИОбороты.УвеличениеДолга" + й;
        КонецЦикла;
        ТекстЗапросаОстаткиПоПериодам = ТекстЗапросаОстаткиПоПериодам + ",
        |    ВЫБОР
        |        КОГДА " + ВыражениеОстатка + " > 0
        |            ТОГДА " + ВыражениеОстатка + "
        |        ИНАЧЕ 0
        |    КОНЕЦ КАК ОстатокДолга" + Ном;
    КонецЦикла;
    ТекстЗапросаОстаткиПоПериодам = ТекстЗапросаОстаткиПоПериодам + "
    |ИЗ
    |    (" + ТекстЗапросаОстатокИОбороты + ") КАК ОстатокИОбороты";
    
    ТекстПоказателей = "
    |    ОстаткиПоПериодам.ОстатокДолга0 КАК ОстатокДолга";
    Для Ном = 1 По КолИнтервалов - 1 Цикл
        ТекстПоказателей = ТекстПоказателей + ",
        |    ОстаткиПоПериодам.ОстатокДолга" + (Ном - 1) + " - ОстаткиПоПериодам.ОстатокДолга" + Ном + " КАК ОстатокПериода" + Ном;
    КонецЦикла;
    Если КолИнтервалов > 0 Тогда
        ТекстПоказателей = ТекстПоказателей + ",
        |    ОстаткиПоПериодам.ОстатокДолга" + (КолИнтервалов - 1) + " КАК ОстатокПериода" + КолИнтервалов;
    КонецЕсли;
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    ОстаткиПоПериодам.Организация КАК Организация,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Организация) КАК ОрганизацияПредставление,
    |    ОстаткиПоПериодам.Контрагент КАК Контрагент,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Контрагент) КАК КонтрагентПредставление,
    |    ОстаткиПоПериодам.ДоговорКонтрагента КАК ДоговорКонтрагента,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДоговорКонтрагента) КАК ДоговорКонтрагентаПредставление,
    |    ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов) КАК ВалютаВзаиморасчетовПредставление,
    |    ОстаткиПоПериодам.Сделка КАК Сделка,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Сделка) КАК СделкаПредставление,
    |    ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом) КАК ДокументРасчетовСКонтрагентомПредставление,"
    + ТекстПоказателей + "
    |    //ПОЛЯ_СВОЙСТВА

    |    //ПОЛЯ_КАТЕГОРИИ

    |{ВЫБРАТЬ
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    ВалютаВзаиморасчетов.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,"
    + ТекстПоказателей + "
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}
    |ИЗ
    |    (" + ТекстЗапросаОстаткиПоПериодам + ") КАК ОстаткиПоПериодам
    |    //СОЕДИНЕНИЯ";

    
    //Объединяем

    ТекстЗапроса = ТекстЗапроса + "
    | ОБЪЕДИНИТЬ ВСЕ " 
    + ТекстЗапроса+ "
    | ";
    //Объединяем

    
    |{ГДЕ"
    + ТекстПоказателей + "
    |    //УСЛОВИЯ_СВОЙСТВА

    |    //УСЛОВИЯ_КАТЕГОРИИ

    |}
    |{УПОРЯДОЧИТЬ ПО
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,
    |    ВалютаВзаиморасчетов.*,
    |    ОстатокДолга";
    Для Ном = 1 По КолИнтервалов Цикл
        ТекстЗапроса = ТекстЗапроса + ",
        |    ОстатокПериода" + Ном;
    КонецЦикла;
    ТекстЗапроса = ТекстЗапроса + "
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}
    |ИТОГИ
    |    СУММА(ОстатокДолга)";
    Для Ном = 1 По КолИнтервалов Цикл
        ТекстЗапроса = ТекстЗапроса + ",
        |    СУММА(ОстатокПериода" + Ном + ")";
    КонецЦикла;
    ТекстЗапроса = ТекстЗапроса + "
    |    //ИТОГИ_СВОЙСТВА

    |    //ИТОГИ_КАТЕГОРИИ

    |ПО
    |    ОБЩИЕ
    |{ИТОГИ ПО
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Контрагент.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,
    |    ВалютаВзаиморасчетов.*
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}";
    
    

    // В универсальном отчете включен флаг использования свойств и категорий.

    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
        
        // Добавление свойств и категорий поля запроса в таблицу полей.

        // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.

        
        // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);

        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Контрагент", "Контрагент", "Контрагент", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.ДоговорКонтрагента", "ДоговорКонтрагента", "Договор контрагента", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ДоговорыКонтрагентов);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Организация", "Организация", "Организация", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Организации);

        УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);
        
    КонецЕсли;
        
    // Инициализация текста запроса построителя отчета

    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;

КонецПроцедуры
   SkillUp
 
25 - 27.01.20 - 12:14
Ой, пардон. Вот изначальная, ту уже начал переделывать:

Процедура УстановитьТекстЗапроса()

    ТекстЗапросаПоОстаткам =
    "ВЫБРАТЬ
    |    ВзаиморасчетыПоДокументамОстатки.Организация,
    |    ВзаиморасчетыПоДокументамОстатки.Контрагент,
    |    ВзаиморасчетыПоДокументамОстатки.ДоговорКонтрагента,
    |    ВзаиморасчетыПоДокументамОстатки.Сделка,
    |    ВзаиморасчетыПоДокументамОстатки.ДокументРасчетовСКонтрагентом,
    |    ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток КАК ОстатокДолга0
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(
    |            &ДатаОстатков, 
    |            {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыПоДокументамОстатки
    |ГДЕ
    |    ВзаиморасчетыПоДокументамОстатки.СуммаВзаиморасчетовОстаток > 0
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ВзаиморасчетыБезДокументовОстатки.Организация,
    |    ВзаиморасчетыБезДокументовОстатки.Контрагент,
    |    ВзаиморасчетыБезДокументовОстатки.ДоговорКонтрагента,
    |    ВзаиморасчетыБезДокументовОстатки.Сделка,
    |    НЕОПРЕДЕЛЕНО,
    |    ВзаиморасчетыБезДокументовОстатки.СуммаВзаиморасчетовОстаток
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(
    |            &ДатаОстатков, 
    |            (НЕ ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом) {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыБезДокументовОстатки
    |ГДЕ
    |    ВзаиморасчетыБезДокументовОстатки.СуммаВзаиморасчетовОстаток > 0";
    
    ТекстЗапросаПоОборотам =
    "ВЫБРАТЬ
    |    ВзаиморасчетыПоДокументамОбороты.Организация,
    |    ВзаиморасчетыПоДокументамОбороты.Контрагент,
    |    ВзаиморасчетыПоДокументамОбороты.ДоговорКонтрагента,
    |    ВзаиморасчетыПоДокументамОбороты.Сделка,
    |    ВзаиморасчетыПоДокументамОбороты.ДокументРасчетовСКонтрагентом,
    |    ВЫБОР
    |        КОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовПриход > 0
    |            ТОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовПриход
    |        ИНАЧЕ 0
    |    КОНЕЦ - ВЫБОР
    |        КОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовРасход < 0
    |            ТОГДА ВзаиморасчетыПоДокументамОбороты.СуммаВзаиморасчетовРасход
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК УвеличениеДолга1
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(
    |            &НачалоИнтервала1,
    |            &КонецИнтервала1,
    |            ,
    |            {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыПоДокументамОбороты
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ВзаиморасчетыБезДокументовОбороты.Организация,
    |    ВзаиморасчетыБезДокументовОбороты.Контрагент,
    |    ВзаиморасчетыБезДокументовОбороты.ДоговорКонтрагента,
    |    ВзаиморасчетыБезДокументовОбороты.Сделка,
    |    НЕОПРЕДЕЛЕНО,
    |    ВЫБОР
    |        КОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовПриход > 0
    |            ТОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовПриход
    |        ИНАЧЕ 0
    |    КОНЕЦ - ВЫБОР
    |        КОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовРасход < 0
    |            ТОГДА ВзаиморасчетыБезДокументовОбороты.СуммаВзаиморасчетовРасход
    |        ИНАЧЕ 0
    |    КОНЕЦ
    |ИЗ
    |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
    |            &НачалоИнтервала1,
    |            &КонецИнтервала1,
    |            ,
    |            (НЕ ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом) 
    |            {(Организация).* КАК Организация, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК ДоговорКонтрагента, (Сделка).* КАК Сделка}) КАК ВзаиморасчетыБезДокументовОбороты";
    
    КолИнтервалов = ТабИнтервалы.Количество();
    
    ТекстЗапросаОстатокИОбороты = 
    "ВЫБРАТЬ
    |    Остатки.Организация,
    |    Остатки.Контрагент,
    |    Остатки.ДоговорКонтрагента,
    |    Остатки.Сделка,
    |    Остатки.ДокументРасчетовСКонтрагентом,
    |    Остатки.ОстатокДолга0";
    Для Ном = 1 По КолИнтервалов - 1 Цикл
        ОборотыНом = "Обороты" + Ном;
        ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + ",
        |    ЕСТЬNULL(Обороты" + Ном + ".УвеличениеДолга" + Ном + ", 0) КАК УвеличениеДолга" + Ном;
    КонецЦикла;
    ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + "
    |ИЗ
    |    (" + ТекстЗапросаПоОстаткам + ") КАК Остатки";
    Для Ном = 1 По КолИнтервалов - 1 Цикл
        ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотам, "УвеличениеДолга1", "УвеличениеДолга" + Ном);
        ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотамИнтервала, "&НачалоИнтервала1", "&НачалоИнтервала" + Ном);
        ТекстЗапросаПоОборотамИнтервала = СтрЗаменить(ТекстЗапросаПоОборотамИнтервала, "&КонецИнтервала1", "&КонецИнтервала" + Ном);
        ОборотыНом = "Обороты" + Ном;
        ТекстЗапросаОстатокИОбороты = ТекстЗапросаОстатокИОбороты + "
        |ЛЕВОЕ СОЕДИНЕНИЕ
        |    (" + ТекстЗапросаПоОборотамИнтервала + ") КАК " + ОборотыНом + "
        |    ПО
        |        Остатки.Организация = " + ОборотыНом + ".Организация
        |            И Остатки.Контрагент = " + ОборотыНом + ".Контрагент
        |            И Остатки.ДоговорКонтрагента = " + ОборотыНом + ".ДоговорКонтрагента
        |            И Остатки.Сделка = " + ОборотыНом + ".Сделка
        |            И Остатки.ДокументРасчетовСКонтрагентом = " + ОборотыНом + ".ДокументРасчетовСКонтрагентом";
    КонецЦикла;
    
    ТекстЗапросаОстаткиПоПериодам =
    "ВЫБРАТЬ
    |    ОстатокИОбороты.Организация,
    |    ОстатокИОбороты.Контрагент,
    |    ОстатокИОбороты.ДоговорКонтрагента,
    |    ОстатокИОбороты.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
    |    ОстатокИОбороты.Сделка,
    |    ОстатокИОбороты.ДокументРасчетовСКонтрагентом,
    |    ОстатокИОбороты.ОстатокДолга0";
    Для Ном = 1 По КолИнтервалов - 1 Цикл
        ВыражениеОстатка = "ОстатокИОбороты.ОстатокДолга0";
        Для й = 1 По Ном Цикл
            ВыражениеОстатка = ВыражениеОстатка + " - ОстатокИОбороты.УвеличениеДолга" + й;
        КонецЦикла;
        ТекстЗапросаОстаткиПоПериодам = ТекстЗапросаОстаткиПоПериодам + ",
        |    ВЫБОР
        |        КОГДА " + ВыражениеОстатка + " > 0
        |            ТОГДА " + ВыражениеОстатка + "
        |        ИНАЧЕ 0
        |    КОНЕЦ КАК ОстатокДолга" + Ном;
    КонецЦикла;
    ТекстЗапросаОстаткиПоПериодам = ТекстЗапросаОстаткиПоПериодам + "
    |ИЗ
    |    (" + ТекстЗапросаОстатокИОбороты + ") КАК ОстатокИОбороты";
    
    ТекстПоказателей = "
    |    ОстаткиПоПериодам.ОстатокДолга0 КАК ОстатокДолга";
    Для Ном = 1 По КолИнтервалов - 1 Цикл
        ТекстПоказателей = ТекстПоказателей + ",
        |    ОстаткиПоПериодам.ОстатокДолга" + (Ном - 1) + " - ОстаткиПоПериодам.ОстатокДолга" + Ном + " КАК ОстатокПериода" + Ном;
    КонецЦикла;
    Если КолИнтервалов > 0 Тогда
        ТекстПоказателей = ТекстПоказателей + ",
        |    ОстаткиПоПериодам.ОстатокДолга" + (КолИнтервалов - 1) + " КАК ОстатокПериода" + КолИнтервалов;
    КонецЕсли;
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    ОстаткиПоПериодам.Организация КАК Организация,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Организация) КАК ОрганизацияПредставление,
    |    ОстаткиПоПериодам.Контрагент КАК Контрагент,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Контрагент) КАК КонтрагентПредставление,
    |    ОстаткиПоПериодам.ДоговорКонтрагента КАК ДоговорКонтрагента,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДоговорКонтрагента) КАК ДоговорКонтрагентаПредставление,
    |    ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов) КАК ВалютаВзаиморасчетовПредставление,
    |    ОстаткиПоПериодам.Сделка КАК Сделка,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Сделка) КАК СделкаПредставление,
    |    ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом) КАК ДокументРасчетовСКонтрагентомПредставление,"
    + ТекстПоказателей + "
    |    //ПОЛЯ_СВОЙСТВА

    |    //ПОЛЯ_КАТЕГОРИИ

    |{ВЫБРАТЬ
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    ВалютаВзаиморасчетов.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,"
    + ТекстПоказателей + "
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}
    |ИЗ
    |    (" + ТекстЗапросаОстаткиПоПериодам + ") КАК ОстаткиПоПериодам
    |    //СОЕДИНЕНИЯ

    |{ГДЕ"
    + ТекстПоказателей + "
    |    //УСЛОВИЯ_СВОЙСТВА

    |    //УСЛОВИЯ_КАТЕГОРИИ

    |}
    |{УПОРЯДОЧИТЬ ПО
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,
    |    ВалютаВзаиморасчетов.*,
    |    ОстатокДолга";
    Для Ном = 1 По КолИнтервалов Цикл
        ТекстЗапроса = ТекстЗапроса + ",
        |    ОстатокПериода" + Ном;
    КонецЦикла;
    ТекстЗапроса = ТекстЗапроса + "
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}
    |ИТОГИ
    |    СУММА(ОстатокДолга)";
    Для Ном = 1 По КолИнтервалов Цикл
        ТекстЗапроса = ТекстЗапроса + ",
        |    СУММА(ОстатокПериода" + Ном + ")";
    КонецЦикла;
    ТекстЗапроса = ТекстЗапроса + "
    |    //ИТОГИ_СВОЙСТВА

    |    //ИТОГИ_КАТЕГОРИИ

    |ПО
    |    ОБЩИЕ
    |{ИТОГИ ПО
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Контрагент.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,
    |    ВалютаВзаиморасчетов.*
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}";

    
    // В универсальном отчете включен флаг использования свойств и категорий.

    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
        
        // Добавление свойств и категорий поля запроса в таблицу полей.

        // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.

        
        // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);

        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Контрагент", "Контрагент", "Контрагент", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.ДоговорКонтрагента", "ДоговорКонтрагента", "Договор контрагента", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ДоговорыКонтрагентов);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Организация", "Организация", "Организация", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Организации);

        УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);
        
    КонецЕсли;
        
    // Инициализация текста запроса построителя отчета

    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;

КонецПроцедуры
   SkillUp
 
26 - 27.01.20 - 12:15
(23) Ясно.
   Sasha_H
 
27 - 27.01.20 - 12:15
(22)
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад КАК Склад,
    ТоварыНаСкладахОстатки.Характеристика КАК Характеристика,
    СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток + ТоварыНаСкладахОстатки1.ВНаличииОстаток) КАК Остаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки1
        ПО ТоварыНаСкладахОстатки.Склад = ТоварыНаСкладахОстатки1.Склад
            И ТоварыНаСкладахОстатки.Характеристика = ТоварыНаСкладахОстатки1.Характеристика

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.Характеристика
ИТОГИ
    СУММА(Остаток)
ПО
    ОБЩИЕ,
    Склад,
    Характеристика
   Sasha_H
 
28 - 27.01.20 - 12:18
(0) но я не могу поять задачи задублировать даннЫе, для чего это!?
   Sasha_H
 
29 - 27.01.20 - 12:19
(27) это примитивный приемр который можно оттестировать обычной консолью запроса для понимания, а что вообще произойдет. а не сразу приживлять это в готовое решение.
Суть в следующем что таблиса Остатки 1 полностью совпадает с ТаблицейОстатки и при полном соединении оно задублирует
   Sasha_H
 
30 - 27.01.20 - 12:22
а в СКД там можно вообще начудить используя функции агрегатов над ресурсами. Я просто не понимаю задачи.
 
 Рекламное место пустует
   SSSSS_AAAAA
 
31 - 27.01.20 - 12:40
(30) Да шахматку он таким извращенным способом пытается рисовать...
   SkillUp
 
32 - 27.01.20 - 12:59
(28) Обясняю,  я обеденяю запрос сам с собой. В Цикле ,на каждом цикле параметры меняються (в добавляемом запросе). Т.Е. выводяться данные разные. Вопрос, в том чтобы корректно объеденить...
   SSSSS_AAAAA
 
33 - 27.01.20 - 13:09
(32) Вот это и называется шахматкой и ты изобретаешь очередной велосипед. Только даже не с квадратными, а с треугольными колесами.
   SkillUp
 
34 - 27.01.20 - 13:13
(33) В этом ты прав.
   SkillUp
 
35 - 27.01.20 - 13:13
(33) "Пример генерации текста запроса для шахматки можно посмотреть в любой бухгалтерии." Уже смотрю...
   SSSSS_AAAAA
 
36 - 27.01.20 - 13:23
(35) Удачи. Только, боюсь, очередная бесполезная трата времени и ресурсов. Ибо шахматки в компьютерном учете - анахронизм, и те, кто хоть немного понимает почему и что он смотрит в шахматке (заметь, речь не о программистах, а о пользователях, для которых, собственно, программисты и трахаются с этими шахматками) быстро приходят этому выводу о их ненужности и забрасывают их полностью. Ибо вместо нее легче, удобнее и быстрее использовать более другие отчеты.
   SkillUp
 
37 - 27.01.20 - 13:29
(36) Блин,я уже затрахался с этим отчетом, сейчас начавльство еще будет звонить, получу пи*ды. Все из-за того, что тупо не могу объеденить запрос с упорядочиванием и итогами. Нашел себе приключение на свою голову. Лучше бы через СКД сделал бы...
   SkillUp
 
38 - 27.01.20 - 13:33
(36) Делаю через полное соединение...
   SSSSS_AAAAA
 
39 - 27.01.20 - 13:36
(37) Упорядочивание и итоги должны присоединяться к тексту запроса в самом конце, после всех объединений.
   SkillUp
 
40 - 27.01.20 - 13:41
(39) ДА так и делаю, ошибки лезут со всех сторон... Знал ,что так попаду делал бы по-другому. Не навижу универсальные отчеты...
   SkillUp
 
41 - 27.01.20 - 13:43
Последняя попытка ,если кто-то подскажет как объеденить этот тект сам собой. Буду очень благодарен...

Процедура УстановитьТекстЗапроса()

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

    "ВЫБРАТЬ
    |    ОстаткиПоПериодам.Организация КАК Организация,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Организация) КАК ОрганизацияПредставление,
    |    ОстаткиПоПериодам.Контрагент КАК Контрагент,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Контрагент) КАК КонтрагентПредставление,
    |    ОстаткиПоПериодам.ДоговорКонтрагента КАК ДоговорКонтрагента,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДоговорКонтрагента) КАК ДоговорКонтрагентаПредставление,
    |    ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДоговорКонтрагента.ВалютаВзаиморасчетов) КАК ВалютаВзаиморасчетовПредставление,
    |    ОстаткиПоПериодам.Сделка КАК Сделка,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.Сделка) КАК СделкаПредставление,
    |    ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
    |    ПРЕДСТАВЛЕНИЕ(ОстаткиПоПериодам.ДокументРасчетовСКонтрагентом) КАК ДокументРасчетовСКонтрагентомПредставление,"
    + ТекстПоказателей + "
    |    //ПОЛЯ_СВОЙСТВА

    |    //ПОЛЯ_КАТЕГОРИИ


    |{ВЫБРАТЬ
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    ВалютаВзаиморасчетов.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,"
    + ТекстПоказателей + "
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}
    |ИЗ
    |    (" + ТекстЗапросаОстаткиПоПериодам + ") КАК ОстаткиПоПериодам
    |    //СОЕДИНЕНИЯ

    |{ГДЕ"
    + ТекстПоказателей + "
    |    //УСЛОВИЯ_СВОЙСТВА

    |    //УСЛОВИЯ_КАТЕГОРИИ

    |}
    
    
    |{УПОРЯДОЧИТЬ ПО
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,
    |    ВалютаВзаиморасчетов.*,
    |    ОстатокДолга";
    Для Ном = 1 По КолИнтервалов Цикл
        ТекстЗапроса = ТекстЗапроса + ",
        |    ОстатокПериода" + Ном;
    КонецЦикла;
    ТекстЗапроса = ТекстЗапроса + "
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}
    |ИТОГИ
    |    СУММА(ОстатокДолга)";
    Для Ном = 1 По КолИнтервалов Цикл
        ТекстЗапроса = ТекстЗапроса + ",
        |    СУММА(ОстатокПериода" + Ном + ")";
    КонецЦикла;
    ТекстЗапроса = ТекстЗапроса + "
    |    //ИТОГИ_СВОЙСТВА

    |    //ИТОГИ_КАТЕГОРИИ

    |ПО
    |    ОБЩИЕ
    |{ИТОГИ ПО
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Контрагент.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,
    |    ВалютаВзаиморасчетов.*
    |    //ПСЕВДОНИМЫ_СВОЙСТВА

    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ

    |}";

    
    
    // В универсальном отчете включен флаг использования свойств и категорий.

    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
        
        // Добавление свойств и категорий поля запроса в таблицу полей.

        // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.

        
        // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);

        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Контрагент", "Контрагент", "Контрагент", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.ДоговорКонтрагента", "ДоговорКонтрагента", "Договор контрагента", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ДоговорыКонтрагентов);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Организация", "Организация", "Организация", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Организации);

        УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);
        
    КонецЕсли;
        
    // Инициализация текста запроса построителя отчета

    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;

КонецПроцедуры
   D_E_S_131
 
42 - 27.01.20 - 15:46
(41) "Буду очень благодарен..." - как-то дешево.
   SkillUp
 
43 - 27.01.20 - 16:30
(42) Тебе заплатить за решение?!
   SkillUp
 
44 - 27.01.20 - 16:30
(42) Справишься?!
   hhhh
 
45 - 27.01.20 - 16:38
(43) сколько платишь? НУ, ниже 5000 конечно не обсудается.
   SkillUp
 
46 - 27.01.20 - 17:00
(45) Не хочу в общем чате, личка есть? Там все и обсудим...


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.