Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: отчет по залежавшемуся товару

Я
   sanekdark
 
09.06.18 - 07:00
при формирование отчета без склада формирует нормально 
 если формирую со складом выбираю склад. то выдает ошибку 
"Если ВыбДата>Д Тогда "  Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)

вчем проблема может быть
 
 
   sanekdark
 
1 - 09.06.18 - 07:00
сам код вот 

//*******************************************

// Процедура генерации запроса Сформировать.
//

Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
     
    ТекстЗапроса = "";
    //Создание объекта типа Запрос   

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = ТекстЗапроса +
    "//{{ЗАПРОС(Сформировать)

    |Товар = Регистр.ОстаткиТоваров.Товар;
    |Склад = Регистр.ОстаткиТоваров.Склад;
    |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара;
    |Розн_Цена = Регистр.ОстаткиТоваров.Товар.Розн_Цена;
    |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
    |Группировка Товар;
    |Условие(Товар в ВыбТовар);
    |Условие(Склад в ВыбСклад);
    |"//}}ЗАПРОС

    ;
    // Если ошибка в запросе, то выход из процедуры

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    СуммаИтог=0;
    // Подготовка к заполнению выходных форм данными запроса

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"

    Таб.ВывестиСекцию("Заголовок");
    СпрТов=СоздатьОбъект("Справочник.Товары");
    Пер=СоздатьОбъект("Периодический");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Товар

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


    Если (НазваниеНабораПрав()="Администратор") Тогда
        Таб.ВывестиСекцию("Итого");
    Иначе
        
    КонецЕсли;


    // Вывод заполненной формы

    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры    

//

ДатаОтчета = РабочаяДата();
Если ДатаОтчета >= ПолучитьДатуТА() Тогда
    ДатаОтчета = ПолучитьДатуТА(); 
КонецЕсли;
ДатаОтч=ДатаОтчета;
   aka AMIGO
 
2 - 09.06.18 - 07:54
Зайди в отладчик, поставь точку останова на строку
Если ВыбДата>Д Тогда
запусти свой отчет
потом открой табло, введи пару строк
ВыбДата
Д

И посмотри, чему они равны
   Сияющий в темноте
 
3 - 09.06.18 - 07:55
Проверь Д через значение заполнено
   sanekdark
 
4 - 09.06.18 - 08:47
Если ВыбДата>Д Тогда = Ошибка в выражении!

вот в табле что показывает
   aka AMIGO
 
5 - 09.06.18 - 08:49
(4) Ну, тогда еще раз:
введи пару строк

ВыбДата
Д

ЗЫ. отладчик в табло показывает значения только одиночных переменных
   sanekdark
 
6 - 09.06.18 - 08:57
ВыбДата  = '01.04.18'
Д = 

вот Д не выводит нечегоа выболр дату дата попала равно дате выбора
   aka AMIGO
 
7 - 09.06.18 - 08:59
(6) Д у тебя вычисляется из шагов по периодике.
стало быть - есть ошибка.
   sanekdark
 
8 - 09.06.18 - 09:00
а если делаю без скалада не выбираю склад то формируеться но тогда вот эти даные в отладчики равны

ВыбДата  = '31.03.18'  
Д = '10.05.18'
   sanekdark
 
9 - 09.06.18 - 09:00
как понять в каком месте ошибка у меня не подскажешь? может совет дашь какойнить
   НЕА123
 
10 - 09.06.18 - 09:06
Пер.ВыбратьЗначения();


Д=ПустаяДата;// вставить перед циклом сие


            Пока Пер.ПолучитьЗначение()=1 Цикл
                 Д=Пер.ДатаЗнач;
            КонецЦикла;
 
  Рекламное место пустует
   aka AMIGO
 
11 - 09.06.18 - 09:07
(9) тимвьювер у тебя есть? ИД и пароль можешь послать мне на почту?
(10) это 7-ка.
   НЕА123
 
12 - 09.06.18 - 09:09
да. (10) сторно.
   sanekdark
 
13 - 09.06.18 - 09:51
aka AMIGO  да есть щас пришлю кинь почту
   sanekdark
 
14 - 09.06.18 - 09:51
щас кину увидел почту
   sanekdark
 
15 - 09.06.18 - 10:04
ребят спасибо разобрался понял вчем проблема была))) 
   НЕА123 спасибо тебе с твоей подсказкой разобрался))) 
вообщем дело вчем базу резал я и товар  просто переносил остаток без приходников даты прихода товара нету поэтому некторых товаров.

добавил в код
ПустаяДата=ПолучитьПустоеЗначение("Дата");
            Д=ПустаяДата;// 

 это все заработало

в итоге получилось так

//*******************************************

// Процедура генерации запроса Сформировать.
//

Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
     
    ТекстЗапроса = "";
    //Создание объекта типа Запрос   

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = ТекстЗапроса +
    "//{{ЗАПРОС(Сформировать)

    |Товар = Регистр.ОстаткиТоваров.Товар;
    |Склад = Регистр.ОстаткиТоваров.Склад;
    |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара;
    |Розн_Цена = Регистр.ОстаткиТоваров.Товар.Розн_Цена;
    |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
    |Группировка Товар;
    |Условие(Товар в ВыбТовар);
    |Условие(Склад в ВыбСклад);
    |"//}}ЗАПРОС

    ;
    // Если ошибка в запросе, то выход из процедуры

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    СуммаИтог=0;
    // Подготовка к заполнению выходных форм данными запроса

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"

    Таб.ВывестиСекцию("Заголовок");
    СпрТов=СоздатьОбъект("Справочник.Товары");
    Пер=СоздатьОбъект("Периодический");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Товар

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

            Пока Пер.ПолучитьЗначение()=1 Цикл
                 Д=Пер.ДатаЗнач;
    КонецЦикла;
    ДатаОтчета= РабочаяДата();
    КоличествоДней = (ДатаОтчета -Д ) ;
    Если ВыбДата>Д Тогда
                 Таб.ВывестиСекцию("Товар") ;
                 СуммаИтог=СуммаИтог+Сумма;
    КонецЕсли;    
    
КонецЕсли;    
КонецЦикла;
// Заполнение полей "Итого"


Если (НазваниеНабораПрав()="Администратор") Тогда
Таб.ВывестиСекцию("Итого");
Иначе

КонецЕсли;


// Вывод заполненной формы

Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры    

//

ДатаОтчета = РабочаяДата();
Если ДатаОтчета >= ПолучитьДатуТА() Тогда
    ДатаОтчета = ПолучитьДатуТА(); 
КонецЕсли;
ДатаОтч=ДатаОтчета;
   aka AMIGO
 
16 - 09.06.18 - 10:19
Поздравляю :)
Ну, и для ясности, скажи, пожалуйста, зачем этот цикл?
          Пока Пер.ПолучитьЗначение()=1 Цикл
                 Д=Пер.ДатаЗнач;
          КонецЦикла;

Для того, чтобы выбрать самую первую дату?
Тогда есть метод ОбратныйПорядок()..
И такой, (возможно, Г)код:
Пер.ПолучитьЗначение();
Д=Пер.ДатаЗнач;
   aka AMIGO
 
17 - 09.06.18 - 10:20
+16 возможно, я чего не понял, отвлекался..
   Волшебник
 
18 - 09.06.18 - 10:22
(15) пишется "В общем"
   aka AMIGO
 
19 - 09.06.18 - 10:27
+16 И, если нужна последняя дата, тогда "ОбратныйПорядок" не применять.
ЗЫ. всё - ИМХО :)
   sanekdark
 
20 - 09.06.18 - 10:28
ок понял по пробую по другому еще этот код писал до этого программист я ток изучаю вникаю стараюсь разобраться) спасибо за помощь
   aka AMIGO
 
21 - 09.06.18 - 10:28
Наврал, кажется, я в своём ИХО.. да ладно, кому надо - разберётся :)
   aka AMIGO
 
22 - 09.06.18 - 10:29
(20) Не за что.. сам ведь решил проблему
   sanekdark
 
23 - 09.06.18 - 10:30
щас для себя попробую с обратным порядком сделать думаю до думкаю)) как)))
   aka AMIGO
 
24 - 09.06.18 - 10:31
(23) Обязательно смотри по отладчику, что получишь :)
   sanekdark
 
25 - 09.06.18 - 10:31
ок спасибо
   Эльниньо
 
26 - 09.06.18 - 10:46
(18) А говорится "вопчем"
   Злопчинский
 
Ведущий
27 - 09.06.18 - 11:22
(26) правильно говорится =- "ваще"
   Эльниньо
 
28 - 09.06.18 - 12:51
(27) Неа. "ващще"



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует