Доброго времени суток всем читающим! Попалась мне тут от моих бухов задачка одна, добавить в выгрузку из 7.7 Рарус в БП3 документа Z отчет, раньше грузили чезе реализации, а сейчас реализации отдельно, а Z отчеты отдельно. Ну реализации подправил, убрал условия, занялся Zками, бухи хотят свернутый отчет по номенклатуре и с разбивкой по фирмам, вроде ничего сложного, своял запрос, начал прогонять тестовое заполнение ТЧ что бы уже с этой ТЧ работать, но возникла следующая проблемка:
Все условия кроме не отрабатываются, строки добавляются пустыми. Отладчик показывает данные верно, либо 1 либо 2 либо 3 в зависимости от строки и в так же либо "Да" либо "Нет", но вот почему не срабатывает условие например не могу понять. Подскажите что сделал не так?
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|ДатаДок = Документ.ЗакрытиеСменыРеализация.ДатаДок;
|Фирма = Документ.ЗакрытиеСменыРеализация.Фирма;
|Алкоголь = Документ.ЗакрытиеСменыРеализация.Номенклатура.Алкоголь;
|Номенклатура = Документ.ЗакрытиеСменыРеализация.Номенклатура;
|Сумма = Документ.ЗакрытиеСменыРеализация.Сумма;
|Количество = Документ.ЗакрытиеСменыРеализация.Количество;
|СтавкаНДС = Документ.ЗакрытиеСменыРеализация.СтавкаНДС;
|НДС = Документ.ЗакрытиеСменыРеализация.НДС;
|Функция СуммаСумма = Сумма(Сумма);
|Функция КоличествоСумма = Сумма(Количество);
|Функция НДССумма = Сумма(НДС);
|Группировка ДатаДок без групп;
|Группировка Фирма без групп;
|Группировка Алкоголь без групп;
|Группировка Номенклатура без групп;
|Группировка Сумма без групп;
|Группировка Количество без групп;
|Группировка СтавкаНДС без групп;
|Группировка НДС;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка() = 1 Цикл
// Заполнение полей Сформировать
Таб.ВывестиСекцию("Сформировать");
КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
ТЗ.ВставитьКолонку("ДатаДок");
ТЗ.ВставитьКолонку("Фирма");
ТЗ.ВставитьКолонку("Номенклатура", "Строка");
ТЗ.ВставитьКолонку("Количество", "Число");
ТЗ.ВставитьКолонку("Сумма", "Число");
ТЗ.ВставитьКолонку("СтавкаНДС", "Строка");
ТЗ.ВставитьКолонку("НДС", "Число");
Пока Запрос.Группировка() = 1 Цикл
ТЗ.НоваяСтрока();
ТЗ.ДатаДок = Запрос.ДатаДок;
Фирм = СтрЗаменить(Запрос.Фирма, """", "");
Если (Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Да") Тогда
ТЗ.Фирма = "ТоргЦентр";
ТЗ.Номенклатура = "Товары ТоргЦентр";
ТЗ.НДС = Запрос.НДС;
ТЗ.СтавкаНДС = Запрос.СтавкаНДС;
ТЗ.Количество = Запрос.Количество;
ТЗ.Сумма = Запрос.Сумма;
ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет") Тогда
ТЗ.Фирма = "ТоргЦентр";
ТЗ.Номенклатура = "Товары ДВТорг";
ТЗ.НДС = Запрос.НДС;
ТЗ.СтавкаНДС = Запрос.СтавкаНДС;
ТЗ.Количество = Запрос.Количество;
ТЗ.Сумма = Запрос.Сумма;
ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "3") и (Запрос.Алкоголь = "Да") Тогда
ТЗ.Фирма = "ТоргЦентр";
ТЗ.Номенклатура = "Товары ТоргЦентр";
ТЗ.НДС = Запрос.НДС;
ТЗ.СтавкаНДС = Запрос.СтавкаНДС;
ТЗ.Количество = Запрос.Количество;
ТЗ.Сумма = Запрос.Сумма;
ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "3") и (Запрос.Алкоголь = "Нет") Тогда
ТЗ.Фирма = "ТоргЦентр";
ТЗ.Номенклатура = "Товары ДВТорг";
ТЗ.НДС = Запрос.НДС;
ТЗ.СтавкаНДС = Запрос.СтавкаНДС;
ТЗ.Количество = Запрос.Количество;
ТЗ.Сумма = Запрос.Сумма;
ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "1") Тогда
ТЗ.Фирма = "ТоргЦентр";
ТЗ.Номенклатура = "Товары ЕНВД";
ТЗ.СтавкаНДС = "Без НДС";
ТЗ.Количество = Запрос.Количество;
ТЗ.Сумма = Запрос.Сумма;
КонецЕсли;
КонецЦикла;
ПоказатьВсе условия кроме
ИначеЕсли (Прав(СокрЛП(Фирм), 1) = "1") Тогда
Прав(СокрЛП(Фирм), 1)
Запрос.Алкоголь
Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет")
По теме из базы знаний
- Улучшение пооперационного планирования в 1С:ERP 2.4 внешними средствами
- Нестандартное использование СКД
- Распространенные ошибки разработчиков, приводящие к проблемам производительности
- Автоматическое снятие резерва по условию
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
Найденные решения
Должно быть так:
Ты забыл одну скобку, и в результате система пыталась вычислить.... я даже не знаю, что! :-)
Хотя, поглядел сейчас твой код и понял, что делу тухло: ты где-то, скорее всего, накосячил со скобками. Но где именно - я понять не могу, у тебя скобки "прыгают" от выражения к выражению. Вставляй код через Copy/paste. Пока же - ищи скобки.
В конце концов, приём ещё со времён GW-BASIC (и чему вас теперь учат, молодежь? :-) ):
Скобок много не бывает! Можно делать так:
1) Делаешь фрейм "Если истина тогда"
2) Скольку у тебя условий? Два? Тогда меняешь Истина на (Истина)или(Истина)
3) Каждое из условий вычисляешь и отлаживаешь отдельно, и потом заменяешь Истина на условие через Copy/Paste.
В результате получишь логическое выражение с кучей скобок, зато машине не надо будет думать, и все скобки будут корректно закрыты.
Ещё одна мысль:
У тебя Алкоголь принимает одно из двух значений: "Да" или "Нет". Выбирая одно из них как Запрос.Алкоголь = "Да", нужно выбирать второе как Запрос.Алкоголь<>"Да". Иначе ты теряешь булеву логику. Или отдельно обрабатывай случай, когда твой Алкоголь не равен ни "Да", ни "Нет".
(Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет")
Ты забыл одну скобку, и в результате система пыталась вычислить.... я даже не знаю, что! :-)
Хотя, поглядел сейчас твой код и понял, что делу тухло: ты где-то, скорее всего, накосячил со скобками. Но где именно - я понять не могу, у тебя скобки "прыгают" от выражения к выражению. Вставляй код через Copy/paste. Пока же - ищи скобки.
В конце концов, приём ещё со времён GW-BASIC (и чему вас теперь учат, молодежь? :-) ):
Скобок много не бывает! Можно делать так:
1) Делаешь фрейм "Если истина тогда"
2) Скольку у тебя условий? Два? Тогда меняешь Истина на (Истина)или(Истина)
3) Каждое из условий вычисляешь и отлаживаешь отдельно, и потом заменяешь Истина на условие через Copy/Paste.
В результате получишь логическое выражение с кучей скобок, зато машине не надо будет думать, и все скобки будут корректно закрыты.
Ещё одна мысль:
У тебя Алкоголь принимает одно из двух значений: "Да" или "Нет". Выбирая одно из них как Запрос.Алкоголь = "Да", нужно выбирать второе как Запрос.Алкоголь<>"Да". Иначе ты теряешь булеву логику. Или отдельно обрабатывай случай, когда твой Алкоголь не равен ни "Да", ни "Нет".
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Должно быть так:
Ты забыл одну скобку, и в результате система пыталась вычислить.... я даже не знаю, что! :-)
Хотя, поглядел сейчас твой код и понял, что делу тухло: ты где-то, скорее всего, накосячил со скобками. Но где именно - я понять не могу, у тебя скобки "прыгают" от выражения к выражению. Вставляй код через Copy/paste. Пока же - ищи скобки.
В конце концов, приём ещё со времён GW-BASIC (и чему вас теперь учат, молодежь? :-) ):
Скобок много не бывает! Можно делать так:
1) Делаешь фрейм "Если истина тогда"
2) Скольку у тебя условий? Два? Тогда меняешь Истина на (Истина)или(Истина)
3) Каждое из условий вычисляешь и отлаживаешь отдельно, и потом заменяешь Истина на условие через Copy/Paste.
В результате получишь логическое выражение с кучей скобок, зато машине не надо будет думать, и все скобки будут корректно закрыты.
Ещё одна мысль:
У тебя Алкоголь принимает одно из двух значений: "Да" или "Нет". Выбирая одно из них как Запрос.Алкоголь = "Да", нужно выбирать второе как Запрос.Алкоголь<>"Да". Иначе ты теряешь булеву логику. Или отдельно обрабатывай случай, когда твой Алкоголь не равен ни "Да", ни "Нет".
(Прав(СокрЛП(Фирм), 1) = "2") и (Запрос.Алкоголь = "Нет")
Ты забыл одну скобку, и в результате система пыталась вычислить.... я даже не знаю, что! :-)
Хотя, поглядел сейчас твой код и понял, что делу тухло: ты где-то, скорее всего, накосячил со скобками. Но где именно - я понять не могу, у тебя скобки "прыгают" от выражения к выражению. Вставляй код через Copy/paste. Пока же - ищи скобки.
В конце концов, приём ещё со времён GW-BASIC (и чему вас теперь учат, молодежь? :-) ):
Скобок много не бывает! Можно делать так:
1) Делаешь фрейм "Если истина тогда"
2) Скольку у тебя условий? Два? Тогда меняешь Истина на (Истина)или(Истина)
3) Каждое из условий вычисляешь и отлаживаешь отдельно, и потом заменяешь Истина на условие через Copy/Paste.
В результате получишь логическое выражение с кучей скобок, зато машине не надо будет думать, и все скобки будут корректно закрыты.
Ещё одна мысль:
У тебя Алкоголь принимает одно из двух значений: "Да" или "Нет". Выбирая одно из них как Запрос.Алкоголь = "Да", нужно выбирать второе как Запрос.Алкоголь<>"Да". Иначе ты теряешь булеву логику. Или отдельно обрабатывай случай, когда твой Алкоголь не равен ни "Да", ни "Нет".
(5) совсем забыл посмотреть, что такое этот Алкоголь, оказалось Булево.
тебя Алкоголь принимает одно из двух значений: "Да" или "Нет"
Спасибо, это как раз и был корень проблемки))) Поубирал лишние скобки))) что бы не мешались и сделал вот так (Прав(Фирм, 1) = "3") и (Запрос.Алкоголь = Перечисление.Булево.Нет)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот