Персональная программа в шаблоне операции

Персональная программа в шаблоне операции

Сообщение dmitry » Пт апр 08, 2016 1:12 pm

Решение, которое закрывает многолетнюю дискуссию о себестоимости валютного товара при продаже (viewtopic.php?f=1&t=2028&start=15).
Программа вычисляет ее по курсу, который был на момент приобретения, а пользователи считают, что нужно пересчитывать по сегодняшнему курсу.

Чтобы действовал второй вариант: в расходной накладной нажать вверху "Выбор операции" (будет выделена "Продажа"), нажать "Изменить", в шаблоне операции нажать "Программа".

1.png
1.png (16.75 КБ) Просмотров: 831

2.png
2.png (15.41 КБ) Просмотров: 831

Скопировать и вставить следующий текст:

If Predpr.DataMain.ReportCurrID > 1 Then
Exit Sub
End If
Dim Row As Predpr.SubRow, Trans As Predpr.TransRow, TrNum As Integer
If Predpr.DataMain.UseBuhAcc = False Then
TrNum = 2
Else
TrNum = 4
End If
Trans = Op.DocTransCalc(TrNum)
For Each Row In Trans.SubRows.Values
If Row.CurrID > 1 Then
GoTo Start
End If
Next
Exit Sub
Start: Dim TrNew As New Predpr.TransRow(Op, Trans.TransOfficeID, Trans.TransPersonID)
Dim TrTempl As Predpr.TemplRow = Op.Templ.TemplRowsCalc(TrNum)
Dim RowNew As Predpr.SubRow
With TrNew
.Flag = True
.FlagDb = True
.AccDbID = TrTempl.TransRow.AccDbID
For Each Row In Trans.SubRows.Values
RowNew = New Predpr.SubRow(TrNew, Row.ArticleID, Row.Qnt)
RowNew.CurrID = Row.CurrID
RowNew.Price = Row.Price
Row.AccDbID = 0
Next
End With
Trans.AccDbID = 0
Op.DocTransCalc.Add(TrNew.TransNum, TrNew)


Это будет действовать так:
Если среди товаров не было закупки в валюте, при продаже останутся обычные настройки:

3.png
3.png (14.02 КБ) Просмотров: 831

Если были валютные, то при проведении документа они изменятся:

4.png
4.png (15.2 КБ) Просмотров: 831
dmitry
Разработчик
 
Сообщения: 2752
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Персональная программа в шаблоне операции

Сообщение makc » Пн апр 11, 2016 7:19 am

Приветствую! Такой вопрос, что-бы действовало нововведение нужно каждый раз для каждой отдельно взятой расходной копировать и вставлять текст "программы" или это достаточно сделать один раз и оно будет дальше действовать для всех расходных?
makc
 
Сообщения: 29
Зарегистрирован: Ср мар 13, 2013 9:08 am

Re: Персональная программа в шаблоне операции

Сообщение dmitry » Пн апр 11, 2016 8:31 am

Один раз.
dmitry
Разработчик
 
Сообщения: 2752
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Персональная программа в шаблоне операции

Сообщение Volodymyr » Пн апр 11, 2016 4:28 pm

ИзображениеИзображение
У нас при нажатии сохранить выдает какую то ошибку?
Volodymyr
 
Сообщения: 2
Зарегистрирован: Пн апр 11, 2016 4:16 pm

Re: Персональная программа в шаблоне операции

Сообщение dmitry » Пн апр 11, 2016 7:06 pm

Немного изменил текст, чтобы его правильно воспринимал SQL Server (это было из-за незаметной одинарной кавычки).
Скопируйте и сохраните его заново.
dmitry
Разработчик
 
Сообщения: 2752
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Персональная программа в шаблоне операции

Сообщение Volodymyr » Вт апр 12, 2016 9:49 am

Ок!Спасибо!Получилось!
Volodymyr
 
Сообщения: 2
Зарегистрирован: Пн апр 11, 2016 4:16 pm

Еще одно решение

Сообщение dmitry » Вт апр 12, 2016 10:59 am

Решение ситуации, когда товар имел цены в $, оплатили его в $, но за прошедшее время курс изменился, и в грн долг не закрывается (viewtopic.php?f=1&t=2028).

Сначала создадим отдельную операцию, чтобы применять ее выборочно - только когда известно, что покупатель с нами или мы с поставщиком полностью рассчитались, а если долг не закрывается на какую-то сумму, то это из-за курсовой разницы.
Для расчетов с покупателями: открыть Документы/Касса/Приход, нажать вверху "Выбор операции", нажать "По образцу".

1.png
1.png (15.01 КБ) Просмотров: 760

Задать название "Расплатился полностью" или "Полный расчет" и нажать "Программа".

2.png
2.png (18.24 КБ) Просмотров: 760


Скопировать и вставить следующий текст:

Dim Pokup As Predpr.Person = Op.DocPerson
If Pokup Is Nothing Then Exit Sub
Dim Sum As Decimal, CaseInt As Integer, Trans As Predpr.TransRow, R As Predpr.TableSQL, Str As String
Str = "SELECT Sum(PriceReport*Quantity*[Sign]) AS [Sum] FROM Data_Persons "
Str = Str & "WHERE PersonID=" & Pokup.ID & " AND DocDate<=" & Predpr.GlobalFunction.SQLdate(Op.DocDate) & " AND DocID<>" & Op.ID
R = Predpr.DataMain.DBmain.OpenRecordset(Str)
Sum = R("Sum") - Op.DocSum
Select Case Sum
Case Is > 0.01
CaseInt = 1
Case Is < -0.01
CaseInt = 2
Case Else
Exit Sub
End Select
Dim TempID As Integer = Predpr.DataMain.Tmpl_RateMinus
Dim TemplKurs As Predpr.Templ = Predpr.DataMain.AppData.TemplsCollection.Item(TempID)
Dim TrTempl As Predpr.TemplRow = TemplKurs.TemplRowsCalc(1)
Dim AccKursID As Integer = TrTempl.TransRow.AccDbID
If Op.DocTransCalc.Count > 1 Then
Op.DocTransCalc.Remove(2)
End If
Trans = Op.DocTransCalc(1)
Dim TrNew As New Predpr.TransRow(Op, Op.DocOffice.ID, Op.DocPerson.ID)
Dim RowNew As Predpr.SubRow
With TrNew
.Flag = True
.FlagDb = True
.FlagCr = True
Select Case CaseInt
Case 1
.AccDbID = AccKursID
.AccCrID = Trans.AccCrID
Microsoft.VisualBasic.MsgBox(System.Math.Abs(Sum).ToString("0.00") & " долга списано на убытки", , "Курсовая разница")
Case 2
.AccCrID = AccKursID
.AccDbID = Trans.AccCrID
Microsoft.VisualBasic.MsgBox(System.Math.Abs(Sum).ToString("0.00") & " долга зачислено в доход", , "Курсовая разница")
End Select
.BuhSum = System.Math.Abs(Sum)
End With
Op.DocTransCalc.Add(2, TrNew)



Для расчетов с поставщиками, аналогично - Документы/Касса/Расход, создать операцию "Расплатились полностью", ввести следующий текст:

Dim Pokup As Predpr.Person = Op.DocPerson
If Pokup Is Nothing Then Exit Sub
Dim Sum As Decimal, CaseInt As Integer, Trans As Predpr.TransRow, R As Predpr.TableSQL, Str As String
Str = "SELECT Sum(PriceReport*Quantity*[Sign]) AS [Sum] FROM Data_Persons "
Str = Str & "WHERE PersonID=" & Pokup.ID & " AND DocDate<=" & Predpr.GlobalFunction.SQLdate(Op.DocDate) & " AND DocID<>" & Op.ID
R = Predpr.DataMain.DBmain.OpenRecordset(Str)
Sum = R("Sum") + Op.DocSum
Select Case Sum
Case Is > 0.01
CaseInt = 1
Case Is < -0.01
CaseInt = 2
Case Else
Exit Sub
End Select
Dim TempID As Integer = Predpr.DataMain.Tmpl_RateMinus
Dim TemplKurs As Predpr.Templ = Predpr.DataMain.AppData.TemplsCollection.Item(TempID)
Dim TrTempl As Predpr.TemplRow = TemplKurs.TemplRowsCalc(1)
Dim AccKursID As Integer = TrTempl.TransRow.AccDbID
If Op.DocTransCalc.Count > 1 Then
Op.DocTransCalc.Remove(2)
End If
Trans = Op.DocTransCalc(1)
Dim TrNew As New Predpr.TransRow(Op, Op.DocOffice.ID, Op.DocPerson.ID)
Dim RowNew As Predpr.SubRow
With TrNew
.Flag = True
.FlagDb = True
.FlagCr = True
Select Case CaseInt
Case 1
.AccDbID = AccKursID
.AccCrID = Trans.AccDbID
Microsoft.VisualBasic.MsgBox(System.Math.Abs(Sum).ToString("0.00") & " долга списано на убытки", , "Курсовая разница")
Case 2
.AccCrID = AccKursID
.AccDbID = Trans.AccDbID
Microsoft.VisualBasic.MsgBox(System.Math.Abs(Sum).ToString("0.00") & " долга зачислено в доход", , "Курсовая разница")
End Select
.BuhSum = Sum
End With
Op.DocTransCalc.Add(2, TrNew)


Как это будет действовать.
Если с учетом этой оплаты долг закрывается, проводки останутся без изменений:

4.png
4.png (8.55 КБ) Просмотров: 760

Если образуется разница, она будет добавлена:

5.png
5.png (10.42 КБ) Просмотров: 760

Кроме того появится сообщение об этих действиях:

6.png
6.png (3.56 КБ) Просмотров: 760

или:

7.png
7.png (3.46 КБ) Просмотров: 760
dmitry
Разработчик
 
Сообщения: 2752
Зарегистрирован: Чт янв 27, 2011 3:43 pm

Re: Персональная программа в шаблоне операции

Сообщение ruslabigboy » Ср окт 25, 2017 8:43 am

Вроде все понятно и логика абсолютно верная. Не очень понятна реализация. По идее, при уплате долга после смены курса должно происходить обнуление долга с убытком или прибылью в зависимости от текущего курса. В программе происходит это как-то не так. Поясню.
1. Имеется такой курс
курс.png
курс.png (7.15 КБ) Просмотров: 195

2. Имеются продажа и покупка:
оказан.png
оказан.png (7.64 КБ) Просмотров: 195

получен.png
получен.png (6.66 КБ) Просмотров: 195

3. Сделаны операции "Полная оплата" в соответствии с приведенной выше инструкцией.
Дальше в следующем сообщении, ибо больше 3 скринов не дает в одно сообщение вставить
ruslabigboy
 
Сообщения: 25
Зарегистрирован: Чт май 12, 2011 9:03 pm

Re: Персональная программа в шаблоне операции

Сообщение ruslabigboy » Ср окт 25, 2017 8:46 am

Продолжаем.
4. Проводим оплату по оказанной услуге:
оказан оплата.png
оказан оплата.png (23.98 КБ) Просмотров: 195

оказан полня.png
оказан полня.png (23.25 КБ) Просмотров: 195

5. Получаем такое сообщение:
оказан разница.png
оказан разница.png (3.24 КБ) Просмотров: 195
ruslabigboy
 
Сообщения: 25
Зарегистрирован: Чт май 12, 2011 9:03 pm

Re: Персональная программа в шаблоне операции

Сообщение ruslabigboy » Ср окт 25, 2017 8:48 am

6. Проводим оплату и получаем разницу по полученной услуге:
получен оплата.png
получен оплата.png (21.96 КБ) Просмотров: 195

получен полная.png
получен полная.png (20.22 КБ) Просмотров: 195

получен разница.png
получен разница.png (3.31 КБ) Просмотров: 195
ruslabigboy
 
Сообщения: 25
Зарегистрирован: Чт май 12, 2011 9:03 pm

Re: Персональная программа в шаблоне операции

Сообщение ruslabigboy » Ср окт 25, 2017 8:50 am

А теперь имеем такую картину по долгам:
долги.png
долги.png (17.54 КБ) Просмотров: 195

Почему? Объясните, может не так что-то делаю...
По идее, я должен был по оказанной услуге получить прибыль в размере 10 уе, и обнуление долга; а по полученной услуге - соответственно наоборот, но тоже с нулевым долгом.

ПС. Да, забыл добавить.
Если проводить оплату обычным способом - то есть касса (оплата поставщику), то, естественно, при оплате полной суммы в грн - имеем долг в 10 уе (в зависимости от того кто кому платит)
ruslabigboy
 
Сообщения: 25
Зарегистрирован: Чт май 12, 2011 9:03 pm

Re: Персональная программа в шаблоне операции

Сообщение vik » Ср окт 25, 2017 12:05 pm

Ключевое в данной ситуации " когда товар имел цены в $, оплатили его в $, но за прошедшее время курс изменился, и в грн долг не закрывается . Долги реальный учет в гривнах тогда все закрывается. У Вас наоборот и поэтому работает некорректно.
vik
 
Сообщения: 544
Зарегистрирован: Пт мар 25, 2011 9:38 am

Re: Персональная программа в шаблоне операции

Сообщение ruslabigboy » Ср окт 25, 2017 12:38 pm

Может быть... Но, как мне кажется, гораздо больше народа ведет учет в долларе? А нацвалюта - гривна...
И гораздо чаще возникает ситуация, когда приходящий товар приходуется в гривне, за него платят гривну (поставщику), при этом программа учитывает (фиксирует) себестоимость в долларе... А потом, при расчете с покупателем возникает непонятка с курсом. Или я не так понимаю?
Разъясните...
И опять-таки, как мне кажется, товар под реализацию или с отсрочкой - чаще всего тоже фиксируется в долларе, особенно при работе с импортным товаром, то есть почти любым...
Как быть тут?
Уточню. Мой случай.
Когда клиент рассчитывается день в день - все понятно и решаемо - есть стоимость в уе, есть текущий курс - получается цена. Все ок.
Когда клиент рассчитывается с отсрочкой, но за долларовый товар (либо цена привязана к доллару сразу) - тоже все ясно.
А если вот такой случай, как я описал? Есть гривневая услуга, есть отсроченный платеж, есть смена курса. Как правильно провести, чтоб и долг закрыть, и новых не создать, и понять - на какую сумму попал или не попал?... Или если заключен договор с оплатой постфактум? Приход, поставка - учет все равно в уе... Потом б/н оплата - и долг...
ruslabigboy
 
Сообщения: 25
Зарегистрирован: Чт май 12, 2011 9:03 pm

Re: Персональная программа в шаблоне операции

Сообщение vik » Ср окт 25, 2017 12:45 pm

ruslabigboy писал(а):Может быть... Но, как мне кажется, гораздо больше народа ведет учет в долларе? А нацвалюта - гривна...
И гораздо чаще возникает ситуация, когда приходящий товар приходуется в гривне, за него платят гривну (поставщику), при этом программа учитывает (фиксирует) себестоимость в долларе... А потом, при расчете с покупателем возникает непонятка с курсом. Или я не так понимаю?
Разъясните...
И опять-таки, как мне кажется, товар под реализацию или с отсрочкой - чаще всего тоже фиксируется в долларе, особенно при работе с импортным товаром, то есть почти любым...
Как быть тут?
Уточню. Мой случай.
Когда клиент рассчитывается день в день - все понятно и решаемо - есть стоимость в уе, есть текущий курс - получается цена. Все ок.
Когда клиент рассчитывается с отсрочкой, но за долларовый товар (либо цена привязана к доллару сразу) - тоже все ясно.
А если вот такой случай, как я описал? Есть гривневая услуга, есть отсроченный платеж, есть смена курса. Как правильно провести, чтоб и долг закрыть, и новых не создать, и понять - на какую сумму попал или не попал?... Или если заключен договор с оплатой постфактум? Приход, поставка - учет все равно в уе... Потом б/н оплата - и долг...


В данном случае проблема именно в этом как я и описал выше. Для вашего случая нужен другой вариант кода.
vik
 
Сообщения: 544
Зарегистрирован: Пт мар 25, 2011 9:38 am

Re: Персональная программа в шаблоне операции

Сообщение ruslabigboy » Ср окт 25, 2017 12:48 pm

Это я понял.
Но вопрос остался...
Может вручную в кассовый документ можно добавить некую проводку, которая - не меняя цену товара, не меняя полученной (оплаченной) суммы, урегулирует задолженность при изменении курса?
ruslabigboy
 
Сообщения: 25
Зарегистрирован: Чт май 12, 2011 9:03 pm

След.

Вернуться в Использование программы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6