Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0
Добрый день. Есть задача создать простой отчет по продажам, но так как я не работал с 7-кой, то возникают небольшие трудности. Хотел попросить помощи у форумчан. Отчет должен состоять из таких колонок:Менеджер, Контрагент, Артикул товара, Наименование товара, Отпускная цена, отгружено. Создаю отчет через конструктор отчетов, но в итоге, когда формирую отчет у меня он пустой. Вот код отчета:
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Менеджер = Регистр.ПартииТоваров.Контрагент.Менеджер; |Наименование = Регистр.ПартииТоваров.Контрагент.Наименование; |Артикул = Регистр.ПартииТоваров.Товар.Артикул; |Наименование1 = Регистр.ПартииТоваров.Товар.Наименование; |Группировка Менеджер; |Группировка Наименование; |Группировка Артикул; |Группировка Наименование1; |Условие(Менеджер=ВыбМенеджер); |Условие(Наименование1 в ВыбТовар); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Менеджер
Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей Наименование
Пока Запрос.Группировка(3) = 1 Цикл // Заполнение полей Артикул
Пока Запрос.Группировка(4) = 1 Цикл Если Запрос.ЭтоГруппа() = 1 Тогда // Заполнение полей Наименование1 Таб.ВывестиСекцию("Менеджер"); Таб.ВывестиСекцию("Наименование"); Таб.ВывестиСекцию("Артикул"); Таб.ВывестиСекцию("Наименование1"); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла;
// Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры
самое первое - попробуйте закомментировать для начала ВывестиСекцию(), и поставить Сообщить(Запрос.Менеджер) и тп. Это покажет, работает запрос или нет. Так как в таблице могут тоже быть ошибки, или просто не заданы формулы в секциях.
То что, вы согнали скопом во внутреннюю группировку вывод четырех секций покажет некрасивый очень результат все равно.
Зачем вам условие во внутренней группировке на ЭтоГРуппа() ?
Сообщение отредактировал Домовик - 27.05.15, 19:36
Ну во первых, если это ТИС, то отпускную цену из регистра вы не вытянете просто так, так как там нет такого ресурса, вы можете вытянуть оборот и кол-во, и рассчитать цену, и опять же не ясно какая нужна детализация, по каждой строке документа? или все свернуть по товарной позиции, если да, то о отпускной цене тут говорить нет смысла, есть только средняя цена, поэтому лучше вытягивать оборот по товару и кол-во списанное, соответственно рассчитать среднюю цену, но уж никак не без итогов..как выше написали, иначе функции зачем вставлять. Потом Менеджер, если отбор по 1 менеджеру, то зачем нужна колонка, потом развернуть по контрагентам, потом по товарам, ну типа так:
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Менеджер = Регистр.ПартииТоваров.Контрагент.Менеджер; |Контрагент= Регистр.ПартииТоваров.Контрагент; |Товар= Регистр.ПартииТоваров.Товар; |КвоОтгр = Регистр.ПартииТоваров.ОстатокТовара; |СумОтгр = Регистр.ПартииТоваров.Оборот; |Функция КвоСум = Расход(КвоОтгр); |Функция СумСум = Расход(СумОтгр); |Группировка Контрагент Упорядочить по Контрагент.Наименование без Групп; |Группировка Товар Упорядочить по Товар.Наименование без Групп; |Условие(Менеджер=ВыбМенеджер); |Условие(Товар в ВыбТовар); |"//}}ЗАПРОС ;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
Пока Запрос.Группировка(1) = 1 Цикл Сообщить(Запрос.Контрагент); Пока Запрос.Группировка(2) = 1 Цикл Сообщить(""+Запрос.Товар.Наименование+"/"+Запрос.Товар.Артикул+"/"+Запрос.КвоСум+"/"+Запрос.СумСум); КонецЦикла; КонецЦикла;
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1
Мда... Вообщето правильней было б формировать по оборотному регистру, если такой имеется... Хотя и по регистру остатков тоже реально вытянуть нужную информацию, в т.ч. и розничные цены типа:
ТекДок = Регистр.ПартииТоваров.ТекущийДокумент; и Условие(Когда ТекДок.Вид = "Расходная накладная")
...хотя, инфы недостаточно.
Какой это регистр оборотный или остатков ? В регистре Остатков в реквизитах вполне реально могут храниться виды движений: приход, расход или возврат, со ссылкой в ресурс, например Обороты... Решений вопроса немеряное количество, вплоть до выборки циклом документов, с последующей выгрузкой табличной части в таблицу значений, вложением этой таблицы значений в последующую Таблицу значений и добавлением этого "добра" в список значений по символьному представлению "Иванов", "Петров", "Сидоров" с последующей передачей в запрос как скопом так и по отдельности, все зависит от того какой приходный документ выкурить ):
Автор, может больше раскажете что у Вас там за зверюка или заскриньте содержимое регистра из конфигуратора дабы не флудить ?
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1
Уже ближе. Еще раз, это точно регистр остатков ? И заодно расшифруйте что такое "КодОперации" и какие значения там хранятся. В конечном результате Вам что нужно вытянуть только обороты или еще нужно получить сумму закупки, сумму продажи и процент дохода ? Чет у меня не выходит угадывать.
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)
Отчет по продажам - это не простой отчет. Судя по регистрам - у вас конфигурация ТиС. В ней есть подобный отчет, чувствую, вы взяли его за основу. В свое время добавлял в него Менеджеров, каковыми были просто авторы документов.
КодОперации- вероятно код хоз. операции для обмена Торговля-БухУчет( В комплексной там тоже от регистров проводки делаются по хоз операциям). к задаче это не имеет отношения. Не грузите товарища. Пусть хоть что-то выведет, а когда выведет и разберется, добавит, изменит, нарастит, что нужно.
Сообщение отредактировал Домовик - 29.05.15, 12:28
КодыОперацийПродажи=СоздатьОбъект("СписокЗначений"); Если (РежимВидПродажи=1) И (РежимЧейТовар=1) Тогда // все продажи, все товары КодыОперацийПродажи.ДобавитьЗначение(ПродажаКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаКупленногоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(РозничнаяПродажаКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратТовараОтПокупателя); КодыОперацийПродажи.ДобавитьЗначение(ВозвратКупленногоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратРозничныйКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(РозничнаяПродажаПринятогоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратПринятогоТовараОтПокупателя); КодыОперацийПродажи.ДобавитьЗначение(ВозвратПринятогоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаУслуги); КодыОперацийПродажи.ДобавитьЗначение(СторноПродажаУслуги); ИначеЕсли (РежимВидПродажи=1) И (РежимЧейТовар=2) Тогда // все продажи, собственные товары КодыОперацийПродажи.ДобавитьЗначение(ПродажаКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаКупленногоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(РозничнаяПродажаКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратТовараОтПокупателя); КодыОперацийПродажи.ДобавитьЗначение(ВозвратКупленногоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратРозничныйКупленногоТовара); ИначеЕсли (РежимВидПродажи=1) И (РежимЧейТовар=3) Тогда // все продажи, комиссионные товары КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(РозничнаяПродажаПринятогоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратПринятогоТовараОтПокупателя); КодыОперацийПродажи.ДобавитьЗначение(ВозвратПринятогоПереданногоТовара); ИначеЕсли (РежимВидПродажи=1) И (РежимЧейТовар=4) Тогда // все продажи, услуги КодыОперацийПродажи.ДобавитьЗначение(ПродажаУслуги); КодыОперацийПродажи.ДобавитьЗначение(СторноПродажаУслуги); ИначеЕсли (РежимВидПродажи=2) И (РежимЧейТовар=1) Тогда // оптом, все товары КодыОперацийПродажи.ДобавитьЗначение(ПродажаКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаКупленногоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратТовараОтПокупателя); КодыОперацийПродажи.ДобавитьЗначение(ВозвратКупленногоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратПринятогоТовараОтПокупателя); КодыОперацийПродажи.ДобавитьЗначение(ВозвратПринятогоПереданногоТовара); ИначеЕсли (РежимВидПродажи=2) И (РежимЧейТовар=2) Тогда // оптом, собственные товары КодыОперацийПродажи.ДобавитьЗначение(ПродажаКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратТовараОтПокупателя); КодыОперацийПродажи.ДобавитьЗначение(ВозвратКупленногоПереданногоТовара); ИначеЕсли (РежимВидПродажи=2) И (РежимЧейТовар=3) Тогда // оптом, комиссионные товары КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоТовара); КодыОперацийПродажи.ДобавитьЗначение(ПродажаПринятогоПереданногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратПринятогоТовараОтПокупателя); КодыОперацийПродажи.ДобавитьЗначение(ВозвратПринятогоПереданногоТовара); ИначеЕсли (РежимВидПродажи=2) И (РежимЧейТовар=4) Тогда // оптом, услуги КодыОперацийПродажи.ДобавитьЗначение(ПродажаУслуги); КодыОперацийПродажи.ДобавитьЗначение(СторноПродажаУслуги); ИначеЕсли (РежимВидПродажи=3) И (РежимЧейТовар=1) Тогда // в розницу, все товары КодыОперацийПродажи.ДобавитьЗначение(РозничнаяПродажаКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(РозничнаяПродажаПринятогоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратРозничныйКупленногоТовара); ИначеЕсли (РежимВидПродажи=3) И (РежимЧейТовар=2) Тогда // в розницу, собственные товары КодыОперацийПродажи.ДобавитьЗначение(ВозвратРозничныйКупленногоТовара); КодыОперацийПродажи.ДобавитьЗначение(ВозвратРозничныйКупленногоТовара); ИначеЕсли (РежимВидПродажи=3) И (РежимЧейТовар=3) Тогда // в розницу, комиссионные товары КодыОперацийПродажи.ДобавитьЗначение(РозничнаяПродажаПринятогоТовара); ИначеЕсли (РежимВидПродажи=3) И (РежимЧейТовар=4) Тогда // в розницу, услуги КодыОперацийПродажи.ДобавитьЗначение(ПродажаУслуги); КодыОперацийПродажи.ДобавитьЗначение(СторноПродажаУслуги); КонецЕсли;
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!