Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Расширение конфигурации - макет отчета

Добрый день! Надо было в типовой конфигурации увеличить поле штрих-кода. Добавила макет из отчета в расширение конфигурации, растянула поле рисунка. При формировании выдает ошибку, что в области не найден параметр, который я даже не изменяла. Добавила свой параметр. Во время отладки в окне локальных переменных мой параметр виден, а несколько параметров из типовой конфигурации отсутствуют. В чем может быть дело? Спасибо.
Ответ:
Добавила в расширение все реквизиты отчета, макет добавила и не изменяла.
Ошибка: "Поле объекта не обнаружено (Банковский Счет)"
на строке: РазделИзвещение.Параметры.БанковскийСчет =СформироватьСтрокуРеквизитовПлатежа(Организация,ПолучитьТекущийБанковскийСчет());
В данном разделе этот параметр присутствует. В отчете есть реквизит с таким же названием.
Вопрос: Отчёт с данными из табличной части

Хочу построить отчёт для документа, часть данных берётся из полей формы, а часть из табличной части этого же документа.

Вот код процедуры

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 ОблШапка = Макет.ПолучитьОбласть("Шапка");
    Макет = Отчеты.Продажи_за_Период.ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Акт.Номер,
        |   Акт.Дата,
        |   Акт.Описание.(
        |       Артикул,
        |       ЦенаСндс,
        |       КолВоР,
        |       СуммаСндсР
        |   )
        |ИЗ
        |   Документ.Акт КАК Акт
        |ГДЕ
        |   Акт.Дата >= &Начало
        |   И Акт.Дата <= &КонецД";
        
     Запрос.УстановитьПараметр("Начало", Период.ДатаНачала);
     Запрос.УстановитьПараметр("КонецД", Период.ДатаОкончания);
     
    Результат = Запрос.Выполнить();
 
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
 
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
 
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
 
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
Но при запуске выводит следующее:
Ответ:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
&НаКлиенте
Процедура Сформировать(Команда)
       Сформироватьс()
КонецПроцедуры
 
 
&НаСервере
Процедура Сформироватьс()
    Макет = Отчеты.Отчёт2.ПолучитьМакет("Макет1");
    ОблШапка = Макет.ПолучитьОбласть("Шапка");
    Макет = Отчеты.Отчёт2.ПолучитьМакет("Макет1");
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    Макет = Отчеты.Отчет2.ПолучитьМакет("Макет1");
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Акт.Номер,
        |   Акт.Дата,
        |   Акт.Описание.(
        |       Артикул,
        |       ЦенаСндс,
        |       КолВоР,
        |       СуммаСндсР
        |   )
        |ИЗ
        |   Документ.Акт КАК Акт";
 
    Результат = Запрос.Выполнить();
 
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    ОписаниеОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ОписаниеШапкаТаблицы");
    ОписаниеОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ОписаниеПодвалТаблицы");
    ОписаниеОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("ОписаниеДетали");
 
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
 
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
 
        ТабДок.НачатьГруппуСтрок();
        ТабДок.Вывести(ОписаниеОбластьШапкаТаблицы);
        ТабДок.НачатьАвтогруппировкуСтрок();
 
        ОписаниеВыборкаДетальныеЗаписи = ВыборкаДетальныеЗаписи.Описание.Выбрать();
 
        Пока ОписаниеВыборкаДетальныеЗаписи.Следующий() Цикл
            ОписаниеОбластьДетальныхЗаписей.Параметры.Заполнить(ОписаниеВыборкаДетальныеЗаписи);
            ТабДок.Вывести(ОписаниеОбластьДетальныхЗаписей, ОписаниеВыборкаДетальныеЗаписи.Уровень());
        КонецЦикла;
 
        ТабДок.ЗакончитьАвтогруппировкуСтрок();
        ТабДок.Вывести(ОписаниеОбластьПодвалТаблицы);
        ТабДок.ЗакончитьГруппуСтрок();
    КонецЦикла;
 
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
 
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
 
 
    КонецПроцедуры
Вот собрал немного другую. Но не идёт
Вопрос: Как организовать 2 запроса в фарме отчета и можно ли? или нужно модифицировать 1 запрос?

Нужно, чтобы в отчет выводились данные остатков Товара, в отдельном отчет они выводятся, можно ли и как сделать запрос, чтобы вывести все в этом отчете? Вот Код:

Код:
&НаКлиенте
Процедура Сформировать(Команда)
    СформироватьОтчет(ТабДок);
КонецПроцедуры

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

    Макет = Отчеты.Отчет.ПолучитьМакет("Макет");
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ПриходнаяНакладнаяСписокНоменклатуры.Ссылка.ДатаПрихода КАК Партия,
        |    ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
        |    ПРЕДСТАВЛЕНИЕ(ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура),
        |    СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК ПриходКол,
        |    СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК ПриходСумма,
        |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК РасходКол,
        |    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК РасходСумма,
        |    ПриходнаяНакладнаяСписокНоменклатуры.НомерПартии КАК НомерПартии
        |ИЗ
        |    Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры,
        |    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
        |ГДЕ
        |    ПриходнаяНакладнаяСписокНоменклатуры.Ссылка.Проведен = ИСТИНА
        |
        |СГРУППИРОВАТЬ ПО
        |    ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
        |    ПриходнаяНакладнаяСписокНоменклатуры.Ссылка.ДатаПрихода,
        |    ПриходнаяНакладнаяСписокНоменклатуры.НомерПартии
        |
        |УПОРЯДОЧИТЬ ПО
        |    Номенклатура,
        |    Партия,
        |    НомерПартии,
        |    ПриходКол,
        |    ПриходСумма,
        |    РасходКол,
        |    РасходСумма
        |ИТОГИ ПО
        |    Номенклатура";

    Результат = Запрос.Выполнить();

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();

    ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаНоменклатура.Следующий() Цикл
        ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
        ТабДок.Вывести(ОбластьНоменклатура, ВыборкаНоменклатура.Уровень());

        ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();

        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
            ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
        КонецЦикла;
    КонецЦикла;

    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

КонецПроцедуры // Сформировать()
Прикрепленные снимки
1- как примерно должно выводить
2 - Как выводит остатки
3 - Как выводит отчет
Ответ:
Переделал отчет, взял данные из регистра накоплений, все вроде получилось, ток там остатков на начало нету, не подскажешь как их внести? и все равно дублирует записи...
Вопрос: Как ускорить создание макетов сложных печатных форм?

Мне тут попалась шабашка по созданию и заполнению сложных печатных форм для частных предпринимателей Украины. Никакие официальные программы эти формы не поддерживают. Оригиналы макетов представлены только в ворде, иногда в pdf, один раз было в экселе, но этим макетом воспользоваться не удалось, так он был сделан через одно место.

В конце концов, я эти формы (около десятка) сделал вручную в 1С, в «семерке» (можно было в «восьмерке», но вынужден был привязываться к конфигурации клиента). В принципе, если рука набита, то за день подобный макет вполне реально сделать. Однако возникли некоторые вопросы по эффективности работы.

Просто тупо лепить макеты довольно скучновано и утомительно. Пробовал ваять в экселе, а потом конвертировать в моксел. Работать можно, но особого прироста производительности не было. Потом формировал макеты в «восьмерке» и сохранял в формате «семерки». Табличный редактор в 1С8х помощнее будет, чем в 1С77, но не всегда полученные файлы открываются в «семерке», есть риск проделать работу зря.

Изучая данный вопрос, открыл для себя процессор FOP, который на базе двух xml-файлов (один файл с данными, другой с xsl:fo разметкой печатного макета) формирует нужный отчет в форматах pdf, rtf и некоторых других. Есть там и превьюер, так, что он вполне может служить альтернативой системе печати в 1С.

Сравнивание двух систем построения макетов печатных форм (в графическом виде – в 1С и в текстовом виде – в FOP) навеяло мысль, что они принципиально отличаются между собой как табличная и блочная верстки в веб-дизайне. В Интернете до сих пор ведутся ожесточенные споры между адептами двух систем верстки.

Потенциальное преимущество текста (хотя «блочность» определяет не текст а сама парадигма ФОП) перед графикой кроется в повышении производительности. Например, если вам нужно набрать пару формул для диплома, то удобно воспользоваться вордом с Microsoft Equation, ну а если нужно сверстать большую статью или книгу со сложной математикой, то гораздо удобней применить TeX (или MathType, тот же TeX, только в ворде). Конечно, формулы набирать в текстовом виде поначалу непривычно, однако тыкание мышкой очень часто проигрывает клавиатурному набору.

Тоже самое и при построении макетов в текстовом виде (в xml-разметке xsl:fo). Поначалу сложно, зато интересно и потенциально более эффективно. Заметим, что в тексте можно набирать и сериализованные xml-файлы для файлов моксел, но принцип «табличности» или «блочности» это не меняет.

Другая возможная выгода, это способность использования чужих макетов. Не знаю как в России, но в Украине, есть программы OPZ (на базе hta) и Medoc (на Net Framework) с сотнями, если не тысячами макетов печатных форм в формате FOP (правда относительно доступными в первой программе и практически недоступными (зашифрованными) во второй). Эти программы также используют экранные формы для ввода и редактирования данных, что с одной стороны удобно, а с другой бестолково, в силу убогой реализации, хотя Медок уже под пару гигабайт будет.

Поэтому логично данные хранить в 1С. Там экранные формы тоже можно делать на базе того же моксела, хотя этот вариант мне кажется не слишком оптимальным (в смысле трудоемкости создания этих форм). Однако вводить очень разнородные данные, различные для разных отчетов в 1С тоже не слишком удобно. В данной шабашке я выкрутился созданием псевдоленточных форм списков данных, которые генерю автоматически для каждого отчета.

Другими словами нужно строить дерево данных, на основании которых будут сформированы xml-данные. Для этого удобно применять ленточные формы списков (как в окнах свойств) с возможностью редактирования независимых таблиц для выбранных элементов. Пока это можно только пытаться имитировать в 1С. Как вариант – использовать экранные формы. Но таковых в FOP'е нет, а рисовать их в 1С муторно. Конвертация блочной верстки ФОП в табличную 1С (xml-сериализация для mxl-файлов) и обратно – весьма нетривиальна задача. Оставаться в парадигме OPZ (Hta + JavaScript + Fop) не очень интересно из-за отсутствия нормального движка базы данных и не слишком удобных экранных форм (может быть просто плохо спроектированных?).

В общем, хочется сделать аналог OPZ, но на базе 1С. Кстати, может кто знает, используется ли FOP в российских отчетных системах?

Интересно выслушать мнения в развитие этой темы.

P.S. Кажется я понял, почему оригиналы макетов любят предоставлять в ворде, а не в экселе. Эксел это типичный табличный процессор, а ворд – блочный. В блочном процессоре (также в отчетах акцесса) сложные формы делать проще, чем в табличном. Для примера можно рассмотреть форму средней сложности «Форма2НДФЛс2015» из «1С:ERP Управление предприятием 2». Обратите внимание на колонки и строки разной ширины. В блочной верстке (в ФОП’е) об этом можно не беспокоиться.
Ответ:
Zerro
скинь ссылку ..не пользовался. Может попробуем если сложные формы нужны будут



ФОП – штука хорошая, только немного сложноватая при первоначальном изучении. Тем более что информации на русском очень мало, в основном для старых версий. Но старые версии не поддерживают rtf, только pdf. Далее, насчет верстки печатных макетов. Здесь полная аналогия с интернет вёрсткой. Хороший шаблон получается при ручном наборе. Использование различных графических средств возможно, но качество кода будет менее прозрачным, да и особых преимуществ перед тем же табличным редактором 1С или там редактированием макетов в акцессе, не будет. Я вот думаю, может быть написать некоторые скрипты, чтобы облегчить себе создание печатных макетов для ФОП'а.

Второй вариант это xml-сериализация mxl-файлов. Там структура данных будет не сложнее фоповского формата xsl:fo. Есть некоторые нюансы, но разобраться можно будет. Эти файлы тоже можно пробовать формировать вручную или с помощью собственных скриптов, затем конвертировать их стандартными средствами 1С в формат моксел.

Разница здесь только в способе организации данных: с помощью таблиц или с помощью блоков (div аналог в html-верстке).

Лично я пока еще в раздумьях.
Вопрос: Создание отчета по оплате клиентов: вывод документов оплаты и курсов для каждого Клиента

Здравствуйте, столкнулся с проблемой при создании формы отчета .
Что я пытаюсь сделать? Имеется макет подобного вида . Данные берутся отсюда .

При печати должна получиться табличка с Клиентом, его оплаченной суммой, и записями об его оплате.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
&НаСервере
Процедура СформироватьНаСервере(ТабДок)
    //Запрос по клиентам и оплаченной суммой
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                  |ВнесениеОплатыЗаКурсы.Ссылка.Клиент КАК Клиент,
                  |СУММА(ВнесениеОплатыЗаКурсы.ВнесеннаяСумма)
                  |КАК ОплаченнаяСумма
                  |ИЗ
                  |Документ.ВнесениеОплаты.ОплатаКурсов 
                  |КАК ВнесениеОплатыЗаКурсы
                  |СГРУППИРОВАТЬ ПО
                  |ВнесениеОплатыЗаКурсы.Ссылка.Клиент";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДанные = РезультатЗапроса.Выбрать();
    Макет = Отчеты.ОплатаКлиентов.ПолучитьМакет("Макет");
    // Заголовок
    Область = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(Область);
     // Шапка
    Область = Макет.ПолучитьОбласть("Шапка");
    ТабДок.Вывести(Область);
      // Выполнить запрос
    Пока ВыборкаДанные.Следующий() Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрока.Параметры.Клиент = ВыборкаДанные.Клиент;
    ОбластьСтрока.Параметры.ОплаченнаяСумма = ВыборкаДанные.ОплаченнаяСумма;
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
 
   //Запрос по документам
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                  |ВнесениеОплаты.Ссылка.Номер КАК Номер,
                  |ВнесениеОплаты.Ссылка.Сумма КАК Сумма,
                  |ВнесениеОплаты.Ссылка.ОплатаКурсов.Курс КАК Курс,
                  |ВнесениеОплаты.Ссылка.Ссылка.ОплатаКурсов.ВнесеннаяСумма КАК СуммаК
                  |ИЗ
                  |Документ.ВнесениеОплаты
                  |КАК ВнесениеОплаты
                  |СГРУППИРОВАТЬ ПО
                  |ВнесениеОплаты.Ссылка.Номер";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДанные = РезультатЗапроса.Выбрать();
    Макет = Отчеты.ОплатаКлиентов.ПолучитьМакет("Макет");
    // Заголовок
    Область = Макет.ПолучитьОбласть("Номер");
    ТабДок.Вывести(Область);
    
      // Выполнить запрос
    Пока ВыборкаДанные.Следующий() Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("НомерЗнач");
    ОбластьСтрока.Параметры.Номер = ВыборкаДанные.Номер;
    ОбластьСтрока.Параметры.Сумма = ВыборкаДанные.Сумма;
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
 
    Область = Макет.ПолучитьОбласть("КурсСумм");
    ТабДок.Вывести(Область);
      // Выполнить запрос
    Пока ВыборкаДанные.Следующий() Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("КурсСуммЗнач");
    ОбластьСтрока.Параметры.ОплатаКурсов.Курс = ВыборкаДанные.ОплатаКурсов.Курс;
    ОбластьСтрока.Параметры.ОплатаКурсов.ВнесеннаяСумма = ВыборкаДанные.ОплатаКурсов.ВнесеннаяСумма;
    ТабДок.Вывести(ОбластьСтрока);
    КонецЦикла;
    
    
КонецПроцедуры
 
&НаКлиенте
Процедура Сформировать(Команда)
    ТабДок = Новый ТабличныйДокумент;
    СформироватьНаСервере(ТабДок);
    ТабДок.Показать();
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
 
КонецПроцедуры
Ответ: GreenkA, Вот, что получилось
Что-то не особо понятно, как данное свойство работает, то есть где взять свойство, чтобы строка заполнялась без повторений? Этот метод здесь должен быть?
1C
1
2
3
4
5
6
7
8
9
10
11
        Пока ВыборкаНомер.Следующий() Цикл
            // Выводим номера документов и их сумму
            ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
            ОбластьСтрока.Параметры.Номер = ВыборкаНомер.Номер;
            ОбластьСтрока.Параметры.Сумма = ВыборкаНомер.Сумма;
            ОбластьСтрока.Параметры.Курс = ВыборкаНомер.Курс;
            ОбластьСтрока.Параметры.ОплаченнаяСумма = ВыборкаНомер.ВнесеннаяСумма;
            //ВОТ ОНО
            ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры.Номер,ОбластьСтрока.Параметры.Номер,Выборка);
            ТабДок.Вывести(ОбластьСтрока);
        КонецЦикла;
Вопрос: Вывод итогов в отчетах

Помогите пожалуйста, суть проблемы нужно чтоб верхняя строка была снизу, и так и сяк пробовал. видимо проблема в цикле.

Даже добавил ещё один запрос ("запрос1") который ничего не выводит почему - то

закомментирован рабочий способ который снизу выводит ИТОГовые значения по столбцу "ОплаченнаяСумма", но таким же способом не считаются ИТОГИ по столбцу "курс" (то есть число = равное кол-ву разных курсов)

МАКЕТ:


код прилагается:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
&НаСервере
Процедура СформироватьНаСервере(ТабДок)
    // Вставить содержимое обработчика.
        Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ВнесениеОплатыЗаКурсы.Ссылка.Клиент КАК Клиент,
                   |    ВнесениеОплатыЗаКурсы.Курс КАК Курс,
                   |    СУММА(ВнесениеОплатыЗаКурсы.ВнесеннаяСумма) КАК ОплаченнаяСумма
                   |ИЗ
                   |    Документ.ВнесениеОплаты.ОплатаКурсов КАК ВнесениеОплатыЗаКурсы
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ВнесениеОплатыЗаКурсы.Ссылка.Клиент,
                   |    ВнесениеОплатыЗаКурсы.Курс
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Клиент УБЫВ
                   |ИТОГИ
                   |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Курс),
                   |    СУММА(ОплаченнаяСумма)
                   |ПО
                   |    ОБЩИЕ";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДанные = РезультатЗапроса.Выбрать();
    Макет = Отчеты.ОтчетСДетализацией.ПолучитьМакет("МакетСДетализацией");
    // Заголовок
    Область = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(Область);
     // Шапка
    Область = Макет.ПолучитьОбласть("Шапка");
    ТабДок.Вывести(Область);
    //  ВСЕГО
    //ОбластьВсего = Макет.ПолучитьОбласть("Всего");
    
      // Выполнить запрос
      СуммаВсего=0;
             СуммаКурс = "";
      Пока ВыборкаДанные.Следующий()
          Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрока.Параметры.Клиент = ВыборкаДанные.Клиент;
    ОбластьСтрока.Параметры.Курс = ВыборкаДанные.Курс;
    ОбластьСтрока.Параметры.ОплаченнаяСумма = ВыборкаДанные.ОплаченнаяСумма;
    ТабДок.Вывести(ОбластьСтрока);
    СуммаВсего = СуммаВсего +   ВыборкаДанные.ОплаченнаяСумма;
    СуммаКурс = СуммаКурс + ВыборкаДанные.Курс;
 
КонецЦикла;
//ОбластьВсего.Параметры.ИтогОплаченнаяСумма = СуммаВсего;
//ОбластьВсего.Параметры.ИтогКурс = СуммаКурс;
//ТабДок.Вывести(ОбластьВсего);
//Итог = Объект.ОплатаКурсов.Итог("ВнесеннаяСумма");
 
 
//ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
 
//      ОбластьСтрока.Параметры.ОплаченнаяСумма = ВыборкаДанные.ОплаченнаяСумма;
//      ОбластьСтрока.Параметры.Курс = ВыборкаДанные.Курс;
 
 
//      ТабДок.Вывести(ОбластьСтрока);
        
          Запрос1 = Новый Запрос;
    Запрос1.Текст =     "ВЫБРАТЬ
         |  СУММА(ВнесениеОплатыОплатаКурсов.ВнесеннаяСумма) КАК ВнесеннаяСумма
         |ИЗ
         |  Документ.ВнесениеОплаты.ОплатаКурсов КАК ВнесениеОплатыОплатаКурсов
         |ИТОГИ
         |  СУММА(ВнесеннаяСумма)
         |ПО
         |  ОБЩИЕ";
 
         РезультатЗапроса1 = Запрос1.Выполнить();
    ВыборкаДанные1 = РезультатЗапроса1.Выбрать();
    ОбластьВсего = Макет.ПолучитьОбласть("Всего");
 
    ОбластьВсего.Параметры.ИтогОплаченнаяСумма = ВыборкаДанные1.ВнесеннаяСумма;
    ТабДок.Вывести(ОбластьВсего);
    
    
 
КонецПроцедуры
 
&НаКлиенте
Процедура Сформировать(Команда)
    ТабДок = Новый ТабличныйДокумент;
    СформироватьНаСервере(ТабДок);
 
    ТабДок.Показать();
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
 
КонецПроцедуры
Ответ:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
&НаСервере
Процедура СформироватьНаСервере(ТабДок)
    // Вставить содержимое обработчика.
        Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ВнесениеОплатыЗаКурсы.Ссылка.Клиент КАК Клиент,
                   |    ВнесениеОплатыЗаКурсы.Курс КАК Курс,
                   |    СУММА(ВнесениеОплатыЗаКурсы.ВнесеннаяСумма) КАК ОплаченнаяСумма
                   |ИЗ
                   |    Документ.ВнесениеОплаты.ОплатаКурсов КАК ВнесениеОплатыЗаКурсы
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ВнесениеОплатыЗаКурсы.Ссылка.Клиент,
                   |    ВнесениеОплатыЗаКурсы.Курс
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Клиент УБЫВ
                   |ИТОГИ
                   |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Курс),
                   |    СУММА(ОплаченнаяСумма)
                   |ПО
                   |    ОБЩИЕ";
    РезультатЗапроса = Запрос.Выполнить();
    ИтоговыеДанные = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Макет = Отчеты.ОтчетСДетализацией.ПолучитьМакет("МакетСДетализацией");
    // Заголовок
    Область = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(Область);
     // Шапка
    Область = Макет.ПолучитьОбласть("Шапка");
    ТабДок.Вывести(Область);
    //  ВСЕГО
    //ОбластьВсего = Макет.ПолучитьОбласть("Всего");
    
      // Выполнить запрос
      СуммаВсего=0;
             СуммаКурс = "";
ВыборкаДанные = ИтоговыеДанные.Выбрать()
      Пока ВыборкаДанные.Следующий()
          Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрока.Параметры.Клиент = ВыборкаДанные.Клиент;
    ОбластьСтрока.Параметры.Курс = ВыборкаДанные.Курс;
    ОбластьСтрока.Параметры.ОплаченнаяСумма = ВыборкаДанные.ОплаченнаяСумма;
    ТабДок.Вывести(ОбластьСтрока);
    СуммаВсего = СуммаВсего +   ВыборкаДанные.ОплаченнаяСумма;
    СуммаКурс = СуммаКурс + ВыборкаДанные.Курс;
 
КонецЦикла;
ОбластьВсего.Параметры.ИтогОплаченнаяСумма = ИтоговыеДанные.ОплаченнаяСумма;
ОбластьВсего.Параметры.ИтогКурс = ИтоговыеДанные.Курс;
ТабДок.Вывести(ОбластьВсего);
КонецПроцедуры;
У тебя в первой строке итоги. Нужно обойти по группировкам результат запроса. У тебя код не тестил, т.к нет твоей конфы, но принцип вроде заложил
Вопрос: Одна кнопка и несколько вариантов макета

Есть документ в нем два макета,в модуле менеджера описаны функции вывода в макет. Не знаю как и в каком месте сделать чтобы по нажатии кнопки печать выбор какой макет вывести.
Гугл не помог
Ответ:
Вопрос закрыт,всем большое спасибо 
Что сделала:
Создала "Группы команд" на ветке "Общее" 
В свойствах Категория:Командная панель формы

Было создано две стандартные команды печати конструктором 
В свойствах:

Группа:Командная панель формы.<Имя группы>
Тип параметра команды: ДокументСсылка.<Имя Документа>
Режим Использования : Множественный

В модуле команды :

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ТабДок = Новый ТабличныйДокумент;
    Печать(ТабДок, ПараметрКоманды);
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
КонецПроцедуры

&НаСервере
Процедура Печать(ТабДок, ПараметрКоманды)
    Документы.КонсолидированныйБаланс.ПечатьОтчетБаланс(ТабДок, ПараметрКоманды);
КонецПроцедуры


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

Есть печатная форма документа с двумя табл частями
Подскажите как сделать так чтобы отображались только те печатные формы в которых есть наименованиея, если их нет то при вызове команды их не было видно, а также подсчет суммы по обоим табл частям?


Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
    Макет = Документы.ПродажаТоваровИУслуг.ПолучитьМакет("Печать");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ПродажаТоваровИУслуг.Дата,
    |   ПродажаТоваровИУслуг.Клиент,
    |   ПродажаТоваровИУслуг.Номер,
    |   ПродажаТоваровИУслуг.Сотрудник,
    |   ПродажаТоваровИУслуг.УслугиИАбонементы.(
    |       НомерСтроки,
    |       Услуга,
    |       Цена,
    |       Количество,
    |       Сумма
    |   ),
    |   ПродажаТоваровИУслуг.Товары.(
    |       НомерСтроки,
    |       Товар,
    |       ЦенаВРублях,
    |       ЦенаВЕдиницах,
    |       Количество,
    |       Сумма,
    |       СуммаВЕдиницах
    |   )
    |ИЗ
    |   Документ.ПродажаТоваровИУслуг КАК ПродажаТоваровИУслуг
    |ГДЕ
    |   ПродажаТоваровИУслуг.Ссылка В (&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
 
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьУслугиИАбонементыШапка = Макет.ПолучитьОбласть("УслугиИАбонементыШапка");
    ОбластьУслугиИАбонементы = Макет.ПолучитьОбласть("УслугиИАбонементы");
    ОбластьТоварыШапка = Макет.ПолучитьОбласть("ТоварыШапка");
    ОбластьТовары = Макет.ПолучитьОбласть("Товары");
    ОбластьСуммаПокупки=Макет.ПолучитьОбласть("СуммаПокупки");
    ОбластьСуммаЕдиницы=Макет.ПолучитьОбласть("СуммаЕдиницы");
    Подвал = Макет.ПолучитьОбласть("Подвал");
 
    ТабДок.Очистить();
 
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
 
        ТабДок.Вывести(ОбластьЗаголовок);
 
        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка, Выборка.Уровень());
        
        
        СуммаУслугиИАбонементы=0;
        СуммаТовары=0;
        СуммаТоварыЕд=0;
        СуммаПокупки=0;
 
        ТабДок.Вывести(ОбластьУслугиИАбонементыШапка);
        ВыборкаУслугиИАбонементы = Выборка.УслугиИАбонементы.Выбрать();
        Пока ВыборкаУслугиИАбонементы.Следующий() Цикл
            ОбластьУслугиИАбонементы.Параметры.Заполнить(ВыборкаУслугиИАбонементы);
            ТабДок.Вывести(ОбластьУслугиИАбонементы, ВыборкаУслугиИАбонементы.Уровень());
            СуммаУслугиИАбонементы=СуммаУслугиИАбонементы+ВыборкаУслугиИАбонементы.Сумма;
        КонецЦикла;
 
        ТабДок.Вывести(ОбластьТоварыШапка);
        ВыборкаТовары = Выборка.Товары.Выбрать();
        Пока ВыборкаТовары.Следующий() Цикл
            ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
            ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
            СуммаТовары=СуммаТовары+ВыборкаТовары.Сумма;
            СуммаТоварыЕд=СуммаТоварыЕд+ВыборкаТовары.СуммаВЕдиницах;
        КонецЦикла;
 
        СуммаПокупки=СуммаТовары+ СуммаУслугиИАбонементы;
        
        ОбластьСуммаПокупки.Параметры.СуммаПокупки=СуммаПокупки;
        ОбластьСуммаЕдиницы.Параметры.СуммаЕдиницы=СуммаТоварыЕд;
        Подвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Подвал);
 
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
Ответ: я с этим уже разобралась, можете помочь с отчетами?
Вопрос: Загрузка макета СКД

Здравствуйте!
Подскажите, как программно загрузить не настройку, а целый макет СКД?
Ответ:
Да как хороший вариант - это создаете внешний отчет и там создаете макет.
В коде приписываете что берете нужный макет из внешнего отчета и формируете. в любой момент когда надо подправить макет тупо открываете внешний отчет правите сохраняете и все ок
Вопрос: Сохранение отчета из 1С 8.2 в docx

Здарова. В общем суть-написал конфу с нуля. Есть отчет, результат которого нужно сохранить в ворд. Сам вордовский файл я создал, в нём таблицу и шапку. Сам отчет построен с помощью СКД, вручную ничего не писал, всё работает как надо. Вопрос-как результат отчета сохранить в вордовский файл, и не просто сохранить, а именно в те таблицы которые "помеченны" в самом вордовском файле. Приходит на ум, что нужно в файле ворд написать типа "{переменная}" и в неё будет записывать значение из отчета. Но как это осуществить? С подобной задачей столкнулся впервые
Ответ:
нужно в файле ворд написать типа "{переменная}" и в неё будет записывать значение из отчета
Да, типа того (у меня только в опен офисе, поищи под ворд):
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Функция Печать() Экспорт
    
            Макет = ПолучитьМакет("Макет");
            ИмяВременногоФайла = ПолучитьИмяВременногоФайла("ODT");
            Макет.Записать(ИмяВременногоФайла);
            
            ПФ_oDoc = ОткрытьOpenOffice(ИмяВременногоФайла);
            ПФ_ReplaceDescriptor = ПФ_oDoc.createReplaceDescriptor();
            
            ПФ_ReplaceDescriptor.SearchString = "<Дата>";
            ПФ_ReplaceDescriptor.ReplaceString = Строка(Формат(ЗаданиеОбъект.Дата,"ДЛФ=Д"));
            ПФ_oDoc.replaceAll(ПФ_ReplaceDescriptor);
    
КонецФункции
    
Функция ОткрытьOpenOffice(пИмяФайла)
    //Если мDocument = Неопределено Тогда
        Попытка
            // создадим COM объект менеджер интерфейса OpenOffice.org
            мService = Новый  COMObject("com.sun.star.ServiceManager");
            мDesktop = мService.CreateInstance("com.sun.star.frame.Desktop");
        Исключение
            ОбщегоНазначения.ВывестиПредупреждение("Ошибка инициализации интерфейса OpenOffice.org OLE Automation object!",,"Ошибка!","Объект - Open Office API");   
            Отказ = истина;
            Возврат Неопределено;
        КонецПопытки;
    //КонецЕсли;
    
    лURLФайла = "file:///" + СтрЗаменить(пИмяФайла,"\","/");
    лPropertyValueArray = Новый COMSafeArray("VT_DISPATCH",2);
    
    Попытка
        мDocument = мDesktop.LoadComponentFromURL(лURLФайла, "_blank", 0, лPropertyValueArray);
        Предупреждение("Документ сформирован!", 3);
        Возврат мDocument;
    Исключение
        ОбщегоНазначения.ВывестиПредупреждение("Ошибка при открытии интерфейса OpenOffice.org OLE Automation object!",,"Ошибка!","Файл не открывыется!");   
        Возврат Неопределено;
    КонецПопытки;
КонецФункции
Ну или как-то импортировать XML в ворд, я даже инструкцию нашел...
Кликните здесь для просмотра всего текста
Instructions
Open Word 2007. The default option brings up a blank page. If you’re importing an XML document into an existing Word document, click the “File” tab, click “Open,” click “Browse” and navigate to that Word file. Double-click the file name, which opens the document in a new Word window.

Scroll to the place to add the XML file and press the “Ctrl” and “Enter” keys on the keyboard for a page break to a new page or press just the “Enter” key to move onto a new line.

Click the “Insert” tab at the top of the screen. Click the small “Object” button near the right side of the toolbar at the top of the screen, under the “Text” group. Click the “Object” link in the drop-down menu.

Click the “Create from File” tab, then click the “Browse” button to navigate to the location on your computer with the XML file. Look for the .xml extension.

Click once on the file to highlight it and click the “Insert” button to return to the “Create from File” window. Click “OK” and the XML file is inserted into the Word document.

Click the “File” tab, click “Save As” and save the Word document to your computer, or rename the file and save it as a new version.