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

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

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

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


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

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

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

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

ВыбДата
Д

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

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

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


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

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

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

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

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

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

КонецЕсли;


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

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

Для того, чтобы выбрать самую первую дату?
Тогда есть метод ОбратныйПорядок()..
И такой, (возможно, Г)код:

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