Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 07:43

Поиск значения в табличной части документа

Автор Амал, 12 июл 2017, 06:35

0 Пользователей и 2 гостей просматривают эту тему.

Амал

Цитата: alex0402 от 12 июл 2017, 13:29
а если поставить точку останова и посмотреть, что там на самом деле?

Точка останова почему-то не срабатывает ни в одном месте кода. Когда ставлю точку останова "по ошибке", то сразу кидает в "общий модуль".

Golickoff

Алекс, СтавкаНДС -- это реквизит табличной части, что очевидно из комментариев и скриншотов ТС. Код уже был выложен полностью. Осталось объяснить человеку про обход табличной части в цикле и обращение к значениям колонок строки.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Амал

Настолько сложная задача, что никто не может подсказать, почему значение "БезНДС" не находит программа в табличной части?

AIFrame


    ЕстьНДС = СсылкаНаДокумент.СуммаВключаетНДС ИЛИ СсылкаНаДокумент.УчитыватьНДС;
   
    Если ЕстьНДС Тогда         
        ОбластьИтогоНДС = Макет.ПолучитьОбласть("ИтогоНДС");
        ОбластьИтогоНДС.Параметры.СуммаНДС = 1;
        ТабличныйДокумент.Вывести(ОбластьИтогоНДС);
    Иначе
        ОбластьИтогоНДС = Макет.ПолучитьОбласть("ИтогоНДС");
        ОбластьИтогоНДС.Параметры.СуммаНДС = ТекущаяДата();
        ТабличныйДокумент.Вывести(ОбластьИтогоНДС);
    КонецЕсли;

    СтавкаНДС = неопределено;
    Для каждого СтрокаТЧ_У ИЗ СсылкаНаДокумент.Услуги Цикл
        Если СтавкаНДС <> неопределено И СтавкаНДС <> СтрокаТЧ_У.СтавкаНДС Тогда
            Сообщить("А в услугах документа: " + СсылкаНаДокумент + " - несколько видов Ставки НДС. Бида");
            Продолжить;
        КонецЕсли;
        СтавкаНДС = СтрокаТЧ_У.СтавкаНДС;
    КонецЦикла;

    Если СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
        ДанныеПечатиИтогоНДС.ВсегоНДС = "Без НДС";
        ДанныеПечатиИтогоНДС.НДС      = "Без НДС";
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
        ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='0%'");
        ДанныеПечатиИтогоНДС.НДС      = НСтр("ru='(НДС)'");
    Иначе           
        ДанныеПечатиИтогоНДС.ВсегоНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС);
        ДанныеПечатиИтогоНДС.НДС      = ?(СведенияОДокументе.СуммаВключаетНДС, НСтр("ru='В том числе НДС'"), НСтр("ru='Сумма НДС'"));       
    КонецЕсли;       

Например.

Амал

ЦитироватьНапример.

Спасибо за ответ. В вашем предложенном варианте ЕстьНДС = СсылкаНаДокумент.СуммаВключаетНДС;
не находит НДС, также срабатывает "иначе" (т.е. в ПФ отображается "ТекущаяДата()", не зависимо от того - есть НДС или нет.

А в следующем вашем варианте срабатывает всегда (независимо: 0%, БезНДС или 18%):

    Иначе           
        ДанныеПечатиИтогоНДС.ВсегоНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС);
        ДанныеПечатиИтогоНДС.НДС      = ?(СведенияОДокументе.СуммаВключаетНДС, НСтр("ru='В том числе НДС'"), НСтр("ru='Сумма НДС'"));       

AIFrame


ЕстьНДС = ЛОЖЬ;
Для каждого СтрокаТЧ_У ИЗ СсылкаНаДокумент.Услуги Цикл
    Если СтрокаТЧ_У.СтавкаНДС <> Перечисления.СтавкиНДС.БезНДС
    И СтрокаТЧ_У.СтавкаНДС <> Перечисления.СтавкиНДС.НДС0
    И СтрокаТЧ_У.СтавкаНДС <> неопределено Тогда
    ЕстьНДС = истина;
КонецЦикла;

И я писал ЕстьНДС = СсылкаНаДокумент.СуммаВключаетНДС ИЛИ СсылкаНаДокумент.УчитыватьНДС; не просто так

ЦитироватьА в следующем вашем варианте срабатывает всегда
Ну так вы же итоги выводите "в принципе", а не для каждой строки. Логично, что если в услугах есть хотя бы одна строка с объявленной ставкой НДС (>0%) - нужно в итог обработать как "есть ндс".

oleg-x

Была уже такая тема, чего там бухгалтера "курят" :dfbsdfbsdf:
У тебя итоги, не построчно. Что ты будешь выводить в итогах, если у тебя в колонке значения и "без НДС" и "НДС 0".
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Tsaiger

В документе по любому должен быть признак "Налогооблажения"! В принципе не может существовать таблица(она может существовать_)) но это не правильно) с записями БЕЗ НДС и НДС18 ИЛИ НДС0. Может быть либо все записи БЕЗНДС, Либо отдельно записи НДС0 или НДС18 или возможно совместно НДС18 и НДС0 в разных строках-вот тогда это признак с НДС. Даже если 0 то все равно с НДС который равен 0!!!!!.

AIFrame

Цитата: Tsaiger от 14 июл 2017, 21:45
В документе по любому должен быть признак "Налогооблажения"! В принципе не может существовать таблица(она может существовать_)) но это не правильно) с записями БЕЗ НДС и НДС18 ИЛИ НДС0. Может быть либо все записи БЕЗНДС, Либо отдельно записи НДС0 или НДС18 или возможно совместно НДС18 и НДС0 в разных строках-вот тогда это признак с НДС. Даже если 0 то все равно с НДС который равен 0!!!!!.
И для упрощения всего этого, доки, участвующие в налоговых операциях, снабжены реквизитом УчитыватьНДС (тип - булево)
Да даже посмотрите на функцию СчетФактураТребуется общего модуля УчетНДС.

Амал

ЦитироватьНу так вы же итоги выводите "в принципе", а не для каждой строки. Логично, что если в услугах есть хотя бы одна строка с объявленной ставкой НДС (>0%) - нужно в итог обработать как "есть ндс".

Написал следующий цикл:

Для Каждого Строка ИЗ СсылкаНаДокумент.Услуги Цикл

//НайденноеЗначение = СсылкаНаДокумент.Услуги.НайтиСтроки(Строка.Номенклатура, "Работа");

Если Строка.Номенклатура.Пустая() Тогда
ОбластьИтогоНДС = Макет.ПолучитьОбласть("ИтогоНДС");
ОбластьИтогоНДС.Параметры.СуммаНДС1 = 1;
ТабличныйДокумент.Вывести(ОбластьИтогоНДС);
Иначе
ОбластьИтогоНДС = Макет.ПолучитьОбласть("ИтогоНДС");
ОбластьИтогоНДС.Параметры.СуммаНДС1 = 2;
ТабличныйДокумент.Вывести(ОбластьИтогоНДС);
КонецЕсли;

КонецЦикла;


При таком раскладе вообще не работает это условие (не срабатывает ни "тогда", ни "иначе". Пробовал разные колонки вставлять (Номенклатура, СтавкаНДС и др.) это условие не работает. А если пишу так:

Если СуммаНДС <> 0 Тогда
ОбластьИтогоНДС.Параметры.СуммаНДС1 = 1;
Иначе
ОбластьИтогоНДС.Параметры.СуммаНДС1 = 2;
КонецЕсли;


То при таком условии срабатывает "иначе". В чём ошибка?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск