Вопрос

Создание счета аналогом БП CreateInvoiceFromOrder

Здравствуйте, коллеги!

Создал по аналогии с CreateInvoiceFromOrder создание счета из договора - CreateInvoiceFromContract

Все работает отлично, за исключением одного момента

В новом счете не заполняется поле Supplier (подразумевается, что это наша компания), всегда пустое после открытия карточки.

Ранее обнаружил, что и CreateInvoiceFromOrder не работал, ибо что то там foreign key в таблице Account, оказалось, что в в объекте Invoice по умолчанию стояло заполнять это поле каким то левым гуидом e308b781-3c5b-4ecb-89ef-5c1ed4da488e. Я это дело исправил в одном из своих пакетов, но видно все равно это как то сказывается.

Прошу помощи.

Нравится

11 комментариев
Лучший ответ

Борис Леонов,

namespace Terrasoft.Configuration

{

    public static class AccountConsts

    {

        public static readonly Guid OurCompanyAccountId = new Guid("E308B781-3C5B-4ECB-89EF-5C1ED4DA488E");

    }

}

OurCompanyAccountId  это Id Нашей компании, рекомендуется при начале внедрения эту запись переименовать в название вашей компании, возможно вы ее удалили изза этого и могли возникнуть проблемы в работе с созданием счета

В чем вы просите помощи?

Добрый день!

В БП  CreateInvoiceFromOrder есть метод

public virtual void CreateInvoice() {
	OrderInvoiceHelper helper = Factories.ClassFactory.Get<OrderInvoiceHelper>(new Factories.ConstructorArgument("userConnection", UserConnection));
CreatedInvoiceId = helper.CreateEntity("Order", "Invoice", CurrentOrder, new Dictionary<string, string> {
	{"Currency", "Currency"},
	{"CurrencyRate", "CurrencyRate"},
	{"Contact", "Contact"},
	{"Account", "Account"},
	{"Owner", "Owner"},
	{"Amount", "Amount"},
	{"Opportunity", "Opportunity"}
}, new Dictionary<string, object> { { "Order", CurrentOrder } });
}

который создает Invoice по Order. 3им параметром идет словарь-маппинг полей Invoice по Order, 4ым параметром (new Dictionary<string, object> { { "Order", CurrentOrder } }) предустановленные параметры. Вот ваш Supplier надо добавить туда

Григорий Чех пишет:

В чем вы просите помощи?

Победить глюк с незаполнением Supplier в новом счете.

Сидоров Александр В.,

Александр, мой вариант сейчас выглядит так:

public virtual void CreateInvoice() {
	OrderInvoiceHelper helper = Factories.ClassFactory.Get&lt;OrderInvoiceHelper&gt;(new Factories.ConstructorArgument("userConnection", UserConnection));
	var createdInvoiceId = helper.CreateEntity(
		"Contract", "Invoice", Get&lt;Guid&gt;("CurrentContract"), new Dictionary&lt;string, string&gt; {
			{"Currency", "Currency"},
			{"CurrencyRate", "CurrencyRate"},
			{"Contact", "Contact"},
			{"Account", "Account"},
			{"CustomerBillingInfo","CustomerBillingInfo"},
			{"OurCompany", "Supplier"},
			{"SupplierBillingInfo", "SupplierBillingInfo"},
			{"Owner", "Owner"},
			{"Amount", "Amount"},
			{"Order","Order"},
			{"Opportunity", "Opportunity"}
		},
		new Dictionary&lt;string, object&gt; {
			{"Contract", Get&lt;Guid&gt;("CurrentContract")},
			{"ZLPaymentType", Get&lt;Guid&gt;("PaymentType")}
		});
	Set("CreatedInvoiceId", createdInvoiceId);
}

 

Про левый Guid в значении по умолчанию для Supplier в Invoice имею в виду это:

я переопределил это безобразие на "не устанавливать значение по умолчанию" в своем пакете, CreateInvoiceFromOrder заработал, но лишь потому, что  в Заказе нет полей с нашей компанией (поставщиком), нечем в счете заполнять.

откуда лезет этот e308b781-3c5b-4ecb-89ef-5c1ed4da488e, причем у объектов в залоченных фирменных террасофтовских пакетах?

Борис Леонов,

namespace Terrasoft.Configuration

{

    public static class AccountConsts

    {

        public static readonly Guid OurCompanyAccountId = new Guid("E308B781-3C5B-4ECB-89EF-5C1ED4DA488E");

    }

}

OurCompanyAccountId  это Id Нашей компании, рекомендуется при начале внедрения эту запись переименовать в название вашей компании, возможно вы ее удалили изза этого и могли возникнуть проблемы в работе с созданием счета

Борис Леонов,

{"OurCompany", "Supplier"}, - это значит значение из поля OurCompany объекта Contract скопировать в поле Supplier объекта Invoice.
Если вам надо именно одно и то же значение всегда записывать, то вам надо добавить параметр в словарь 
new Dictionary<string, object> {
			{"Contract", Get<Guid>("CurrentContract")},
			{"ZLPaymentType", Get<Guid>("PaymentType")}
		}

Да, ни в коем случае не удаляйте эту "Нашу компанию". Она ещё в некоторых местах жёстко зашита. Например, в интеграции с AD

Григорий Чех,

Владимир Соколов,

удалили, вероятней всего когда когда клиент объединял несколько «нечаянно» созданных компаний.

Если я руками создам Account с нужным Id и объединю его с существующей «нашей компанией», проблема решится?

Да должно

Показать все комментарии