Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Добавление цен в справочник Номенклатура
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Isatsana
Добрый день.
Вопрос такой:
В списке Номенклатуры необходимо добавить 2 поля, в которых бы выводились розничная и закупочная цены той номенклатуры, на строке которой стоит курсор.
С темой необходимо зарегистрироваться для просмотра ссылки ознакомилась.
Добавила 2 поля ввода:ЦенаЗ и ЦенаР. В модуле вставила:
Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
    СтрокаТабл = ЭлементыФормы.СправочникСписок.ТекущаяСтрока;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    СебестоимостьНоменклатурыСрезПоследних.Номенклатура,
    |    СебестоимостьНоменклатурыСрезПоследних.Цена КАК ЦенаЗакуп,
    |    ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура КАК Номенклатура1,
    |    ЦеныНоменклатурыМагазиновСрезПоследних.Цена КАК ЦенаРозн
    |ИЗ
    |    РегистрСведений.СебестоимостьНоменклатуры.СрезПоследних КАК СебестоимостьНоменклатурыСрезПоследних
    |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних КАК ЦеныНоменклатурыМагазиновСрезПоследних
    |        ПО СебестоимостьНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура
    |ГДЕ
    |    СебестоимостьНоменклатурыСрезПоследних.Номенклатура = &Номенклатура";
    
    Запрос.УстановитьПараметр("Номенклатура", СтрокаТабл.Наименование);                      
    РезультатЗапроса = Запрос.Выполнить();
    
    ЭлементыФормы.ЦенаЗ.Значение = РезультатЗапроса.Колонки.Получить(1).ТипЗначения;
    ЭлементыФормы.ЦенаР.Значение = РезультатЗапроса.Колонки.Получить(3).ТипЗначения;
КонецПроцедуры


Помогите, пожалуйста, правильно это написать...
Vofka
Цитата
    ЭлементыФормы.ЦенаЗ.Значение = РезультатЗапроса.Колонки.Получить(1).ТипЗначения;
    ЭлементыФормы.ЦенаР.Значение = РезультатЗапроса.Колонки.Получить(3).ТипЗначения;

Это вообще фигня какая-то. Сейчас точно не скажу, но пробуйте как-то так:

// Запрос
// ...
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();

ЭлементыФормы.СправочникСписок.ТекущаяСтрока.ЦенаР.Значение = Выборка.ЦенаРозн;
Isatsana
Нет, как раз первая часть ЭлементыФормы.ЦенаЗ.Значение правильно. Просто так значение я туда вписать могу. А вот то ли РезультатЗапроса.Колонки.Получить(1).ТипЗначения не правильно, то ли сам запрос неверно составлен... Я не могу разобраться.
logist
А так шо не?
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ЦенаЗ.Значение = РезультатЗапроса.ЦенаЗакуп;
ЭлементыФормы.ЦенаР.Значение = РезультатЗапроса.ЦенаРозн;


Хотя подход "ПриАктивизацииСтроки" как то странно, зачем каждый раз дергать базу, добавьте две колонки в список и заполняйте уже сразу все, мне кажется это удобнее...
Vofka
У вас здесь
РезультатЗапроса.Колонки.Получить(1).ТипЗначения

реально находится цена?
Isatsana
НЕт, не находит, но и РезультатЗапроса.ЦенаЗакуп тоже не находит...


и Выборка.ЦенаРозн тоже не находит
Vofka
Цитата
А так шо не?
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ЦенаЗ.Значение = РезультатЗапроса.ЦенаЗакуп;
ЭлементыФормы.ЦенаР.Значение = РезультатЗапроса.ЦенаРозн;

Скорей всего не. Так ещё может быть smile.gif :
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ЦенаЗ.Значение = РезультатЗапроса[0].ЦенаЗакуп;
ЭлементыФормы.ЦенаР.Значение = РезультатЗапроса[0].ЦенаРозн;


Цитата
НЕт, не находит

Ну так а что ж вы тогда хотите показать? Разбиритесь сначала почему в результате запроса ничего нету. А может всётаки есть, вы как-то не так смотрите? А Выборка.Номенклатура - есть что-то?
Ardi
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    Если ДанныеСтроки.Ссылка.ЭтоГруппа Тогда
        Возврат;
    КонецЕсли;
    мПоискОбъектовВСпискахДанных.СписокПриВыводеСтрокиСпискаОтбораДанных(Элемент, ОформлениеСтроки, ДанныеСтроки);
    
    запрос = Новый Запрос;
    если  РольДоступна("ПолныеПрава") Тогда
        запрос.Текст = "ВЫБРАТЬ
                       |    ЦеныНоменклатурыСрезПоследних.Валюта,
                       |    ЦеныНоменклатурыСрезПоследних.Цена,
                       |    ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
                       |    ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование,
                       |    1 КАК Поле1
                       |ИЗ
                       |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                       |            ,
                       |            Номенклатура = &Номенкл
                       |                И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    ЦеныНоменклатурыКонтрагентовСрезПоследних.Валюта,
                       |    ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,
                       |    ЦеныНоменклатурыКонтрагентовСрезПоследних.ЕдиницаИзмерения,
                       |    ЦеныНоменклатурыКонтрагентовСрезПоследних.ТипЦен.Наименование,
                       |    2
                       |ИЗ
                       |    РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Номенклатура = &Номенкл) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    3,
                       |    ТоварыНаСкладахОстатки.КоличествоОстаток,
                       |    3,
                       |    3,
                       |    3
                       |ИЗ
                       |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенкл) КАК ТоварыНаСкладахОстатки
                       |
                       |ОБЪЕДИНИТЬ
                       |
                       |ВЫБРАТЬ
                       |    4,
                       |    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,
                       |    4,
                       |    4,
                       |    4
                       |ИЗ
                       |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура = &Номенкл) КАК ТоварыВРезервеНаСкладахОстатки";
    Иначе
        запрос.Текст = "ВЫБРАТЬ
                       |    3 КАК Поле1,
                       |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК цена,
                       |    3 КАК Поле2,
                       |    3 КАК Поле3,
                       |    3 КАК Поле4
                       |ИЗ
                       |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенкл) КАК ТоварыНаСкладахОстатки";
    КонецЕсли;
    Запрос.УстановитьПараметр("Номенкл",ДанныеСтроки.Ссылка);
    Запрос.УстановитьПараметр("ТипЦен",Константы.ТипыЦенНоменклатурыРозница.Получить());    
    ааа=запрос.Выполнить().Выгрузить();
    ТоварОстаток=0;
    ТоварРезерв=0;
    Если     ааа.Количество()>0 Тогда
        ОформлениеСтроки.Ячейки.ЦенаРозничная.Значение=  "";
        ОформлениеСтроки.Ячейки.ЦенаЗакупочная.Значение=  "";
        ОформлениеСтроки.Ячейки.ОстатокТовара.Значение=  "";        
        
        для каждого ббб из ааа цикл
            если ббб.Поле1=1 Тогда
                если  РольДоступна("ПолныеПрава") Тогда
                    ОформлениеСтроки.Ячейки.ЦенаРозничная.Значение=  ""+ббб.Цена+" " +ббб.Валюта;        
                КонецЕсли;
            ИначеЕсли ббб.Поле1=2 Тогда
                если  РольДоступна("ПолныеПрава") Тогда
                    ОформлениеСтроки.Ячейки.ЦенаЗакупочная.Значение=  ""+ббб.Цена+" " +ббб.Валюта;
                КонецЕсли;
            ИначеЕсли ббб.Поле1=3 Тогда
                ТоварОстаток=?(ббб.Цена=Null,0,ббб.Цена);
            ИначеЕсли ббб.Поле1=4 Тогда
                ТоварРезерв=?(ббб.Цена=Null,0,ббб.Цена);
            КонецЕсли;
        КонецЦикла;
    Иначе
        ОформлениеСтроки.Ячейки.ЦенаРозничная.Значение=  "";
    КонецЕсли;
    ОстатокСРезевром=ТоварОстаток-ТоварРезерв;
    ОформлениеСтроки.Ячейки.ОстатокТовара.Значение=  ""+?(ОстатокСРезевром=0,"",ОстатокСРезевром);
    ОформлениеСтроки.Ячейки.Резерв.Значение=  ""+?(ТоварРезерв=0,"",ТоварРезерв);        

КонецПроцедуры
Isatsana
Оно даже на запись Выборка.Номенклатура ругается. Может, запрос неверно построен...
Isatsana
)))) Все)
Ошибка у меня была здесь:
Запрос.УстановитьПараметр("Номенклатура", СтрокаТабл);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.