Книга знаний

1С:Предприятие / v8 / Объекты конфигурации / Бухгалтерский учет

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. лучше использовать более быстрый метод платформы ЗначениеЗаполнено.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика