Документ закрытие счетов. Может закрыть в 0 вообще все счета!



Данный документ встраивается в любую конфигурацию, построенную на компоненте "Бухгалтерский учет". Просто скопируйте документ и назначьте ему нужный журнал. Что документ делает? Все очень просто: в табличной части указывается список балансовых счетов, которые нужно закрыть в 0. При проведении документ анализирует сальдо по счетам и формирует проводки, закрывающие счет, в корреспонденции с тем счетом, который указан в шапке документа. Может быть полезен, когда регламентные документы не позволяют закрыть, например, 90,44,20 счет из — за невыполнения каких — либо условий,  а также как шаблон для собственной разработки.

Привожу код модуля документа, для тех, кому не судьба скачать:

 

Перем Ит;

Перем МСубконто[3];

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

Процедура СформироватьОперацию(ДК=0,СчетДвиж,Субконто_1,Субконто_2,Субконто_3,Сумма,Количество)

    Операция.НоваяПроводка();

    Операция.ПервичныйДокумент  = «Закрытие счетов № » + НомерДок;

    Операция.Количество = Количество;

    Операция.Сумма = Сумма;

    Если ДК = 0 Тогда

        Если СчетДвиж.Забалансовый = 0 Тогда

            Операция.Дебет.Счет = СчетТранзита;

            Операция.Дебет.Субконто(1,Субконто1);

            Операция.Дебет.Субконто(2,Субконто2);

            Операция.Дебет.Субконто(3,Субконто3);

        КонецЕсли;

        Операция.Кредит.Счет = СчетДвиж;

        Если МСубконто[1] <> 0 Тогда

            Операция.Кредит.Субконто(МСубконто[1],Субконто_1);

        КонецЕсли;

        Если МСубконто[2] <> 0 Тогда

            Операция.Кредит.Субконто(МСубконто[2],Субконто_2);

        КонецЕсли;

        Если МСубконто[3] <> 0 Тогда

            Операция.Кредит.Субконто(МСубконто[3],Субконто_3);

        КонецЕсли;

    Иначе

        Если СчетДвиж.Забалансовый = 0 Тогда

            Операция.Кредит.Счет = СчетТранзита;

            Операция.Кредит.Субконто(1,Субконто1);

            Операция.Кредит.Субконто(2,Субконто2);

            Операция.Кредит.Субконто(3,Субконто3);

        КонецЕсли;

        Операция.Дебет.Счет = СчетДвиж;

        Если МСубконто[1] <> 0 Тогда

            Операция.Дебет.Субконто(МСубконто[1],Субконто_1);

        КонецЕсли;

        Если МСубконто[2] <> 0 Тогда

            Операция.Дебет.Субконто(МСубконто[2],Субконто_2);

        КонецЕсли;

        Если МСубконто[3] <> 0 Тогда

            Операция.Дебет.Субконто(МСубконто[3],Субконто_3);

        КонецЕсли;

    КонецЕсли;

КонецПроцедуры

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

Процедура ЗакрытьСчет(Счет)

    КолСубконто = 0;

    Для Б = 1 По 3 Цикл

        МСубконто[Б] = 0;

    КонецЦикла;

    Для А = 1 По Счет.КоличествоСубконто() Цикл

        //Оборотные субконто нас не интересуют!

        Если Счет.ТолькоОбороты(А) = 0 Тогда

            Ит.ИспользоватьСубконто(Счет.ВидСубконто(А),, 1);

            КолСубконто = КолСубконто + 1;

            МСубконто[КолСубконто] = А;

        КонецЕсли;

    КонецЦикла;

    Ит.ВыполнитьЗапрос(ДатаДок, ДатаДок, Счет,,,1,, 1+4);

    Если КолСубконто = 0 Тогда

        Если (Ит.СКД() <> 0) или (Ит.СКД(3) <> 0) Тогда

            СформироватьОперацию(0,Счет,,,,Ит.СКД(),Ит.СКД(3));

        ИначеЕсли (Ит.СКК() <> 0) или (Ит.СКК(3) <> 0) Тогда

            СформироватьОперацию(1,Счет,,,,Ит.СКК(),Ит.СКК(3));

        КонецЕсли;

    ИначеЕсли КолСубконто > 0 Тогда

        Ит.ВыбратьСубконто(Счет.ВидСубконто(МСубконто[1]));

        Пока Ит.ПолучитьСубконто(Счет.ВидСубконто(МСубконто[1])) = 1 Цикл

            Если КолСубконто > 1 Тогда

                //Для материальных счетов = итоговые проводки по сумме делаем сразу

                Если (Счет.УчетПосумме(2) = 0) и (Счет.УчетПоКоличеству(2) = 1) Тогда

                    Если (Ит.СКД() <> 0) или (Ит.СКД(3) <> 0) Тогда

                        СформироватьОперацию(0,Счет,Ит.Субконто(1),,,Ит.СКД(),0);

                    ИначеЕсли (Ит.СКК() <> 0) или (Ит.СКК(3) <> 0) Тогда

                        СформироватьОперацию(1,Счет,Ит.Субконто(1),,,Ит.СКК(),0);

                    КонецЕсли;

                ИначеЕсли (Счет.УчетПосумме(2) = 1) и (Счет.УчетПоКоличеству(2) = 0) Тогда

                    Если (Ит.СКД() <> 0) или (Ит.СКД(3) <> 0) Тогда

                        СформироватьОперацию(0,Счет,Ит.Субконто(1),,,0,Ит.СКД(3));

                    ИначеЕсли (Ит.СКК() <> 0) или (Ит.СКК(3) <> 0) Тогда

                        СформироватьОперацию(1,Счет,Ит.Субконто(1),,,0,Ит.СКК(3));

                    КонецЕсли;

                КонецЕсли;

                Ит.ВыбратьСубконто(Счет.ВидСубконто(МСубконто[2]));

                Пока Ит.ПолучитьСубконто(Счет.ВидСубконто(МСубконто[2])) = 1 Цикл

                    Если КолСубконто > 2 Тогда

                        Ит.ВыбратьСубконто(Счет.ВидСубконто(МСубконто[3]));

                        Пока Ит.ПолучитьСубконто(Счет.ВидСубконто(МСубконто[3])) = 1 Цикл

                            Если (Ит.СКД() <> 0) или (Ит.СКД(3) <> 0) Тогда

                                СформироватьОперацию(0,Счет,Ит.Субконто(1),Ит.Субконто(2),Ит.Субконто(3),Ит.СКД(),Ит.СКД(3));

                            ИначеЕсли (Ит.СКК() <> 0) или (Ит.СКК(3) <> 0) Тогда

                                СформироватьОперацию(1,Счет,Ит.Субконто(1),Ит.Субконто(2),Ит.Субконто(3),Ит.СКК(),Ит.СКК(3));

                            КонецЕсли;

                        КонецЦикла;

                    Иначе

                        Если (Ит.СКД() <> 0) или (Ит.СКД(3) <> 0) Тогда

                            СформироватьОперацию(0,Счет,Ит.Субконто(1),Ит.Субконто(2),,Ит.СКД(),Ит.СКД(3));

                        ИначеЕсли (Ит.СКК() <> 0) или (Ит.СКК(3) <> 0) Тогда

                            СформироватьОперацию(1,Счет,Ит.Субконто(1),Ит.Субконто(2),,Ит.СКК(),Ит.СКК(3));

                        КонецЕсли;

                    КонецЕсли;

                КонецЦикла;

            Иначе

                Если (Ит.СКД() <> 0) или (Ит.СКД(3) <> 0) Тогда

                    СформироватьОперацию(0,Счет,Ит.Субконто(1),,,Ит.СКД(),Ит.СКД(3));

                ИначеЕсли (Ит.СКК() <> 0) или (Ит.СКК(3) <> 0) Тогда

                    СформироватьОперацию(1,Счет,Ит.Субконто(1),,,Ит.СКК(),Ит.СКК(3));

                КонецЕсли;

            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

КонецПроцедуры

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

Процедура ОбработкаПроведения()

    Ит = СоздатьОбъект(«БухгалтерскиеИтоги»);

    Ит.ИспользоватьПланСчетов(ОсновнойПланСчетов());

    //Ит.ИспользоватьРазделительУчета(Фирма);

    ВыбратьСтроки();

    Пока ПолучитьСтроку() = 1 Цикл

        ЗакрытьСчет(СчетЗакрытия);

    КонецЦикла;

    Операция.Записать();

КонецПроцедуры

 

15 Comments

  1. TrinitronOTV

    интересный вариант реализации…

    Reply
  2. DDos76

    Особенно если сделать кнопку «заполнить счетами». Нажал — провел- баланс по 0!. Вручную так и делал в Комплексной. Только по разделителю учета. Вычищал остатки по ликвидированным фирмам перед обрезанием базы. Чтоб хвосты не таскать.

    Reply
  3. TrinitronOTV
    DDos76 пишет:

    Особенно если сделать кнопку «заполнить счетами». Нажал — провел- баланс по 0!. Вручную так и делал в Комплексной. Только по разделителю учета. Вычищал остатки по ликвидированным фирмам перед обрезанием базы. Чтоб хвосты не таскать.

    спасибо за отчет

    Reply
  4. salli80

    А нельзя чуть (для блондинок ) подробнее.Я создала журнал в конфигураторе ,а вот куда скопировать файл не поняла .Подскажите пожалуста.Вещица нужная для меня ))

    Reply
  5. DDos76

    Специально для блондинок:

    Код, приведенный на сайте, может быть полезен только тем, кто знаком с редактированием

    документов в конфигураторе. В Вашем случае придется поступить по — другому:

    Скачиваем файл 1CV7.MD с сайта. (там он есть, уже готовый)

    Сохраняем его в отдельную папку на компьютере.

    Прописываем путь запуска 1с в эту папку (регистрируем новую базу)

    Запускаем конфигуратор этой базы. Далее в конфигураторе Конфигурация — открыть конфигурацию.

    Раскрываем папочку «Документы». Там есть только один документ. Встаем на него — говорим «Ctrl+C»

    (копировать в буфер), потом открываем свою, рабочую конфигурацию, открываем конфигурацию, встаем на

    папочку «документы» и давим «ctrl+v» (вставить). Потом листаем содержимое этой папочки до самого

    низа и видим вставленный документ. Щелкаем по нему и в открывшемся окне справа вверху выставляем журнал.

    Сохраняем конфигурацю. Запускаемся в режиме бухгалтерии и работаем.

    В Н И М А Н И Е! Перед всеми манипуляциями настоятельно рекомендую сделать архивную копию базы данных,

    с которой Вы работаете. Хотя если все делать правильно , то ничего плохого не случится.

    Reply
  6. ezupowam

    Ух ты! Еще и субконто закрываются! Супер. А то у меня двадцатка от предыдущего бухгалтера досталась такая заросшая, листов на двадцать ))) Сальдо правильное, а по субконто все красное ((

    Спасибо автору!

    Reply
  7. 2011b11

    Спасибо, класс а то вечная проблема по закрытию счетов.

    Reply
  8. NPodolsk

    Как вовремя, огромное спасибо! Закрываю вручную именно «из — за невыполнения каких — либо условий»

    Reply
  9. warenic

    А чем не устроила старая добрая обработка «Закрытие счетов» (UCAccCls.ert) ажно 2008 года выпуска? Там не требовалось создавать новый документ (менять конфигурацию. тем более она могла быть базовой). Просто формировалась операция. Остатки по счетам и субконто можно закрывать с коэффициентом…

    Ну, человек старался, минус ставить смысла нет.

    Reply
  10. DDos76

    (9) warenic,

    Есть такая обработка. Сам пользовался не раз. Кажется только 2005 года. На диске ИТС.

    А теперь вопрос: Изменили что — то «задним числом», т.е раньше этой операции — и счет уже не закрыт. Надо «Ручками» запускать обработку заново. И за 1 месяц. И за второй. И за третий. И через пару недель опять что — то поменяли. И опять обработку. И опять разбирайся когда «хвосты» возникли. И опять… приличные слова кончились. А тут перепровел документ — и опять 0! Всегда ноль! Гарантированный! А перепроведение — это вообще признак хорошего тона в бухии. У меня так все работают — перепровели доки — после баланс сводят и НДС.

    Reply
  11. DDos76

    (9) warenic,

    Не поленился. Посмотрел — ACCLS.ERT у меня 2000 года рождения. И прекрасно работает! До поры до времени.

    Reply
  12. Полковник

    Спасибо, проверила на копии базы, все отлично. Вспоминаю закрытие счетов в начале года, просто как ужас! Без конца изменение задним числом, проведение, перепроведение и счет опять не закрыт! Наконец-то это закончилось! ура!

    Reply
  13. simuljakr

    Спасибо за разработку !

    Еще бы неплохо сделать возможность отбора по субконто: если я хочу закрыть не весь счет, а только по одному контрагенту.

    Reply
  14. simuljakr

    Столкнулся с ошибкой: при закрытии забалансового счета ГТД — документ рисует лишнюю проводку (по каждой номенклатуре — по которой есть остаток) с пустым ГТД (второе субконто)…

    Reply
  15. safia-med

    по виду собконто?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *