Каталог решений - Исправление и проведение документов

Исправление и проведение документов

Исправление и проведение документов

В наличии

Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.

Категория:

Описание

В конфигурации ПУБ 1Cv7.7 возникла следующая задача. Ежедневно выписываются «автоматом» по полученным заявкам от покупателей порядка 200 накладных реализации и к ним столько же счетов фактур. После доставки продукции покупателям оператор ручками корректирует некоторые накладные в базе.

Поставили задачу: при изменении документов реализации надо автоматом менять и подчиненный счет-фактуру. Сравнительно простое решение без ВК заключается в небольшой модификации модуля формы Счета-фактуры:

//********************************************

// Предопределенная процедура Счета-фактуры

Процедура ПриОткрытии()

Парам = Форма.Параметр;

…

//2012

Если Парам = «Переоформить» Тогда

ЗаполнитьШапку();

ЗаполнитьТабЧасть();

Записать();

СтатусВозврата(0);

КонецЕсли;

//2012  

…

КонецПроцедуры // ПриОткрытии

Допишем в модуль формы документа Реализации новую процедуру:

//2012

//********************************************

// Предопределенная процедура Реализации

Процедура ПриЗакрытии()

Если ДатаДок<=Константа.ДатаЗапретаРедактирования Тогда

Возврат;

КонецЕсли;

ПриЗаписи();

Если СтатусВозврата()=0 Тогда

Возврат;

КонецЕсли;

//изменить Счет-Фактуру

докСФ = СоздатьОбъект(«Документ.СчетФактура»);

докСФ.ВыбратьДокументы(ДатаДок,ДатаДок); 

Пока докСФ.ПолучитьДокумент()=1 Цикл

Если докСФ.ДокументОснование=ТекущийДокумент() Тогда

СФ=докСФ.ТекущийДокумент();

ДокСФ.СделатьНепроведенным();

ДокСФ.УдалитьСтроки();

Параметр = «Переоформить»;

ОткрытьФорму(докСФ.ТекущийДокумент(), Параметр);

Прервать;

КонецЕсли;

КонецЦикла;

докСФ = СоздатьОбъект(«Документ.СчетФактура»);

докСФ.НайтиДокумент(СФ);

Если докСФ.Выбран()=1 Тогда

докСФ.Комментарий = «Изменен: » + Пользователь;

докСФ.Записать();

Если Проведен()=1 Тогда

докСФ.Провести();

КонецЕсли;

КонецЕсли;

КонецПроцедуры //ПриЗакрытии

//2012

Теперь при изменении и закрытии документа Реализация автоматом корректируется и счет фактура. Если реализация проведена, проводится и счет-фактура. Использованные комментарии вида //2012 в начале и конце добавленных строк позволяют удобно отследить внесенные изменения при обновлении конфигурации. Представляется, что решение можно использовать и в Бухгалтерии, изменив строки заполнения шапки и табл.части в счете-фактуре.

И напоследок, модуль обработки группового исправления и проведения счетов-фактур

//*******************************************

Функция ПроверкаПериода()

Если ПустоеЗначение(Дата1) = 1 Тогда

Предупреждение(«Не указана дата начала периода отчета!»);

Возврат 0;

КонецЕсли;

Если Дата1 > Дата2 Тогда Предупреждение(«Неправильно задан период отчета!»+РазделительСтрок+ «Дата начала больше даты окончания периода.»);

Возврат 0;

КонецЕсли;

Возврат 1;

КонецФункции //ПроверкаПериода

//*******************************************

// Сформировать()

Процедура Сформировать()

Если ПроверкаПериода()=0 Тогда

Возврат;

ИначеЕсли Дата1<Константа.ДатаЗапретаРедактирования Тогда

Предупреждение(«Нельзя проводить документы ранее даты запрета редактирования!»);

Возврат;

КонецЕсли;

ВремяНачала = _GetPerformanceCounter();

докСФ = СоздатьОбъект(«Документ.СчетФактура»);

докСФ.ВыбратьДокументы(Дата1,Дата2); 

Пока докСФ.ПолучитьДокумент()=1 Цикл

Если докСФ.ДокументОснование.Вид()=«РеализацияПродукции» Тогда

Если (докСФ.Проведен()=1) и (ПроводитьТолькоНепроведенные=1) Тогда

Продолжить;

КонецЕсли;

ДокСФ.СделатьНепроведенным();

ДокСФ.УдалитьСтроки();

Параметр = «Переоформить»;

ОткрытьФорму(докСФ.ТекущийДокумент(), Параметр);

Если докСФ.ДокументОснование.Проведен()=1 Тогда

ДокСФ.Провести();

КонецЕсли;

КонецЕсли;

КонецЦикла;

Сообщить(«Документы проведены. Время: » + Сокрл(Формат((_GetPerformanceCounter() — ВремяНачала)/1000, «Ч12.1»)) + » сек.»); КонецПроцедуры //Сформировать

//*******************************************

Дата1 = ТекущаяДата()-1;

Дата2 = ТекущаяДата()-1;

 

has been added to your cart:
Оформление заказа