Имя: Пароль:
1C
1C 7.7
v7: Как правильно добавить в отчет дополнительные колонки?
0 Irina3gger
 
29.06.17
08:54
Доброго времени.
Очень сильно нужна помощь, как правильно добавить колонки в отчет который формируется. Отчет уже есть он работает как надо и к нему надо просто добавить два столбца, один который будет подтягивать данные из актов, а другую для записей от пользователя. По книгам я поняла как это работает, но тяжело дается разобраться с кодом предыдущего программиста. Помогите пожалуйста как в код, который ниже, вставить правильно эти колонки.

Перем Таблица;

//======================================================================

Процедура Сформировать()
    
    сз                   = СоздатьОбъект("СписокЗначений");
    ТабЗначВсего       = СоздатьОбъект("ТаблицаЗначений");
    ТабЗначОбъект    = СоздатьОбъект("ТаблицаЗначений");
    ТабЗначИтогРайон = СоздатьОбъект("ТаблицаЗначений");
    ТабОбъект        = СоздатьОбъект("ТаблицаЗначений");
    ТабЗначЗаказчик     = СоздатьОбъект("ТаблицаЗначений");
    ТЗ                  = СоздатьОбъект("ТаблицаЗначений");
    
    ТабОбъект.НоваяКолонка("с1");
    ТабОбъект.НоваяКолонка("с2");
    ТабОбъект.НоваяКолонка("с3");
    ТабОбъект.НоваяКолонка("с4");
    
    ТабЗначВсего.НоваяКолонка("с1","Число");
    ТабЗначВсего.НоваяКолонка("с2","Число");
    ТабЗначВсего.НоваяКолонка("с3","Число");

    ТабЗначИтогРайон.НоваяКолонка("с1","Число");
    ТабЗначИтогРайон.НоваяКолонка("с2","Число");
    ТабЗначИтогРайон.НоваяКолонка("с3","Число");
    
    ТабЗначЗаказчик.НоваяКолонка("с1","Число");
    ТабЗначЗаказчик.НоваяКолонка("с2","Число");
    ТабЗначЗаказчик.НоваяКолонка("с3","Число");
    
    
    Таб = СоздатьОбъект("Таблица");
    RS  = СоздатьОбъект("ODBCRecordset");
    RS.УстБД1С();
    ТекстЗапроса =
    "
    |SELECT
    |   Жур.IDDoc             as [Док $Документ],
    |   Жур.IDDocDef        as Док_вид,
    |    Спр.Code as Код,
    |   Спр.Descr as Наименование,
    |    $Док.Объект          as [Объект $Справочник.Объект],
    |    $Док.Сумма          as Сумма,
    |    $Док.ДолгПоОплате  as ДолгПоОплате,
    |    $Док.ПризнакПодпис as [ПризнакПодпис $Перечисление.Признак],
    |    $Док.ВидАкта        as [ВидАкта $Справочник.ВидАкт],
    |    $Спр.Заказчик        as [Заказчик $Справочник.Заказчик],
    |    $Спр.Район         as [Район $Справочник.Области]
    |FROM
    |   _1SJourn as Жур
    |INNER JOIN
    |    $Документ.АктОбъемаРабот as Док ON Док.IDDoc = Жур.IDDoc
    |INNER JOIN
    |    $Справочник.Объект as Спр ON Спр.ID = $Док.Объект
    |
    |WHERE    
    |   Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |    AND Жур.Closed & 1 = 1
    |    AND $Док.ВидАкта <> :ВидАктов
    |    AND $Док.ДолгПоОплате <> 0
    |    AND $Спр.Заказчик = :ТекЗаказчик
    |"
    ;
    Таб.ВывестиСекцию("ШапкаОсновная");
    Таб.ВывестиСекцию("Шапка");    
    ТекЗаказчик = "";
    Номер = 1;
    СпрРайон = СоздатьОбъект("Справочник.Области");
    СпрРайон.ПорядокКодов();
    СпрРайон.ВыбратьЭлементы();
    Пока СпрРайон.ПолучитьЭлемент() = 1 Цикл
        Таб.ВывестиСекцию("Район");
        
        СпрЗаказчик = СоздатьОбъект("Справочник.Заказчик");
        СпрЗаказчик.ВыбратьЭлементы();
        Пока СпрЗаказчик.ПолучитьЭлемент() = 1 Цикл
            Если СпрЗаказчик.Район = СпрРайон.ТекущийЭлемент() Тогда
                
                RS.УстановитьТекстовыйПараметр("НачДата", НачПер);
                RS.УстановитьТекстовыйПараметр("КонДата", ОконПер);
                RS.УстановитьТекстовыйПараметр("ОстМеньше", ОстМеньше);
                
                спрВидАкта = СоздатьОбъект("Справочник.ВидАкт");
                Если спрВидАкта.НайтиПоКоду(2) = 1 Тогда
                    RS.УстановитьТекстовыйПараметр("ВидАктов", спрВидАкта.ТекущийЭлемент());
                КонецЕсли;
                
                RS.УстановитьТекстовыйПараметр("ТекЗаказчик",СпрЗаказчик.ТекущийЭлемент());
                ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
                
                
                ТЗ.ВыбратьСтроки();
                Пока ТЗ.ПолучитьСтроку() = 1 Цикл
                    СуммаНеПодпис  = 0;
                    СуммаПодпис    = 0;
                    ДолгЭкспертизы = 0;
                    
                    Если Число(ТЗ.ВидАкта.Код) = Число(4) Тогда
                        ДолгЭкспертизы = ТЗ.ДолгПоОплате;
                    Иначе
                        Если ТЗ.ПризнакПодпис = Перечисление.Признак.Нет Тогда
                            СуммаНеПодпис = ТЗ.ДолгПоОплате;
                        ИначеЕсли ТЗ.ПризнакПодпис = Перечисление.Признак.Да Тогда    
                            СуммаПодпис = ТЗ.ДолгПоОплате;
                        КонецЕсли;
                    КонецЕсли;    
                    
                    ТабОбъект.НоваяСтрока();
                    ТабОбъект.с1 = ТЗ.Объект;
                    ТабОбъект.с2 = СуммаНеПодпис;
                    ТабОбъект.с3 = СуммаПодпис;
                    ТабОбъект.с4 = ДолгЭкспертизы;
                КонецЦикла;
                
                ТабОбъект.Свернуть("с1","с2,с3,с4");
            
                
                Если (ТабОбъект.Итог("с2") > ОстМеньше) или (ТабОбъект.Итог("с3") > ОстМеньше) или (ТабОбъект.Итог("с4") > ОстМеньше) Тогда
                    Таб.ВывестиСекцию("Заказчик");
                КонецЕсли;
                
                ТабОбъект.ВыбратьСтроки();
                Пока ТабОбъект.ПолучитьСтроку() = 1 Цикл
                    Если (ТабОбъект.с2 > ОстМеньше) или (ТабОбъект.с3 > ОстМеньше) или (ТабОбъект.с4 > ОстМеньше)   Тогда
                        сз.УдалитьВсе();
                        сз.ДобавитьЗначение(ТабОбъект.с1.Код);
                        
                        Таб.ВывестиСекцию("Объект");
                        Номер = Номер + 1;
                        
                        ТабЗначЗаказчик.НоваяСтрока();
                        ТабЗначЗаказчик.с1 = ТабОбъект.с2;
                        ТабЗначЗаказчик.с2 = ТабОбъект.с3;
                        ТабЗначЗаказчик.с3 = ТабОбъект.с4;
                    КонецЕсли;
                КонецЦикла;
                ТабОбъект.УдалитьСтроки();
                
                Если (ТабЗначЗаказчик.Итог("с1") > ОстМеньше) или (ТабЗначЗаказчик.Итог("с2") > ОстМеньше) или (ТабЗначЗаказчик.Итог("с3") > ОстМеньше) Тогда
                    Таб.ВывестиСекцию("Итого");
                КонецЕсли;
                
                ТабЗначИтогРайон.НоваяСтрока();
                ТабЗначИтогРайон.с1 = ТабЗначЗаказчик.Итог("с1");
                ТабЗначИтогРайон.с2 = ТабЗначЗаказчик.Итог("с2");
                ТабЗначИтогРайон.с3 = ТабЗначЗаказчик.Итог("с3");
                
                ТабЗначЗаказчик.УдалитьСтроки();
            КонецЕсли;
        КонецЦикла;
        Если (ТабЗначИтогРайон.Итог("с1") > ОстМеньше) или (ТабЗначИтогРайон.Итог("с2") > ОстМеньше) или (ТабЗначИтогРайон.Итог("с3") > ОстМеньше) Тогда
            Таб.ВывестиСекцию("ИтогоРайон");
        КонецЕсли;
        
        ТабЗначВсего.НоваяСтрока();
        ТабЗначВсего.с1 = ТабЗначИтогРайон.Итог("с1");
        ТабЗначВсего.с2 = ТабЗначИтогРайон.Итог("с2");
        ТабЗначВсего.с3 = ТабЗначИтогРайон.Итог("с3");
        
        ТабЗначИтогРайон.УдалитьСтроки();
    КонецЦикла;
    Таб.ВывестиСекцию("Всего");
    
    
    Таб.Опции(0,1,9);                              
    Таб.ПараметрыСтраницы(1,,,0,0,0,10,0,10,1,0);
    Таб.ТолькоПросмотр(1);
    Таб.Показать();
    
КонецПроцедуры
//======================================================================
Процедура ОбработкаЯчейкиТаблицы(список,фл)
    фл=1;
    тип=ТипЗначенияСтр(список);
    Если тип="СписокЗначений" Тогда
        фл=0;
        спрОбъект = СоздатьОбъект("Справочник.Объект");
        Если спрОбъект.НайтиПоКоду(СтрЗаменить(список.ПолучитьЗначение(1),"""","_")) = 1 Тогда
            ОткрытьФормуМодально("Обработка.ЖурналОбъекта", спрОбъект.ТекущийЭлемент());
        КонецЕсли;
    конецЕсли;
КонецПроцедуры
//======================================================================
Процедура ПриОткрытии()
    НачПер    = "01.01.2006";
    ОконПер   = ТекущаяДата();
    ОстМеньше = 5;
КонецПроцедуры
1 пипец
 
29.06.17
09:06
ну прямой запрос, что добавить то нужно
Зы да еще по документам
2 1dvd
 
29.06.17
09:08
Лучше позвать специалиста
3 Irina3gger
 
29.06.17
09:10
я просто только второй день только на 1с и для меня это паника, я пытаюсь логику найти, но явно не учитываю много нюансов и от моих личных проб, получается только ерунда. Я не прошу чтоб за меня сделали. я прошу чтоб мне помогли разобраться с кодом, и с логикой. а дальше я уже сама разбирусь
4 1dvd
 
29.06.17
09:13
(3) не понятно что именно тебе не понятно.
Задай конкретный вопрос
5 пипец
 
29.06.17
09:17
в общем это внешняя компонента 1cpp )))
ЗЫ отож только вчерась пытали )))
ЗЫЫ только 2-й день с 1С ))))))) жесть
6 mehfk
 
29.06.17
09:17
(0) Колонки в отчет правильно добавлять в те места, где они нужны: слева, справа, или посреди уже существующих.
7 Irina3gger
 
29.06.17
09:19
в код что я скинула, как вставить новую колонку которая будет подтягивать данные со справочника. Я не могу понять что за с1,с2,с3,с4? что это за переменные, и что к ним можно присвоить? Как к колонке привязать справочник который будет подтягивать данные с отчетов? У меня вопросов больше чем ответов
8 NikVars
 
29.06.17
09:19
(3) Пол в ЛК поменяй. Да, и это - фотку покруче. Спецы тут любят фотки в ЛК разглядывать. Да и помощь сразу объявится.
С отчетом, смотри (2).
9 Irina3gger
 
29.06.17
09:20
(5) Да, я писала на С# а тут перевели на 1с, и ни черта не понятно
10 Irina3gger
 
29.06.17
09:23
(8) я не хочу афишировать что я девушка, потому что подтверждать стереотип о том что девушки кодить не умеют, тоже не хочется, а так я только начала на 1с то тупить буду и часто
11 povar
 
29.06.17
09:24
(9) это тебе не С#, тут думать надо
12 пипец
 
29.06.17
09:25
хмм мало писать на си , нужно понимать структуру 1С
ЗЫ вот как раз понимая структуру 1С и принципы связей, можно писать на чем угодно )))
13 Irina3gger
 
29.06.17
09:25
(11) а в С#, что думать не надо? Сложность не в количестве размышлений, а в том что все ново и не понятно еще.
14 1dvd
 
29.06.17
09:26
(13) Есть понимание что такое ТаблицаЗначений ?
15 Irina3gger
 
29.06.17
09:29
(12) суть вроде как понятна, что для каждого столбца, создается переменная, к которой привязывается справочник, а справочник заполняется пользователями походу работы. Верно же?
(14)Вроде как да
16 Irina3gger
 
29.06.17
09:30
(14) на этом же форуме читала про ТаблицуЗначений
17 пипец
 
29.06.17
09:31
(15) что такое реляционные базы данных - понятие присутствует ?
или скажем так - связанные таблицы ?
18 1dvd
 
29.06.17
09:33
(15) ну, так, с1 с2 с3 - это колонки таблицы значений, которые заполняются данными из другой ТЗ, полученной из запроса
19 Irina3gger
 
29.06.17
09:33
(17)Да понимаю, имела дела с MySQL запросами, думаю тут аналогично все
20 пипец
 
29.06.17
09:35
Проще так - создать (наристовать) на форме  таблицу значений  с именем например ТЗЗ

и

ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
                
вписать строку ТЗ.Выгрузить(ТЗЗ);
                
                ТЗ.ВыбратьСтроки();

ЗЫ сдается это метро каширская и варшавская ))))
21 Irina3gger
 
29.06.17
09:38
(20)"сдается это метро каширская и варшавская"
что это значит? В каком городе такое метро?
22 пипец
 
29.06.17
09:39
(21) нет ? хмм уж очень синхронно тема всплыла
23 Irina3gger
 
29.06.17
09:42
(22)нет, я с Гродно)
24 Смотрящий
 
29.06.17
09:43
В почту ID и пароль от тима слей
25 пипец
 
29.06.17
09:45
(23) в общем пробуй как в 20
26 1dvd
 
29.06.17
09:46
>>Я не могу понять что за с1,с2,с3,с4?
см. выше

>>что это за переменные, и что к ним можно присвоить?
Колонка в ТЗ может быть типизирована, а может и нет. Если не типизирована, то туда можно записать любое (ну, почти) значение. У тебя в начале видно что часть колонок не типизированы, а часть имеют тип число

>>Как к колонке привязать справочник который будет подтягивать данные с отчетов?
Отчет строится по макету (смотри внизу формы вкладку Таблица). Тебе нужно в макете добавить твои колонки, при выводе очередной секции методом Таб.ВывестиСекцию( переменные в макете заполняются текущими значениями переменных
27 Irina3gger
 
29.06.17
09:46
(25) и что должно получится?
28 Irina3gger
 
29.06.17
09:53
(26) В макете я добавила свои колонки. Добавленные колонки как-то добавляются в в секцию, или их нужно прописывать?
29 1dvd
 
29.06.17
09:57
(28) Секции бывают вертикальные и горизонтальные. Если ты добавила колонку, то во всех горизонтальных она появится автоматически. Другой вопрос, откуда будут браться данные для их заполнения
30 Irina3gger
 
29.06.17
10:04
(29) в одной колонке должны отображаться источники финансирования, и как я понимаю они должны подгружаться со справочника с аналогичным именем. и вот теперь у меня вопрос, как сделать чтоб подтягивались данные со справочника?
31 1dvd
 
29.06.17
10:04
(30) изменить Запрос, изменить таблицы значений, изменить заполнение и обработку таблиц значений
32 Irina3gger
 
29.06.17
10:07
(31) звучит ужасно)
33 пипец
 
29.06.17
10:11
(27) результат запроса должен получится
34 пипец
 
29.06.17
10:12
+ визуальный
35 Irina3gger
 
29.06.17
10:14
(34) на что влияет что это внешняя компонента 1cpp?
36 пипец
 
29.06.17
10:19
(35) на то - что запрос написан на ней, родной язык 1С слегка отличается )))
ЗЫ на быстроту доступа и наличием расширенных возможностей
37 пипец
 
29.06.17
10:20
// сидит ржот, только вчера мну пытали про 1с++ терь сижу консультирую, анекдот прям
38 Irina3gger
 
29.06.17
10:22
(36) т.е. я смогу нынешний запрос который написан, просто дописать чтобы добавить новые колонки? или нужно переписывать?
39 h-sp
 
29.06.17
10:38
(38) ну да, одну строчку добавить. если это ваше поле есть в документе АктОбъемаРабот.
40 Irina3gger
 
29.06.17
10:48
(39)вроде как есть
41 Irina3gger
 
29.06.17
11:08
(38)Внимание вопрос, в документе АктОбъемаРабот нет поля которое мне необходимо.
Но есть справочник, который привязан к объектам, которые в свою очередь имеются в АктОбъемаРабот.
Как мне дописать запрос, чтоб эта информация подтягивалась?
42 пипец
 
29.06.17
11:22
(41) через  этот реквидит который есть и там и там
43 пипец
 
29.06.17
11:22
//реквизит
44 Irina3gger
 
29.06.17
11:37
подскажите что делает это кусочек кода
      Таб.ВывестиСекцию("Объект");
                        Номер = Номер + 1;
                        
                        ТабЗначЗаказчик.НоваяСтрока();
                        ТабЗначЗаказчик.с1 = ТабОбъект.с2;
                        ТабЗначЗаказчик.с2 = ТабОбъект.с3;
                        ТабЗначЗаказчик.с3 = ТабОбъект.с4;
                    КонецЕсли;
45 Irina3gger
 
29.06.17
11:45
Хотя не надо я уже поняла
Осталось разобраться как сделать чтоб подттягивалось, запрос изменила а дальше не понятно
46 NikVars
 
29.06.17
14:45
(45) На будущее, вдруг пригодиться.
http://www.mista.ru/tutor_1c/
Если думать умеешь, на пару раз почитать и запомнить, где потом образцы разглядывать.
Основная теорема систематики: Новые системы плодят новые проблемы.