Автор: Oligarch 10.06.17, 11:36
Доброго дня. Допоможіть, будь-ласка, вирішити питання. В табличній частині документа відображається крім кількості, кількість зі знижкою. Потрібно для деяких товарів відключити знижку по кількості. Для цього в модулі номенклатури додав галочку, але не знаю, як отримати значення реквізиту при додаванні номенклатури в табличну частину.
Частина процедури оригіналуПроцедура глПересчетТаблЧасти(Конт,ИмяРеквизита, ПараметрыРозничнойЦены = 0) Экспорт
Перем ВремКоэфф, ВремЦена, НоваяНоменклатура;
Перем ЕстьСкидка; // 1 - в документе есть скидка, 0 - скидки нет
Перем ПроцентСкидки;
Перем ЕстьНДС, ЕстьНП, УчитыватьНДС, УчитыватьНП;
Перем ЦенаЦены, ЕдЦены, ВалютаЦены;
ДатаДок = Конт.ДатаДок;
Если ИмяРеквизита = "КоличествоБезСкидки" Тогда
Конт.Количество = Конт.КоличествоБезСкидки - Конт.КоличествоБезСкидки * Конт.Договор.ПроцЗнижПоКсті / 100;
Если глЕстьРеквизитМнЧ("БезСкидки", Конт.Вид()) = 1 Тогда
Конт.БезСкидки = Конт.Цена*Конт.Количество;
Конт.Сумма = Конт.Цена*Конт.Количество-ПроцентСкидки/100*Конт.Цена*Конт.Количество;
Конт.СуммаСкидки = Конт.БезСкидки - Конт.Сумма;
Иначе
Конт.Сумма = Конт.Цена*Конт.Количество-ПроцентСкидки/100*Конт.Цена*Конт.Количество;
КонецЕсли;
Если ЕстьНП = 1 Тогда
глРасчетНалога(Конт,"НП");
КонецЕсли;
Если ЕстьНДС = 1 Тогда
глРасчетНалога(Конт,"НДС");
КонецЕсли;
КонецПроцедуры // глПересчетТаблЧасти()
Пробував такПроцедура глПересчетТаблЧасти(Конт,ИмяРеквизита, ПараметрыРозничнойЦены = 0) Экспорт
Перем ВремКоэфф, ВремЦена, НоваяНоменклатура;
Перем ЕстьСкидка; // 1 - в документе есть скидка, 0 - скидки нет
Перем ПроцентСкидки;
Перем ЕстьНДС, ЕстьНП, УчитыватьНДС, УчитыватьНП;
Перем ЦенаЦены, ЕдЦены, ВалютаЦены;
ДатаДок = Конт.ДатаДок;
Если ИмяРеквизита = "КоличествоБезСкидки" Тогда
Если ЗнижкаПоКількості = 1 Тогда
КоефіцієнтЗнижкиПоКількості = 0;
Иначе
КоефіцієнтЗнижкиПоКількості = 1;
КонецЕсли;
Конт.Количество = Конт.КоличествоБезСкидки - Конт.КоличествоБезСкидки * Конт.Договор.ПроцЗнижПоКсті / 100* КоефіцієнтЗнижкиПоКількості;
Если глЕстьРеквизитМнЧ("БезСкидки", Конт.Вид()) = 1 Тогда
Конт.БезСкидки = Конт.Цена*Конт.Количество;
Конт.Сумма = Конт.Цена*Конт.Количество-ПроцентСкидки/100*Конт.Цена*Конт.Количество;
Конт.СуммаСкидки = Конт.БезСкидки - Конт.Сумма;
Иначе
Конт.Сумма = Конт.Цена*Конт.Количество-ПроцентСкидки/100*Конт.Цена*Конт.Количество;
КонецЕсли;
Если ЕстьНП = 1 Тогда
глРасчетНалога(Конт,"НП");
КонецЕсли;
Если ЕстьНДС = 1 Тогда
глРасчетНалога(Конт,"НДС");
КонецЕсли;
КонецПроцедуры // глПересчетТаблЧасти()
Не знаю як правильно отримати значення реквізиту "ЗнижкаПоКількості"...
Автор: Abyss 10.06.17, 12:58
Oligarch @ Сегодня, 12:36
,
Если Конт.Количество это количество из строки ТЧ, то по аналогии Конт.ТМЦ - это товар из строки. Соответственно, ЗнижкаПоКількості будет Конт.ТМЦ.ЗнижкаПоКількості, при условии что ЗнижкаПоКількості является реквизитом справочника ТМЦ
Автор: Abyss 10.06.17, 17:50
Oligarch @ Сегодня, 15:18
,
Вместо ТМЦ напишите Номенклатура. Но там еще периодический реквизит. Я уже не помню как получать у них значения
Автор: Oligarch 11.06.17, 1:01
Вдалось вирішити шляхом додавання нового реквізиту в табличну частину "ФільтрЗнижкиПоКількості" (тип: строка)
В процедурі перерахунку табличної частини прописав:
Конт.ФільтрЗнижкиПоКількості = Конт.Номенклатура.ЗнижкаПоКількості;
Если Конт.ФільтрЗнижкиПоКількості = "1" Тогда
КоефіцієнтЗнижкиПоКількості = 0;
Иначе
КоефіцієнтЗнижкиПоКількості = 1;
КонецЕсли;
Всім дякую за допомогу!
Автор: mister-x 12.06.17, 21:46
Цитата(Oligarch @ 10.06.17, 11:36)
Не знаю як правильно отримати значення реквізиту "ЗнижкаПоКількості"...
якщо код писати у глобальному модулі у процедурі
глПересчетТаблЧасти, то для доступу до значення періодичного реквізиту пишемо
Конт.Номенклатура.ЗнижкаПоКількості.Получить(Конт.ДатаДок)