примерно так реализуовывал закрытие затрат в конце месяца когда затраты - по субсчетам, сорри что не в акцапте, надеюсь понять можно..
PHP код:
ПЕРЕМ ТИП_ЧИСЛО:вырпр!
ПЕРЕМ ТИП_ЧИСЛО:вырт!
ПЕРЕМ ТИП_ЧИСЛО:выр!
ПЕРЕМ ТИП_ЧИСЛО:спис!
ПЕРЕМ ТИП_ЧИСЛО:остнзп!
ПЕРЕМ ТИП_ЧИСЛО:лн,итог
ФУНКЦИЯ ОСТАТОКНЗП
ЕСЛИ НЕ СУЩ_ФАЙЛ(ДИР_DBF+"\G_zakr.dbf") ТО
б=БД_СОЗДАТЬ("G_zakr")
б.ЗАП_ПОЛЕ("sch","",20)
б.ЗАП_ПОЛЕ("sum",0,15,2)
б.ЗАПИСАТЬ
б.УДАЛИТЬ(1)
ИНАЧЕ
б=БД_ОТКРЫТЬ(ДИР_DBF+"\G_zakr.dbf")
КОНЕЦ_ЕСЛИ
БД_РЕДАКТОР(б,"Остатоки НЗП. F7-Доб,F4-Изм,F8-Удл",
["sch":"Счет"("G_zakr","vibor"),"sum":"Сумма"],ДА,ДА,ДА,ДА)
нусум=0
ЦИКЛ ДЛЯ(и=1,б.ВСЕГО)
б.ПЕРЕЙТИ(и)
б.СЧИТАТЬ
счет=б.ПОЛЕ("sch")
сум=б.ПОЛЕ("sum")
остнзп!счет=сум
наз=""
ЕСЛИ СЧЕТ_СУЩ(счет) ТО
наз=НАЗВ(счет)
ИНАЧЕ
СООБЩЕНИЕ("Счет '"+счет+"' не найден!")
СТОП_ВСЕ
КОНЕЦ_ЕСЛИ
ЕСЛИ ОСД(счет)<сум ТО
СООБЩЕНИЕ("Остаток НЗП не может быть больше остатка по счету!")
СТОП_ВСЕ
КОНЕЦ_ЕСЛИ
нусум+=сум
ЯЧЕЙКА[СТР(и)+"1001"]=СТР(счет)
ЯЧЕЙКА[СТР(и)+"1002"]=наз
ЯЧЕЙКА[СТР(и)+"1003"]=СТР(сум)
КОНЕЦ_ЦИКЛА
ЕСЛИ ВОПРОС!("Корректировать остатки НЗП в НУ") ТО
нусум=ВВЕСТИ_ЗНАЧЕНИЕ("Введите сумму остатка НЗП в налоговом учете",нусум)
ЦИКЛ ПО ЖУРНАЛУ бухоперации, бухпроводки [дебет,кредит],
СУММА(сумма+сумма_кор) суммаНУ (статья="МР/НЗП")
КОНЕЦ_ЦИКЛА
ЕСЛИ (-1)*нусум+(-1)*суммаНУ<>0 ТО
ПРОВОДКА("-","-",0,ДАТА_КОН-1,"НУ:Корректировка остатка НЗП")
ПРОВОДКА_НУ("МР/НЗП",(-1)*нусум)
ЕСЛИ суммаНУ<>0 ТО
ПРОВОДКА("-","-",0,ДАТА_КОН-1,"НУ:Корректировка остатка НЗП")
ПРОВОДКА_НУ("МР/НЗП",(-1)*суммаНУ)
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЕСЛИ
ЗАП_ОПЕР
ЕСЛИ и>0 ТО
ВЫВЕСТИ(1,лн-1,"Остатки незавершенного производства")
ТАБЛИЦА(1,лн,55,1001,1003,1,и)
лн=ПОСЛЕДНЯЯ_СТРОКА+2
КОНЕЦ_ЕСЛИ
б.ЗАКРЫТЬ
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ РАСЧЕТ(ТИП_СТРОКА:инд,закр;ТИП_ЧИСЛО:вс,всявыр,и)
дата=ДАТА_КОН-1
ж=0
маска=закр+"*"
ЦИКЛ СЧЕТА(сч=маска)
ЕСЛИ ЕСТЬ_СУБСЧ(сч) ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
ЕСЛИ и=вс ТО
текспис=ОСД(сч)-остнзп!сч-спис!сч
ИНАЧЕ
текспис=(ОСД(сч)-остнзп!сч)*(выр!инд/всявыр)
КОНЕЦ_ЕСЛИ
текспис=ОКРУГЛЕНИЕ(текспис,2)
спис!сч+=текспис
ПРОВОДКА(инд,сч,текспис,дата,"Закрытие счета "+закр)
ЕСЛИ текспис>0 ТО
ж++
ЯЧЕЙКА[СТР(ж)+"1001"]=СТР(сч)
ЯЧЕЙКА[СТР(ж)+"1002"]=НАЗВ(сч)
ЯЧЕЙКА[СТР(ж)+"1003"]=СТР(текспис)
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЦИКЛА
ЕСЛИ ж>0 ТО
ВЫВЕСТИ(1,лн,"Закрытие счета "+закр+" на счет:"+инд+"("+НАЗВ(инд)+")"/*+" Коэф.:"+СТР(выр!инд/всявыр)*/)
лн++
ТАБЛИЦА(1,лн,55,1001,1003,1,ж)
итог+=ИТОГО!1003
лн=ПОСЛЕДНЯЯ_СТРОКА+2
КОНЕЦ_ЕСЛИ
КОНЕЦ_ФУНКЦИИ
{ Описания общих переменных и функций }
ВЫЧИСЛИТЬ
{ Предрасчетная часть бланка }
ВВЕСТИ
ОБНУЛИТЬ(вырпр,вырт,выр,спис,остнзп)
закрывать26ПоТиповой=ВВЕСТИ_ЗНАЧЕНИЕ!("26-ой счет закрывать",["Через типовую операцию на 20-ой счет","Сразу в дебет 90-го счета"])=1
ЕСЛИ ОСД("26")<>0 И закрывать26ПоТиповой ТО
СООБЩЕНИЕ("Не закрыт 26 счет.//"+
"Сначала закроем 26 счет.")
СТАРТ_ОПЕРАЦИЯ("Прибыль : Списание затрат")
СООБЩЕНИЕ("Рассчитайте данный бланк заново.")
СТОП_ВСЕ
КОНЕЦ_ЕСЛИ
ЕСЛИ закрывать26ПоТиповой ТО
ЕСЛИ ОСД("20*")=0 И ОСД("44*")=0 ТО
СООБЩЕНИЕ("Дебетовых остатков по счетам затрат (20 и 44 счета) на "+СТР(ДАТА_КОН)+" нет.//"+
"Закрывать нечего, расчет остановлен.")
СТОП_ВСЕ
КОНЕЦ_ЕСЛИ
ИНАЧЕ
ЕСЛИ ОСД("20*")=0 И ОСД("44*")=0 И ОСД("26*")=0 ТО
СООБЩЕНИЕ("Дебетовых остатков по счетам затрат (20,26 и 44 счета) на "+СТР(ДАТА_КОН)+" нет.//"+
"Закрывать нечего, расчет остановлен.")
СТОП_ВСЕ
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЕСЛИ
ИСПОЛЬЗОВАТЬ("Prntabl")
ШИРИНА!1001=15
ШИРИНА!1002=40
ШИРИНА!1003=15 ЗНАКОВ!1003=2
НАИМ!1001="Код счета"
НАИМ!1002="Наименование"
НАИМ!1003="Сумма"
ШАПКА=ДА
ВЫСОТАШАП=1
ИТОГИ!1=3
лн=6
ЕСЛИ естьнзп="логика.ДА" ТО
ОСТАТОКНЗП
КОНЕЦ_ЕСЛИ
поОстаткам=ВВЕСТИ_ЗНАЧЕНИЕ("Выберите вариант списания затрат:",
["Пропорционально выручке за период с "+ДАТАП(ДАТА_НАЧ)+" по "+ДАТАП(ДАТА_КОН),
"Пропорционально остаткам по кредиту 90-ых счетов на "+ДАТАП(ДАТА_КОН)])=2
заМинусомНДС=ВВЕСТИ_ЗНАЧЕНИЕ!("Списывать затраты:",
["Пропорционально <чистой> выручке (без НДС)",
"Пропорционально <грязной> выручке (с НДС)"])=1
вспр=0 вст=0 вс=0 всявыр=0
ЦИКЛ СЧЕТА(сч="90/*/В")
СТАТУС("Анализ счета:"+сч)
ЕСЛИ заМинусомНДС ТО
счетНДС=ПОДСТР(сч,1,ДЛИНА(сч)-1)+"НДС"
ИНАЧЕ
// Если списываем затраты пропорционально грязной выручке, то
// счетНДС делаем заведомо несуществующем, чтобы он не учитывался
счетНДС="ФЫВДЛАО ЫФОА ДЫОАДЛФЫОАДОФЫВД"
КОНЕЦ_ЕСЛИ
ЕСЛИ поОстаткам ТО
всявыр+=ОСК!(сч)-ОСД!(счетНДС)
ИНАЧЕ
всявыр+=ОБК!(сч)-ОБД!(счетНДС)
КОНЕЦ_ЕСЛИ
ЕСЛИ ПОДСТР(сч,1,4)="90/П" ТО
ЕСЛИ поОстаткам И ОСК!(сч)=0 ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
ЕСЛИ (НЕ поОстаткам) И ОБК!(сч)=0 ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
инд=ПОДСТР(сч,1,ДЛИНА(сч)-1)+"С"
ЕСЛИ НЕ СЧЕТ_СУЩ(инд) ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
ЕСЛИ поОстаткам ТО
вырпр!инд=ОСК!(сч)-ОСД!(счетНДС)
ИНАЧЕ
вырпр!инд=ОБК!(сч)-ОБД!(счетНДС)
КОНЕЦ_ЕСЛИ
вспр++
КОНЕЦ_ЕСЛИ
ЕСЛИ ПОДСТР(сч,1,4)="90/Т" ТО
ЕСЛИ поОстаткам И ОСК!(сч)=0 ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
ЕСЛИ (НЕ поОстаткам) И ОБК!(сч)=0 ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
инд=ПОДСТР(сч,1,ДЛИНА(сч)-1)+"С"
ЕСЛИ НЕ СЧЕТ_СУЩ(инд) ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
ЕСЛИ поОстаткам ТО
вырт!инд=ОСК!(сч)-ОСД!(счетНДС)
ИНАЧЕ
вырт!инд=ОБК!(сч)-ОБД!(счетНДС)
КОНЕЦ_ЕСЛИ
вст++
КОНЕЦ_ЕСЛИ
ЕСЛИ поОстаткам И ОСК!(сч)=0 ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
ЕСЛИ (НЕ поОстаткам) И ОБК!(сч)=0 ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
инд=ПОДСТР(сч,1,ДЛИНА(сч)-1)+"С"
ЕСЛИ НЕ СЧЕТ_СУЩ(инд) ТО ПРОДОЛЖИТЬ КОНЕЦ_ЕСЛИ
ЕСЛИ поОстаткам ТО
выр!инд=ОСК!(сч)-ОСД!(счетНДС)
ИНАЧЕ
выр!инд=ОБК!(сч)-ОБД!(счетНДС)
КОНЕЦ_ЕСЛИ
вс++
КОНЕЦ_ЦИКЛА
ЕСЛИ ОКРУГЛЕНИЕ(всявыр,2)=0 ТО
СООБЩЕНИЕ("Нет выручки!")
СТОП
КОНЕЦ_ЕСЛИ
закр44=НЕТ закр20=НЕТ
//20 на пр
и=0 итог=0
ЕСЛИ ОСД("20")<>0 И вспр<>0 ТО
закр20=ДА закр="20"
ЦИКЛ ДЛЯ(инд ИЗ вырпр)
СТАТУС("Анализ счета:"+инд)
и++
РАСЧЕТ(инд,закр,вспр,всявыр,и)
КОНЕЦ_ЦИКЛА
ВЫВЕСТИ(1,лн,"Итого по счету 20:"+СУММАПРОП(итог),ДА,НЕТ,НЕТ)
ЗАП_ОПЕР
КОНЕЦ_ЕСЛИ
//44 на торг
ЕСЛИ ОСД("44")<>0 И вст<>0 ТО
лн=лн+2 и=0 итог=0
закр44=ДА закр="44"
ЦИКЛ ДЛЯ(инд ИЗ вырт)
СТАТУС("Анализ счета:"+инд)
и++
РАСЧЕТ(инд,закр,вст,всявыр,и)
КОНЕЦ_ЦИКЛА
ВЫВЕСТИ(1,лн,"Итого по счету 44:"+СУММАПРОП(итог),ДА,НЕТ,НЕТ)
ЗАП_ОПЕР
КОНЕЦ_ЕСЛИ
//20 на все
ЕСЛИ ОСД("20")<>0 И НЕ закр20 ТО
лн=лн+2 и=0 итог=0
закр20=ДА закр="20"
ЦИКЛ ДЛЯ(инд ИЗ выр)
СТАТУС("Анализ счета:"+инд)
и++
РАСЧЕТ(инд,закр,вс,всявыр,и)
КОНЕЦ_ЦИКЛА
ВЫВЕСТИ(1,лн,"Итого по счету 20:"+СУММАПРОП(итог),ДА,НЕТ,НЕТ)
ЗАП_ОПЕР
КОНЕЦ_ЕСЛИ
//44 на все
ЕСЛИ ОСД("44")<>0 И НЕ закр44 ТО
лн=лн+2 и=0 итог=0
закр44=ДА закр="44"
ЦИКЛ ДЛЯ(инд ИЗ выр)
СТАТУС("Анализ счета:"+инд)
и++
РАСЧЕТ(инд,закр,вс,всявыр,и)
КОНЕЦ_ЦИКЛА
ВЫВЕСТИ(1,лн,"Итого по счету 44:"+СУММАПРОП(итог),ДА,НЕТ,НЕТ)
ЗАП_ОПЕР
КОНЕЦ_ЕСЛИ
//26 на все
ЕСЛИ ОСД("26")<>0 И НЕ закрывать26ПоТиповой ТО
лн=лн+2 и=0 итог=0
закр="26"
ЦИКЛ ДЛЯ(инд ИЗ выр)
СТАТУС("Анализ счета:"+инд)
и++
РАСЧЕТ(инд,закр,вс,всявыр,и)
КОНЕЦ_ЦИКЛА
ВЫВЕСТИ(1,лн,"Итого по счету 26:"+СУММАПРОП(итог),ДА,НЕТ,НЕТ)
ЗАП_ОПЕР
КОНЕЦ_ЕСЛИ
ВЫВЕСТИ(1,лн+2,"Главный бухгалтер__________"+ГлавБух)
КОНЕЦ