8.х Как объединить по горизонтали простой отчет 1С 8.1

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Даурен, 20 апр 2012.

  1. TopicStarter Overlay
    Даурен
    Offline

    Даурен

    Регистрация:
    20 апр 2012
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Есть отчет такой структуры:

    Код, Наименование,Артикул, Закуплено,Продано,Остаток.

    Фильтры по полям: Товар, Контрагент,Склад,Организация.

    Далее справа от поля Остаток, нужно выводить в колонках остатки складов выбранных в фильтре (тип СписокЗначений, тип "Справочник.Склады").

    Как это реализовать не понятно. Методы выввести потом объединить не помогли. читал, что надо делать во вложенных циклах, но как это реализовать не могу понять. Заранее спасибо. Код:


    Код:
    Функция ЗапросБезРасщифровки(Результат,Макет,ТабДок)
    
    ОбластьЗаголовок		 =   Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал		    =   Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы	  =   Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы	 =   Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей  =   Макет.ПолучитьОбласть("Детали");
    ТабДок.Очистить();
    ОбластьЗаголовок.Параметры.ДатаНач = Формат(ЭлементыФормы.ДатаНач.Значение,"ДФ=dd.MM.yyyy");
    ОбластьЗаголовок.Параметры.ДатаКон = Формат(ЭлементыФормы.ДатаКон.Значение,"ДФ=dd.MM.yyyy");
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    ВыборкаДетали = Результат.Выбрать();
    ИтогоКоличество		    =  0;
    ИтогоСтоимЗакуп		    =  0;
    ИтогоКоличествоПродано	 =  0;
    ИтогоСтоимПродано		  =  0;
    ИтогоСтоимПроданоБезСкидки =  0;
    ИтогоОстаток			   =  0;
    ИтогоОстатокНаНачало	   =  0;
    ФормаПрогрессора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
    ФормаПрогрессора.НаименованиеОбработкиДанных = "Заполнение данных отчетом";
    ФормаПрогрессора.КомментарийОбработкиДанных  = "Обрабатываются данные";
    ФормаПрогрессора.КомментарийЗначения		 = "Обработано";
    ФормаПрогрессора.Значение				    = 0;
    ФормаПрогрессора.МаксимальноеЗначение	    = ВыборкаДетали.Количество();
    ФормаПрогрессора.Открыть();
    
    Пока ВыборкаДетали.Следующий() Цикл
    ОбработкаПрерыванияПользователя();
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ОбластьДетальныхЗаписей.Параметры.НоменклатураОсновнойШтрихкод = ?(ЗначениеЗаполнено(ВыборкаДетали.Номенклатура.ОсновнойШтрихкод),ВыборкаДетали.Номенклатура.ОсновнойШтрихкод,ПолучитьШтрихКодТовара(ВыборкаДетали.Номенклатура));
    Состояние("Идет обработка данных...Ждите!");
    
    ИтогоКоличество			 =  ИтогоКоличество			   +  ВыборкаДетали.КоличествоОборот;
    ИтогоСтоимЗакуп			 =  ИтогоСтоимЗакуп			   +  ВыборкаДетали.СтоимостьОборот;
    ИтогоКоличествоПродано	  =  ИтогоКоличествоПродано	    +  ВыборкаДетали.КоличествоПродано;
    ИтогоСтоимПродано		   =  ИтогоСтоимПродано			 +  ВыборкаДетали.СтоимостьПродано;
    ИтогоСтоимПроданоБезСкидки  =  ИтогоСтоимПроданоБезСкидки    +  ВыборкаДетали.СтоимостьПроданоБезСкидки;
    
    Если ВыводитьОстатки тогда
    //остаток на конец
    Остаток					 =  ПолучитьОстатокИтого(Истина);//ПолучитьОстаток(ВыборкаДетали.Номенклатура,Истина);
    ОбластьДетальныхЗаписей.Параметры.Остаток				    =  Остаток;
    ИтогоОстаток			    =  ИтогоОстаток				  +  Остаток;
    //остаток на конец
    ОстатокНаНачало			 =  ПолучитьОстатокИтого(Ложь);
    ИтогоОстатокНаНачало	    =  ИтогоОстатокНаНачало		  +  ОстатокНаНачало;
    ОбластьДетальныхЗаписей.Параметры.ОстатокНаНачало		    =  ОстатокНаНачало;
    
    
    КонецЕсли;
    
    ТабДок.Вывести(ОбластьДетальныхЗаписей,ВыборкаДетали.Уровень());
    ФормаПрогрессора.Значение = ФормаПрогрессора.Значение + 1;
    КонецЦикла;
    Если ФормаПрогрессора.Открыта() Тогда
    ФормаПрогрессора.Закрыть();
    КонецЕсли;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ОбластьПодвалТаблицы.Параметры.КоличествоОборотИтого		  =  строка(ИтогоКоличество)		    +  " шт.";
    ОбластьПодвалТаблицы.Параметры.СтоимостьОборотИтого		   =  строка(ИтогоСтоимЗакуп)		    +  " тг.";
    ОбластьПодвалТаблицы.Параметры.КоличествоПроданоИтого		 =  строка(ИтогоКоличествоПродано)	 +  " шт.";
    ОбластьПодвалТаблицы.Параметры.СтоимостьПроданоИтого		  =  строка(ИтогоСтоимПродано)		  +  " тг.";
    ОбластьПодвалТаблицы.Параметры.СтоимостьПроданоБезСкидкиИтого =  строка(ИтогоСтоимПроданоБезСкидки) +  " тг.";
    ОбластьПодвалТаблицы.Параметры.ОстатокИтого				   =  строка(ИтогоОстаток)			   +  " шт.";
    ОбластьПодвалТаблицы.Параметры.ОстатокНаНачалоИтого		   =  строка(ИтогоОстатокНаНачало)	   +  " шт.";
    
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    КонецФункции
  2. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Не очень понятно. Покажите ваш макет. И почему это метод, как вы его назвали "объединить" не работает? Если я вас правильно понял, то именно он вам и нужен, только она называется "Присоединить()".
  3. TopicStarter Overlay
    Даурен
    Offline

    Даурен

    Регистрация:
    20 апр 2012
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Код:
    Функция ЗапросБезРасщифровки(Результат,Макет,ТабДок)
    
    
    ОбластьЗаголовок		 =   Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал		    =   Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы	  =   Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьШапкаСклады	   =   Макет.ПолучитьОбласть("ГруппаСкладов");
    
    ОбластьПодвалТаблицы	 =   Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей  =   Макет.ПолучитьОбласть("Детали");
    ТабДок.Очистить();
    ОбластьЗаголовок.Параметры.ДатаНач = Формат(ЭлементыФормы.ДатаНач.Значение,"ДФ=dd.MM.yyyy");
    ОбластьЗаголовок.Параметры.ДатаКон = Формат(ЭлементыФормы.ДатаКон.Значение,"ДФ=dd.MM.yyyy");
    ТабДок.Вывести(ОбластьЗаголовок);  
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    Список = ЭлементыФормы.Склад.Значение.ВыгрузитьЗначения();
    
    ТабДок.Вывести(ОбластьШапкаСклады);
    Для Каждого Стр из Список цикл
    ОбластьШапкаСклады.Параметры.ИмяСклада = Стр.Наименование;
    ТабДок.Присоединить(ОбластьШапкаСклады); 
    КонецЦикла;
    //
    //Для Номер = 0 по 8 Цикл
    // Список.Добавить("");
    //КонецЦикла;
    //Для Номер = 1 по Список.Количество()-1 Цикл
    // ОбластьШапкаСклады.Параметры.ИмяСклада = Список[Номер].Наименование;
    // ТабДок.Присоединить(ОбластьШапкаСклады);
    //КонецЦикла;
    
    ТабДок.НачатьАвтогруппировкуСтрок();
    ВыборкаДетали = Результат.Выбрать();
    ИтогоКоличество		    =  0;
    ИтогоСтоимЗакуп		    =  0; 
    ИтогоКоличествоПродано	 =  0;
    ИтогоСтоимПродано		  =  0;
    ИтогоСтоимПроданоБезСкидки =  0; 
    ИтогоОстаток			   =  0;
    ИтогоОстатокНаНачало	   =  0;
    
    ФормаПрогрессора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
    ФормаПрогрессора.НаименованиеОбработкиДанных = "Заполнение данных отчетом";
    ФормаПрогрессора.КомментарийОбработкиДанных  = "Обрабатываются данные";
    ФормаПрогрессора.КомментарийЗначения		 = "Обработано";
    ФормаПрогрессора.Значение				    = 0;
    ФормаПрогрессора.МаксимальноеЗначение	    = ВыборкаДетали.Количество();
    ФормаПрогрессора.Открыть();
    
    
    Пока ВыборкаДетали.Следующий() Цикл
    
    ОбработкаПрерыванияПользователя();
    
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ОбластьДетальныхЗаписей.Параметры.НоменклатураОсновнойШтрихкод = ?(ЗначениеЗаполнено(ВыборкаДетали.Номенклатура.ОсновнойШтрихкод),ВыборкаДетали.Номенклатура.ОсновнойШтрихкод,ПолучитьШтрихКодТовара(ВыборкаДетали.Номенклатура));
    
    Состояние("Идет обработка данных...Ждите!");
    
    
    ИтогоКоличество			 =  ИтогоКоличество			   +  ВыборкаДетали.КоличествоОборот;
    
    ИтогоСтоимЗакуп			 =  ИтогоСтоимЗакуп			   +  ВыборкаДетали.СтоимостьОборот;
    
    ИтогоКоличествоПродано	  =  ИтогоКоличествоПродано	    +  ВыборкаДетали.КоличествоПродано;
    
    ИтогоСтоимПродано		   =  ИтогоСтоимПродано			 +  ВыборкаДетали.СтоимостьПродано;
    
    ИтогоСтоимПроданоБезСкидки  =  ИтогоСтоимПроданоБезСкидки    +  ВыборкаДетали.СтоимостьПроданоБезСкидки;
    
    
    Если ВыводитьОстатки тогда
    //остаток на конец
    Остаток					 =  ПолучитьОстатокИтого(Истина);//ПолучитьОстаток(ВыборкаДетали.Номенклатура,Истина);
    
    ОбластьДетальныхЗаписей.Параметры.Остаток				    =  Остаток;
    
    ИтогоОстаток			    =  ИтогоОстаток				  +  Остаток;
    
    //остаток на конец
    ОстатокНаНачало			 =  ПолучитьОстатокИтого(Ложь);
    
    ИтогоОстатокНаНачало	    =  ИтогоОстатокНаНачало		  +  ОстатокНаНачало;
    
    ОбластьДетальныхЗаписей.Параметры.ОстатокНаНачало		    =  ОстатокНаНачало;
    
    //Список = ЭлементыФормы.Склад.Значение.ВыгрузитьЗначения();
    //
    //Для Каждого Стр из Список цикл
    // ОбластьШапкаСклады.Параметры.ИмяСклада = Стр.Наименование;
    // ТабДок.Присоединить(ОбластьШапкаСклады); 
    //КонецЦикла;
    
    КонецЕсли;
    
    
    ТабДок.Вывести(ОбластьДетальныхЗаписей,ВыборкаДетали.Уровень());
    
    ФормаПрогрессора.Значение = ФормаПрогрессора.Значение + 1;
    
    КонецЦикла;
    Если ФормаПрогрессора.Открыта() Тогда
    ФормаПрогрессора.Закрыть();  
    КонецЕсли;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ОбластьПодвалТаблицы.Параметры.КоличествоОборотИтого		  =  строка(ИтогоКоличество)		    +  " шт.";
    ОбластьПодвалТаблицы.Параметры.СтоимостьОборотИтого		   =  строка(ИтогоСтоимЗакуп)		    +  " тг.";
    
    ОбластьПодвалТаблицы.Параметры.КоличествоПроданоИтого		 =  строка(ИтогоКоличествоПродано)	 +  " шт.";
    ОбластьПодвалТаблицы.Параметры.СтоимостьПроданоИтого		  =  строка(ИтогоСтоимПродано)		  +  " тг.";
    ОбластьПодвалТаблицы.Параметры.СтоимостьПроданоБезСкидкиИтого =  строка(ИтогоСтоимПроданоБезСкидки) +  " тг.";
    
    ОбластьПодвалТаблицы.Параметры.ОстатокИтого				   =  строка(ИтогоОстаток)			   +  " шт.";
    ОбластьПодвалТаблицы.Параметры.ОстатокНаНачалоИтого		   =  строка(ИтогоОстатокНаНачало)	   +  " шт.";
    
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    
    КонецФункции
    
    [​IMG]

    [​IMG]
  4. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.984
    Симпатии:
    398
    Баллы:
    104
    Вот. У вас область ГруппаСкладов. Все, что слева от нее, тоже объединить в область. Например "Основные". В коде примерно так.
    Код:
    ОбластьЗаголовокОсновные = Макет.ПолучитьОбласть("Заголовок|Основные");
    ТабДок.Вывести(ОбластьЗаголовокОсновные);
    // ...
    ОбластьЗаголовокГруппаСкладов = Макет.ПолучитьОбласть("Заголовок|ГруппаСклдаов");
    ТабДок.Присоединить(ОбластьЗаголовокГруппаСкладов);
    
    Вот как то так.
  5. TopicStarter Overlay
    Даурен
    Offline

    Даурен

    Регистрация:
    20 апр 2012
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Спасибо проблема решена благодаря
    nbIpKuH_BaH9I



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

Поделиться этой страницей