Имя: Пароль:
1C
1С v8
Значение не является значением объектного типа
0 Александр056
 
14.05.14
09:52
Доброго времени суток! Столкнулся с ситуацией, есть отчет, который собирает инфу по прибыли, объему продаж и пр... При выборе в диалоге, на форме периода (месяц,неделя,квартал что угодно кроме одного дня) все ок, как только выбран 1 день, выскакивает ошибка

{Форма.ФормаОтчета.Форма(122)}: Значение не является значением объектного типа (Свернуть)
        ТЗРезультат.Свернуть("Номенклатура,НоменклатураНаименование","Количество,СуммаПокупки,СуммаПродажи");

Не пойму при чем тут период, почему сворачивает при любом периоде кроме 1 дня? подскажите куда копать
1 barrgand
 
14.05.14
09:54
(0) При одном дне ТЗРезультат не является таблицей, это ж очевидно
2 Godofsin
 
14.05.14
09:57
(0) ну показывайЮ откуда ТЗРезультат формируется
3 kosts
 
14.05.14
09:57
(0) Странно конечно, может результат в дерево превращается
4 barrgand
 
14.05.14
10:00
(0) Думаю где-то надо поставить КонецДня(КонецПериода)
5 Godofsin
 
14.05.14
10:06
(4) +1
6 Godofsin
 
14.05.14
10:07
Скорей всего там запрос, который не возвращает результат на 1 день. И проверки на пустоту результата нет
7 Александр056
 
14.05.14
10:19
чет с датами не разберусь,я так понял вам лучше полностью запрос и ТЗРезультат показать..?
8 Wobland
 
14.05.14
10:21
(7) ТЗРезультат =
9 Александр056
 
14.05.14
10:22
(8) ТЗРезультат=Запрос.Выполнить().Выгрузить();
10 Wobland
 
14.05.14
10:23
где-то ты врёшь
11 Александр056
 
14.05.14
10:24
(10) куда больше всего подозрений? могу, не специально)
12 barrgand
 
14.05.14
10:24
(11) Давай код, не томи. Можно без текста запроса.
13 Александр056
 
14.05.14
10:24
ТЗСледРезультат=Запрос.Выполнить().Выгрузить();
                для каждого текущаястрока из ТЗСледРезультат Цикл
                    НоваяЗапись=ТЗРезультат.Добавить();
                    ЗаполнитьЗначенияСвойств(НоваяЗапись,текущаястрока);

ТЗРезультат.Свернуть("Номенклатура,НоменклатураНаименование","Количество,СуммаПокупки,СуммаПродажи");
        ТЗРезультат.Сортировать("НоменклатураНаименование");
14 _fvadim
 
14.05.14
10:25
Учу пользоваться отладчиком. Дорого.
15 Wobland
 
14.05.14
10:26
(13) и что это за огрызок?
16 Wobland
 
14.05.14
10:26
(13) оригинальная замена Скопировать(), конечно
17 barrgand
 
14.05.14
10:27
(13) Ты так и будешь код отрывками писать, а мы типа паззл собрать должны?
18 Ymryn
 
14.05.14
10:28
(15) возможно ТЗРезультат шире. Ибо тут она дополняется по результату ТЗСледРезультат. Т.е она может несколькими этими пачками  формироваться. (это я Вангую, так что может все и не так)
19 Александр056
 
14.05.14
10:28
Если Склад.Код="000000008" тогда
        ПеремДатаНачало=ДатаНачала;
        ПеремДатаОкончания=ДатаОкончания;
        ПервыйПрогон=Истина;
        
        пока ПеремДатаНачало<ДатаОкончания Цикл
        
        
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    Продажи.Номенклатура,
                       |    Продажи.Номенклатура.НоменклатурнаяГруппаЗатрат КАК НоменклатурнаяГруппа,
                       |    Продажи.КоличествоОборот КАК Количество,
                       |    Продажи.Выручка КАК СуммаПродажи,
                       |    Продажи.Номенклатура.Родитель,
                       |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)  * Продажи.КоличествоОборот КАК СуммаПокупки,
                       |    Продажи.Номенклатура.Наименование
                       |ИЗ
                       |    (ВЫБРАТЬ
                       |        ПродажиОбороты.Номенклатура КАК Номенклатура,
                       |        СУММА(ПродажиОбороты.СтоимостьОборот) КАК Выручка,
                       |        СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот
                       |    ИЗ
                       |        РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура.НоменклатурнаяГруппа = &Товар) КАК ПродажиОбороты
                       |    ГДЕ
                       |        ПродажиОбороты.Контрагент <> &ИПТельнов
                       |        И ПродажиОбороты.Регистратор.Склад = &Склад
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        ПродажиОбороты.Номенклатура) КАК Продажи
                       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаНачала, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
                       |        ПО Продажи.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                       |
                       |УПОРЯДОЧИТЬ ПО
                       |    Продажи.Номенклатура.Наименование";
        
        
        Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ПеремДатаНачало));
        Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ПеремДатаНачало));
        Запрос.УстановитьПараметр("ИПТельнов",Справочники.Контрагенты.НайтиПоКоду("05108"));
        Запрос.УстановитьПараметр("ТипЦен",Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001"));
        Запрос.УстановитьПараметр("Склад",Справочники.Склады.НайтиПоКоду("000000008"));
        Запрос.УстановитьПараметр("Товар",Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000003"));
        
        Если ПервыйПрогон тогда
                ТЗРезультат=Запрос.Выполнить().Выгрузить();
                ПервыйПрогон=Ложь;
            Иначе
                ТЗСледРезультат=Запрос.Выполнить().Выгрузить();
                для каждого текущаястрока из ТЗСледРезультат Цикл
                    НоваяЗапись=ТЗРезультат.Добавить();
                    ЗаполнитьЗначенияСвойств(НоваяЗапись,текущаястрока);
                КонецЦикла;    
            КонецЕсли;
            ПеремДатаНачало=ДобавитьМесяц(ПеремДатаНачало,1);
            
        КонецЦикла;
        ТЗРезультат.Свернуть("Номенклатура,НоменклатураНаименование","Количество,СуммаПокупки,СуммаПродажи");
        ТЗРезультат.Сортировать("НоменклатураНаименование");

        
    ИначеЕсли Склад.Код="000000004" тогда  
        ПеремДатаНачало=ДатаНачала;
        ПеремДатаОкончания=ДатаОкончания;
        ПервыйПрогон=Истина;
        
        пока ПеремДатаНачало<ДатаОкончания Цикл
            
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ
                           |    Продажи.Номенклатура
                           |ПОМЕСТИТЬ ТЗТовары
                           |ИЗ
                           |    (ВЫБРАТЬ
                           |        ПродажиОбороты.Номенклатура КАК Номенклатура,
                           |        СУММА(ПродажиОбороты.СтоимостьОборот) КАК Выручка,
                           |        СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот
                           |    ИЗ
                           |        РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура.НоменклатурнаяГруппа = &Товар) КАК ПродажиОбороты
                           |    ГДЕ
                           |        ПродажиОбороты.Контрагент <> &ИПТельнов
                           |    
                           |    СГРУППИРОВАТЬ ПО
                           |        ПродажиОбороты.Номенклатура) КАК Продажи
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    Продажи.Номенклатура,
                           |    Продажи.Номенклатура.НоменклатурнаяГруппаЗатрат КАК НоменклатурнаяГруппа,
                           |    Продажи.КоличествоОборот КАК Количество,
                           |    ВЫБОР
                           |        КОГДА Продажи.КоличествоОборот = 0
                           |            ТОГДА 0
                           |        ИНАЧЕ Продажи.Выручка / Продажи.КоличествоОборот
                           |    КОНЕЦ КАК ЦенаПродажи,
                           |    Продажи.Выручка КАК СуммаПродажи,
                           |    Продажи.Номенклатура.Родитель,
                           |    Продажи.Номенклатура.БазоваяЕдиницаИзмерения,
                           |    ВЫБОР
                           |        КОГДА Продажи.Номенклатура.БазоваяЕдиницаИзмерения.Код = ""055""
                           |            ТОГДА Продажи.КоличествоОборот * 4.03 / 1000
                           |        ИНАЧЕ 0
                           |    КОНЕЦ КАК ВесВТоннах
                           |ПОМЕСТИТЬ ТЗПродажи
                           |ИЗ
                           |    (ВЫБРАТЬ
                           |        ПродажиОбороты.Номенклатура КАК Номенклатура,
                           |        СУММА(ПродажиОбороты.СтоимостьОборот) КАК Выручка,
                           |        СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот
                           |    ИЗ
                           |        РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура.НоменклатурнаяГруппа = &Товар) КАК ПродажиОбороты
                           |    ГДЕ
                           |        ПродажиОбороты.Контрагент <> &ИПТельнов
                           |    
                           |    СГРУППИРОВАТЬ ПО
                           |        ПродажиОбороты.Номенклатура) КАК Продажи
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    ТЗТовары.Номенклатура,
                           |    СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура КАК Материал,
                           |    СпецификацииНоменклатурыВыходныеИзделия.ЕдиницаИзмерения,
                           |    ЕСТЬNULL(СпецификацииНоменклатурыВыходныеИзделия.Количество, 0) КАК КоличествоВых,
                           |    СпецификацииНоменклатурыИсходныеКомплектующие.ЕдиницаИзмерения КАК ЕдиницаИзмерения1,
                           |    ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Количество, 0) КАК КоличествоВх,
                           |    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
                           |    ВЫБОР
                           |        КОГДА ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Количество, 0) <> 0
                           |            ТОГДА ЕСТЬNULL(СпецификацииНоменклатурыВыходныеИзделия.Количество, 0) / ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Количество, 0)
                           |        ИНАЧЕ 0
                           |    КОНЕЦ КАК коэффициент,
                           |    ВЫБОР
                           |        КОГДА ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Количество, 0) <> 0
                           |            ТОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) / ВЫБОР
                           |                    КОГДА ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Количество, 0) <> 0
                           |                        ТОГДА ЕСТЬNULL(СпецификацииНоменклатурыВыходныеИзделия.Количество, 0) / ЕСТЬNULL(СпецификацииНоменклатурыИсходныеКомплектующие.Количество, 0)
                           |                КОНЕЦ
                           |        ИНАЧЕ 0
                           |    КОНЕЦ КАК ЦенаЗа1квм
                           |ПОМЕСТИТЬ ТЗСебестоимость
                           |ИЗ
                           |    ТЗТовары КАК ТЗТовары
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ВыходныеИзделия КАК СпецификацииНоменклатурыВыходныеИзделия
                           |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие
                           |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОкончания, ) КАК ЦеныНоменклатурыСрезПоследних
                           |                ПО СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                           |                    И (&ТипЦен = ЦеныНоменклатурыСрезПоследних.ТипЦен)
                           |            ПО СпецификацииНоменклатурыВыходныеИзделия.Ссылка = СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка
                           |        ПО ТЗТовары.Номенклатура = СпецификацииНоменклатурыВыходныеИзделия.Номенклатура
                           |            И (СпецификацииНоменклатурыВыходныеИзделия.Ссылка.Активная)
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    ТЗПродажи.Номенклатура,
                           |    ТЗПродажи.НоменклатурнаяГруппа,
                           |    ТЗПродажи.Количество,
                           |    ТЗПродажи.ЦенаПродажи,
                           |    ТЗПродажи.СуммаПродажи,
                           |    ТЗПродажи.НоменклатураРодитель,
                           |    ТЗПродажи.НоменклатураБазоваяЕдиницаИзмерения,
                           |    ТЗПродажи.ВесВТоннах,
                           |    ТЗСебестоимость.Номенклатура КАК Номенклатура1,
                           |    ТЗСебестоимость.Материал,
                           |    ТЗСебестоимость.ЕдиницаИзмерения,
                           |    ТЗСебестоимость.КоличествоВых,
                           |    ТЗСебестоимость.ЕдиницаИзмерения1,
                           |    ТЗСебестоимость.КоличествоВх,
                           |    ТЗСебестоимость.Цена,
                           |    ТЗСебестоимость.коэффициент,
                           |    ТЗСебестоимость.ЦенаЗа1квм,
                           |    ТЗСебестоимость.ЦенаЗа1квм * ТЗПродажи.Количество КАК СуммаПокупки,
                           |    ТЗПродажи.Номенклатура.Наименование
                           |ИЗ
                           |    ТЗПродажи КАК ТЗПродажи
                           |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗСебестоимость КАК ТЗСебестоимость
                           |        ПО ТЗПродажи.Номенклатура = ТЗСебестоимость.Номенклатура";
            
            Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ПеремДатаНачало));
            Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ПеремДатаНачало));
            Запрос.УстановитьПараметр("ИПТельнов",Справочники.Контрагенты.НайтиПоКоду("05108"));
            Запрос.УстановитьПараметр("ТипЦен",Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001"));
            Запрос.УстановитьПараметр("Товар",Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000002"));
            Запрос.УстановитьПараметр("организация",Справочники.Организации.НайтиПоКоду("000000001"));
            
            Если ПервыйПрогон тогда
                ТЗРезультат=Запрос.Выполнить().Выгрузить();
                ПервыйПрогон=Ложь;
            Иначе
                ТЗСледРезультат=Запрос.Выполнить().Выгрузить();
                для каждого текущаястрока из ТЗСледРезультат Цикл
                    НоваяЗапись=ТЗРезультат.Добавить();
                    ЗаполнитьЗначенияСвойств(НоваяЗапись,текущаястрока);
                КонецЦикла;    
            КонецЕсли;
            ПеремДатаНачало=ДобавитьМесяц(ПеремДатаНачало,1);
            
        КонецЦикла;
        ТЗРезультат.Свернуть("Номенклатура,НоменклатураНаименование","Количество,СуммаПокупки,СуммаПродажи");
        ТЗРезультат.Сортировать("НоменклатураНаименование");
        
    КонецЕсли;
20 Александр056
 
14.05.14
10:29
просто писал не сам, вникаю, стесняюсь)
21 Wobland
 
14.05.14
10:31
ба! да это запрос в цикле! расстрелять
22 Ymryn
 
14.05.14
10:32
Запрос в цикле... как мило.  У тебя
пока ПеремДатаНачало<ДатаОкончания Цикл при выбранных условиях не выполняется. Т.е запрос даже не создается. А ты считаешь, что таблица у тебя все равно железно есть. Проверь, что у тебя в этих переменых. Есть шанс, что замена на НачалоДня(ПеремДатаНачало)<КонецДня(ДатаОкончания) решит проблему.
23 Ymryn
 
14.05.14
10:35
(22) а еще лучше вот тут
        ПеремДатаНачало=ДатаНачала;
        ПеремДатаОкончания=ДатаОкончания;
поправь это дело по аналогии с тем, что я указал выше.
24 Александр056
 
14.05.14
11:58
спасибо, сейчас посмотрю
25 Александр056
 
14.05.14
12:07
про запрос в цикле согласен, да странно) а может просто мне непонятно) но факт того что высказывание (23) оказалось верным, отчет заработал.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn