Показать сообщение отдельно
Старый 12.12.2005, 12:04   #7  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
- отдельные субсчета на каждый вид затрат


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

ОСД - Остаток дебетовый ОБД - оборот по дебету и т.п.

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,"Главный бухгалтер__________"+ГлавБух)
КОНЕЦ