Добавление новых ставок НДС в отраслевую конфигурацию
Конфигурация имеет сходство с УПП и давно не обновлялась. Нужно было добавить все три новые ставки 5, 7 и 22%. При этом я уже несколько набил руку в прошлый раз, когда обновлял УПП, поэтому использовал этот опыт.
Добавляем новые ставки в перечисление, сохраняя типичное представление (синонимы):

Поиск по строке НДС20 выдает 322 вхождений:

Клиенту не требуется книга покупок, продаж. Поэтому эту часть функционала игнорируем.
Для отметки изменений использовал маркер //Осипов 26.01.03 НДС-2026, в итоге было сделано 34 доработки:

Добавил модуль _Доработки, чтобы выносить туда повторно используемый код. Правда, тут пришлось поставить ему галочки клиент и сервер и вызов сервера, почему-то иначе он не работал.
Добавленный в модуль код:
Процедура ДополнитьСоответствиеСтавокНДС(СоответствиеСтавок) ЭКспорт //Вызывать: _Добработки. ДополнитьСоответствиеСтавокНДС(СоответствиеСтавок); //Осипов 26.01.03 НДС-2026 СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС5, Перечисления.СтавкиНДС.НДС5_105); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС7, Перечисления.СтавкиНДС.НДС7_107); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС22, Перечисления.СтавкиНДС.НДС22_122); КонецПроцедуры Процедура ДополнитьСоответствиеСтавокНДССложное(СоответствиеСтавок) ЭКспорт //Вызывать: _Добработки. ДополнитьСоответствиеСтавокНДССложное(СоответствиеСтавок); //Осипов 26.01.03 НДС-2026 СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС5, Перечисления.СтавкиНДС.НДС5_105); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС7, Перечисления.СтавкиНДС.НДС7_107); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС22, Перечисления.СтавкиНДС.НДС22_122); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС5_105, Перечисления.СтавкиНДС.НДС5_105); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС7_107, Перечисления.СтавкиНДС.НДС7_107); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС22_122, Перечисления.СтавкиНДС.НДС22_122); КонецПроцедуры Процедура ДополнитьСписокВыбораНДС(Элемент) ЭКспорт //Вызывать: _Добработки. ДополнитьСписокВыбора(Элемент); //Осипов 26.01.03 НДС-2026 Элемент.СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС5); Элемент.СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС7); Элемент.СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС22); КонецПроцедуры Процедура ДополнитьСписокВыбораНДСАванс(Элемент) ЭКспорт //Вызывать: _Добработки. ДополнитьСписокВыбораНДСАванс(Элемент); //Осипов 26.01.03 НДС-2026 Элемент.СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС5_105); Элемент.СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС7_107); Элемент.СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС22_122); КонецПроцедуры Процедура ДополнитьСтавкуНДСВЗапросе(ТекстЗапроса, ИмяПоля, ИмяНДС = "&НДС20") ЭКспорт //Вызывать: _Добработки.ДополнитьСтавкуНДСВЗапросе(Запрос.Текст, "Планы.Номенклатура"); //Осипов 26.01.03 НДС-2026 Маркер = "КОГДА " + ИмяПоля + ".СтавкаНДС = " + ИмяНДС; Замена = " |КОГДА ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС7) ИЛИ ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС7_107) ТОГДА | 7 |КОГДА ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС5) ИЛИ ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС5_105) ТОГДА | 5 |КОГДА ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС22) ИЛИ ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС22_122) ТОГДА | 22"; Замена = СтрЗаменить(Замена, "ТчРасшифровка", ИмяПоля); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, Маркер, Замена + " " + Маркер); КонецПроцедуры Функция Множитель(Ставка) Экспорт //Осипов 26.01.03 НДС-2026 //Вызывать: Возврат _Добработки. Множитель(Ставка); Если Ставка = Перечисления.СтавкиНДС.НДС10 или Ставка = Перечисления.СтавкиНДС.НДС10_110 Тогда Возврат 10/110; ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС18 или Ставка = Перечисления.СтавкиНДС.НДС18_118 Тогда Возврат 18/118 ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС20 или Ставка = Перечисления.СтавкиНДС.НДС20_120 Тогда Возврат 20/120 //Осипов 26.01.03 НДС-2026 Документ выбытие ЦБ ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС5 ИЛИ Ставка = Перечисления.СтавкиНДС.НДС5_105 Тогда Возврат 5/105; ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС7 ИЛИ Ставка = Перечисления.СтавкиНДС.НДС7_107 Тогда Возврат 7/107; ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС22 ИЛИ Ставка = Перечисления.СтавкиНДС.НДС22_122 Тогда Возврат 22/122; Иначе Возврат 0 КонецЕсли; КонецФункции
Код довольно интересный, постарался большинство мест выделить в функции, чтобы не заниматься копирование. Соответствие ставок, кстати, дополняется двумя разными способами.
Но не все было время выделять в функции, местами менял кодом, изменения выглядели примерно так:
Функция ПолучитьСтавкуНДС(СтавкаНДС) Экспорт Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда Возврат 20; ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда Возврат 10; ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда Возврат 18; //Осипов 26.01.03 НДС-2026 ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС5 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС5_105 Тогда Возврат 5; ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС7 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС7_107 Тогда Возврат 7; ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС22 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда Возврат 22; КонецЕсли; Возврат 0; КонецФункции Комментарий //Осипов 26.01.03 НДС-2026 // Порядок определения показателей при расчетной ставке НДС Если СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 ИЛИ СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 //Осипов 26.01.03 НДС-2026 ИЛИ СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС5_105 ИЛИ СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС7_107 ИЛИ СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 ИЛИ СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда СоответствиеСтавок = Новый Соответствие(); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС10, Перечисления.СтавкиНДС.НДС10_110); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС18, Перечисления.СтавкиНДС.НДС18_118); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.НДС20, Перечисления.СтавкиНДС.НДС20_120); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.БезНДС, Перечисления.СтавкиНДС.БезНДС); СоответствиеСтавок.Вставить(Перечисления.СтавкиНДС.ПустаяСсылка(), Перечисления.СтавкиНДС.БезНДС); _Добработки.ДополнитьСоответствиеСтавокНДС(СоответствиеСтавок); //Осипов 26.01.03 НДС-2026 | КОГДА КорректировкаПоступленияТовары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС5) | ИЛИ КорректировкаПоступленияТовары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС5_105) | ТОГДА 5 / 105 //Осипов 26.01.03 НДС-2026 | КОГДА КорректировкаПоступленияТовары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС7) | ИЛИ КорректировкаПоступленияТовары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС7_107) | ТОГДА 7 / 107 | КОГДА КорректировкаПоступленияТовары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС22) | ИЛИ КорректировкаПоступленияТовары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС22_122) //Осипов 26.01.03 НДС-2026 Значение из представления ставки в электронных документах ИначеЕсли Найти("22#0.22#0,22#0.22#0,22#22%", ПредставлениеСтавкиНДС) > 0 Тогда ЗначениеНДС = Перечисления.СтавкиНДС.НДС22; ИначеЕсли Найти("5#0.05#0,05#0.05#0,05#5%", ПредставлениеСтавкиНДС) > 0 Тогда ЗначениеНДС = Перечисления.СтавкиНДС.НДС5; ИначеЕсли Найти("7#0.07#0,07#0.07#0,07#7%", ПредставлениеСтавкиНДС) > 0 Тогда ЗначениеНДС = Перечисления.СтавкиНДС.НДС7; Функция Множитель(Ставка) Если Ставка = Перечисления.СтавкиНДС.НДС10 или Ставка = Перечисления.СтавкиНДС.НДС10_110 Тогда Возврат 10/110; ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС18 или Ставка = Перечисления.СтавкиНДС.НДС18_118 Тогда Возврат 18/118 ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС20 или Ставка = Перечисления.СтавкиНДС.НДС20_120 Тогда Возврат 20/120 //Осипов 26.01.03 НДС-2026 Документ выбытие ЦБ ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС5 ИЛИ Ставка = Перечисления.СтавкиНДС.НДС5_105 Тогда Возврат 5/105; ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС7 ИЛИ Ставка = Перечисления.СтавкиНДС.НДС7_107 Тогда Возврат 7/107; ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС22 ИЛИ Ставка = Перечисления.СтавкиНДС.НДС22_122 Тогда Возврат 22/122; Иначе Возврат 0 КонецЕсли; КонецФункции Запрос = Новый Запрос( "ВЫБРАТЬ | &ЗаголовокЧека КАК Заголовок, | ТчРасшифровка.СуммаПлатежа КАК Сумма, | ВЫБОР | КОГДА ТчРасшифровка.СтавкаНДС = &НДС20 ИЛИ ТчРасшифровка.СтавкаНДС = &НДС120 ТОГДА | 20 | КОГДА ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС7) ИЛИ ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС7_107) ТОГДА | 7//Осипов 26.01.03 НДС-2026 Документ оплата от покупателя | КОГДА ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС5) ИЛИ ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС5_105) ТОГДА | 5 | КОГДА ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС22) ИЛИ ТчРасшифровка.СтавкаНДС = Значение(Перечисление.СтавкиНДС.НДС22_122) ТОГДА | 22 | КОГДА ТчРасшифровка.СтавкаНДС = &НДС10 ИЛИ ТчРасшифровка.СтавкаНДС = &НДС110 ТОГДА | 10 | КОГДА ТчРасшифровка.СтавкаНДС = &НДС18 ИЛИ ТчРасшифровка.СтавкаНДС = &НДС118 ТОГДА | 18 | ИНАЧЕ | 0 | КОНЕЦ КАК НДС |ИЗ | Документ.ОплатаОтПокупателяПлатежнойКартой.РасшифровкаПлатежа КАК ТчРасшифровка |ГДЕ | ТчРасшифровка.Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("НДС20", Перечисления.СтавкиНДС.НДС20); Запрос.УстановитьПараметр("НДС120", Перечисления.СтавкиНДС.НДС20_120); Запрос.УстановитьПараметр("НДС10", Перечисления.СтавкиНДС.НДС10); Запрос.УстановитьПараметр("НДС110", Перечисления.СтавкиНДС.НДС10_110); Запрос.УстановитьПараметр("НДС18", Перечисления.СтавкиНДС.НДС18); Запрос.УстановитьПараметр("НДС118", Перечисления.СтавкиНДС.НДС18_118); | ЕСТЬNULL(ЦеныСрезПоследних.Цена, 0) * (100 + ВЫБОР | КОГДА ЦеныСрезПоследних.ТипЦен.ЦенаВключаетНДС = ЛОЖЬ | ТОГДА ВЫБОР | КОГДА Планы.Номенклатура.СтавкаНДС = &НДС20 | ИЛИ Планы.Номенклатура.СтавкаНДС = &НДС20_120 | ТОГДА 20 | КОГДА Планы.Номенклатура.СтавкаНДС = &НДС18 | ИЛИ Планы.Номенклатура.СтавкаНДС = &НДС18_118 | ТОГДА 18 | КОГДА Планы.Номенклатура.СтавкаНДС = &НДС10 | ИЛИ Планы.Номенклатура.СтавкаНДС = &НДС10_110 | ТОГДА 10 | ИНАЧЕ 0 | КОНЕЦ | ИНАЧЕ 0 | КОНЕЦ) / 100 * (Планы.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЦеныСрезПоследних.ЕдиницаИзмерения.Коэффициент) КАК Цена, //В планах продаж, производства и закупок // Инициализация текста запроса построителя отчета _Добработки.ДополнитьСтавкуНДСВЗапросе(ТекстЗапроса, "Планы.Номенклатура"); //Осипов 26.01.03 НДС-2026 УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса; _Добработки.ДополнитьСтавкуНДСВЗапросе(ТекстЗапроса, "Цены.Номенклатура", "ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС20)"); //Осипов 26.01.03 НДС-2026 Если ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда ТД.СуммаНДС = ТД.Сумма * 20 / 100; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда ТД.СуммаНДС = ТД.Сумма * 10 / 100; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда ТД.СуммаНДС = ТД.Сумма * 18 / 100; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда ТД.СуммаНДС = ТД.Сумма * 20 / 120; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда ТД.СуммаНДС = ТД.Сумма * 10 / 110; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда ТД.СуммаНДС = ТД.Сумма * 18 / 118; //Осипов 26.01.03 НДС-2026 регистрация СФ на аванс ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС5 Тогда ТД.СуммаНДС = ТД.Сумма * 5 / 100; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС5_105 Тогда ТД.СуммаНДС = ТД.Сумма * 5 / 105; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС7 Тогда ТД.СуммаНДС = ТД.Сумма * 7 / 100;; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС7_107 Тогда ТД.СуммаНДС = ТД.Сумма * 7 / 107;; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС22 Тогда ТД.СуммаНДС = ТД.Сумма * 22 / 100; ИначеЕсли ТД.СтавкаНДС = Перечисления.СтавкиНДС.НДС22_122 Тогда ТД.СуммаНДС = ТД.Сумма * 22 / 122; КонецЕсли;
Список доработок:
Основная конфигурация ОбщийМодуль.УчетНДС.Модуль(20, 3)
Основная конфигурация ОбщийМодуль.УчетНДС.Модуль(13718, 4)
Основная конфигурация ОбщийМодуль.УчетНДС.Модуль(16320, 67)
Основная конфигурация ОбщийМодуль.УчетНДС.Модуль(16462, 67)
Основная конфигурация ОбщийМодуль.УчетНДС.Модуль(17344, 4)
Основная конфигурация ОбщийМодуль.УчетНДСФормированиеДвижений.Модуль(7097, 20)
Основная конфигурация ОбщийМодуль.УчетНДСФормированиеДвижений.Модуль(7153, 20)
Основная конфигурация ОбщийМодуль.ЭлектронныеДокументыПереопределяемый.Модуль(3690, 3)
Основная конфигурация ОбщийМодуль.ЭлектронныеДокументыПереопределяемый.Модуль(6098, 70)
Основная конфигурация ОбщийМодуль._Добработки.Модуль(2, 80)
Основная конфигурация ОбщийМодуль._Добработки.Модуль(9, 87)
Основная конфигурация ОбщийМодуль._Добработки.Модуль(20, 59)
Основная конфигурация ОбщийМодуль._Добработки.Модуль(29, 67)
Основная конфигурация ОбщийМодуль._Добработки.Модуль(38, 90)
Основная конфигурация ОбщийМодуль._Добработки.Модуль(56, 2)
Основная конфигурация ОбщийМодуль._Добработки.Модуль(64, 3)
Основная конфигурация Документ.ВыбытиеЦБ.Форма.ФормаДокумента.Форма.Модуль(615, 42)
Основная конфигурация Документ.ПоступлениеЦБ.Форма.ФормаДокумента.Форма.Модуль(461, 42)
Основная конфигурация Документ.СчетФактураВыданный.Модуль объекта(474, 66)
Основная конфигурация Документ.СчетФактураВыданный.Модуль объекта(957, 66)
Основная конфигурация Документ.СчетФактураВыданный.Модуль объекта(973, 4)
Основная конфигурация Документ.СчетФактураВыданный.Модуль объекта(982, 82)
Основная конфигурация Документ.СчетФактураВыданный.Модуль объекта(1215, 66)
Основная конфигурация Документ.СчетФактураВыданный.Модуль менеджера(957, 4)
Основная конфигурация Документ.СчетФактураВыданный.Модуль менеджера(3085, 67)
Основная конфигурация Документ.СчетФактураВыданный.Модуль менеджера(3217, 67)
Основная конфигурация Документ.СчетФактураПолученный.Модуль объекта(255, 74)
Основная конфигурация Отчет.ПланыЗакупок.Модуль объекта(1129, 78)
Основная конфигурация Отчет.ПланыПродаж.Модуль объекта(1129, 78)
Основная конфигурация Отчет.ПланыПроизводства.Модуль объекта(1134, 78)
Основная конфигурация Обработка.ПомощникПланирования.Модуль объекта(1124, 119)
Основная конфигурация Обработка.РегистрацияСчетовФактурНаАванс.Модуль объекта(24, 3)
Основная конфигурация Обработка.РегистрацияСчетовФактурНаАванс.Модуль объекта(86, 68)
Основная конфигурация Обработка.РегистрацияСчетовФактурНаСуммовыеРазницы.Модуль объекта(20, 3)
Среда: 1С:Управление строительной организацией, редакция 1.3 (1.3.47.2) Объем: 2 час




Не ври, что ты за эти изменения клиенту только 2 часа выставил!
Ну тут такое дело. Я на фоне прошлых успехов, когда я за 1.5 часа добавил ставку 22% в УПП https://geniy1s.ru/dobavlenie-stavki-nds-22-v-drevnyuyu-upp/ этому клиенту тоже выставил 1.5 часа.
Правда, я думал, что речь тоже о добавлении только 22%, но в конфигураторе были уже добавлены ставки 5% и 7%, чисто по объему вышло больше, 2 часа.
Вот жалею я клиентов, все же 1.5 часа это ни о чем. Надо минимум 2 часа выставлять по таким работам. А если три ставки, то вообще 3.
Вообще эти отраслевые они непредсказуемы. Но на самом деле я сейчас переводил УТ 11.4 без обновления на ставку 5%, вот там гемороя и копи-пасты в модуле чеков на порядок больше, ушло 6 часов. Но там с клиентом работаем по факту.