Не отрабатывает условие

1. PhoenixAOD 62 07.02.17 09:13 Сейчас в теме
Доброго времени суток всем читающим! Попалась мне тут от моих бухов задачка одна, добавить в выгрузку из 7.7 Рарус в БП3 документа Z отчет, раньше грузили чезе реализации, а сейчас реализации отдельно, а Z отчеты отдельно. Ну реализации подправил, убрал условия, занялся Zками, бухи хотят свернутый отчет по номенклатуре и с разбивкой по фирмам, вроде ничего сложного, своял запрос, начал прогонять тестовое заполнение ТЧ что бы уже с этой ТЧ работать, но возникла следующая проблемка:
	Перем Запрос, ТекстЗапроса, Таб;
	//Создание объекта типа Запрос
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(Сформировать)
	|Период с ВыбНачПериода по ВыбКонПериода;
	|Обрабатывать НеПомеченныеНаУдаление;
	|Без итогов;
	|ДатаДок = Документ.ЗакрытиеСменыРеализация.ДатаДок;
	|Фирма = Документ.ЗакрытиеСменыРеализация.Фирма;
	|Алкоголь = Документ.ЗакрытиеСменыРеализация.Номенклатура.Алкоголь;
	|Номенклатура = Документ.ЗакрытиеСменыРеализация.Номенклатура;
	|Сумма = Документ.ЗакрытиеСменыРеализация.Сумма;
	|Количество = Документ.ЗакрытиеСменыРеализация.Количество;
	|СтавкаНДС = Документ.ЗакрытиеСменыРеализация.СтавкаНДС;
	|НДС = Документ.ЗакрытиеСменыРеализация.НДС;
	|Функция СуммаСумма = Сумма(Сумма);
	|Функция КоличествоСумма = Сумма(Количество);
	|Функция НДССумма = Сумма(НДС);
	|Группировка ДатаДок без групп;
	|Группировка Фирма без групп;
	|Группировка Алкоголь без групп;
	|Группировка Номенклатура без групп;
	|Группировка Сумма без групп;
	|Группировка Количество без групп;
	|Группировка СтавкаНДС без групп;
	|Группировка НДС;
	|"//}}ЗАПРОС
	;
	// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли;

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

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

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

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

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

Ещё одна мысль:
У тебя Алкоголь принимает одно из двух значений: "Да" или "Нет". Выбирая одно из них как Запрос.Алкоголь = "Да", нужно выбирать второе как Запрос.Алкоголь<>"Да". Иначе ты теряешь булеву логику. Или отдельно обрабатывай случай, когда твой Алкоголь не равен ни "Да", ни "Нет".
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 07.02.17 09:26 Сейчас в теме
(1) между выборками Запрос.Группировка() нужно спозиционировать выборку на начало:
Запрос.вНачалоВыборки();
2. PhoenixAOD 62 07.02.17 09:14 Сейчас в теме
выведение в Табличный документ показывает все данные из запроса.
3. корум 287 07.02.17 09:19 Сейчас в теме
выгрузи весь запрос в тз, и её уже обрабатывай...
5. japopov 68 07.02.17 09:31 Сейчас в теме
Должно быть так:
(Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет")

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

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот