clbnk

package module
v0.0.0-...-4365549 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 10, 2024 License: MIT Imports: 7 Imported by: 0

README

Обмен данными с клиент-банком через формат обмена 1CClientBankExchange.

Реализует экспорт платежных поручений, импорт выписок по расчетным счетам.

Как использовать
Для экспорта документов в банк:
	import (
		"os"
		"time"
		
		"github.com/dronm/clbnk"
	)
	//список документов
	documents := []clbnk.BankExportDocument{&clbnk.PPDocument{Num: 1,
		Date:                time.Now(),
		Sum:                 175000,
		PayerName:           `ООО "Рога и Копыта"`,
		PayerInn:            "1234567891",
		PayerAccount:        "12345678901234567890",
		PayerBankName:       "КакойТоБанк ОАО",
		PayerBankPlace:      "г. Москва",
		PayerBankBik:        "123456789",
		PayerBankAccount:    "12345678901234567890",
		ReceiverName:        `ИП Иванов А.А.`,
		ReceiverInn:         "111122223344",
		ReceiverAccount:     "12345678901234567890",
		ReceiverBankName:    "КакойтоБанк ОАО",
		ReceiverBankPlace:   "г. Москва",
		ReceiverBankBik:     "123456789",
		ReceiverBankAccount: "12345678901234567890",
		PayType:             clbnk.PAY_TYPE_DIG,
		OplType:             "01",
		Order:               5,
		PayComment:          "За товары, по счету №125 на сумму 175000-00",
	},
		&clbnk.PPDocument{Num: 2,
			Date:             time.Now(),
			Sum:              375.25,
			PayerName:        `ООО "Рога и Копыта"`,
			PayerInn:         "1234567891",
			PayerAccount:     "12345678901234567890",
			PayerBankName:    "КакойтоБанк ОАО",
			PayerBankPlace:   "г. Москва",
			PayerBankBik:     "123456789",
			PayerBankAccount: "12345678901234567890",
			ReceiverName:     `ИП Иванов А.А.`,
			ReceiverInn:      "111122223344",
			ReceiverAccount:  "12345678901234567890",
			PayType:          clbnk.PAY_TYPE_DIG,
			OplType:          "01",
			Order:            5,
			PayComment:       "За товары, по счету №777 на сумму 375-25\nВ том числе НДС (20%) 62-54",
		},
	}
	//объект выгрузки
	exp := clbnkh.NewBankExport(documents)
	exp.EncodingType = ENCODING_TYPE_WIN
	
	//export to byte slice
	bData, err := exp.Marshal()
	if err != nil {
		panic("clbnk.Marshal() failed: %v", err)
	}	

	//сохраним в файл
	f, err := os.Create("cl_to_bank.txt")
	if err != nil {
		panic("os.Create() failed: %v", err)
	}
	defer f.Close()
	f.Write(bData)	
Для импорта выписок из файла банка:
fileCont, err := os.ReadFile("kl_to_1c.txt")
if err != nil {
	panic(err)
}
imp := clbnk.NewBankImport()
if err := imp.Unmarshal(fileCont); err != nil {
	t.Fatalf("Unmarshal failed: %v", err)
}

Documentation

Overview

Clbnk implements export/import operations with client bank.

Index

Constants

View Source
const (
	HEADER       = "1CClientBankExchange"
	EXCH_VERSION = "1.03"
	DEF_SENDER   = "Бухгалтерия предприятия, редакция 3.0"
	FOOTER       = "КонецФайла"

	ENCODING_WIN = "Windows"
	ENCODING_DOS = "DOS"

	DOCUMENT_TYPE_ID = "Банковский ордер"
)
View Source
const (
	ER_NO_ENC       = "encoding not defined"
	ER_INVALID_FILE = "invalid file format"
)

Some error texts.

Variables

This section is empty.

Functions

func DocumentTypeValues

func DocumentTypeValues() []string

Types

type Account

type Account struct {
	DateFrom     time.Time `bank:"ДатаНачала"`
	DateTo       time.Time `bank:"ДатаКонца"`
	Account      string    `bank:"РасчСчет"`
	BalanceStart float64   `bank:"НачальныйОстаток"`
	BalanceEnd   float64   `bank:"КонечныйОстаток"`
	Debet        float64   `bank:"ВсегоПоступило"`
	Kredit       float64   `bank:"ВсегоСписано"`
}

type BankExport

type BankExport struct {
	Version       string               `bank:"ВерсияФормата"`
	EncodingType  EncodingType         `bank:"Кодировка"`
	Sender        string               `bank:"Отправитель"`
	CreateDate    time.Time            `bank:"ДатаСоздания"`
	CreateTime    string               `bank:"ВремяСоздания"`
	DateFrom      time.Time            `bank:"ДатаНачала"`
	DateTo        time.Time            `bank:"ДатаКонца"`
	DocumentTypes []DocumentType       `bankElemStart:"Документ=" bankElemEnd:"\r\n"`
	Documents     []BankExportDocument `bankElemStart:"СекцияДокумент\r\n" bankElemEnd:"КонецДокумента\r\n"`
}

BankExport is the main structure for exporting bank documents.

func NewBankExport

func NewBankExport(documents []BankExportDocument) *BankExport

func (*BankExport) Marshal

func (e *BankExport) Marshal() ([]byte, error)

Marshal exports all documents.

type BankExportDocument

type BankExportDocument interface {
	GetType() DocumentType
	GetDate() time.Time
}

type BankImport

type BankImport struct {
	Version      string               `bank:"ВерсияФормата"`
	EncodingType EncodingType         `bank:"Кодировка"`
	Sender       string               `bank:"Отправитель"`
	CreateDate   time.Time            `bank:"ДатаСоздания"`
	CreateTime   string               `bank:"ВремяСоздания"`
	DateFrom     time.Time            `bank:"ДатаНачала"`
	DateTo       time.Time            `bank:"ДатаКонца"`
	Account      string               `bank:"РасчСчет"`
	AccSection   []Account            `bankElemStart:"СекцияРасчСчет" bankElemEnd:"КонецРасчСчет"`
	Documents    []BankImportDocument `bankElemStart:"СекцияДокумент" bankElemEnd:"КонецДокумента"`
}

BankExport is the main structure for exporting bank documents.

func NewBankImport

func NewBankImport() *BankImport

func (*BankImport) Unmarshal

func (e *BankImport) Unmarshal(data []byte) error

Unmarshal is the main entry point for importing data. It starts with identifying file encoding type and checking file header.

type BankImportDocument

type BankImportDocument interface {
	GetType() DocumentType
}

type BankOrderDocument

type BankOrderDocument struct {
	Num           int       `bank:"Номер"`
	Date          time.Time `bank:"Дата"`
	Sum           float64   `bank:"Сумма"`
	ReceitDate    time.Time `bank:"КвитанцияДата"`
	ReceitTime    string    `bank:"КвитанцияВремя"`
	ReceitComment string    `bank:"КвитанцияСодержание"` // combined value

	Payer            string `bank:"Плательщик"`
	PayerInn         string `bank:"ПлательщикИНН"`
	PayerName        string `bank:"Плательщик1"`
	Payer2           string `bank:"Плательщик2"`
	Payer3           string `bank:"Плательщик3"`
	Payer4           string `bank:"Плательщик4"`
	PayerAccount     string `bank:"ПлательщикРасчСчет"`
	PayerBankName    string `bank:"ПлательщикБанк1"`
	PayerBankPlace   string `bank:"ПлательщикБанк2"`
	PayerBankBik     string `bank:"ПлательщикБИК"`
	PayerBankAccount string `bank:"ПлательщикКорсчет"`

	Receiver            string `bank:"Получатель"`
	ReceiverInn         string `bank:"ПолучательИНН"`
	Receiver2           string `bank:"Получатель2"`
	Receiver3           string `bank:"Получатель3"`
	Receiver4           string `bank:"Получатель4"`
	ReceiverAccount     string `bank:"ПолучательСчет"`
	ReceiverBankName    string `bank:"ПолучательБанк1"`
	ReceiverBankPlace   string `bank:"ПолучательБанк2"`
	ReceiverBankBik     string `bank:"ПолучательБИК"`
	ReceiverBankAccount string `bank:"ПолучательКорсчет"`

	KreditDate    time.Time `bank:"ДатаСписано"`
	DebetDate     time.Time `bank:"ДатаПоступило"`
	PayType       PayType   `bank:"ВидПлатежа"` //вид платежа
	Code          string    `bank:"Код"`
	PayDirectCode string    `bank:"КодНазПлатежа"`

	PayComment string `bank:"НазначениеПлатежа"`

	KBKValue         string `bank:"ПоказательКБК"`
	OKATOValue       string `bank:"ОКАТО"`
	OsnovanieValue   string `bank:"ПоказательОснования"`
	PeriodValue      string `bank:"ПоказательПериода"`
	NomerValue       string `bank:"ПоказательНомера"`
	DateValue        string `bank:"ПоказательДаты"`
	TipValue         string `bank:"ПоказательТипа"`
	Order            int    `bank:"Очередность"`
	AcceptTerm       string `bank:"СрокАкцепта"`
	AccredType       string `bank:"ВидАккредитива"`
	PayTerm          string `bank:"СрокПлатежа"`
	PayCond1         string `bank:"УсловиеОплаты1"`
	PayCond2         string `bank:"УсловиеОплаты2"`
	PayCond3         string `bank:"УсловиеОплаты3"`
	SupplierOrderNum string `bank:"НомерСчетаПоставщика"`
}

BankOrderDocument is an import document structure for DOCUMENT_TYPE_BANK_ORDER.

func (*BankOrderDocument) GetType

func (d *BankOrderDocument) GetType() DocumentType

type DocumentType

type DocumentType int

DocumentType

const (
	DOCUMENT_TYPE_PP DocumentType = iota
	DOCUMENT_TYPE_BANK_ORDER
)

func (DocumentType) Marshal

func (d DocumentType) Marshal() ([]byte, error)

type EncodingType

type EncodingType int
const (
	ENCODING_TYPE_WIN EncodingType = iota
	ENCODING_TYPE_DOS
	ENCODING_TYPE_NOT_DEFINED
)

func (EncodingType) Marshal

func (e EncodingType) Marshal() ([]byte, error)

func (*EncodingType) Unmarshal

func (e *EncodingType) Unmarshal(data string) error

type FirmMarshaler

type FirmMarshaler interface {
	MarshalFirmName() ([]byte, error)
}

type ImportFieldType

type ImportFieldType int
const (
	FIELD_TYPE_FIELD ImportFieldType = iota
	FIELD_TYPE_ELEM_START
	FIELD_TYPE_ELEM_END
)

Import field types: ordinary field, start of a slice elentnt, end of a slice element.

type MarshalTime

type MarshalTime interface {
	Format(string) string
}

type Marshaler

type Marshaler interface {
	Marshal() ([]byte, error)
}

type PPDocument

type PPDocument struct {
	Num  int       `bank:"Номер"`
	Date time.Time `bank:"Дата"`
	Sum  float64   `bank:"Сумма"`
	// Payer      Payer
	// Receiver   Receiver
	Payer            string `bank:"Плательщик"`
	PayerInn         string `bank:"ПлательщикИНН"`
	PayerName        string `bank:"Плательщик1"`
	Payer2           string `bank:"Плательщик2"`
	Payer3           string `bank:"Плательщик3"`
	Payer4           string `bank:"Плательщик4"`
	PayerAccount     string `bank:"ПлательщикРасчСчет"`
	PayerBankName    string `bank:"ПлательщикБанк1"`
	PayerBankPlace   string `bank:"ПлательщикБанк2"`
	PayerBankBik     string `bank:"ПлательщикБИК"`
	PayerBankAccount string `bank:"ПлательщикКорсчет"`

	Receiver            string  `bank:"Получатель"`
	ReceiverInn         string  `bank:"ПолучательИНН"`
	ReceiverName        string  `bank:"Получатель1"`
	Receiver2           string  `bank:"Получатель2"`
	Receiver3           string  `bank:"Получатель3"`
	Receiver4           string  `bank:"Получатель4"`
	ReceiverAccount     string  `bank:"ПолучательСчет"`
	ReceiverBankName    string  `bank:"ПолучательБанк1"`
	ReceiverBankPlace   string  `bank:"ПолучательБанк2"`
	ReceiverBankBik     string  `bank:"ПолучательБИК"`
	ReceiverBankAccount string  `bank:"ПолучательКорсчет"`
	PayType             PayType `bank:"ВидПлатежа"` //вид платежа
	OplType             string  `bank:"ВидОплаты"`  //вид оплаты
	Order               int     `bank:"Очередность"`
	PayComment          string  `bank:"НазначениеПлатежа" lines:"6"`
}

PPDocument is an export document structure for DOCUMENT_TYPE_PP.

func (*PPDocument) GetDate

func (d *PPDocument) GetDate() time.Time

func (*PPDocument) GetType

func (d *PPDocument) GetType() DocumentType

type PayType

type PayType int

PayType

const (
	PAY_TYPE_DIG PayType = iota
)

func (PayType) Marshal

func (d PayType) Marshal() ([]byte, error)

type Unmarshaler

type Unmarshaler interface {
	Unmarshal(string) error
}

Unmarshaler is for structures with custom unmarshal functions.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL