Автоматическое перепроведение счета-фактуры РТУ
Добрый день.
ОФ. 8.2
Есть задача:
При изменении РТУ автоматически перепроведить связааную счет фактуру.
Достаточно ли в обработке проведения РТУ сделать следующее и будет ли это корректным?:
ОФ. 8.2
Есть задача:
При изменении РТУ автоматически перепроведить связааную счет фактуру.
Достаточно ли в обработке проведения РТУ сделать следующее и будет ли это корректным?:
СФ = УчетНДС.НайтиПодчиненныйДокумент(Ссылка,"счетфактуравыданный");
Объект = СФ.получитьобъекта();
Объект.Записать(РежимЗаписи.проведение);
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В типовой в ПриЗаписи(), это отрабатывается (пример для БП3.0).
Если ДополнительныеСвойства.РежимЗаписи = РежимЗаписиДокумента.Запись Тогда
УчетНДСПереопределяемый.ПроверитьСоответствиеРеквизитовСчетаФактурыВыданного(ЭтотОбъект,,,НЕ УстановленСтатусДокумента);
КонецЕсли;
(6) Теперь выясняй, что за обработка. А то здесь сделаешь, а там сломается. Видимо обработка меняет СФ отдельно от реализации или по разному корректирует документы.
А может уже все давно про неё забыли и она не актуальна. Посмотри во внешних обработках или не типовых обработках в конфигураторе.
А может уже все давно про неё забыли и она не актуальна. Посмотри во внешних обработках или не типовых обработках в конфигураторе.
(7) В итоге вот, что делает обработка. Даже не знаю как быть с моей ситуацией теперь
Перем Заголовок, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоУслугам, ТаблицаПоТаре;
Перем ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам;
Для Каждого Строка из ДокументыСписок Цикл
Документ = Строка["Значение"];
Если ЗначениеЗаполнено(Документ) Тогда
Отказ = Ложь;
РежимПроведения = РежимПроведенияДокумента.Неоперативный;
ДокументОбъект = Документ.ПолучитьОбъект();
ДокументОбъект.ПодготовитьСтруктуруШапкиДокумента(Заголовок, СтруктураШапкиДокумента, РежимПроведения);
// Проверим правильность заполнения шапки документа
ПроверитьЗаполнениеШапки(СтруктураШапкиДокумента, Отказ, Заголовок);
// Проверим допустимость для пользователя цен документа
УправлениеДопПравамиПользователей.ПроверитьДопустимостьЦенОтпуска(ДокументОбъект, "Товары", Отказ);
УправлениеДопПравамиПользователей.ПроверитьДопустимостьЦенОтпуска(ДокументОбъект, "Услуги", Отказ);
ДокументОбъект.ПодготовитьТаблицыДокумента(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоУслугам, ТаблицаПоТаре);
ПроводитьПоВзаиморасчетам = СтруктураШапкиДокумента["ВидДоговора"] = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
ДокументОбъект["мСтруктураПараметровВзаиморасчетов"].Вставить("ПроводитьПоВзаиморасчетам", ПроводитьПоВзаиморасчетам);
СтруктураПодготовленныхТаблиц = Новый Структура("Товары, Услуги", ТаблицаПоТоварам, ТаблицаПоУслугам);
ДокументОбъект["мСтруктураПараметровВзаиморасчетов"].Вставить("СтруктураПодготовленныхТаблиц", СтруктураПодготовленныхТаблиц);
УправлениеВзаиморасчетами.ПодготовитьТаблицыДляПроведенияПоВзаиморасчетам(ТаблицаПоВзаиморасчетам, ТаблицаПоРасчетам,
ДокументОбъект, ДокументОбъект.мСтруктураПараметровВзаиморасчетов, СтруктураШапкиДокумента,
Отказ, Заголовок);
// Проверить заполнение ТЧ.
ПроверитьЗаполнениеТабличнойЧастиТовары(ТаблицаПоТоварам, СтруктураШапкиДокумента, Отказ, Заголовок);
ПроверитьЗаполнениеТабличнойЧастиУслуги(ТаблицаПоУслугам, СтруктураШапкиДокумента, Отказ, Заголовок);
ПроверитьЗаполнениеТабличнойЧастиВозвратнаяТара(ТаблицаПоТаре, СтруктураШапкиДокумента, Отказ, Заголовок);
// Проверить заполнение ТЧ "Состав набора".
СтруктураПолей = Новый Структура;
СтруктураПолей.Вставить("Номенклатура");
СтруктураПолей.Вставить("Количество");
СтруктураПолей.Вставить("Цена");
ЗаполнениеДокументов.ПроверитьЗаполнениеТабличнойЧасти(ДокументОбъект, "СоставНабора", СтруктураПолей, Отказ, Заголовок);
//Проверим на возможность проведения в БУ и НУ.
Если ДокументОбъект.ОтражатьВБухгалтерскомУчете
Или ДокументОбъект.ОтражатьВНалоговомУчете Тогда
УправлениеВзаиморасчетами.ПроверкаВозможностиПроведенияВ_БУ_НУ(ДокументОбъект.ДоговорКонтрагента, ДокументОбъект.ВалютаДокумента,
ДокументОбъект.ОтражатьВБухгалтерскомУчете, ДокументОбъект.ОтражатьВНалоговомУчете, ДокументОбъект.мВалютаРегламентированногоУчета,
Ложь, Отказ, Заголовок, "", СтруктураШапкиДокумента.ВалютаВзаиморасчетов,
СтруктураШапкиДокумента.РасчетыВУсловныхЕдиницах);
КонецЕсли;
ладДокументы.ПроверкаЛицензии(ДокументОбъект, Отказ);
ладДокументы.МинимальныеЦены(ДокументОбъект, Отказ);
//ладДокументы.ПроверкаОтгрузки(ДокументОбъект, Отказ);
// Движения по документу
Если Не Отказ Тогда
НаборЗаписей = РегистрыНакопления.ТоварыОрганизацийБухгалтерскийУчет.СоздатьНаборЗаписей();
НаборЗаписей.Отбор["Регистратор"].Установить(Документ);
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
ТаблицаПоКомплектам = УправлениеЗапасами.СформироватьТаблицуКомплектующих(ТаблицаПоТоварам, ДокументОбъект);
ДвиженияПоРегиструТоварыОрганизаций(РежимПроведенияДокумента.Неоперативный, СтруктураШапкиДокумента, ТаблицаПоКомплектам, ТаблицаПоТаре, ТаблицаПоУслугам, Отказ, Заголовок);
ДвиженияПоРегиструСписанныеТовары(СтруктураШапкиДокумента, ТаблицаПоКомплектам, ТаблицаПоТаре, Отказ, Заголовок);
Сообщить(Строка(Документ));
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
(6) Возможно, какой-то обмен с перепроведением ускоряли. Возможно, что-то не заполнялось в счет-фактурах, их обрабатывали обработкой и при перезаписи реквизиты перезаполнялись.
Варианты разные могут быть. Но как правило, через некоторое время попав на разницу между накладными и суммами ндс все же эту проверку возвращают.
Варианты разные могут быть. Но как правило, через некоторое время попав на разницу между накладными и суммами ндс все же эту проверку возвращают.
(13) Нет, вот процедуры ещё:
Процедура ДвиженияПоРегиструТоварыОрганизаций(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, ТаблицаПоУслугам, Отказ, Заголовок) экспорт
Если НЕ СтруктураШапкиДокумента.ОтражатьВРегламентированномУчете
Или Отказ Тогда
Возврат;
КонецЕсли;
Если ДокументОбъект.ВидПередачи = Перечисления.ВидыПередачиТоваров.СоСклада Тогда
// ТОВАРЫ ПО РЕГИСТРУ ТоварыОрганизаций.
НаборДвижений = ДокументОбъект.Движения.ТоварыОрганизаций;
// Получим таблицу значений, совпадающую со структурой набора записей регистра.
ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
// Заполним таблицу движений.
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений);
// Недостающие поля (качество заполнили в "ПередЗаписью" документа).
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Организация, "Организация");
ТаблицаДвижений.ЗаполнитьЗначения(Неопределено,"Комиссионер");
Если Не СтруктураШапкиДокумента.ВестиУчетТоваровОрганизацийВРазрезеСкладов Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Неопределено, "Склад");
КонецЕсли;
НаборДвижений.мПериод = ДокументОбъект.Дата;
НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
// Проверка остатков при оперативном проведении.
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
НаборДвижений.КонтрольОстатков(ДокументОбъект, "Товары", СтруктураШапкиДокумента, Отказ, Заголовок);
КонецЕсли;
Если Не Отказ Тогда
ДокументОбъект.Движения.ТоварыОрганизаций.ВыполнитьРасход();
ДокументОбъект.Движения.ТоварыОрганизаций.Записать();
КонецЕсли;
Иначе // По ордеру
// ТОВАРЫ ПО РЕГИСТРУ ТоварыКПередачеОрганизаций.
НаборДвижений = ДокументОбъект.Движения.ТоварыКПередачеОрганизаций;
// Получим таблицу значений, совпадающую со структурой набора записей регистра.
ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
// Заполним таблицу движений.
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений);
// Недостающие поля (качество заполнили в "ПередЗаписью" документа).
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Организация, "Организация");
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Ссылка , "ДокументПередачи");
Если Не СтруктураШапкиДокумента.ВестиУчетТоваровОрганизацийВРазрезеСкладов Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Неопределено, "Склад");
КонецЕсли;
НаборДвижений.мПериод = ДокументОбъект.Дата;
НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
// Проверка остатков при оперативном проведении.
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
НаборДвижений.КонтрольСвободныхОстатков(ДокументОбъект, "Товары", СтруктураШапкиДокумента, Отказ, Заголовок);
КонецЕсли;
Если Не Отказ Тогда
// Проведение по регистру алкТоварыОрганизацийБухгалтерскийУчет
ДвиженияТоваровОрганизацииПоОрдеру(ДокументОбъект, ТаблицаПоТоварам, Отказ, СтруктураШапкиДокумента);
ДокументОбъект.Движения.ТоварыКПередачеОрганизаций.ВыполнитьПриход();
КонецЕсли;
КонецЕсли;
// Перекинем остатки по организации на комиссионера.
Если СтруктураШапкиДокумента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером Тогда
// ТОВАРЫ ПО РЕГИСТРУ ТоварыОрганизаций.
НаборДвижений = ДокументОбъект.Движения.ТоварыОрганизаций;
// Получим таблицу значений, совпадающую со структурой набора записей регистра.
ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
// Заполним таблицу движений.
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений);
// Недостающие поля (качество заполнили в "ПередЗаписью" документа).
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Организация, "Организация");
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Контрагент,"Комиссионер");
ТаблицаДвижений.ЗаполнитьЗначения(Неопределено, "Склад");
НаборДвижений.мПериод = ДокументОбъект.Дата;
НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
Если Не Отказ Тогда
ДокументОбъект.Движения.ТоварыОрганизаций.ВыполнитьПриход();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ДвиженияПоРегиструСписанныеТовары(СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок) Экспорт
// ТОВАРЫ ПО РЕГИСТРУ СписанныеТовары.
НаборДвижений = ДокументОбъект.Движения.СписанныеТовары;
// Получим таблицу значений, совпадающую со структурой набора записей регистра.
ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
// Заполним таблицу движений.
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений);
// Недостающие поля.
Инд = 0;
Для каждого Строка Из ТаблицаДвижений Цикл
Инд = Инд+1;
Строка.НомерСтрокиДокумента = Инд;
Строка.ВидТабличнойЧасти = Перечисления.ВидыТабличныхЧастей.Товары;
КонецЦикла;
// Если резервирование под заказ - заказ партии
//Если СтруктураШапкиДокумента.ОбособленныйУчетТоваровПоЗаказамПокупателей Тогда
Если СтруктураШапкиДокумента.ОбособленныйУчетТоваровПоЗаказамПокупателей ИЛИ ДокументОбъект.Сделка.ОбособленныйУчетТоваровПоЗаказамПокупателей ИЛИ ДокументОбъект.ДокументОснование.ОбособленныйУчетТоваровПоЗаказамПокупателей Тогда
ТаблицаЗаказов = ТаблицаПоТоварам.ВыгрузитьКолонку("ЗаказПокупателя");
ТаблицаДвижений.ЗагрузитьКолонку(ТаблицаЗаказов, "ЗаказПартии");
КонецЕсли;
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Дата, "Период");
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Ссылка, "Регистратор");
ТаблицаДвижений.ЗаполнитьЗначения(Истина, "Активность");
Если Не ДокументОбъект.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Брак Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Справочники.Качество.Новый, "Качество");
КонецЕсли;
Если СтруктураШапкиДокумента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.КодыОперацийПартииТоваров.Реализация, "КодОперацииПартииТоваров");
ИначеЕсли СтруктураШапкиДокумента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.КодыОперацийПартииТоваров.ПередачаНаКомиссию, "КодОперацииПартииТоваров");
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Ссылка, "ДокументПередачи");
ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.СтатусыПолученияПередачиТоваров.НаКомиссию, "СтатусПередачи");
КонецЕсли;
// Документы с видом передачи по ордеру сразу не проводятся
Если ДокументОбъект.ВидПередачи = Перечисления.ВидыПередачиТоваров.ПоОрдеру Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Истина, "НеСписывать");
КонецЕсли;
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.ДоговорКонтрагента, "ДоговорКонтрагента");
ЗаполнитьКолонкиРегистраСписанныеТоварыПоТоварамУпр(ТаблицаДвижений, СтруктураШапкиДокумента, ТаблицаПоТоварам);
// Данные для регл учета (НДС)
ЗаполнитьКолонкиРегистраСписанныеТоварыПоТоварамРегл(ТаблицаДвижений, СтруктураШапкиДокумента, ТаблицаПоТоварам);
НаборДвижений.мПериод = ДокументОбъект.Дата;
НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
Если Не Отказ Тогда
ДокументОбъект.Движения.СписанныеТовары.ВыполнитьДвижения();
КонецЕсли;
// ТАРА ПО РЕГИСТРУ СписанныеТовары.
НаборДвижений = ДокументОбъект.Движения.СписанныеТовары;
// Получим таблицу значений, совпадающую со структурой набора записей регистра.
ТаблицаДвижений = НаборДвижений.ВыгрузитьКолонки();
// Заполним таблицу движений.
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТаре, ТаблицаДвижений);
// Недостающие поля.
Для каждого Строка Из ТаблицаДвижений Цикл
Инд = Инд+1;
Строка.НомерСтрокиДокумента = Инд;
Строка.ВидТабличнойЧасти = Перечисления.ВидыТабличныхЧастей.Тара;
КонецЦикла;
// Документы с видом передачи по ордеру сразу не проводятся
Если ДокументОбъект.ВидПередачи = Перечисления.ВидыПередачиТоваров.ПоОрдеру Тогда
ТаблицаДвижений.ЗаполнитьЗначения(Истина, "НеСписывать");
КонецЕсли;
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Сделка, "ЗаказПартии");
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Дата, "Период");
ТаблицаДвижений.ЗаполнитьЗначения(ДокументОбъект.Ссылка, "Регистратор");
ТаблицаДвижений.ЗаполнитьЗначения(Истина, "Активность");
ТаблицаДвижений.ЗаполнитьЗначения(Перечисления.КодыОперацийПартииТоваров.ПередачаТарыКонтрагенту,"КодОперацииПартииТоваров");
ТаблицаДвижений.ЗаполнитьЗначения(Справочники.Качество.Новый, "Качество");
ЗаполнитьКолонкиРегистраСписанныеТоварыПоТареУпр(ТаблицаДвижений, СтруктураШапкиДокумента, ТаблицаПоТаре);
НаборДвижений.мПериод = ДокументОбъект.Дата;
НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
Если Не Отказ Тогда
ДокументОбъект.Движения.СписанныеТовары.ВыполнитьДвижения();
КонецЕсли;
Если ДокументОбъект.Движения.СписанныеТовары.Модифицированность() Тогда
ДокументОбъект.Движения.СписанныеТовары.Записать(Истина);
КонецЕсли;
КонецПроцедуры
Показать
(14) Судя по всему, код выдрали из модульдокумента.обработкапроведения и перезаписывают движения по части регистров. Но какое отношение это к счетфактуре имеет - непонятно. При перезаписи документа он просто перетрет эти наборы, и счет-фактура тут вообще непричем.
Как вариант, добавьте экспортную переменную в модуль объекта типа "НеПроверятьСФ".
Далее в обработке сделайте
Далее в обработке сделайте
ДокОбъект.НеПроверятьСФ = Истина;
//А процедуру проверки СФ оберните в код
Если НеПроверятьСФ = Истина Тогда
//Ничего
Иначе
Типовая процедура
КонецЕсли;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот