Для реализации данного кейса, необходимо что бы в настройках прав доступа в конфигурации для раздела Контрагенты было включено администрирование по записям, но не заданы условия.
Счета выставляются от двух компаний, одна на ОСНО, вторая - УСН.
Для первой нужно указывать НДС в счетах, для второй - нет.
У меня мысль сделать в "Реквизиты плательщика" у Контрагента флажок "Плательщик НДС" и на него завязываться в дальнейшем, но это надо логику добавления счетов переделывать, макросы для печатной формы дописывать для формирования строки "Включая НДС"/"Без налога" и тд...
Вряд ли получится проще. Кстати, в общем случае еще на разные группы товаров может быть разный НДС. Потому мы для вычисления НДС создаем VIEW, и уже его результаты отображаем на карточке, в общей сумме и на печатной форме. С VIEW получается намного проще логика
Видимо, речь о том, что создать в базе View, где средствами SQL вычислить нужные значения. Затем создать в конфигурации схему, привязанную вместо таблицы к этому View. Названия колонок и их типы нужно будет вручную задать аналогично. И с этой схемой работать в печатных формах как с обычной таблицей.
Примерно так (постарался вырезать лишнюю информацию, относящуюся к проекту, но не проверял на работоспособность.
Единственное, что в СНГ немного по другой методике НДС считается (у нас он считается как % от суммы всех продуктов, а в СНГ, насколько я знаю, как сумма НДС всех продуктов)
CREATE VIEW [dbo].[UsrInvoiceTax]
AS
SELECT MIN(p.Id) As Id
,i.CreatedOn
,i.CreatedById
,i.ModifiedOn
,i.ModifiedById
,p.InvoiceId As UsrInvoiceId
,p.[TaxId] As UsrTaxId
,p.[DiscountTax] As UsrDiscountTax
,CAST ( SUM((Quantity*PrimaryPrice) - PrimaryDiscountAmount) AS DECIMAL(18,2)) As UsrTotalPrimaryAmount
, CAST (SUM((Quantity*PrimaryPrice*i.CurrencyRate) - PrimaryDiscountAmount*i.CurrencyRate)AS DECIMAL(18,2)) As UsrTotalAmount
,t.Name As UsrTaxName
,ROUND((SUM(Quantity*PrimaryPrice- PrimaryDiscountAmount))*p.DiscountTax/100,2) As UsrTotalTaxPrimaryAmount
,CAST (ROUND((SUM((Quantity*PrimaryPrice-PrimaryDiscountAmount)*i.UsrCurrencyRate ))*p.DiscountTax/100,2)AS DECIMAL(18,2)) As UsrTotalTaxAmount
FROM [dbo].[InvoiceProduct] p
LEFT OUTER JOIN [dbo].[Tax] t ON t.Id=p.TaxId
LEFT OUTER JOIN [dbo].[Invoice] i ON i.Id=p.InvoiceId
CREATE VIEW dbo.VwZLInvoice
AS
SELECT
i.Id,
i.Number,
i.StartDate,
IIF(SUM(CASE WHEN ZLVATPayer =1 THEN p.TaxAmount ELSE 0 END)<>0, 'В том числе НДС:', 'Без налога (НДС):') VATSumCaption,
SUM(CASE WHEN ZLVATPayer =1 THEN p.TaxAmount ELSE 0 END) ZLInvoiceVATSum
FROM dbo.Invoice i
LEFT JOIN dbo.InvoiceProduct p
ON i.Id= p.InvoiceId
LEFT JOIN dbo.AccountBillingInfo abi
ON i.SupplierBillingInfoId= abi.Id
GROUP BY
i.Id,
i.Number,
i.StartDate
далее создал объект с такими же колонками, как у View, а как мне теперь сделать что бы колонки этого объекта стали доступны для добавления при редактировании печатной формы для раздела Счета?
я же правильно понимаю, что вьюшка вашего варианта попадет в колонки печатной формы как "Название объекта (по колонке Счет)"?
Не совсем это мне подходит, т.к. строковые колонки в печатную форму добавить потом не удастся, только такие, к которым можно применить агрегирующие функции.
Возможен вариант создания View - копии объекта с дополнительными вычисляемыми колонками. Это классная техника, но она годится только для таких задач, как подготовка данных для экспорта, ибо для использования в печатных формах придется замещать родителя и, скорее всего, создавать триггеры для добавления/удаления/обновления.
Пока мне видится более приемлемым традиционный вариант с добавлением нужных полей в объект и логикой в карточках объектов, продолжаю исследования :)
При запуске приложения всплывает такая ошибка. Собственно, как это фиксить? (установка была выполнена согласно туториалу по установке приложения on-site)
В момент возникновения ошибки экземпляр процесса фиксирует текущее состояние.
Если устранить источник проблемы и повторно выполнить элемент с ошибкой в журнале процессов - БП продолжит выполнение.
Если ошибка возникает на уровне БД (блокировка транзакции, дедлок) возможен риск потери служебных данных. В таком случае продолжить экземпляр процесса не представляется возможным.
В других же случаях перейти к выполнению следующего элемента, если на предыдущем возникла ошибка не предоставляется возможным.
День добрый!
Подскажите, пожалуйста, способ которым можно получить пароль пользователя.
Именно ту строку, которую вводит пользователь при входе в систему, а не хэш.
Есть БП с текстовым параметром (TextResult), целочисленным параметром (IntResult), идентификатор (AccountId). В БП я задаю им определенные значения, явно отличные от пустой строки, нуля и пустого Guid. После выполнения БП я хочу получить результирующее значение любого параметра.
Сейчас используют интерпретируемые процессы, компилируемые остались только старые. А в интерпретируемых возврат значения не предусмотрен. Для обмена информацией либо писать в какую-то таблицу, а потом извне читать по OData, либо вызывать в самом БП веб-сервис системы, с которой идёт интеграция.
Ну, не знаю что конкретно Вы хотите сделать, но можно создать булевое поле, Читать количество записей, где это поле = false, если такие записи найдены, то выполняете свою логику и ставите в это поле true. Опять идет читка данных из лидов, если опять найдены такие лиды где false - отрабатывает та же логика. Если записей не найдено. завершаете процесс. Надеюсь чем-то помог.
Можно сделать блок БП «скрипт» и в С#-коде написать GetEntityCollection, а затем по результату foreach-циклом, как в примере №4 тут.
Но нужно быть осторожным, чтобы всё не повесить длительным выполнением запроса на сервере. Если лидов реально много, можно скомбинировать с прошлым советом и за каждый запуск брать и обрабатывать в цикле первые N ещё не обработанных.