Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:03

Реализация и цены в ТиС

Автор hellburund, 05 апр 2012, 09:33

0 Пользователей и 1 гость просматривают эту тему.

hellburund

Платформа 7.70.027
Конфигурация "Торговля + склад" 7.70.935

Стоит задача сформировать отчет, перебирающий все документы "Реализация" за заданный период и сравнивающий цены реализации и закупочные цены соответствующей номенклатуры.

В данный момент это выглядит вот так (пока что без проверки валют):
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб, Стр;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(НайтиДоки)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|НомерДок = Документ.Реализация.НомерДок;
|Реализация = Документ.Реализация.ТекущийДокумент;
|Группировка Реализация;
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Пока Запрос.Группировка("Реализация") = 1 Цикл 
Стр = "";       
ДокР = СоздатьОбъект("Документ.Реализация");
ДокР = Запрос.Реализация;
ДокР.ВыбратьСтроки();
Пока ДокР.ПолучитьСтроку() = 1 Цикл
Стр = Стр + ДокР.Номенклатура.Код + " по цене " + ДокР.Цена + "; ";
спрНом = СоздатьОбъект("Справочник.Номенклатура");
спрНом.НайтиПоКоду(ДокР.Номенклатура.Код);
спрЦены = СоздатьОбъект("Справочник.Цены");
спрЦены.ИспользоватьВладельца(спрНом.ТекущийЭлемент());
Сообщить("Закупочная цена товара " + ДокР.Номенклатура.Код + " равна " + спрЦены.Цена);
КонецЦикла;
Сообщить("По документу №" + ДокР.НомерДок + " проданы товары: " + " " + Стр);
КонецЦикла;
КонецПроцедуры


При работе данного кода в спрЦены.Цена ничего нет (выводится "НеизвестныйОбъект"). Реквизит периодический.
Отладчик показывает, что пустым остается весь объект спрЦены после выполнения "спрЦены.ИспользоватьВладельца(спрНом.ТекущийЭлемент());"

Надеюсь на вашу помощь.

sergejK74

Создавать объект в цикле - плохой тон.
Одному элементу номенклатуры может быть подчинено несколько цен (розничная, закупочная). Надо выбирать нужную
Реквизит цена - периодический. Нужно указывать дату цен.
Вообще лучше пользоваться гоговыми функциями глобального модуля
Процедура Сформировать()
        Перем Запрос, ТекстЗапроса, Таб, Стр;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(НайтиДоки)
|Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |НомерДок = Документ.Реализация.НомерДок;
    |Реализация = Документ.Реализация.ТекущийДокумент;
    |Группировка Реализация;
    |"//}}ЗАПРОС
    ;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
КонецЕсли;

спрЦены = СоздатьОбъект("Справочник.ТипыЦен");
спрЦены.НайтиПоНаименованию("Закупочная");

    Пока Запрос.Группировка("Реализация") = 1 Цикл 
        Стр = "";       
        //ДокР = СоздатьОбъект("Документ.Реализация");
        ДокР = Запрос.Реализация;
        ДокР.ВыбратьСтроки();
        Пока ДокР.ПолучитьСтроку() = 1 Цикл
            Стр = Стр + ДокР.Номенклатура.Код + " по цене " + ДокР.Цена + "; ";
            //спрНом = СоздатьОбъект("Справочник.Номенклатура");
            //спрНом.НайтиПоКоду(ДокР.Номенклатура.Код);
            //спрЦены = СоздатьОбъект("Справочник.Цены");
            //спрЦены.ИспользоватьВладельца(спрНом.ТекущийЭлемент());
            //Сообщить("Закупочная цена товара " + ДокР.Номенклатура.Код + " равна " + спрЦены.Цена);
Сообщить("Закупочная цена товара " + ДокР.Номенклатура.Код + " равна " + глПолучитьЦену(ДокР.Номенклатура, спрЦены.ТекущийЭлемент(),ДокР.ДатаДок));
        КонецЦикла;
        Сообщить("По документу №" + ДокР.НомерДок + " проданы товары: " + " " + Стр);
    КонецЦикла;
КонецПроцедуры 

Кнопочка Спасибо - слева!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск