Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Создание собственного отчета          
r1p88@mail.ru Подменю пользователя
сообщение 27.05.15, 14:26
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0

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

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


Макет выглядит таким образом:

Что я делаю не так? Почему в отчете нет данных?

sava1 Подменю пользователя
сообщение 27.05.15, 14:29
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

|Условие(Наименование1 в ВыбТовар); -> |Условие(Наименование1 в ВыбТовар.Наименование);

r1p88@mail.ru Подменю пользователя
сообщение 27.05.15, 14:31
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(sava1 @ 27.05.15, 15:29) *
|Условие(Наименование1 в ВыбТовар); -> |Условие(Наименование1 в ВыбТовар.Наименование);

На это я тоже обратил внимание. Но это не помогло.

sava1 Подменю пользователя
сообщение 27.05.15, 14:36
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

там лучше наоборот - в запросе брать товар, а не наименование
И ,кажется, при выборке из регистров нужна функция

r1p88@mail.ru Подменю пользователя
сообщение 27.05.15, 14:47
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0

Почитал информацию, таки да, нужна функция, осталось понять как её написать

sava1 Подменю пользователя
сообщение 27.05.15, 14:50
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

типо так

        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса =
        "//{{ЗАПРОС(Сформировать)
        |Период с {НачМесяца(датадок)} по {Мин(КонМесяца(ДатаДок),ПолучитьДатуТА())};
        |Без Итогов;  
        |Поб = Регистр."+ИмяРег+".ПОб;
        |Рахунок = Регистр."+ИмяРег+".Рахунок;
        |ТМЦ = Регистр."+ИмяРег+".ТМЦ;
        |Партія = Регистр."+ИмяРег+".Партія;
        |Кількість = Регистр."+ИмяРег+".Кількість;
        |Сума = Регистр."+ИмяРег+".Сума;
        |Функция КЗ = НачОст(Кількість);
        |Функция КП = Приход(Кількість);
        |Функция КК = КонОст(Кількість);
        |Функция СЗ = НачОст(Сума);
        |Функция СП = Приход(Сума);
        |Функция СК = КонОст(Сума);
        |Группировка Партія;
        |Группировка ТМЦ без групп;
        |Условие(Поб = Побл);
        |Условие(Рахунок.Код = РахунокТМЦ.Код);

r1p88@mail.ru Подменю пользователя
сообщение 27.05.15, 15:25
Сообщение #7

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0

Добавил уже у себя функцию в запросе. Всё равно чистый отчет....

Домовик Подменю пользователя
сообщение 27.05.15, 19:33
Сообщение #8

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

самое первое - попробуйте закомментировать для начала ВывестиСекцию(), и поставить Сообщить(Запрос.Менеджер) и тп. Это покажет, работает запрос или нет.
Так как в таблице могут тоже быть ошибки, или просто не заданы формулы в секциях.

То что, вы согнали скопом во внутреннюю группировку вывод четырех секций покажет некрасивый очень результат все равно.

Зачем вам условие во внутренней группировке на ЭтоГРуппа() ?

Сообщение отредактировал Домовик - 27.05.15, 19:36

igmig65 Подменю пользователя
сообщение 28.05.15, 10:45
Сообщение #9

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 613
Из: Донецкая обл
Спасибо сказали: 168 раз
Рейтинг: 140.9

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

    
    Пока Запрос.Группировка(1) = 1 Цикл
          Сообщить(Запрос.Контрагент);
          Пока Запрос.Группировка(2) = 1 Цикл
               Сообщить(""+Запрос.Товар.Наименование+"/"+Запрос.Товар.Артикул+"/"+Запрос.КвоСум+"/"+Запрос.СумСум);
          КонецЦикла;
    КонецЦикла;
  
КонецПроцедуры


если выдаст лог, то вставляйте вывод в таблицу

Sharzem Подменю пользователя
сообщение 28.05.15, 13:42
Сообщение #10

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Мда... Вообщето правильней было б формировать по оборотному регистру, если такой имеется... Хотя и по регистру остатков тоже реально вытянуть нужную информацию, в т.ч. и розничные цены типа:
ТекДок = Регистр.ПартииТоваров.ТекущийДокумент;
и
Условие(Когда ТекДок.Вид = "Расходная накладная")

...хотя, инфы недостаточно.

Какой это регистр оборотный или остатков ?
В регистре Остатков в реквизитах вполне реально могут храниться виды движений: приход, расход или возврат, со ссылкой в ресурс, например Обороты...
Решений вопроса немеряное количество, вплоть до выборки циклом документов, с последующей выгрузкой табличной части в таблицу значений, вложением этой таблицы значений в последующую Таблицу значений и добавлением этого "добра" в список значений по символьному представлению "Иванов", "Петров", "Сидоров" с последующей передачей в запрос как скопом так и по отдельности, все зависит от того какой приходный документ выкурить ): 44000000.gif

Автор, может больше раскажете что у Вас там за зверюка или заскриньте содержимое регистра из конфигуратора дабы не флудить ?


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

r1p88@mail.ru Подменю пользователя
сообщение 28.05.15, 15:37
Сообщение #11

Говорящий
***
Группа: Пользователи
Сообщений: 51
Спасибо сказали: 0 раз
Рейтинг: 0

Вот фото регистра. По тому примеру, что мне раньше скинули, сделал. Отчет выводит, НО, записей очень мало.

Sharzem Подменю пользователя
сообщение 29.05.15, 10:46
Сообщение #12

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Уже ближе. Еще раз, это точно регистр остатков ? И заодно расшифруйте что такое "КодОперации" и какие значения там хранятся.
В конечном результате Вам что нужно вытянуть только обороты или еще нужно получить сумму закупки, сумму продажи и процент дохода ?
Чет у меня не выходит угадывать.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

vadim007 Подменю пользователя
сообщение 29.05.15, 12:15
Сообщение #13

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Цитата(r1p88@mail.ru @ 27.05.15, 14:26) *
Есть задача создать простой отчет по продажам

Отчет по продажам - это не простой отчет.
Судя по регистрам - у вас конфигурация ТиС. В ней есть подобный отчет, чувствую, вы взяли его за основу.
В свое время добавлял в него Менеджеров, каковыми были просто авторы документов.

Домовик Подменю пользователя
сообщение 29.05.15, 12:26
Сообщение #14

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

КодОперации- вероятно код хоз. операции для обмена Торговля-БухУчет( В комплексной там тоже от регистров проводки делаются по хоз операциям).
к задаче это не имеет отношения.
Не грузите товарища. Пусть хоть что-то выведет, а когда выведет и разберется, добавит, изменит, нарастит, что нужно.

Сообщение отредактировал Домовик - 29.05.15, 12:28

vadim007 Подменю пользователя
сообщение 29.05.15, 12:44
Сообщение #15

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Фрагмент из упомянутого мною отчета:
КодыОперацийПродажи=СоздатьОбъект("СписокЗначений");
    Если (РежимВидПродажи=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 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 24.04.24, 0:38
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!