Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Як отримати значення реквізиту номенклатури?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Oligarch
Доброго дня. Допоможіть, будь-ласка, вирішити питання. В табличній частині документа відображається крім кількості, кількість зі знижкою. Потрібно для деяких товарів відключити знижку по кількості. Для цього в модулі номенклатури додав галочку, але не знаю, як отримати значення реквізиту при додаванні номенклатури в табличну частину.



необходимо зарегистрироваться для просмотра ссылки
Процедура глПересчетТаблЧасти(Конт,ИмяРеквизита, ПараметрыРозничнойЦены = 0) Экспорт  
    
    Перем ВремКоэфф, ВремЦена, НоваяНоменклатура;
    Перем ЕстьСкидка;    // 1 - в документе есть скидка, 0 - скидки нет
    Перем ПроцентСкидки;
    Перем ЕстьНДС, ЕстьНП, УчитыватьНДС, УчитыватьНП;
    Перем ЦенаЦены, ЕдЦены, ВалютаЦены;
                                                  
    ДатаДок    = Конт.ДатаДок;
    
    
Если ИмяРеквизита = "КоличествоБезСкидки" Тогда
        Конт.Количество = Конт.КоличествоБезСкидки - Конт.КоличествоБезСкидки * Конт.Договор.ПроцЗнижПоКсті / 100;
        Если глЕстьРеквизитМнЧ("БезСкидки",  Конт.Вид()) = 1 Тогда
            Конт.БезСкидки = Конт.Цена*Конт.Количество;
            Конт.Сумма = Конт.Цена*Конт.Количество-ПроцентСкидки/100*Конт.Цена*Конт.Количество;
            Конт.СуммаСкидки = Конт.БезСкидки - Конт.Сумма;
        Иначе
            Конт.Сумма = Конт.Цена*Конт.Количество-ПроцентСкидки/100*Конт.Цена*Конт.Количество;
        КонецЕсли;
        Если ЕстьНП = 1 Тогда
            глРасчетНалога(Конт,"НП");
        КонецЕсли;
        Если ЕстьНДС = 1 Тогда
            глРасчетНалога(Конт,"НДС");
        КонецЕсли;
            
КонецПроцедуры // глПересчетТаблЧасти()


необходимо зарегистрироваться для просмотра ссылки
Процедура глПересчетТаблЧасти(Конт,ИмяРеквизита, ПараметрыРозничнойЦены = 0) Экспорт  
    
    Перем ВремКоэфф, ВремЦена, НоваяНоменклатура;
    Перем ЕстьСкидка;    // 1 - в документе есть скидка, 0 - скидки нет
    Перем ПроцентСкидки;
    Перем ЕстьНДС, ЕстьНП, УчитыватьНДС, УчитыватьНП;
    Перем ЦенаЦены, ЕдЦены, ВалютаЦены;
                                                  
    ДатаДок    = Конт.ДатаДок;
    
    
Если ИмяРеквизита = "КоличествоБезСкидки" Тогда
        Если ЗнижкаПоКількості = 1 Тогда
            КоефіцієнтЗнижкиПоКількості = 0;
        Иначе
            КоефіцієнтЗнижкиПоКількості = 1;
    КонецЕсли;
        Конт.Количество = Конт.КоличествоБезСкидки - Конт.КоличествоБезСкидки * Конт.Договор.ПроцЗнижПоКсті / 100*  КоефіцієнтЗнижкиПоКількості;
        Если глЕстьРеквизитМнЧ("БезСкидки",  Конт.Вид()) = 1 Тогда
            Конт.БезСкидки = Конт.Цена*Конт.Количество;
            Конт.Сумма = Конт.Цена*Конт.Количество-ПроцентСкидки/100*Конт.Цена*Конт.Количество;
            Конт.СуммаСкидки = Конт.БезСкидки - Конт.Сумма;
        Иначе
            Конт.Сумма = Конт.Цена*Конт.Количество-ПроцентСкидки/100*Конт.Цена*Конт.Количество;
        КонецЕсли;
        Если ЕстьНП = 1 Тогда
            глРасчетНалога(Конт,"НП");
        КонецЕсли;
        Если ЕстьНДС = 1 Тогда
            глРасчетНалога(Конт,"НДС");
        КонецЕсли;
            
КонецПроцедуры // глПересчетТаблЧасти()


Не знаю як правильно отримати значення реквізиту "ЗнижкаПоКількості"...
Abyss
Oligarch @ Сегодня, 12:36 необходимо зарегистрироваться для просмотра ссылки ,
Если Конт.Количество это количество из строки ТЧ, то по аналогии Конт.ТМЦ - это товар из строки. Соответственно, ЗнижкаПоКількості будет Конт.ТМЦ.ЗнижкаПоКількості, при условии что ЗнижкаПоКількості является реквизитом справочника ТМЦ
Oligarch
Abyss @ Сегодня, 13:58 необходимо зарегистрироваться для просмотра ссылки ,
{Глобальный модуль(3325)}: Поле агрегатного объекта не обнаружено (ТМЦ)


Прив'язка до одиниці виміру тоже не дала результату:

Если ИмяРеквизита = "КоличествоБезСкидки" Тогда
        Если Конт.Единица = "шт" Тогда
            КоефіцієнтЗнижкиПоКількості = 0;
        Иначе
            КоефіцієнтЗнижкиПоКількості = 1;
        КонецЕсли;

Сообщить (Конт.Единица)
виводить пусту строку...



Abyss
Oligarch @ Сегодня, 15:18 необходимо зарегистрироваться для просмотра ссылки ,
Вместо ТМЦ напишите Номенклатура. Но там еще периодический реквизит. Я уже не помню как получать у них значения
Oligarch
Вдалось вирішити шляхом додавання нового реквізиту в табличну частину "ФільтрЗнижкиПоКількості" (тип: строка)
В процедурі перерахунку табличної частини прописав:
Конт.ФільтрЗнижкиПоКількості = Конт.Номенклатура.ЗнижкаПоКількості;
    Если Конт.ФільтрЗнижкиПоКількості = "1" Тогда
        КоефіцієнтЗнижкиПоКількості = 0;
    Иначе
        КоефіцієнтЗнижкиПоКількості = 1;
    КонецЕсли;

Всім дякую за допомогу!
mister-x
Цитата(Oligarch @ 10.06.17, 11:36) необходимо зарегистрироваться для просмотра ссылки
Не знаю як правильно отримати значення реквізиту "ЗнижкаПоКількості"...

якщо код писати у глобальному модулі у процедурі глПересчетТаблЧасти, то для доступу до значення періодичного реквізиту пишемо
Конт.Номенклатура.ЗнижкаПоКількості.Получить(Конт.ДатаДок)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.