|
Помогите с созданием запроса по документам. Проблема с док-ом "Сторно" | ☑ | ||
---|---|---|---|---|
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) Не работает. Щас только опроверил. Всетаки надо делать по регистрам.
|
Форум | Правила | Описание | Реклама | Секции | Поиск | Книга знаний | Вики-миста |