Создание и проведение документа
Вообще проведение документа реализовано через наследование. Собственно используем переопределенный объект:
Т.е. нужно переопределить метод close() (тоже касается и отмены проведения, удаления и пр. с соответствующими методами.
По основной идее обработчики событий в 1С соответствуют protected методам в J1C
Переопределяем встроенный класс (в 1С мы бы переопределяли модуль проведения):
import j1c.ru.V7;
import j1c.ru.V7.CatalogReference;
import j1c.ru.V7.DocumentObject;
import j1c.ru.V7.DocumentString;
import j1c.ru.V7.Entry;
import j1c.ru.V7.OperationObject;
import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;
public class OkazanieUslug extends DocumentObject{
private V7 v7;
public OkazanieUslug(V7 v7) {
v7.super("ОказаниеУслуг");
this.v7 = v7;
}
@Override
protected void closing() {
//создаем операцию
OperationObject oper = getOperationObject();
//бежим по строкам и набиваем проводки
List<DocumentString> rows = getRows();
for(Iterator<DocumentString>i=rows.iterator();i.hasNext();){
DocumentString row = i.next();
Entry entry = oper.newEntry();
entry.getDebit().setAccount(v7.accountByCode("60.1"));
entry.getDebit().setSubconto(0, getAttribute("Контрагент"));
entry.getDebit().setSubconto(1, getAttribute("Договор"));
entry.getKredit().setAccount(v7.accountByCode("90.1.1"));
entry.getKredit().setSubconto(0, ((CatalogReference)row.getAttribute("Услуга")).getAttribute("ВидНоменклатуры"));
entry.getKredit().setSubconto(1, ((CatalogReference)row.getAttribute("Услуга")).getAttribute("СтавкаНДС",getDate()));
entry.getKredit().setSubconto(2, ((CatalogReference)row.getAttribute("Услуга")).getAttribute("СтавкаНП",getDate()));
entry.setSum((BigDecimal)row.getAttribute("Сумма"));
entry.setAttribute("СодержаниеПроводки", "Учтена выручка");
entry.setAttribute("НомерЖурнала", "ТВ");
oper.put(entry);
}
oper.write();
}
}
import j1c.ru.V7;
import j1c.ru.V7.CatalogManager;
import j1c.ru.V7.CatalogReference;
import j1c.ru.V7.DocumentString;
import java.math.BigDecimal;
public class CreateCloseDocument {
public static void main(String[] args) {
try {
V7 v7 = new V7();
if(args.length!=1){
throw new Exception("Incorect count parameters");
}
v7.connect(args[0]);
System.out.println("Создание и проведение документа");
CatalogManager kontragentM = v7.new CatalogManager("Контрагенты");
CatalogReference kontragent = kontragentM.serchByCode("00000172", false).get(0);
CatalogManager dogovorM = v7.new CatalogManager("Договоры");
dogovorM.setOwner(kontragent);
CatalogReference dogovor = dogovorM.serchByCode("000021", true).get(0);
CatalogManager typePriceM = v7.new CatalogManager("ТипыЦен");
CatalogReference typePrice = typePriceM.serchByCode("00001", false).get(0);
CatalogManager variantNalogovM = v7.new CatalogManager("ВариантыРасчетаНалогов");
CatalogReference variantNalogov = variantNalogovM.serchByName("Без налогов", false).get(0);
OkazanieUslug docUslugi = new OkazanieUslug(v7);
docUslugi.newObject();
docUslugi.setAttribute("Контрагент", kontragent);
docUslugi.setAttribute("Договор", dogovor);
docUslugi.setAttribute("ТипУслуги", 1);
docUslugi.setAttribute("ЗачитыватьАванс", 2);
docUslugi.setAttribute("ТипЦен", typePrice);
docUslugi.setAttribute("ВариантРасчетаНалогов", variantNalogov);
CatalogManager nomenM = v7.new CatalogManager("Номенклатура");
CatalogReference nomen = nomenM.serchByName("Автомобиль Лексус", false).get(0);
DocumentString row = docUslugi.newString();
row.setAttribute("Услуга", nomen);
row.setAttribute("Количество", 1);
row.setAttribute("Цена", 550);
row.setAttribute("Сумма", ((BigDecimal)row.getAttribute("Количество")).multiply((BigDecimal)row.getAttribute("Цена")));
row.setAttribute("Всего", ((BigDecimal)row.getAttribute("Сумма")).add((BigDecimal)row.getAttribute("НДС")));
docUslugi.putRow(row);
row = docUslugi.newString();
row.setAttribute("Услуга", nomen);
row.setAttribute("Количество", 1);
row.setAttribute("Цена", 1000);
row.setAttribute("Сумма", ((BigDecimal)row.getAttribute("Количество")).multiply((BigDecimal)row.getAttribute("Цена")));
row.setAttribute("Всего", ((BigDecimal)row.getAttribute("Сумма")).add((BigDecimal)row.getAttribute("НДС")));
docUslugi.putRow(row);
docUslugi.write();
docUslugi.close();
System.out.println(docUslugi);
} catch (Exception e) {
System.out.println("Error: "+e);
System.exit(1);
}
}
}