Имя: Пароль:
1C
1С v8
Помогите создать внешний отчет
0 ЛюблюРоллы
 
22.03.17
17:43
Помогите разобраться.
Создаю впервые внешний отчет.
СКД сделала, там прописала вычисляемые поля и пр.
Макет создала.
В модуле затык.

Функция Печать() Экспорт
    ТабДок=Новый ТабличныйДокумент; //Создаем новый табличный документ, в котором будут выводиться области макета
    Макет= ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //Получаем созданный макет
    
    //Получим все области макета в переменные
    ОбластьШапки=Макет.ПолучитьОбласть("Шапка");
    ОбластьДанные=Макет.ПолучитьОбласть("Данные");
    ОбластьПодвал=Макет.ПолучитьОбласть("Подвал");
    ОбластьШапки.Параметры.ТекстЗаголовка=СсылкаНаОбъект.ОтчетПоПродажамТМЦ;
    ОбластьШапки.Параметры.ДокументПродажи=СсылкаНаобъект.ДокументПродажи;
    ОбластьШапки.Параметры.Количество=СсылкаНаОбъект.Количество;
    ОбластьШапки.Параметры.ЦенаП=СсылкаНаОбъект.ЦенаП;
    ОбластьШапки.Параметры.СуммаП=СсылкаНаОбект.СуммаП;
    ОбластьШапки.Параметры.НДСП=СсылкаНаОбъект.НДСП;
    ОбластьШапки.Параметры.ЦенаР=СсылкаНаобъект.ЦенаР;
    ОбластьШапки.Параметры.СуммаР=СсылкаНаОбъект.СуммаР;
    ОбластьШапки.Параметры.Скидка=СсылкаНаОбъект.Скидка;
    ОбластьШапки.Параметры.НДСР=СсылкаНаОбъект.НДСР;
    ОбластьШапки.Параметры.Процент=СсылкаНаОбъект.Процент;
    ОбластьШапки.Параметры.Сумма=СсылкаНаОбъект.Сумма;
    
    ТабДок.Вывести(ОбластьШапки); //Выводим параметры шапки в таблиный документ
    
    //Получение данных
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    |    ПоступлениеТоваров.Ссылка КАК ПоступлениеТовара,
    |    ПоступлениеТоваров.СуммаДокумента КАК СуммаП,
    |    ПоступлениеТоваров.ЦенаВключаетНДС КАК ЦенаП,
    |    ПоступлениеТоваров.УчитыватьНДС КАК НДСП,
    |    РеализацияТоваров.Ссылка КАК РеализацияТовара,
    |    РеализацияТоваров.СуммаДокумента КАК СуммаР,
    |    РеализацияТоваров.ЦенаВключаетНДС КАК ЦенаР,
    |    РеализацияТоваров.УчитыватьНДС КАК НДСР,
    |    РеализацияТоваров.СкидкиРассчитаны КАК Скидка,
    |    ПродажиОбороты.КоличествоОборот КАК Количество,
    |    ПродажиОбороты.ДокументПродажи
    | ИЗ
    |    РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваров КАК РеализацияТоваров
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    |            ПО ПоступлениеТоваров.Контрагент = РеализацияТоваров.Контрагент
    |        ПО ПродажиОбороты.ДокументПродажи = РеализацияТоваров.Ссылка";
     //Передаем в запрос нужные параметры
    Запрос.УстановитьПараметр("ПоступлениеТовара",СсылкаНаобъект.ПоступлениеТовара);
    Запрос.УстановитьПараметр("Количество",СсылкаНаобъект.Количество);
    Запрос.УстановитьПараметр("ЦенаП",СсылкаНаобъект.ЦенаП);
    Запрос.УстановитьПараметр("СуммаП",СсылкаНаобъект.СуммаП);
    Запрос.УстановитьПараметр("НДСП",СсылкаНаобъект.НДСП);
    Запрос.УстановитьПараметр("ЦенаР",СсылкаНаобъект.ЦенаР);
    Запрос.УстановитьПараметр("СуммаР",СсылкаНаобъект.СуммаР);
    Запрос.УстановитьПараметр("Скидка",СсылкаНаобъект.Скидка);
    Запрос.УстановитьПараметр("НДСР",СсылкаНаобъект.НДСР);
    Запрос.УстановитьПараметр("Процент",СсылкаНаобъект.Процент);
    Запрос.УстановитьПараметр("Сумма",СсылкаНаобъект.Сумма);
    //Выполняем запрос для получения нужной выборки данных
    Выборка=Запрос.Выполнить().Выбрать();
    //Инициализируем переменные, в которых будут выводиться итоги
        ИтогоКоличество=0;
        ИтогоЦенаП=0;
        ИтогоСуммаП=0;
        ИтогоНДСП=0;
        ИтогоЦенаР=0;
        ИтогоСуммаР=0;
        ИтогоСкидка=0;
        ИтогоНДСР=0;
        ИтогоПроцент=0;
        ИтогоСумма=0;
    //Обходим данные выборки
    Пока Выборка.Следующий() Цикл
        ЗаполнитьЗначениеСвойств(ОбластьДанные.Параметры,Выборка);
        
        ИтогоКоличество=ИтогоКоличество+Выборка.Количество;
        ИтогоЦенаП=ИтогоЦенаП+Выборка.ЦенаП;
        ИтогоСуммаП=ИтогоСуммаП+Выборка.СуммаП;
        ИтогоНДСП=ИтогоНДСП+Выборка.НДСП;
        ИтогоЦенаР=ИтогоЦенаР+Выборка.ЦенаР;
        ИтогоСуммаР=ИтогоСуммаР+Выборка.СуммаР;
        ИтогоСкидка=ИтогоСкидка+Выборка.Скидка;
        ИтогоНДСР=ИтогоНДСР+Выборка.НДСР;
        ИтогоПроцент=ИтогоПроцент+Выборка.Процент;
        ИтогоСумма=ИтогоСумма+Выборка.Сумма;

        ТабДок.Вывести(ОбластьДанные);
    КонецЦикла;
    //Заполняем и выводим область подвал
    ОбластьПодвал.Параметры.ИтогоКоличество=ИтогоКоличество;
    ОбластьПодвал.Параметры.ИтогоЦенаП=ИтогоЦенаП;
    ОбластьПодвал.Параметры.ИтогоСуммаП=ИтогоСуммаП;
    ОбластьПодвал.Параметры.ИтогоНДСП=ИтогоНДСП;
    ОбластьПодвал.Параметры.ИтогоЦенаР=ИтогоЦенаР;
    ОбластьПодвал.Параметры.ИтогоСуммаР=ИтогоСуммаР;
    ОбластьПодвал.Параметры.ИтогоСкидка=ИтогоСкидка;
    ОбластьПодвал.Параметры.ИтогоНДСР=ИтогоНДСР;
    ОбластьПодвал.Параметры.ИтогоПроцент=ИтогоПроцент;
    ОбластьПодвал.Параметры.ИтогоСумма=ИтогоСумма;
    
    ТабДок.Вывести(ОбластьПодвал);
    Возврат ТабДок;
КонецФункции

Не кидайтесь помидорами сразу. Я первый раз пишу этот отчет.
Подскажите что я неправильно делаю.
Или где посмотреть правильность написания модуля внешнего отчета.

На все поля пишет "Переменная неопределенна". Это в макете косяк?
1 Любопытная
 
22.03.17
17:45
Ничоси, какая каша в голове)
Отчету на СКД, кроме самой СКД ничего не надо для того, чтобы сформироваться с настройками по умолчанию
2 Лефмихалыч
 
22.03.17
17:46
зачем вообще что-то писать в модуле, если отчет на СКД?
3 Ёпрст
 
22.03.17
17:46
>>>СКД сделала, там прописала вычисляемые поля и пр.

И зачем тогда запрос пишешь в коде ?!
4 ildary
 
22.03.17
17:48
(3) Возможно задание такое было - создать отчет на СКД
5 ЛюблюРоллы
 
22.03.17
17:50
делала всё по примеру, думала надо обязательно прописывать модуль.
Не надо? Можно весь этот ужас удалить и всё выведется в отчете по созданному макету?
6 Ёпрст
 
22.03.17
17:51
(5) Прочитай книжку Хрусталёвой, к примеру. Там усё есть по-шагам
7 ЛюблюРоллы
 
22.03.17
17:58
Хрусталевой Создание сложных отчетов?
Я там не нашла ни про создание макетов, ни про описание всех полей в модуле.
Мне нач. сказал "будешь делать - в модуле пропиши комментарии". Вывод: модуль нужно прописывать.
8 ejikbeznojek
 
22.03.17
18:00
(7)
Не правильный вывод.

Он наверное имел в виду, если на СКД не получится сделать, сделай хоть как-нибудь
9 ЛюблюРоллы
 
22.03.17
18:04
по моему СКД намного проще, чем прописывать всё в модуле.
модуль удалила - работает с мелкими недочетами. Их я думаю сама смогу устранить.
10 ЛюблюРоллы
 
22.03.17
18:07
Сорри за панику. Я просто лузер еще, каждый косяк вводит меня в стопор и ужас.
11 Любопытная
 
22.03.17
18:08
(7) А задача была на СКД сделать отчет?
Для отчетов на СКД тоже можно прописать модуль, если нужно какое-то ну очень нестандартное поведение. В модуле объекта должна быть описана процедура ПриКОмпоновкеРезультата, в которой описываются действия, необходимые для выполнения отчета.
12 ejikbeznojek
 
22.03.17
18:09
(9) Всякое бывает.
Часто нужно получить какую-то таблицу более-менее сложную, которую одним запросом сложно получить.
Её получают "в модуле" (по твоей терминологии^_^)
Создают макет, в котором указывают имена полей и какой тип данных у каждого поля.
И потом эту таблицу передают в СКД, чтобы пользователь мог колбасить какие ему угодно отборы и группировки.
13 ejikbeznojek
 
22.03.17
18:10
Но в хрусталёвой  это вроде есть
14 ЛюблюРоллы
 
22.03.17
18:23
"И потом эту таблицу передают в СКД, чтобы пользователь мог колбасить какие ему угодно отборы и группировки."
Возможно.
Мне нужно создать Отчет по продажам ТМЦ в учебной базе.
Там никаких документов "Поступление ТМЦ(купля-продажа)" нет, вообще никаких упоминаний ТМЦ ни в одном документе нет.

Я взяла 2 таблицы "Поступление товара" и "Реализация товара", связала их, добавила вычисляемые поля "ПроцентПрибыли" и "СуммаПрибыли". Сейчас пытаю макет, чтобы всё красиво выводилось и там где нужно.
15 ejikbeznojek
 
22.03.17
18:30
А нельзя в учебной базе добавить регистр накопления "ОстаткиТМЦ" или там "Продажи"
Добавить в документах Поступления и реализациях, чтобы они делали записи в этот регистр. И сделать отчёт по этому регистру.
По документам крайне не желательно какие-либо отчёты делать.

Вот например есть у тебя 1 товар - карандаш и 2 документа
Приход и Расход. В день ты колбасишь по 100 документов обоих видов.
Если делать отчёт по документам.
Спустя пару лет, тебе чтобы узнать простую цифру, сколько карандашей осталось, тебе нужно будет миллион арифметических действий выполнить.
16 ЛюблюРоллы
 
22.03.17
18:35
Есть регистр накопления "Продажи".
Я сначала регистр Продажи связала с документом "Реализация товара", а потом "Реализация товара" связала с "Поступлением товара". Но потом подумала, что лишнего навертела и удалила его.
17 ejikbeznojek
 
22.03.17
18:42
Ну регистр то всё равно нужен.
Только если у тебя не партионный учёт, то реализацию я бы не стал связывать с поступлением.
С реализацием можно связать возврат реализации, если он у тебя есть конечно)), или у тебя поступление и для закупки и для возврата?
18 ЛюблюРоллы
 
22.03.17
19:07
Сейчас пробую объединить 2 запроса:
1)Регистр накопления "Закупки товаров" + Документ "Поступление товаров"
2)Регистр накопления "Продажи" + Документ "Реализация товаров"
Почему то в цене выводится да/нет, вместо цифр. Почему так?
19 lera01
 
22.03.17
19:10
РеализацияТоваров.ЦенаВключаетНДС КАК ЦенаР
20 ejikbeznojek
 
22.03.17
19:13
Возможно потому что ЦенаВключаетНДС это галка, а не цифра?
Может быть заменить 2 регистра одним, ОстаткиТМЦ?
Тогда соединять не придётся)
21 ЛюблюРоллы
 
22.03.17
19:25
ОстаткиТМЦ - такого нет.
Регистра Остатки тоже нет.
Если ЦенаВключаетНДС - галка, тогда
Если ее брать из вложенной таблицы "Товары",  в отчете пишет "В условиях соединения запросов не допускается обращение к табличным частям".
22 lera01
 
22.03.17
20:41
Если тебе надо сделать отчет именно по продажам ТМЦ, а запрос в схеме СКД примерно такой, как в (0), то ты делаешь в корне неправильно. Зачем вообще соединять реализацию с поступлением? Подумай, что вообще происходит в твоей базе, откуда берется прибыль при продаже? Если твоя база хоть как-то приближена к реальной ситуации, в ней как-то учитываются товары в количественном и суммовом выражении, а при продаже товары списываются с остатков по количеству и сумме. При этом прибыль образуется как разность между суммой продажи и списанной суммой оценки.
23 ЛюблюРоллы
 
22.03.17
21:12
В отчете должны выводиться поля:
Количество
Цена, Сумма, НДС - Поступление
Цена, Сумма, НДС, Скидка - Реализация
Процент, Сумма - Прибыль

Цены, Суммы, НДС, Скидки прописаны только в Документах ПоступлениеТоваров и РеализацияТоваров. При этом Цена находится во вложенной таблице Товары.

Процент и Сумма прибыли - вычисляемые поля.
СуммаПрибыли=СуммаРеализации-Суммапоступление
Процент=СуммаПрибыли*100/СуммаПоступление
Это всё сходится по примеру отчета, который мне дали в печатном виде.
24 ЛюблюРоллы
 
22.03.17
21:13
Забыла указать первое поле:
Фирма/Номенклатура/Документ поставки/Документ реализации.

Как это всё совместить в одном поле?