Имя: Пароль:
 
1C
 
Помогите с созданием запроса по документам. Проблема с док-ом "Сторно"
0 Андрюха_kz
 
02.12.09
10:35
Нужен отчет который должен показывать на какую сумму было выписано счетов, на какую сумму было продано товаров, на какую сумму было возвратов ТМЦ и на какую сумму было сторно по авторам выписанных счетов. Все получилось, но вот по сторно не получается. При выполнении запроса 1С выдает сообщение "Неверно заданный путь 'ТМЦ'" и "Неверно заданный путь 'Сумма'". Есть ли выход из этой ситуации? Текст запроса привожу ниже:

   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Запр)
   |Период с ДатаНач по ДатаКон;
   |ОбрабатыватьДокументы Проведенные;
   |Док        = Документ.ЗаявкаПокупателя.ТекущийДокумент,
   |             Документ.РеализацияТоваров.ТекущийДокумент,
   |             Документ.ВозвратОтПокупателя.ТекущийДокумент,
   |             Документ.Сторно.ТекущийДокумент;
   |ТМЦ        = Документ.ЗаявкаПокупателя.ТМЦ,
   |             Документ.РеализацияТоваров.ТМЦ,
   |             Документ.ВозвратОтПокупателя.ТМЦ,
   |             Документ.Сторно.ДокументОснование.ТМЦ;
   |Группа     = Документ.ЗаявкаПокупателя.Автор.Родитель,
   |             Документ.РеализацияТоваров.ДокументОснование.Автор.Родитель,
   |             Документ.ВозвратОтПокупателя.ДокументОснование.ДокументОснование.Автор.Родитель,
   |             Документ.Сторно.ДокументОснование.ДокументОснование.Автор.Родитель;
   |Автор      = Документ.ЗаявкаПокупателя.Автор,
   |              Документ.РеализацияТоваров.ДокументОснование.Автор,
   |             Документ.ВозвратОтПокупателя.ДокументОснование.ДокументОснование.Автор,
   |             Документ.Сторно.ДокументОснование.ДокументОснование.Автор;
   |Проект     = Документ.ЗаявкаПокупателя.Проект,
   |             Документ.РеализацияТоваров.ДокументОснование.Проект,
   |             Документ.ВозвратОтПокупателя.ДокументОснование.ДокументОснование.Проект,
   |             Документ.Сторно.ДокументОснование.ДокументОснование.Проект;
   |Сумма      = Документ.ЗаявкаПокупателя.Сумма;
   |СуммаР     = Документ.РеализацияТоваров.Сумма;
   |СуммаВ     = Документ.ВозвратОтПокупателя.Сумма;
   |СуммаС     = Документ.Сторно.ДокументОснование.Сумма;
   |Функция СуммаПоСчету = Сумма(Сумма);
   |Функция СуммаРеал    = Сумма(СуммаР);
   |Функция СуммаВозв    = Сумма(СуммаВ);
   |Функция СуммаСторно  = Сумма(СуммаС);    
   |"//}}ЗАПРОС
1 Дядя Васька
 
02.12.09
10:36
не надо делать такой отчет по документам...
2 Андрюха_kz
 
02.12.09
10:36
А как его сделать?
3 Ston
 
02.12.09
10:39
а группировки?
4 Андрюха_kz
 
02.12.09
10:40
Группировки есть.
5 Андрюха_kz
 
02.12.09
10:41
Вот полный текст отчета:

Перем ТекСтрокаВТаблице; // текущая строка в таблице значений  МФ
Перем Таб;
Перем СписокГруппировок;

Процедура УправлениеДиалогом() Далее

//******************************************************************************
// ур(ном)
//
// Параметры:
//  ном
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  ТекстОписания
//
Функция ур(ном)
   
   Стр="";
   Для СчетчикЦикла = 1 По ном Цикл
       Стр = Стр + Симв(32);
   КонецЦикла;
   
   Возврат Стр;
   
КонецФункции // ур()

//******************************************************************************
//  Открывает обработку отбора элементов по произвольному фильтру
Процедура ВыбратьПоФильтру()
   
   Перем  ВидЗначенияПодбора;
   
   ВидЗначенияПодбора=СокрЛП(ТаблицаМФ.Вид);
   
   Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда
       Возврат;
   КонецЕсли;
   
   СписокПараметров=СоздатьОбъект("СписокЗначений");
   СписокПараметров.ДобавитьЗначение("",                "ИмяВызвавшейФормы");
   СписокПараметров.ДобавитьЗначение(ТаблицаМФ.Тип,     "Тип");
   СписокПараметров.ДобавитьЗначение(ВидЗначенияПодбора,"Вид");
   СписокПараметров.ДобавитьЗначение(СписокЭлементовМФ, "Объекты");
   ТаблицаМФ.ФлВкл=2;
   ОткрытьФорму("Обработка.ПодборОбъектов#",СписокПараметров);
   
КонецПроцедуры    // ВыбратьПоФильтру

//******************************************************************************
Процедура ИзменениеПорядкаГрупп(НаправлениеСдвига)
   ТекСтр = Группировки.ТекущаяСтрока();
   ПослСдвигСтр = Группировки.РазмерСписка() - 1;
   Если не((НаправлениеСдвига = 1) и (ТекСтр = ПослСдвигСтр)) Тогда
       Группировки.СдвинутьЗначение(НаправлениеСдвига, ТекСтр);
   КонецЕсли;
КонецПроцедуры // ИзменениеПорядкаГрупп()

//*******************************************
Процедура ПриОткрытии()
   ДатаНач = НачМесяца(ПолучитьДатуТА());
   ДатаКон = ПолучитьДатуТА();
   
   //------------------------------------------------------------------------------------------------------------------------------------------------------------
   // инициализация переменных множественного фильтра
   ТипМФ.УдалитьВсе();
   ТипМФ.ДобавитьЗначение("одно из");
   ТипМФ.ДобавитьЗначение("все кроме");
   
   ТаблицаМФ.УдалитьСтроки();
   Пока ТаблицаМФ.КоличествоКолонок()>0 Цикл
       ТаблицаМФ.УдалитьКолонку(1);
   КонецЦикла;  
   
   ТаблицаМФ.НоваяКолонка("Тип");
   ТаблицаМФ.НоваяКолонка("Вид");
   ТаблицаМФ.НоваяКолонка("ИмяПеременной");
   ТаблицаМФ.НоваяКолонка("СписокЭлементов"); // список элементов, по которым производим фильтрацию
   ТаблицаМФ.НоваяКолонка("ТипМФ"); // текущая строка списка ТипМФ
   ТаблицаМФ.НоваяКолонка("ФлВкл","Число",1,,"Вкл",5,,); // фильтр включен ("1" или "0")
   ТаблицаМФ.НоваяКолонка("Представление",,,,"Вид фильтра:");
   ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");

   УправлениеДиалогом();
   
   //                  тип          вид           переменная  название
   глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Проекты",        "Проект",  "По проектам");
   глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Номенклатура", "ТМЦ",  "По номенклатуре");
   глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Пользователи", "Автор",  "По авторам");
   
   ТаблицаМФ.ВидимостьКолонки("Тип",0);
   ТаблицаМФ.ВидимостьКолонки("Вид",0);
   ТаблицаМФ.ВидимостьКолонки("СписокЭлементов",0);          
   ТаблицаМФ.ВидимостьКолонки("ТипМФ",0);
   ТаблицаМФ.ВидимостьКолонки("ИмяПеременной",0);
       
КонецПроцедуры

//******************************************************************************
// ПерерисовкаНазванийЗакладок
//
// Описание:
//  Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан
//
Функция ПерерисовкаНазванийЗакладок()      
   
   Форма.Закладки.УстановитьЗначение(2,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр");
   
КонецФункции // ПерерисовкаНазванийЗакладок    

//******************************************************************************
// УправлениеДиалогом()
//
// Параметры:
//    Нет
//
// Возвращаемое значение:
//    Нет
//
// Описание:
//    Управление доступностью элементов диалога.
//
Процедура УправлениеДиалогом()
   
   Если Форма.Закладки.ТекущаяСтрока() = 1 Тогда          
       Форма.ИспользоватьСлой("Шапка,Подвал,Основной",2);
   Иначе    
       Форма.ИспользоватьСлой("Шапка,МФ,Подвал");
   КонецЕсли;
   
КонецПроцедуры //УправлениеДиалогом()    

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриВыбореЗакладки(Номер,Значение)    
   // закладки
   Если Номер=1 Тогда
       глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были
   КонецЕсли;      
   УправлениеДиалогом();
   ПерерисовкаНазванийЗакладок();
   
КонецПроцедуры    // ПриВыбореЗакладки

//******************************************************************************
// Предопределенная процедура
//
Процедура ОбработкаПодбора(Значение)  
   
   Если (СписокЭлементовМФ.НайтиЗначение(Значение)=0) Тогда
       Представление=""+Значение;
       Если ТипЗначенияСтр(Значение)="Справочник" Тогда
           Если СокрЛП(Метаданные.Справочник(Значение.Вид()).Владелец) <> "Метаданные" Тогда
               Представление=Представление+" ("+Значение.Владелец+")";
           КонецЕсли;
       КонецЕсли;    
       СписокЭлементовМФ.ДобавитьЗначение(Значение,Представление);
       ТаблицаМФ.ФлВкл=2;
   КонецЕсли;
   
КонецПроцедуры  // ОбработкаПодбора    

//******************************************************************************
Процедура ВывестиГруппировку(Запрос, Ном)
   Если Ном<=СписокГруппировок.РазмерСписка() Тогда
   
       ТекстГрупп = СписокГруппировок.ПолучитьЗначение(Ном);
       Пока Запрос.Группировка(Ном) = 1 Цикл
           Таб.ВывестиСекцию(ТекстГрупп);
           ВывестиГруппировку(Запрос, Ном+1)
       КонецЦикла;
       
   КонецЕсли;
КонецПроцедуры // ВывестиГруппировку()

//******************************************************************************
Процедура Запр()
   Перем Запрос, ТекстЗапроса;
   
   Если глПроверкаДаты(ДатаНач,ДатаКон)=0 Тогда
       Возврат;
   КонецЕсли;

   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Запр)
   |Период с ДатаНач по ДатаКон;
   |ОбрабатыватьДокументы Проведенные;
   |Док        = Документ.ЗаявкаПокупателя.ТекущийДокумент,
   |             Документ.РеализацияТоваров.ТекущийДокумент,
   |             Документ.ВозвратОтПокупателя.ТекущийДокумент,
   |             Документ.Сторно.ТекущийДокумент;
   |ТМЦ        = Документ.ЗаявкаПокупателя.ТМЦ,
   |             Документ.РеализацияТоваров.ТМЦ,
   |             Документ.ВозвратОтПокупателя.ТМЦ,
   |             Документ.Сторно.ДокументОснование.ТМЦ;
   |Группа     = Документ.ЗаявкаПокупателя.Автор.Родитель,
   |             Документ.РеализацияТоваров.ДокументОснование.Автор.Родитель,
   |             Документ.ВозвратОтПокупателя.ДокументОснование.ДокументОснование.Автор.Родитель,
   |             Документ.Сторно.ДокументОснование.ДокументОснование.Автор.Родитель;
   |Автор      = Документ.ЗаявкаПокупателя.Автор,
   |              Документ.РеализацияТоваров.ДокументОснование.Автор,
   |             Документ.ВозвратОтПокупателя.ДокументОснование.ДокументОснование.Автор,
   |             Документ.Сторно.ДокументОснование.ДокументОснование.Автор;
   |Проект     = Документ.ЗаявкаПокупателя.Проект,
   |             Документ.РеализацияТоваров.ДокументОснование.Проект,
   |             Документ.ВозвратОтПокупателя.ДокументОснование.ДокументОснование.Проект,
   |             Документ.Сторно.ДокументОснование.ДокументОснование.Проект;
   |Сумма      = Документ.ЗаявкаПокупателя.Сумма;
   |СуммаР     = Документ.РеализацияТоваров.Сумма;
   |СуммаВ     = Документ.ВозвратОтПокупателя.Сумма;
   |СуммаС     = Документ.Сторно.ДокументОснование.Сумма;
   |Функция СуммаПоСчету = Сумма(Сумма);
   |Функция СуммаРеал    = Сумма(СуммаР);
   |Функция СуммаВозв    = Сумма(СуммаВ);
   |Функция СуммаСторно  = Сумма(СуммаС);    
   |"//}}ЗАПРОС
   ;

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

ТекСтрокаВТаблице="";

// Инициализируем закладки
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение(1,"Основная");
Форма.Закладки.ДобавитьЗначение(2,"Множественный фильтр");
Форма.Закладки.ТекущаяСтрока(1);


Группировки.ДобавитьЗначение("Проект",        "Проект");
Группировки.ДобавитьЗначение("Группа",        "Группа авторов");
Группировки.ДобавитьЗначение("Автор",        "Автор");
Группировки.ДобавитьЗначение("ТМЦ",        "Номенклатура");
Группировки.ДобавитьЗначение("Док",        "Документы движения");

Группировки.Пометка(2, 1);
Группировки.Пометка(3, 1);
6 AeDen
 
02.12.09
10:42
У тебя еще глобальные процедуры используются. Покажи еще глобальный модуль.
7 Ёпрст
 
02.12.09
10:45
Что вы хотели поиметь этим кодом ? :)

|Документ.Сторно.ДокументОснование.ТМЦ;
|СуммаС     = Документ.Сторно.ДокументОснование.Сумма;
8 AeDen
 
02.12.09
10:46
(7) Погоди, без глобальника тут точно не разобраться. Обязательно нужен глобальник. Весь.
9 Андрюха_kz
 
02.12.09
10:46
(7) Получить ТМЦ и сумму документа-основания сторно, т.е. реализации
10 Андрюха_kz
 
02.12.09
10:47
(8)глобальные процедуры используются для множественного фильтра в отчете. Дело не в них.
11 Ёпрст
 
02.12.09
10:49
(9) На будующее : в тексте запроса у реквизитов неопределенного вида/типа нельзя поиметь их реквизиты (исключение - общий реквизит документа), поэтому слепить переменную нельзя... можно только в Условие или в Когда использовать в лучшем случае..
12 Андрюха_kz
 
02.12.09
10:51
(11)Пжл,а по подробней можно как это реализовать.
13 AeDen
 
02.12.09
10:52
" на какую сумму было продано товаров, на какую сумму было возвратов ТМЦ и на какую сумму было сторно по авторам выписанных счетов."
торговля, как я понимаю? Я-бы посмотрел сторону запросов по регистрам, а не по документам.
14 Дядя Васька
 
02.12.09
10:52
(2) А документы никаких движений не делают что ли? То что ты пытаешься получить называется остатки и обороты, и для этого есть механизмы регистров и счетов которые хранят промежуточные итоги на начало каждого месяца. А ты все документы перебираешь по базе...
15 Андрюха_kz
 
02.12.09
10:56
(13)(14)Спасибо. Тогда буду пробовать делать запрос по регистрам.
16 craxx
 
02.12.09
12:09
|ТМЦ        = Документ.ЗаявкаПокупателя.ТМЦ,
   |             Документ.РеализацияТоваров.ТМЦ,
   |             Документ.ВозвратОтПокупателя.ТМЦ,
   |             Документ.Сторно.ДокументОснование.ЗаявкаПокупателя.ТМЦ,
;
17 craxx
 
02.12.09
12:10
Документ.Сторно.ДокументОснование.ЗаявкаПокупателя.ТМЦ
Документ.Сторно.ДокументОснование.ВозвратОтПокупателя.ТМЦ
18 Ёпрст
 
02.12.09
12:14
(16) еще один..
19 Ёпрст
 
02.12.09
12:14
(17) прежде чем советовать хню, нужно хоть раз самому проверить...
20 craxx
 
02.12.09
12:35
проверено в работающем отчете
если документ неопределенного вида, то после точки можно указать вид и реквизит
21 Злопчинский
 
02.12.09
12:35
автор дятел или прикидывается?
во первых работать надо по егистрам.
во вторых сумма и суммавзаиморасчетов в документе - автор вообще курил типовую конфигу или так руки потренировать зашел?
22 Жеглофф
 
02.12.09
12:38
а в сторно нет таких реквизитов. вот и ругаецца. По регистрам, батенька, делайте запрос, по регистрам.
23 Ёпрст
 
02.12.09
12:40
(20) Враньё..
Показывай свой отчет..
24 Жеглофф
 
02.12.09
12:43
(20)
ога, хорошо отчет работать будет, особливо, ежели половину заявки отгрузили, а еще половину отменили.
25 Ёпрст
 
02.12.09
12:43
(24) да не будет он работать ...
26 Жеглофф
 
02.12.09
12:45
не, ну запрос то, может, и отработает, но его результаты будут, мягко говоря, ненужными )
27 Ёпрст
 
02.12.09
12:49
(26) не отработает..
28 AeDen
 
02.12.09
12:49
(26) Стопудово, результатны нерабочего запроса нафик никому не нужны.
29 Ёпрст
 
02.12.09
12:51
при такой хне получит граблей по-лбу:
err
Документ.Сторно.ДокументОснование. <<?>>ЗаявкаПокупателя.ТМЦ
Неверно заданный путь 'ЗаявкаПокупателя'
30 Андрюха_kz
 
03.12.09
13:51
(16) Не работает. Щас только опроверил. Всетаки надо делать по регистрам.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн