Имя: Пароль:
1C
1С v8
Объединить запрос сам с собой (объединить все)
,
0 SkillUp
 
27.01.20
11:34
Здравсвуйте, помогите плохо соображающему в этом вопросе. Впервые с таким сталкиваюсь.

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

Т.Е.

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

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

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

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

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


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

Т.е. Раньше было

Остаток  Долг

  3       10

А надо:
№1 таблица Остаток: Долг:  №2 таблица  Остаток:  Долг:
             3       10                  3        10
15 Sasha_H
 
27.01.20
12:07
вот чего чего , а задачу задублировать данные еще никогла не поступала
16 Sasha_H
 
27.01.20
12:08
если Вам необходимо испортить данные например для скрытия факта реальности. НУ в научных каких-то целях. То воспользуйтесь полным соединением например
17 Sasha_H
 
27.01.20
12:09
если не ошибаюсь в СКЛ есть такой крос джойн в 1с его нет
18 SkillUp
 
27.01.20
12:09
(17) Можно с универсального отчета вывестир в СКД?
19 SSSSS_AAAAA
 
27.01.20
12:10
(14) Батенька, вы занимаетесь извращениями, основанными на плохом понимании типа Запрос.
Пример генерации текста запроса для шахматки можно посмотреть в любой бухгалтерии.
20 Sasha_H
 
27.01.20
12:10
в одном запросе сделайте полное соединение таблицы саму на себя и будет вам дублирование
21 Sasha_H
 
27.01.20
12:11
(17) что значит можно с универсально в СКД?
22 SkillUp
 
27.01.20
12:12
(20) ПОЖ., разъясни как попдробней!
23 Sasha_H
 
27.01.20
12:12
Построитель это Тип такой его используют старые конфигурации и еще он может использовать в узких целях например вывод таблицы значений в отчет и т.д. Но даже в старых конфигурациях стараются новые отчеты повесить на СКД
24 SkillUp
 
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 По КолИнтервалов Цикл
        ТекстЗапроса = ТекстЗапроса + ",
        |    СУММА(ОстатокПериода" + Ном + ")";
    КонецЦикла;
    ТекстЗапроса = ТекстЗапроса + "
    |    //ИТОГИ_СВОЙСТВА
    |    //ИТОГИ_КАТЕГОРИИ
    |ПО
    |    ОБЩИЕ
    |{ИТОГИ ПО
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Контрагент.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,
    |    ВалютаВзаиморасчетов.*
    |    //ПСЕВДОНИМЫ_СВОЙСТВА
    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ
    |}";
    
    

    // В универсальном отчете включен флаг использования свойств и категорий.
    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
        
        // Добавление свойств и категорий поля запроса в таблицу полей.
        // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
        
        // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Контрагент", "Контрагент", "Контрагент", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.ДоговорКонтрагента", "ДоговорКонтрагента", "Договор контрагента", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ДоговорыКонтрагентов);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Организация", "Организация", "Организация", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Организации);

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

КонецПроцедуры
25 SkillUp
 
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 По КолИнтервалов Цикл
        ТекстЗапроса = ТекстЗапроса + ",
        |    СУММА(ОстатокПериода" + Ном + ")";
    КонецЦикла;
    ТекстЗапроса = ТекстЗапроса + "
    |    //ИТОГИ_СВОЙСТВА
    |    //ИТОГИ_КАТЕГОРИИ
    |ПО
    |    ОБЩИЕ
    |{ИТОГИ ПО
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Контрагент.*,
    |    Сделка.*,
    |    ДокументРасчетовСКонтрагентом.*,
    |    ВалютаВзаиморасчетов.*
    |    //ПСЕВДОНИМЫ_СВОЙСТВА
    |    //ПСЕВДОНИМЫ_КАТЕГОРИИ
    |}";

    
    // В универсальном отчете включен флаг использования свойств и категорий.
    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
        
        // Добавление свойств и категорий поля запроса в таблицу полей.
        // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
        
        // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Контрагент", "Контрагент", "Контрагент", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.ДоговорКонтрагента", "ДоговорКонтрагента", "Договор контрагента", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ДоговорыКонтрагентов);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Организация", "Организация", "Организация", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Организации);

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

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

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

    
    
    // В универсальном отчете включен флаг использования свойств и категорий.
    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда
        
        // Добавление свойств и категорий поля запроса в таблицу полей.
        // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
        
        // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Контрагент", "Контрагент", "Контрагент", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.ДоговорКонтрагента", "ДоговорКонтрагента", "Договор контрагента", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ДоговорыКонтрагентов);
        УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля("ОстаткиПоПериодам.Организация", "Организация", "Организация", ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Организации);

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

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