Доброго времени суток всем читающим! Попалась мне тут от моих бухов задачка одна, добавить в выгрузку из 7.7 Рарус в БП3 документа Z отчет, раньше грузили чезе реализации, а сейчас реализации отдельно, а Z отчеты отдельно. Ну реализации подправил, убрал условия, занялся Zками, бухи хотят свернутый отчет по номенклатуре и с разбивкой по фирмам, вроде ничего сложного, своял запрос, начал прогонять тестовое заполнение ТЧ что бы уже с этой ТЧ работать, но возникла следующая проблемка:

```1c
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |ДатаДок = Документ.ЗакрытиеСменыРеализация.ДатаДок;
    |Фирма = Документ.ЗакрытиеСменыРеализация.Фирма;
    |Алкоголь = Документ.ЗакрытиеСменыРеализация.Номенклатура.Алкоголь;
    |Номенклатура = Документ.ЗакрытиеСменыРеализация.Номенклатура;
    |Сумма = Документ.ЗакрытиеСменыРеализация.Сумма;
    |Количество = Документ.ЗакрытиеСменыРеализация.Количество;
    |СтавкаНДС = Документ.ЗакрытиеСменыРеализация.СтавкаНДС;
    |НДС = Документ.ЗакрытиеСменыРеализация.НДС;
    |Функция СуммаСумма = Сумма(Сумма);
    |Функция КоличествоСумма = Сумма(Количество);
    |Функция НДССумма = Сумма(НДС);
    |Группировка ДатаДок без групп;
    |Группировка Фирма без групп;
    |Группировка Алкоголь без групп;
    |Группировка Номенклатура без групп;
    |Группировка Сумма без групп;
    |Группировка Количество без групп;
    |Группировка СтавкаНДС без групп;
    |Группировка НДС;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка() = 1 Цикл
    // Заполнение полей Сформировать
    Таб.ВывестиСекцию("Сформировать");
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", ");

    ТЗ.ВставитьКолонку("ДатаДок");
    ТЗ.ВставитьКолонку("Фирма");
    ТЗ.ВставитьКолонку("Номенклатура", "Строка");
    ТЗ.ВставитьКолонку("Количество", "Число");
    ТЗ.ВставитьКолонку("Сумма", "Число");
    ТЗ.ВставитьКолонку("СтавкаНДС", "Строка");
    ТЗ.ВставитьКолонку("НДС", "Число");
    Пока Запрос.Группировка() = 1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.ДатаДок = Запрос.ДатаДок;
    Фирм = СтрЗаменить(Запрос.Фирма, "", ");
    Если (Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Да") Тогда
    ТЗ.Фирма = "ТоргЦентр";
    ТЗ.Номенклатура = "Товары ТоргЦентр";
    ТЗ.НДС = Запрос.НДС;
    ТЗ.СтавкаНДС = Запрос.СтавкаНДС;
    ТЗ.Количество = Запрос.Количество;
    ТЗ.Сумма = Запрос.Сумма;
    ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет") Тогда
    ТЗ.Фирма = "ТоргЦентр";
    ТЗ.Номенклатура = "Товары ДВТорг";
    ТЗ.НДС = Запрос.НДС;
    ТЗ.СтавкаНДС = Запрос.СтавкаНДС;
    ТЗ.Количество = Запрос.Количество;
    ТЗ.Сумма = Запрос.Сумма;
    ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "3") и (Запрос.Алкоголь = "Да") Тогда
    ТЗ.Фирма = "ТоргЦентр";
    ТЗ.Номенклатура = "Товары ТоргЦентр";
    ТЗ.НДС = Запрос.НДС;
    ТЗ.СтавкаНДС = Запрос.СтавкаНДС;
    ТЗ.Количество = Запрос.Количество;
    ТЗ.Сумма = Запрос.Сумма;
    ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "3") и (Запрос.Алкоголь = "Нет") Тогда
    ТЗ.Фирма = "ТоргЦентр";
    ТЗ.Номенклатура = "Товары ДВТорг";
    ТЗ.НДС = Запрос.НДС;
    ТЗ.СтавкаНДС = Запрос.СтавкаНДС;
    ТЗ.Количество = Запрос.Количество;
    ТЗ.Сумма = Запрос.Сумма;
    ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "1") Тогда
    ТЗ.Фирма = "ТоргЦентр";
    ТЗ.Номенклатура = "Товары ЕНВД";
    ТЗ.СтавкаНДС = "Без НДС";
    ТЗ.Количество = Запрос.Количество;
    ТЗ.Сумма = Запрос.Сумма;
    КонецЕсли;
    КонецЦикла;
```

Все условия кроме
```1c
    ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "1") Тогда
```
 не отрабатываются, строки добавляются пустыми. Отладчик показывает данные
```1c
    Прав(СокрЛП(Фирм), 1)
```
 верно, либо 1 либо 2 либо 3 в зависимости от строки и в
```1c
    Запрос.Алкоголь
```
 так же либо "Да" либо "Нет", но вот почему не срабатывает условие например
```1c
    Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет")
```
 не могу понять. Подскажите что сделал не так?
---
Должно быть так:

```1c
    (Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет")
```

Ты забыл одну скобку, и в результате система пыталась вычислить.... я даже не знаю, что! :-)
Хотя, поглядел сейчас твой код и понял, что делу тухло: ты где-то, скорее всего, накосячил со скобками. Но где именно - я понять не могу, у тебя скобки "прыгают" от выражения к выражению. Вставляй код через Copy/paste. Пока же - ищи скобки.

В конце концов, приём ещё со времён GW-BASIC (и чему вас теперь учат, молодежь? :-) ):
Скобок много не бывает! Можно делать так:
1) Делаешь фрейм "Если истина тогда"
2) Скольку у тебя условий? Два? Тогда меняешь Истина на (Истина)или(Истина)
3) Каждое из условий вычисляешь и отлаживаешь отдельно, и потом заменяешь Истина на условие через Copy/Paste.
В результате получишь логическое выражение с кучей скобок, зато машине не надо будет думать, и все скобки будут корректно закрыты.

Ещё одна мысль:
У тебя Алкоголь принимает одно из двух значений: "Да" или "Нет". Выбирая одно из них как Запрос.Алкоголь = "Да", нужно выбирать второе как Запрос.Алкоголь<>"Да". Иначе ты теряешь булеву логику. Или отдельно обрабатывай случай, когда твой Алкоголь не равен ни "Да", ни "Нет".
---
между выборками Запрос.Группировка() нужно спозиционировать выборку на начало:
Запрос.вНачалоВыборки();
---
выведение в Табличный документ показывает все данные из запроса.
---
выгрузи весь запрос в тз, и её уже обрабатывай...
---
Должно быть так:

```1c
    (Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет")
```

Ты забыл одну скобку, и в результате система пыталась вычислить.... я даже не знаю, что! :-)
Хотя, поглядел сейчас твой код и понял, что делу тухло: ты где-то, скорее всего, накосячил со скобками. Но где именно - я понять не могу, у тебя скобки "прыгают" от выражения к выражению. Вставляй код через Copy/paste. Пока же - ищи скобки.

В конце концов, приём ещё со времён GW-BASIC (и чему вас теперь учат, молодежь? :-) ):
Скобок много не бывает! Можно делать так:
1) Делаешь фрейм "Если истина тогда"
2) Скольку у тебя условий? Два? Тогда меняешь Истина на (Истина)или(Истина)
3) Каждое из условий вычисляешь и отлаживаешь отдельно, и потом заменяешь Истина на условие через Copy/Paste.
В результате получишь логическое выражение с кучей скобок, зато машине не надо будет думать, и все скобки будут корректно закрыты.

Ещё одна мысль:
У тебя Алкоголь принимает одно из двух значений: "Да" или "Нет". Выбирая одно из них как Запрос.Алкоголь = "Да", нужно выбирать второе как Запрос.Алкоголь<>"Да". Иначе ты теряешь булеву логику. Или отдельно обрабатывай случай, когда твой Алкоголь не равен ни "Да", ни "Нет".
---
тебя Алкоголь принимает одно из двух значений: "Да" или "Нет" Спасибо, это как раз и был корень проблемки))) Поубирал лишние скобки))) что бы не мешались и сделал вот так
```1c
    (Прав(Фирм, 1) = "3") и (Запрос.Алкоголь = Перечисление.Булево.Нет)
```
 совсем забыл посмотреть, что такое этот Алкоголь, оказалось Булево.
---
Всем спасибо, кто откликнулся.