v8: Проверка проводок перед записьюВ 8.0 не контролируется при записи проводки, соответствуют ли указанные для проводки субконто тем субконто, которые положены для счета дебета и кредита.
Иногда это приводит к трудноуловимым ошибкам. Данный метод позволяет избежать таких ситуаций. | | Автор статьи: Гений 1С | Редакторы: Последняя редакция №2 от 05.02.08 | История URL: http://kb.mista.ru/article.php?id=634 | |
В модуле записей регистра бухгалтерии в процедуре "Перед записью" нужно добавить код:
Процедура ПередЗаписью(Отказ, РежимЗаписи)
Сч=0;
Для Каждого МЗ Из ЭтотОбъект Цикл
ДампПроводки=ложь;
Если МЗ.Период<='19000101' ИЛИ МЗ.Период>='22000101' Тогда
Сообщить("В проводке номер "+Сч+1+" указан период, выходящий за допустимый диапазон 1900-2200 гг ", СтатусСообщения.Важное);
ДампПроводки=истина;
Отказ=Истина;
КонецЕсли;
Если ЗначениеНеЗаполнено(Мз.СчетДт) Тогда
Если НЕ МЗ.СчетКт.Забалансовый Тогда
Сообщить("В проводке номер "+Сч+1+" не указан счет Дебета", СтатусСообщения.Важное);
ДампПроводки=истина;
Отказ=Истина;
КонецЕсли;
Иначе
Для Каждого ВидСубконто ИЗ МЗ.СубконтоДт Цикл
Если НЕ ЗначениеНеЗаполнено(ВидСубконто.Значение) И МЗ.СчетДт.ВидыСубконто.Найти(ВидСубконто.Ключ) = Неопределено Тогда
Сообщить("В проводке номер "+Сч+1+" используется недопустимое субконто счета дебета:"+ВидСубконто.Ключ, СтатусСообщения.Важное);
ДампПроводки=истина;
Отказ=Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЗначениеНеЗаполнено(Мз.СчетКт) Тогда
Если НЕ МЗ.СчетДт.Забалансовый Тогда
Сообщить("В проводке номер "+ЭтотОбъект.Индекс(МЗ)+1+" не указан счет Кредита", СтатусСообщения.Важное);
ДампПроводки=истина;
Отказ=Истина;
КонецЕсли;
Иначе
Для Каждого ВидСубконто ИЗ МЗ.СубконтоКт Цикл
Если НЕ ЗначениеНеЗаполнено(ВидСубконто.Значение) И МЗ.СчетКт.ВидыСубконто.Найти(ВидСубконто.Ключ) = Неопределено Тогда
Сообщить("В проводке номер "+Сч+1+" используется недопустимое субконто счета кредита:"+ВидСубконто.Ключ, СтатусСообщения.Важное);
ДампПроводки=истина;
Отказ=Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ДампПроводки Тогда
ТЗ=ЭтотОбъект.Выгрузить();
Стр=ТЗ[Сч];
Для Каждого Колонка Из ТЗ.Колонки Цикл
Сообщить(Символы.Таб+Колонка.Имя+Символы.Таб+"="+Символы.Таб+Стр[Колонка.Имя]);
КонецЦикла;
ТЗ=0;
КонецЕсли;
Сч=Сч+1;
КонецЦикла;
КонецПроцедуры
В 8.1. лучше использовать более быстрый метод платформы ЗначениеЗаполнено. |