|
Создание подписки на событие | ☑ | ||
---|---|---|---|---|
0
Иванов Иван Иваныч
15.01.19
✎
08:53
|
Уважаемые форумчане, помогите пожалуйста новичку с созданием подписки! Ситуация такова: есть регистр сведений "УчетнаяПолитикаНалоговыйУчет", в нем ресурс "ОрганизацияЯвляетсяПлательщикомНДС"; рабочий документ "РеализацияТоваровУслуг", в нем реквизит "СтавкаНДС" (СправочникСсылка.СтавкиНДС), который находится в ТЧ "Товары"; общая форма "ФормаЦеныИВалюта", в "ФормаЦеныИВалюта" есть реквизит типа Булево "УчитыватьНДС"; общий модуль "_ПроверкаНДС" и собственно сама подписка "_ПроверкаНДС" (ДокументОбъект.РеализацияТоваровУслуг). Параметры общего модуля: Клиент, Сервер, Внешнее соединение и Вызов сервера. Событие подписки: ОбработкаПроведения, обработчик: ОбработкаТабличныхЧастей._ПроверкаНДСОбработкаПроведения. Необходимо создать запрос в регистр сведений с проверкой, является ли организация на текущую дату плательщиком НДС, и если организация является плательщиком НДС, тогда проверить в общей форме ФормаЦеныИВалюта, чтоб стояла галочка на реквизите УчитыватьНДС (если не стоит, то включить), затем в ТЧ документа, нужна проверка чтоб реквизит СтавкаНДС был 12%, если Ложь, тогда проверка чтоб галочка в реквизите УчитыватьНДС не стояла (если стоит - отключить). На текущий момент имею код проверки реквизита СтавкаНДС, в котором я не уверен. Проблема в том, что окончательное ТЗ получил только что, закончить нужно сегодня и моих знаний попросту не хватит на то чтобы успеть... Помогите пожалуйста!
Работаю в конфигурации 8.3.9.2033 Код (записан в общем модуле _ПроверкаНДС): Процедура _ПроверкаНДСОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт Если Источник.Товары.СтавкаНДС <> "12%" Тогда Отказ = Истина; Сообщить("Проверьте заполнение данных!"); КонецЕсли; КонецПроцедуры |
|||
1
MrCoffin
15.01.19
✎
09:11
|
Твой код нужно исправить так:
Процедура _ПроверкаНДСОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт ТЗ=РегистрыСведений.УчетнаяПолитикаНалоговыйУчет.СрезПоследних(Источник.Дата); //Здесь получишь таблицу значений на конец периода Источник.Дата, можешь из неё взять значение ставки ндс (это правильно), а можешь сделать как на следующей строчке (это относительно правильно). ПравильнаяСтавка=Справочники.СтавкиНДС.НайтиПоНаименованию("Ставка 12%");//Здесь догадаешься вставить поиск как правильно у тебя они учитываются. Для Каждого Стр Из Источник.Товары Цикл Если Стр.СтавкаНДС <> ПравильнаяСтавка Тогда Отказ = Истина; Сообщить("Проверьте заполнение данных в строке "+(Стр.НомерСтроки+1)); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
2
MrCoffin
15.01.19
✎
09:17
|
(1) "(Стр.НомерСтроки+1)" - это не надо, с индексом перепутал.
|
|||
3
Иванов Иван Иваныч
15.01.19
✎
09:38
|
(2) Т.е. итоговый код такой?:
&НаСервере Процедура _ПроверкаНДСОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт ТЗ=РегистрыСведений.УчетнаяПолитикаНалоговыйУчет.СрезПоследних(Источник.Дата); ПравильнаяСтавка=Справочники.СтавкиНДС.НайтиПоНаименованию("12%"); Для Каждого Стр Из Источник.Товары Цикл Если Стр.СтавкаНДС <> ПравильнаяСтавка Тогда Отказ = Истина; Сообщить("Проверьте заполнение данных в строке Ставка НДС"); КонецЕсли; КонецЦикла; КонецПроцедуры &НаСервере написал т.к. вываливались ерроры на Справочники и РегистрыСведений. Получается запрос через конструктор делать не нужно? |
|||
4
hhhh
15.01.19
✎
09:43
|
(3) нет, это не итоговый. Это тебя пнули в нужном направлении.
|
|||
5
13_Mult
15.01.19
✎
09:43
|
(1) (3) А зачем вам здесь срез по регистру сведений?
|
|||
6
hhhh
15.01.19
✎
09:48
|
(5) ну вроде в вопросе
"есть регистр сведений "УчетнаяПолитикаНалоговыйУчет", в нем ресурс "ОрганизацияЯвляетсяПлательщикомНДС"" |
|||
7
13_Mult
15.01.19
✎
09:54
|
(6) А что произойдёт со всеми манипуляциями при Отказ = Истина в обработке проведения?
|
|||
8
Иванов Иван Иваныч
15.01.19
✎
09:56
|
(7) ну по сути если не соответствует условию (т.е. НДС не 12%), тогда документ не проводится и выводится сообщение юзеру, чтоб проверил реквизит
|
|||
9
Иванов Иван Иваныч
15.01.19
✎
09:57
|
(4) если честно, пока что сложно...
|
|||
10
Иванов Иван Иваныч
15.01.19
✎
09:59
|
(4) можно пожалуйста как для дауна на пальцах?
|
|||
11
hhhh
15.01.19
✎
10:03
|
(10) ну вы говорите, что не так, мы подправим.Что значит на пальцах не на пальцах, хрен вас поймешь.
|
|||
12
MrCoffin
15.01.19
✎
10:10
|
(10)
&НаСервере Процедура _ПроверкаНДСОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт ТЗ=РегистрыСведений.УчетнаяПолитикаНалоговыйУчет.СрезПоследних(Источник.Дата); //ТЗ - таблица значений, содержит в себе значения настроек на дату документа. Допустим, у тебя есть эти настройки и в таблице есть хотя бы одна строка, тогда: Если Не ТЗ[0].ОрганизацияЯвляетсяПлательщикомНДС Тогда //этот реквизит установлен в ложь и тогда значение НДС не проверяем Возврат; КонецЕсли; //а если реквизит установлен в истина, тогда идем дальше по процедуре и проверяем. ПравильнаяСтавка=ТЗ[0].ТекущаяСтавкаНДСОрганизацииИзУчетнойПолитики; //у тебя реквизит называется иначе или его может не быть //Получение из справочника ниже - это пример. ПравильнаяСтавка=Справочники.СтавкиНДС.НайтиПоНаименованию("12%"); //Должна быть одна строка: из справочника или из регистра Для Каждого Стр Из Источник.Товары Цикл Если Стр.СтавкаНДС <> ПравильнаяСтавка Тогда Отказ = Истина; Сообщить("Проверьте заполнение данных в строке Ставка НДС"); КонецЕсли; КонецЦикла; КонецПроцедуры Запрос не напишу, я не знаю, что у тебя за конфигурация, где ставки НДС в справочнике. Через срез последних - простейший вариант, в данном случае работать будет достаточно быстро. Попробуй сформулировать свою задачу без упоминания общей формы и рассказав названия всех реквизитов регистров откуда берутся настройки и реквизитов справочника НДС. |
|||
13
singlych
15.01.19
✎
10:17
|
Вообще, логичнее проверку заполнения делать в обработке проверки заполнения.
Еще подкину, что УчитыватьНДС это, скорее всего, реквизит документа, и если его нужно изменять, то это делать надо перед записью. И там, видимо, суммы пересчитывать надо при переключении. |
|||
14
Иванов Иван Иваныч
15.01.19
✎
10:21
|
(12) Необходимо создать запрос в регистр сведений с проверкой, является ли организация на текущую дату плательщиком НДС, и если организация является плательщиком НДС, тогда проверить в ТЧ документа чтоб реквизит СтавкаНДС был 12%, если не является, то ничего не делать.
Это мне ТЗ поправили Регистр: УчетнаяПолитикаНалоговыйУчет.Ресурсы.ОрганизацияЯвляетсяПлательщикомНДС Справочник: СтавкиНДС.Реквизиты.Ставка |
|||
15
Иванов Иван Иваныч
15.01.19
✎
10:21
|
(13) суммы автоматически пересчитываются при переключении флажка
|
|||
16
singlych
15.01.19
✎
10:25
|
(15) ага, и кто его будет переключать?
|
|||
17
Иванов Иван Иваныч
15.01.19
✎
10:26
|
(12) ПравильнаяСтавка=ТЗ[0].ТекущаяСтавкаНДСОрганизацииИзУчетнойПолитики;//у тебя реквизит называется иначе или его может не быть
нету |
|||
18
Иванов Иван Иваныч
15.01.19
✎
10:27
|
(16) тот, кто будет забивать документ Реализация
|
|||
19
singlych
15.01.19
✎
10:30
|
(18) Ну тогда забей, а то в (0) написано так, как будто это нужно делать программно.
|
|||
20
Иванов Иван Иваныч
15.01.19
✎
10:30
|
(12) и можно сразу вопрос, почему после ТЗ [0] написан?
|
|||
21
Иванов Иван Иваныч
15.01.19
✎
10:30
|
(19) да, уже переформулировали: Необходимо создать запрос в регистр сведений с проверкой, является ли организация на текущую дату плательщиком НДС, и если организация является плательщиком НДС, тогда проверить в ТЧ документа чтоб реквизит СтавкаНДС был 12%, если не является, то ничего не делать.
Это мне ТЗ поправили |
|||
22
singlych
15.01.19
✎
10:36
|
(20) Потому что ТЗ - это таблица значений, в которой может быть много строк. [0] это обращение к первой строке. Так скажем, сделана скидка на то, что организация только одна, и по ней заполнена учетная политика. По хорошему, записей может не быть, и записей может быть больше одной, если есть несколько организаций, это надо тоже учитывать.
|
|||
23
Иванов Иван Иваныч
15.01.19
✎
10:42
|
(22) по сути первый элемент массива, состоящий из всех строк ТЗ? Да, организация одна
|
|||
24
MrCoffin
15.01.19
✎
10:56
|
(23) Про ТЗ тебе уже пояснили.
Новый вариант: &НаСервере Процедура _ПроверкаНДСОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт ТЗ=РегистрыСведений.УчетнаяПолитикаНалоговыйУчет.СрезПоследних(Источник.Дата); Если ТЗ.Количество()=0 Тогда Сообщить("Учетная политика не установлена. Проверить ставку НДС не получится."); Возврат; КонецЕсли; Если Не ТЗ[0].ОрганизацияЯвляетсяПлательщикомНДС Тогда //этот реквизит установлен в ложь и тогда значение НДС не проверяем Возврат; КонецЕсли; ПравильнаяСтавка=Справочники.СтавкиНДС.НайтиПоНаименованию("12%"); //Должна быть одна строка: из справочника или из регистра Для Каждого Стр Из Источник.Товары Цикл Если Стр.СтавкаНДС <> ПравильнаяСтавка Тогда Отказ = Истина; Сообщить("Проверьте заполнение данных в строке Ставка НДС"); КонецЕсли; КонецЦикла; КонецПроцедуры Открой синтакспомощник и прочитай про "СрезПоследних". Вторым параметром можно подставить структуру отбора по реквизитам, но если организация одна, то это не потребуется, пока их не станет больше. И почему проверка только на 12%, а если вы завтра перейдете на 10, а послезавтра на 20%, а через полгода станет как было в начале? Текущая ставка НДС, скорее всего, хранится в учетной политике. |
|||
25
Иванов Иван Иваныч
15.01.19
✎
11:18
|
(24) ставка строго 12%, потому что так надо)
|
|||
26
catena
15.01.19
✎
11:29
|
"Текущая ставка НДС, скорее всего, хранится в учетной политике." - сомневаюсь, хоть конфигурация и не озвучена, но судя по ставке это КЗ, а у нас ставка не менялась очень давно.
|
|||
27
catena
15.01.19
✎
11:30
|
Поэтому, повода пихать ее в учетную политику не было :)
|
|||
28
Иванов Иван Иваныч
15.01.19
✎
11:35
|
(26) да, КЗ, забыл написать
|
|||
29
MrCoffin
15.01.19
✎
12:02
|
(28) Что такое "КЗ"?
Тогда вариант в (24) окончательный, добавь в Сообщить("Проверьте заполнение данных в строке Ставка НДС в строке "+Стр.НомерСтроки); номер строки, чтобы понятно было где ошибка. |
|||
30
Иванов Иван Иваныч
15.01.19
✎
12:19
|
(29) Казахстан
|
|||
31
Иванов Иван Иваныч
15.01.19
✎
12:20
|
(29) Большое спасибо! Всё работает. Спасли меня буквально!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |