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

Как взять данные из таблицы с перечислением?

Автор Амал, 19 июн 2017, 12:51

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

Амал

Добрый день.

Подскажите пожалуйста ответ на мой вопрос.
В документе есть табличная часть с полем "%НДС", в котором можно выбрать разные значения(см.рисунок 1). Мне нужно, чтобы при выборе значения "Без НДС", в ПФ отражалось "Без налога(НДС) -". Есть условие:

ОбластьМакета = Макет.ПолучитьОбласть("Итого");
ОбластьМакета.Параметры.Заполнить(Новый Структура("Всего", ОбщегоНазначенияБПВызовСервера.ФорматСумм(Сумма)));
ТабличныйДокумент.Вывести(ОбластьМакета);

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


С "0" значением всё понятно, но как правильно написать условие, чтобы при выборе в ТЧ документа "Без НДС" - отображалось, то, что я написал выше? Сейчас, когда выбираешь "Без НДС" срабатывает условие "иначе" (НДС Ставка 0%).

oleg-x

ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Ставка 0%'");
Измени на:
ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Без налога'");
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Амал

Цитата: oleg-x от 19 июн 2017, 13:33
ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Ставка 0%'");
Измени на:
ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Без налога'");

Мне не нужно это условие менять, т.к. при выборе в ТЧ документа в поле "%НДС" значение "0" - необходимо выводить в ПФ (НДС Ставка 0%), а когда в ТЧ в поле "%НДС" выбираем значение "Без НДС" - необходимо в ПФ выводить "Без налога(НДС)".

alex0402

Без НДС и НДС 0 - Сумма НДС одинаковая, по этому
Цитата: Амал от 19 июн 2017, 12:51Если СуммаНДС <> 0 Тогда
в корне не верно. Нужно опираться на значение Перечисление :
Если ВидНДС = Перечисление.ИмяПеречисления.ВидНДС Тогда
//сделать одно
ИначеЕсли ВидНДС = Перечисление.ИмяПеречисления.ДругойВидНДС Тогда
//сделать другое
и т.д.
Спасибо за Сказать спасибо

oleg-x

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

Амал

Цитата: alex0402 от 19 июн 2017, 13:46
Без НДС и НДС 0 - Сумма НДС одинаковая, по этому
Цитата: Амал от 19 июн 2017, 12:51Если СуммаНДС <> 0 Тогда
в корне не верно. Нужно опираться на значение Перечисление :
Если ВидНДС = Перечисление.ИмяПеречисления.ВидНДС Тогда
//сделать одно
ИначеЕсли ВидНДС = Перечисление.ИмяПеречисления.ДругойВидНДС Тогда
//сделать другое
и т.д.


Вот написал такое условие:
СтавкаНДС = Перечисления.СтавкиНДС;

Если СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда

ОбластьСуммы.Параметры.ВсегоНДС  = "-";
ОбластьДанных.Параметры.НДС      = "Без налога(НДС)";
ИначеЕсли
СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда

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

Иначе
ОбластьСуммы.Параметры.ВсегоНДС  = "0%";
ОбластьДанных.Параметры.НДС      = "НДС";
КонецЕсли;


Как правильно определить переменную "СтавкаНДС"? Потому что если пишу, как в коде: СтавкаНДС = Перечисления.СтавкиНДС; то какие бы значения в поле "%НДС" не ставил, в ПФ форме отображается: "НДС Ставка 0%", т.е. программа игнорирует условие, а действует согласно определению переменной "СтавкаНДС". Как правильно это записать? И если в поле "%НДС" (перечисления) находится 10 значений, то их всех надо указывать в условии "Если"?

Добавлено: 19 июн 2017, 17:06


Цитата: oleg-x от 19 июн 2017, 13:50
Тогда вопрос, что будешь выводить в итогах, если в ТЧ будет и Ставка 0% и Без НДС?

Да, меня этот вопрос тоже волнует. Поэтому, если знаете, как правильно это реализовать, то подскажите пожалуйста.

oleg-x

Два варианта решения на мой взгляд:
1) Запретить смешанную ставку НДС 0% и Без НДС, то есть в принципе не давать возможность создавать такие документы.
И тогда в итогах если сумма ндс = 0 дописываем функцию которая определяет какая ставка НДС используется в документе(если в данной процедуре нет доступа к объекту, то либо сам объект подтянуть, либо значение).
И условие будет примерно таким
        Если СуммаНДС <> 0 Тогда
            ДанныеПечатиИтогоНДС.ВсегоНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС);
            ДанныеПечатиИтогоНДС.НДС      = ?(СведенияОДокументе.СуммаВключаетНДС, НСтр("ru='В том числе НДС'"), НСтр("ru='Сумма НДС'"));
        ИначеЕсли НашаСтавка = БезНДС
            ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Без НДС");
            ДанныеПечатиИтогоНДС.НДС      = НСтр("ru='НДС'");
        Иначе
            ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Ставка НДС 0%");
            ДанныеПечатиИтогоНДС.НДС      = НСтр("ru='НДС'");
        КонецЕсли;

Добавлено: 19 июн 2017, 17:40


2) Также аналезировать какие ставки НДС и если есть смешанная ставка, тогда определять приоритетную(спросить у постановщика задачи) и выводить надпись согласно этой приоритетной ставки.
        Если СуммаНДС <> 0 Тогда
            ДанныеПечатиИтогоНДС.ВсегоНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС);
            ДанныеПечатиИтогоНДС.НДС      = ?(СведенияОДокументе.СуммаВключаетНДС, НСтр("ru='В том числе НДС'"), НСтр("ru='Сумма НДС'"));
        ИначеЕсли НашаСтавка = НДС 0%
            ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Ставка НДС 0%");
            ДанныеПечатиИтогоНДС.НДС      = НСтр("ru='НДС'");
        Иначе
            ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Без НДС");
            ДанныеПечатиИтогоНДС.НДС      = НСтр("ru='НДС'");
        КонецЕсли;
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Амал

Цитата: oleg-x от 19 июн 2017, 17:37
Два варианта решения на мой взгляд:
1) Запретить смешанную ставку НДС 0% и Без НДС, то есть в принципе не давать возможность создавать такие документы.
И тогда в итогах если сумма ндс = 0 дописываем функцию которая определяет какая ставка НДС используется в документе(если в данной процедуре нет доступа к объекту, то либо сам объект подтянуть, либо значение).
И условие будет примерно таким
        Если СуммаНДС <> 0 Тогда
            ДанныеПечатиИтогоНДС.ВсегоНДС = ОбщегоНазначенияБПВызовСервера.ФорматСумм(СуммаНДС);
            ДанныеПечатиИтогоНДС.НДС      = ?(СведенияОДокументе.СуммаВключаетНДС, НСтр("ru='В том числе НДС'"), НСтр("ru='Сумма НДС'"));
        ИначеЕсли НашаСтавка = БезНДС
            ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Без НДС");
            ДанныеПечатиИтогоНДС.НДС      = НСтр("ru='НДС'");
        Иначе
            ДанныеПечатиИтогоНДС.ВсегоНДС = НСтр("ru='Ставка НДС 0%");
            ДанныеПечатиИтогоНДС.НДС      = НСтр("ru='НДС'");
        КонецЕсли;

Добавлено: 19 июн 2017, 17:40


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


Не работает. Когда пишешь "СтавкаНДС", то программа не понимает этой переменной. Поэтому пробовал ваш второй вариант, также не определяет "БезНДС". Программа считает его 0. Надо наверное перебрать значения в перечислении ставок (СтавкиНДС) и найти слово "БезНДС". Пока не знаю, как это правильно сделать...

oleg-x

ЦитироватьНе работает. Когда пишешь "СтавкаНДС", то программа не понимает этой переменной. Поэтому пробовал ваш второй вариант, также не определяет "БезНДС". Программа считает его 0. Надо наверное перебрать значения в перечислении ставок (СтавкиНДС) и найти слово "БезНДС". Пока не знаю, как это правильно сделать...
Правильно не видит, так как сюда приходит не ставка НДС, а сумма. Саму ставку сюда надо дотянуть. Либо как я уже писал, если есть доступ к объекту из данного куска кода, то проверять в объекте.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Dethmontt

Амал, а если для разных строк разный НДС ??? А ты выводишь только ИТОГОВЫЕ значения...
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

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

Рейтинг@Mail.ru

Поиск