Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:10

Как вывести результат запроса в табличный документ?

Автор djvjv, 16 мар 2012, 08:14

0 Пользователей и 1 гость просматривают эту тему.

djvjv

Розница 2.0
Есть такой код надо его довести до ума. А точнее чтоб из РегистрНакопления.Продажи.Обороты передавались данные во внешний отчет.
Артикул, Товар, Количество, Единица Измерения, Цена, Сумма. То есть чтобы выводились все имеющиеся данные.
А еще надо чтоб если дата начала и дата конец одинаковые выводились шапка и строка, иначе строка 1 и шапка 1. А еще надо чтоб если магазин не выбран то чтоб выводились данные из всех магазинов.

Перем ЗаДень;
&НаКлиенте
Процедура КомандаСформировать(Команда)
Таб = ВыполнениеНаСервере();
Таб.Показать("Макет","");
КонецПроцедуры

&НаСервере
Функция ВыполнениеНаСервере()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПродажиОбороты.КоличествоОборот КАК Количество,
| ПродажиОбороты.СтоимостьОборот КАК Сумма,
| ПродажиОбороты.Номенклатура.ЕдиницаИзмерения КАК Ед,
| ПродажиОбороты.Номенклатура.Артикул КАК Артикул,
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Продавец,
| ПродажиОбороты.ДокументПродажи
|ИЗ
| РегистрНакопления.Продажи.Обороты(&ДатаНачало, &ДатаКонец, Регистратор, ) КАК ПродажиОбороты";
Запрос.УстановитьПараметр("ДатаНачало", Отчет.ВыбНачПериода);
Запрос.УстановитьПараметр("ДатаКонец", КонецДня(Отчет.ВыбКонПериода));   
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();


ТЗ = Новый ТаблицаЗначений;
ТабДок = Новый ТаблицаЗначений;
Таб = Новый ТабличныйДокумент;
КолонкаКодов    = ФормированиеПечатныхФормСервер.ИмяДополнительнойКолонки();
ВыводитьКоды    = ЗначениеЗаполнено(КолонкаКодов);

//Таб.Колонки.Добавить("Номер");
//Таб.Колонки.Добавить("Артикул");
//Таб.Колонки.Добавить("Товар");
//Таб.Колонки.Добавить("Количество");
//Таб.Колонки.Добавить("Ед");
//Таб.Колонки.Добавить("Цена");
//Таб.Колонки.Добавить("Сумма");
//Таб.ИсходнаяТаблица("Сформировать");
//Ит = Новый БухгалтерскиеИтоги ;

ЗаДень = ?(Отчет.ВыбНачПериода = Отчет.ВыбКонПериода, 1, 0);
//ЗаДень = ?(ВыбНачПериода = ВыбКонПериода, 1, 0);

ЭтотОбъект=РеквизитФормыВЗначение("Отчет");
Макет = ЭтотОбъект.ПолучитьМакет("Макет");

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

Таб.Вывести(ОбластьЗаголовок);
////Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
////Ит.ВыполнитьЗапрос(Отчет.ВыбНачПериода, Отчет.ВыбКонПериода, "41.4, 43", "90.2.1,90.2.2 ",, 2,"Операция", "СК");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка1 = Макет.ПолучитьОбласть("Шапка1");
ОбластьШапкаНомера    = Макет.ПолучитьОбласть("Шапка|НомерСтроки");
ОбластьШапкаКодов    = Макет.ПолучитьОбласть("Шапка|КолонкаКодов");
ОбластьШапкаДанных    = Макет.ПолучитьОбласть("Шапка|Данные");
ОбластьШапкаСуммы    = Макет.ПолучитьОбласть("Шапка|Сумма");

ОбластьКолонкаАртикул = Макет.Область("КолонкаКодов");
ОбластьКолонкаТовар = Макет.Область("Товар");

ОбластьКолонкаСумма = Макет.Область("Сумма");
ОбластьСтрокаНомера    = Макет.ПолучитьОбласть("Строка|НомерСтроки");
ОбластьСтрокаКодов    = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
ОбластьСтрокаДанных    = Макет.ПолучитьОбласть("Строка|Данные");
ОбластьСтрокаСуммы    = Макет.ПолучитьОбласть("Строка|Сумма");
//ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("");
ТабДок.Вывести(Шапка, ВыборкаДетальныеЗаписи.Уровень());

Если ЗаДень = 1 Тогда
Таб.Вывести(ОбластьШапка);
Иначе
Таб.Вывести(ОбластьШапка1);
КонецЕсли;

Таб.Вывести(ОбластьСтрокаНомера);
Таб.Присоединить(ОбластьСтрокаКодов);
Таб.Присоединить(ОбластьСтрокаДанных);
Таб.Присоединить(ОбластьСтрокаСуммы);
//ВыборкаДетальныеЗаписи = Результат.Выбрать();
//Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
//ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
//Таб.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
//КонецЦикла;
//Таб.ЗакончитьАвтогруппировкуСтрок();
//ТЗ.Колонки.Добавить("Номер");
//ТЗ.Колонки.Добавить("Товар");
//// Изм. Н
//ТЗ.Колонки.Добавить("Артикул");
//// Изм. К
//ТЗ.Колонки.Добавить("Количество");
//ТЗ.Колонки.Добавить("Ед");
//ТЗ.Колонки.Добавить("Сумма");   
//ТЗ.Колонки.Добавить("Цена");
//
//ТабДок.Колонки.Добавить("Количество");
//ТабДок.Колонки.Добавить("Цена");
//ТабДок.Колонки.Добавить("Сумма");

Пока ВыборкаДетальныеЗаписи.Следующий()=1 Цикл
Док = ВыборкаДетальныеЗаписи.Документ;
Если Док.Вид() = "БухгалтерскаяСправка" Тогда // если вид документа бухгалтерская справка, то это корректировка, а не реализация
Продолжить;
КонецЕсли;
ВыборкаДетальныеЗаписи.Следующий();
Пока ВыборкаДетальныеЗаписи.Следующий() = 1 Цикл
Если Док.Вид() = "ПоступлениеТоваров" Тогда
Возвр = 1;
Иначе Возвр = 0;
КонецЕсли;

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


Пока ВыборкаДетальныеЗаписи.Следующий()=1 Цикл
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
НомДок = ?(ЗаДень = 1,ТЗ.НомДок,"");
Товар= ТЗ.Товар;
// Изм. Н
Артикул = ТЗ.Товар.Артикул;
// Изм. К
Ед=ТЗ.Товар.ЕдиницаИзмерения;
Количество = ТЗ.Количество;
Цена = ТЗ.Цена;
Сумма = ТЗ.Сумма;
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока1 = Макет.ПолучитьОбласть("Строка1");

Если ЗаДень = 1 Тогда
Таб.Вывести(ОбластьСтрока);
Иначе
Таб.Вывести(ОбластьСтрока1);
КонецЕсли;
КонецЦикла;
КонецЦикла;
//ИтогоСумма = ТЗ.Итог("Сумма");   
//ИтогоКоличество = ТЗ.Итог("Количество");
ОбластьИтого = Макет.ПолучитьОбласть("Итого");
Таб.Вывести(ОбластьИтого);
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
Таб.Вывести(ОбластьПодвал);
//Таб.ТолькоПросмотр(1);
Возврат Таб;
//КонецЦикла;
КонецФункции
//}}БУХГАЛТЕРСКИЙ ЗАПРОС

Процедура ПриОткрытии()

//{{ИНИЦИАЛИЗАЦИЯ БУХГАЛТЕРСКОГО ЗАПРОСА(Сформировать)
ВыбНачПериода = ТекущаяДата();
ВыбКонПериода = ТекущаяДата();
//{{ИНИЦИАЛИЗАЦИЯ БУХГАЛТЕРСКОГО ЗАПРОСА

КонецПроцедуры


&НаКлиенте
Процедура КомандаЗакрыть(Команда)
// Вставить содержимое обработчика.
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
// Вставить содержимое обработчика.
КонецПроцедуры

cska-fanat-kz

Вы хотя бы отлаживали эту смесь кода 8.2 и 7.7?!!

Я тоже так могу - вылить на форум неотформатированную "простыню" и сказать: "нате копайтесь, мне же НАДО..."
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

djvjv

Мне очень нужна помощь. Я только неделю назад начал изучать 1с. Помогите мне сделать рабочий код.

sergejK74

Обязательно внешний отчет? Если нет - то открываешь отчет Продажи, в нем Все действия - Изменить вариант и там оставляешь нужные тебе поля Номенклатура, Продавец, Регистратор, еще чего нибудь убираешь-выбираешь и в конце-концов сохраняешь как свой вариант отчета. А иначе будешь как в 7.7 на каждый чих свой отчет мастерить.
Кнопочка Спасибо - слева!

djvjv

Обязательно внешний отчет.Чихов не будет.
Мне сделать этот вариант. Он  больше никогда не будет исправляться потом!

djvjv

Мне нужно чтоб еще данные в заголовке и подвале выводились нужные

sergejK74

Тогда все плохо.
В Рознице нет документа Бухгалтерская справка, в продажах скорее всего нет документа ПоступлениеТоваров. Зачем выбирать номенклатуру запросом, а затем делать цикл по строкам документа? В 8.2 есть конструктор запроса с выводом в табличный документ (если тебе так хочется использовать его), есть отчеты на СКД. Начни с малого - сделай простой запрос к виртуальной таблице регистра накопления Продажи.Обороты, а там уже видно будет. А от такого куска кода на смеси французского 8.2 с нижегородским 7.7, с закомментированными кусками, прочитавшему можно заработать эректильную дисфункцию.
Кнопочка Спасибо - слева!

cska-fanat-kz

Цитата: sergejK74 от 16 мар 2012, 09:22
А от такого куска кода на смеси французского 8.2 с нижегородским 7.7, с закомментированными кусками, прочитавшему можно заработать эректильную дисфункцию.

+100
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

djvjv


Chemezov

Цитата: djvjv от 16 мар 2012, 08:34
Мне очень нужна помощь. Я только неделю назад начал изучать 1с. Помогите мне сделать рабочий код.
Бгыгыгы нормально :)
Смотри уроки Чистова, встань и иди :))

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск