1. Закупка товара у поставщика:
******************************************************************
LOCAL nQuan
DO CASE
CASE cColumnName = "P1.КОЛ" .OR. cColumnName = "P1.ЦЕНА"
Таблица.P1.SetValue("СУММА", Таблица.P1.GetValue("КОЛ") *
Таблица.P1.GetValue("ЦЕНА"))
CASE cColumnName = "P1.СУММА"
nQuan = Таблица.P1.GetValue("КОЛ")
IF nQuan <> 0
Таблица.P1.SetValue("ЦЕНА", Таблица.P1.GetValue("СУММА") / nQuan)
ELSE
Таблица.P1.SetValue("СУММА", 0)
ENDIF
ENDCASE
Документ.Комментарий = Справочники.Организации.Имя
lResult = .T.
******************************************************************
2. Передача товара в продажу:
******************************************************************
LOCAL nQuan1, nPrice1, nPrice2, nTotQuan1, nTotSaldo1, nTotSaldo2
WITH Таблица
nQuan1 = .P1.GetOldValue("КОЛ")
nTotQuan1 = .Кр40.КонКол + nQuan1
nTotSaldo1 = .Кр40.КонСальдо + .P1.GetOldValue("СУММА")
nPrice2 = .Набор1.GetValue("ТОВАР_ЦЕНА")
nPrice2 = IIF(ISNULL(nPrice2), 0, nPrice2)
IF (nQuan1 = .P1.Кол) .OR. nPrice2 = .P2.Цена .OR. .P2.Цена =
0 && Перемещение еще не введено или введено, но цена эта же
nQuan1 = .P1.Кол
nPrice1 = nTotSaldo1 / nTotQuan1
.P1.Цена = nPrice1
.P1.Сумма = nPrice1 * nQuan1
.P2.Кол = nQuan1
.P2.Сумма = nQuan1 * .P2.Цена
IF nQuan1 > nTotQuan1
MESSAGEBOX(" Остаток ОТРИЦАТЕЛЬНЫЙ. ", 48, "Внимание!")
ENDIF
GO (.CurrentRecord) IN (.Alias)
=Zakaz(.Набор1.GetValue("КОД_ТОВАР"), nQuan1)
lResult = .T.
ELSE
MESSAGEBOX("Запрещено изменять строку, т.к. цена товара после
создания этой строки была изменена. Изменение может привести к
неверному вычислению сальдо.", 16, "Ошибка!")
lResult = .F.
ENDIF
ENDWITH
*********************************************************************
3. Реализация за наличный расчет:
*********************************************************************
LOCAL nQuan1, nPrice1, nTotQuan1, nTotSaldo1, nTotSaldo2
lResult = .F.
WITH Таблица
nQuan1 = .P1.GetOldValue("КОЛ")
IF .P1.Кол >= 0 .OR. oApp.IsSA
nTotQuan1 = .Кр411.КонКол + nQuan1
nTotSaldo1 = .Кр411.КонСальдо + .P1.GetOldValue("СУММА")
nTotSaldo2 = -.Дб421.КонСальдо + .P2.GetOldValue("СУММА")
nPrice1 = .Набор1.GetValue("ТОВАР_ЦЕНА")
IF ISNULL(nPrice1) .OR. nPrice1 = 0
MESSAGEBOX("Нельзя продавать товар, т.к. ЦЕНА НЕ ОПРЕДЕЛЕНА .",
48, "Внимание!")
nPrice1 = 0
ENDIF
IF .P1.Кол <> 0 .AND. .Набор1.GetValue("АДРЕС_ИМЯ") = "Брак"
IF MESSAGEBOX("Продать товар из брака?", 256 + 32 + 4, "Внимание!")
= 7
.P1.Кол = 0
ENDIF
ENDIF
IF .P1.Кол <> 0 .AND. .Набор1.GetValue("АДРЕС_ИМЯ") = "0"
IF MESSAGEBOX("Продать товар из нового прихода?", 256 + 32 + 4,
"Внимание!") = 7
.P1.Кол = 0
ENDIF
ENDIF
IF nTotQuan1 <> 0
IF nQuan1 = 0 .OR. nPrice1 = .P1.Цена && Продажа еще не
введена или введена, но цена эта же
nQuan1 = .P1.Кол
.P1.Цена = nPrice1
.P1.Сумма = nPrice1 * nQuan1
.P2.Сумма = nQuan1 * nTotSaldo2 / nTotQuan1
IF nQuan1 > nTotQuan1
MESSAGEBOX(" Остаток ОТРИЦАТЕЛЬНЫЙ. ", 48,
"Внимание!")
ENDIF
.P3.Сумма = Скидки() && Посчитаем скидки
GO (.CurrentRecord) IN (.Alias)
=Zakaz(.Набор1.GetValue("КОД_ТОВАР")) && Включим товар в
заказ
lResult = .T.
ELSE
MESSAGEBOX("Запрещено изменять строку, т.к. цена товара
после создания этой строки была изменена. Изменение может привести к
неверному вычислению сальдо.", 16, "Ошибка!")
ENDIF
ENDIF
ELSE
MESSAGEBOX("ЗАПРЕЩЕНО ВВОДИТЬ ОТРИЦАТЕЛЬНУЮ ПРОДАЖУ!
Необходимо оформить возврат товара от покупателя.", 16, "Ошибка!")
ENDIF
ENDWITH
*********************************************************************
Все эти скрипты срабатывают при изменении содержимого колонок КОЛ,
ЦЕНА, СУММА в любой строке соответствующего документа.
p2.сумма = p1.кол * номенклатура.рознцена - p1.сумма
Это пример скрипта для операции "Поступление товара от
поставщика" (проводки 41.1/60, 41.1/42), в котором вычисляется наценка
при приходовании товара.
по любому, скрипты упираются в объектную модель системы
для счастья нужен доступ к БД, элементам экрана, настройкам из скрипта
http://www.prog.org.ru/topic_18494_0.html
есть там пара ссылок на открытые проекты