После не совсем удачного перехода с КА 2.4 на КА 2.5 было обнаружено, что у некоторых документов в табличных частях не заполнена Ставка НДС.
В КА 2.4 реквизит Ставка НДС это перечисление, а в КА 2.5 это уже справочник, реквизит с типом перечисление был переименован в "УдалитьСтавкаНДС", и добавлен реквизит "СтавкаНДС" с типом справочник.
Страница "Заказы клиентов":
По кнопке "найти заказы клиентов с пустым НДС", показывает проведенные заказы, у которых реквизит ставка НДС не заполнен с налогообложением: ПродажаОблагаетсяНДС и ПродажаНаЭкспорт.
По кнопке "Заполнить НДС В заказах Клиентов" в отмеченных заказах проставляется НДС через обработку табличных частей из общего модуля.
Можно указать количество обрабатываемых документов, которые будут обработаны.
Страница "Общее заполнение":
При открытии формы на странице заполняется список документов, у которых есть реквизит с типом "СправочникСсылка.СтавкиНДС" и реквизит "СуммаНДС" в табличной части.
По нажатии кнопки "Найти документы с пустым НДС" показывает количество документов с незаполненной ставкой НДС и реквизитом Сумма НДС > 0.
По нажатию кнопки "Заполнить НДС" заполняет НДС в отмеченных документах.
При заполнении нужно выбрать источник заполнения: Справочник "Номенклатура", Реквизит "УдалитьСтавкаНДС" или фиксированное значение.
Исходный код:
&НаСервере
Процедура НайтиДокументыСПустымНДСНаСервере()
Для Каждого СтрТаблицы Из Объект.ОбрабатываемыеДокументы Цикл
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Документ.Ссылка КАК Ссылка
|ИЗ
| [Таблица] КАК Документ
|ГДЕ
| (Документ.СтавкаНДС = ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка) ИЛИ Документ.СтавкаНДС = НЕОПРЕДЕЛЕНО)
| И Документ.СуммаНДС > 0
| И Документ.Ссылка.Проведен";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "[Таблица]", "Документ." + СтрТаблицы.Документ + "." + СтрТаблицы.ТабличнаяЧасть);
СтрТаблицы.Найдено = Запрос.Выполнить().Выбрать().Количество();
СтрТаблицы.Пометка = ?(СтрТаблицы.Найдено > 0, Истина, Ложь);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура НайтиДокументыСПустымНДС(Команда)
НайтиДокументыСПустымНДСНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриОткрытииНаСервере()
Для Каждого ДокументИмя Из Метаданные.Документы Цикл
Для Каждого ТабличнаяЧастьИмя Из ДокументИмя.ТабличныеЧасти Цикл
Для Каждого РеквизитИмя Из ТабличнаяЧастьИмя.Реквизиты Цикл
Если РеквизитИмя.Тип = Новый ОписаниеТипов("СправочникСсылка.СтавкиНДС") И ТабличнаяЧастьИмя.Реквизиты.Найти("СуммаНДС") <> Неопределено Тогда
НовыйДокумент = Объект.ОбрабатываемыеДокументы.Добавить();
НовыйДокумент.Документ = ДокументИмя.Имя;
НовыйДокумент.ТабличнаяЧасть = ТабличнаяЧастьИмя.Имя;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПриОткрытииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНДСНаСервере()
Для Каждого СтрТаблицы Из Объект.ОбрабатываемыеДокументы Цикл
Если СтрТаблицы.Пометка Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Документ.Ссылка КАК Ссылка
|ИЗ
| [Таблица] КАК Документ
|ГДЕ
| (Документ.СтавкаНДС = ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка) ИЛИ Документ.СтавкаНДС = НЕОПРЕДЕЛЕНО)
| И Документ.СуммаНДС > 0
| И Документ.Ссылка.Проведен";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "[Таблица]", "Документ." + СтрТаблицы.Документ + "." + СтрТаблицы.ТабличнаяЧасть);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Для Каждого Стр Из ДокументОбъект[СтрТаблицы.ТабличнаяЧасть] Цикл
Если Метаданные.Документы[СтрТаблицы.Документ].ТабличныеЧасти[СтрТаблицы.ТабличнаяЧасть].Реквизиты.Найти("СтавкаНДС") = Неопределено Тогда
Продолжить;
ИначеЕсли Объект.БратьНДСИз = "НДСДляПодстановки" Тогда
Стр.СтавкаНДС = Объект.СтавкаНДС;
ИначеЕсли Объект.БратьНДСИз = "СправочникаНоменклатура" Тогда
Если Метаданные.Документы[СтрТаблицы.Документ].ТабличныеЧасти[СтрТаблицы.ТабличнаяЧасть].Реквизиты.Найти("Номенклатура") = Неопределено Тогда
Сообщить("В табличной части: " + СтрТаблицы.ТабличнаяЧасть + " документа: " + СтрТаблицы.Документ + " не используется реквизит номенклатура!");
Продолжить;
КонецЕсли;
Стр.СтавкаНДС = Стр.Номенклатура.СтавкаНДС;
ИначеЕсли Объект.БратьНДСИз = "ПеречислениеУдалитьСтавкаНДС" Тогда
Если Метаданные.Документы[СтрТаблицы.Документ].ТабличныеЧасти[СтрТаблицы.ТабличнаяЧасть].Реквизиты.Найти("УдалитьСтавкаНДС") = Неопределено Тогда
Сообщить("В табличной части: " + СтрТаблицы.ТабличнаяЧасть + " документа: " + СтрТаблицы.Документ + " не используется реквизит УдалитьСтавкаНДС!");
Продолжить;
КонецЕсли;
СправочникСтавкаНДС = Справочники.СтавкиНДС.НайтиПоРеквизиту("ПеречислениеСтавкаНДС", Стр.УдалитьСтавкаНДС);
Если ЗначениеЗаполнено(СправочникСтавкаНДС) Тогда
Стр.СтавкаНДС = СправочникСтавкаНДС;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьНДС(Команда)
Если ЗначениеЗаполнено(Объект.БратьНДСИз) Или ЗначениеЗаполнено(Объект.СтавкаНДС) Тогда
ЗаполнитьНДСНаСервере();
Иначе
Сообщить("Необходимо выбрать источник заполнения НДС или фиксированную ставку!");
КонецЕсли;
КонецПроцедуры
//-----------------Заказы клиентов------------------//
&НаСервере
Процедура ЗаполнитьНДСВзаказахКлиентовНаСервере()
Для Каждого СтрТаблицы Из Объект.ДокументыЗаказыКлиентов Цикл
Если СтрТаблицы.Пометка Тогда
ДокументОбъект = СтрТаблицы.Документ.ПолучитьОбъект();
СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(ДокументОбъект);
СтруктураДействий = Новый Структура;
//СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
//СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", Новый Структура("НалогообложениеНДС, Дата, ПоДатеОтгрузки", ДокументОбъект.НалогообложениеНДС, ДокументОбъект.Дата, Истина));
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", ДокументОбъект.ВернутьМногооборотнуюТару);
//СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", ДокументОбъект.ВернутьМногооборотнуюТару);
//СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", ДокументОбъект.ВернутьМногооборотнуюТару);
//СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
//СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ДокументОбъект.Товары, СтруктураДействий, Неопределено);
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьНДСВзаказахКлиентов(Команда)
ЗаполнитьНДСВзаказахКлиентовНаСервере();
КонецПроцедуры
&НаСервере
Процедура НайтиЗаказыКлиентовСПустымНДСНаСервере()
Объект.ДокументыЗаказыКлиентов.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ [ПЕРВЫЕ]
| Документ.Ссылка КАК Ссылка,
| Документ.Ссылка.Дата КАК Дата
|ИЗ
| Документ.ЗаказКлиента.Товары КАК Документ
|ГДЕ
| Документ.СтавкаНДС = ЗНАЧЕНИЕ(Справочник.СтавкиНДС.ПустаяСсылка)
| И Документ.Ссылка.Проведен
| И (Документ.Ссылка.НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС)
| ИЛИ Документ.Ссылка.НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаНаЭкспорт))
|
|УПОРЯДОЧИТЬ ПО
| Дата";
Если Объект.КоличествоОбрабатываемыхДокументов > 0 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ПЕРВЫЕ]" , "ПЕРВЫЕ " + Объект.КоличествоОбрабатываемыхДокументов);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ПЕРВЫЕ]" , "");
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НовДокумент = Объект.ДокументыЗаказыКлиентов.Добавить();
НовДокумент.Пометка = Истина;
НовДокумент.Дата = Выборка.Дата;
НовДокумент.Документ = Выборка.Ссылка;
КонецЦикла;
Элементы.НайденоЗаказовКлиентов.Заголовок = "Найдено заказов клиентов: " + Выборка.Количество();
КонецПроцедуры
&НаКлиенте
Процедура НайтиЗаказыКлиентовСПустымНДС(Команда)
НайтиЗаказыКлиентовСПустымНДСНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДокументыЗаказыКлиентовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "ДокументыЗаказыКлиентовДокумент" Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(,Элемент.ТекущиеДанные.Документ);
КонецЕсли;
КонецПроцедуры
//-----------------*------------------//
Протестировано на платформе: 1С:Предприятие 8.3 (8.3.20.1674).
Протестировано в конфигурациях: 1С:Комплексная автоматизация 2 (2.5.7.402).
Также Вас может заинтересовать:
- Редактирование отчета о розничных продажах (Розница 3)
- Создание / перезаполнение отчетов о розничных продажах (УТ 11, КА 2, ERP 2)
- Редактирование отчета о розничных продажах (Розница 2, УТ 11, КА 2, ERP 2, БП 3)
- Перезаполнение ставки НДС
- Email рассылка в формате HTML
- Выгрузка внешних отчетов и обработок
- Редактор регистра Роли и исполнители
- Выгрузка данных из УПП 1.3 в систему NEON
- Универсальный передаточный документ (УПД) (постановление №534 с 01.07.2021)
- Подпись в почтовом клиенте 1С управляемые формы HTML кодом
- Выгрузка товара из 1С: УТ11 в формате XML для сайта avito.ru (Авито: Личные вещи)
- Автоматическое гашение ВСД в конфигурации 1С:Управление ветеринарными сертификатами. Интеграция с ФГИС Меркурий