Модуль позволяет генерировать xml файлы с описанием документов через формат EnterpriseData. Более детальное описание формата обмена можно почитать на сайте 1с.
На данный момент реализована генерация для следующих документов:
Предпочтительный вариант установки через composer.
Чтобы установить, выполните следующую команду:
php composer.phar require --prefer-dist bonditka/export1c "*"
или добавьте
"bonditka/export1c": "*"
в блок require вашего composer.json
файла.
Для передачи данных в модуль используются dto модели. Для всех документов обязательны следующие поля:
'companyInfo' => [
'name' => 'Lorem name',
'nameShort' => 'Lorem name short',
'nameFull' => 'Lorem name full',
'inn' => 'Lorem inn',
'kpp' => 'Lorem kpp',
'formOrganization' => 'Lorem formOrganization'
],
'partnerInfo' => [
'name' => 'Lorem name',
'nameShort' => 'Lorem name short',
'inn' => 'Lorem inn',
'kpp' => 'Lorem kpp',
'formOrganization' => 'Lorem formOrganization'
],
'counterparty' => [
'name' => 'Lorem name',
'nameShort' => 'Lorem name short',
'inn' => 'Lorem inn',
'kpp' => 'Lorem kpp',
'formOrganization' => 'Lorem formOrganization'
],
'tableItems' => [
[
'name' => 'Lorem name',
'code' => 'Lorem code',
'unitCode' => 'Lorem unitCode',
'quantity' => 2,
'amount' => 150,
'price' => 75,
'vat' => 18,
'vatAmount' => 27
],
[
'name' => 'Lorem name',
'code' => 'Lorem code',
'unitCode' => 'Lorem unitCode',
'quantity' => 2,
'amount' => 150,
'price' => 75,
'vat' => 18,
'vatAmount' => 27
],
]
Для документа ПоступлениеТоваровУслуг дополнительно необходимо передать:
'documentNumber' => [
'number' => 'Lorem number',
'date' => 'Lorem date'
],
'store' => [
'name' => 'Lorem name',
'typeStore' => 'Lorem name short',
]
Для документа РеализацияТоваровУслуг:
'companyAccountant' => [
'fio' => 'Lorem fio',
'birthDay' => 'Lorem birthDay',
'inn' => 'Lorem inn',
],
'companyBank' => [
'accountNumber' => 'Lorem accountNumber',
'bik' => 'Lorem bik',
'korrAccount' => 'Lorem korrAccount',
'name' => 'Lorem name'
],
'companyHead' => [
'fio' => 'Lorem fio',
'birthDay' => 'Lorem birthDay',
'inn' => 'Lorem inn',
],
'releaseProduced' => [
'fio' => 'Lorem fio',
'birthDay' => 'Lorem birthDay',
'inn' => 'Lorem inn',
]
Нужную dto модель можно сгенерировать из массива через соответствующий конструктор:
//для документа ПоступлениеТоваровУслуг
$documentDto = new dto\DocumentDto($arData);
//для документа РеализацияТоваровУслуг
$documentDto = new dto\SellingDto($arData);
Для генерации всего документа нужно вызвать метод addDocument
. Так же существует возможность сгенерировать только шапку (метод addDocumentHeader
) и только табличную часть документа (метод addDocumentTable
).
Когда нужная dto модель сформирована, запустить генерацию xml можно через специальный сервис:
$action = 'addDocument';
$generatorService = new GeneratorDocumentService($dto);
$response = $generatorService->run($action, $param);
//проверка ответа на наличие ошибок
if($response->hasError()){
print_r($response->getErrors());
}
Или напрямую через модель:
$documentDto = new dto\DocumentDto($arData);
$generator = new GeneratorDocument();
$generator->setParam($param);
$generator->addDocumentTable($documentDto->tableItems);
В массиве $param
можно передать дополнительные парметры выполнения.
На данный момент обрабатывается только один элемен данного массива с ключом filePath
, в котором должен содердаться путь до выходного xml-файла.
Запускать тесты можно следующими командами:
vendor/bin/codecept build
vendor/bin/codecept run