Имя: Пароль:
1C
1С v8
Цикл для перебора подразделений
0 batman1978
 
26.12.14
17:42
Помогите пожалуйста с написанием кода
Есть список подразделений загруженный в поле выбора из справочника подразделений, теперь надо для каждого подразделения сформировать новый отчет

начал с вот этого

Для к = 1 по СписокПодразделений.Количество() цикл
        подразд = СписокПодразделений.Получить(к) ;
теперь как передать значение "подразд" в настройки скд и что бы он для него сформировал макет и т.д. пока не переберет все значения подразделения ?
1 palladyi
 
26.12.14
17:45
в скд не шибко силен, но вижу такой вариант: передай в параметры сразу список всех подразделений, а результаты сгруппируй  по подразделениям и разнеси в разные таблички...
2 batman1978
 
26.12.14
17:49
мне надо потом результат по каждому подразделению сохранить в отдельный файл )
и он еще на диаграмме клеит их все в одну а не на каждое подразделение свою диаграмму
3 batman1978
 
26.12.14
17:51
на 8.1 на диаграмме можно только 1 ресурс использовать - а у меня их 2 .. поэтому .. подскажите лучше как в форме цикл написать для перебора подразделений и передачу значения подразделения дальше ) в скд )
4 ДенисЧ
 
26.12.14
18:56
спр = Справочники.Подразделения.Выбрать();
Пока спр.Следующий() Цикл
  ПередатьЗначениеДальше(спр.ссылка);
КОнецЦикла
5 batman1978
 
27.12.14
12:25
ДенисЧ, могу уточнить что из справочника не желательно брать, у меня есть уже загруженный список и он храниться в СписокПодразделений, можете через него подсказать ?
и мне как-то полученное значение надо передать в настройку параметров СКД - что бы он сформировал отчет на каждое значение из спискаподразделений пока Цикл не переберет их все.
может правильнее будет привести весь код ? что бы вам понятнее было ?
6 batman1978
 
27.12.14
12:29
Процедура ПриОткрытии()
    
    Дата1 = НачалоМесяца(ТекущаяДата());
    Дата2 = ТекущаяДата()-60*60*24;
    
    если СписокПодразделений.Количество() = 0 тогда
        
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("ФлагЗакрытия",Истина);
        Запрос.Текст =  "ВЫБРАТЬ
                        |    Подразделения.Ссылка
                        |ИЗ
                        |    Справочник.Подразделения КАК Подразделения
                        |ГДЕ
                        |    НЕ Подразделения.Город IS NULL
                        |    И Не Подразделения.Закрыто
                        |   И Подразделения.Магазин";

                        Запрос.УстановитьПараметр("IS NULL", );
                        Запрос.УстановитьПараметр("истина", истина );
                        Результат = Запрос.Выполнить();
                        
        ТЗ = Результат.Выгрузить();

        Список = Новый СписокЗначений;

        Список.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку("Ссылка")); // ТЗ.ВыгрузитьКолонку("Ссылка") - это массив значений из колонки "Ссылка", а "ЗагрузитьЗначения" - загружает массив в список

        СписокПодразделений = Список; // ограничим интерактивный выбор содержимым списка "Список"
    конецесли;
            
КонецПроцедуры

процедура КнопкаСформироватьНажатие (Кнопка)

ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Дата1").Значение = Дата1;
    ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Дата1").Использование = Истина;

    
    ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Дата2").Значение = Дата2;
    ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Дата2").Использование = Истина;
    
        
    ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();
    элементотбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Подразделение");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = СписокПодразделений;
    
    Для к = 1 по СписокПодразделений.Количество() цикл
        подразд = СписокПодразделений.Получить(к) ;
        //СписокПодразделений.Получить(Подразд);
        
    СхемаКомпоновкиДанных = ОтчетОбъект.получитьмакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    /////////////////////////////////////////////////////////////////////////////////////
     ВнешниеНаборыДанных = Новый Структура; // инициализация внешних наборов данных
     ВнешниеНаборыДанных.Вставить("ТЗСчетчикиТек",ТЗСчетчикиСКЛТек);
    
    //////////////////////////////////////////////////////////////////////////////////////
    
    
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных, ДанныеРасшифровки);
    
        
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ДокументРезультат = Новый ТабличныйДокумент; // задаем название для определения нового окна
    
    ДокументРезультат.Очистить();

ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

ДокументРезультат.Показать();

Для каждого Рисунок из ДокументРезультат.Рисунки Цикл
         Рисунок.Ширина =300;
    КонецЦикла;


    
    
КонецЦикла;
    
    
        
конецпроцедуры
7 ilyavorobyev
 
27.12.14
13:06
(6) в цикле у тебя формируется табличный документ ДокументРезультат, его и сохраняй каждый раз в файл
8 ilyavorobyev
 
27.12.14
13:08
(6) формирование его запихай в цикл, по СписокПодразделений.Количество() и в параметр скд пихай СписокПодразделений.Получить(к)
9 Oleg_ka
 
27.12.14
13:22
Вам с кетчупом?....
Для каждого ПодразделениеСсылка Из СписокПодразделений Цикл
Сообщить(ПодразделениеСсылка);
КонецЦикла;

.... или с майонезом?
Для Счетчик = 0 По СписокПодразделений.Количество()-1 Цикл
Сообщить(СписокПодразделений.Получить(Счетчик));
КонецЦикла;
10 batman1978
 
27.12.14
15:00
Oleg_ka - вы смотрели код который я кинул ?
давайте еще раз обьясню -
1 оварлоыва
2 укдолапрывдл
3 пдлопавы
4 адлопвда
это список подразделений он уже у нас есть - я его выбрал запросом в процедуре при открытии (по нужным мне критериям)
теперь этот список - надо перебрать по одному -
"оварлоыва" - и сформировать отчет и потом сохранить
"укдолапрывдл" и сформировать отчет и потом сохранить (в новый файл)
и так с каждым отобранным
а так по вашему циклу я не сформирую для каждого сфой отчет при начальных равных параметрах для каждого одинаковые
или может я неправильно понимаю вас ?
11 Славен
 
27.12.14
15:04
(10) сделай в скд, вынеси в группировку подразделение, при выводе в табличный документ, разбивай его по этой группировке и сохраняй как хочешь
12 batman1978
 
27.12.14
15:07
Славен

пробывал но - задача в том что полученныый результат нужно сохранить в файл и отправить подразделению - а не один общий всем
так бы я вопросы не задавал сейчас )
13 Славен
 
27.12.14
15:15
(12) и что? Отловить событие вывода в тч из скд проблема? Отлавливаешь вывод и по подразделениям-группировкам разбиваешь таб документ и сохраняешь в файлЫ. Глянь рассчетный листок, как он бьется при выводе на листы, так же можно бить по подразделениям и сохранять в файлы.
14 batman1978
 
27.12.14
15:29
Славен
и что? Отловить событие вывода в тч из скд проблема? Отлавливаешь вывод и по подразделениям-группировкам разбиваешь таб документ и сохраняешь в файлЫ.
15 batman1978
 
27.12.14
15:29
а можно поподробнее ?
16 batman1978
 
27.12.14
15:58
кстати идея с групировкой помогла, стал отдельный график на отдельное подразделение - теперь полученный файл бы разбивать на подразделения и сохранить в отдельный файл и отправить по почте )
17 batman1978
 
27.12.14
17:03
и все равно идея что бы формировался для каждого подразделения новый макет - осталась не решенной - может кто подскажет как ?
AdBlock убивает бесплатный контент. 1Сергей