Версия для печати темы (https://pro1c.org.ua/index.php?s=a6accdbac6161199d473f96df73f38f0&showtopic=36326)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Зафиксировать верхние строки в макете

Автор: Constantus 31.03.17, 9:45

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

В обрабоке получаю результат и вывожу его в макет.

Первые две строки содержат заголовок отчета (заглавия столбцов)

Как можно зафиксировать эти 2-строки макета при прокрутке вниз?

Пытался:

Макет = ПолучитьМакет("Макет");
ТабДок = Новый ТабличныйДокумент;

ТабДок.ФиксацияСверху = 3;
ТабДок.ФиксацияСлева = 1;

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

Автор: Bernet 31.03.17, 10:05

ну в общем-то все правильно, свойство "ФиксацияСверху" отвечает за вертикальную фиксацию. Может там строк больше до заголовка? попробуйте увеличить число до 10 и посмотрите зафиксируется или нет

Автор: Constantus 31.03.17, 10:16

Bernet @ Сегодня, 13:05 * ,

Нет, не помогло... Может настройки таблицы мещают:

    ТабДок.РазмерКолонтитулаСверху = 0;
    ТабДок.РазмерКолонтитулаСнизу = 0;
    ТабДок.АвтоМасштаб = Истина;

    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Истина;
    ТабДок.ПолеСлева = 5;
    ТабДок.ПолеСправа = 5;


Constantus @ Сегодня, 13:13 * ,


Процедура вывода макета расположена в Модуле Объекта

Автор: Bernet 31.03.17, 10:23

Скиньте что происходит с ТабДок в конце процедуры, куда передается.

По идее эти настройки друг на друга не влияют

Автор: Constantus 31.03.17, 10:28

Bernet @ Сегодня, 13:23 * ,

Цитата
Скиньте что происходит с ТабДок в конце процедуры, куда передается.


Не совсем понял что и как скинуть...

Автор: Bernet 31.03.17, 10:43

Constantus @ Сегодня, 11:28 * ,
код процедуры, что происходит в самом конце с табличным документом, он сразу на печать выводится или передается в общие модули для вывода на экран?
весь код процедуры если можно

Автор: Petre 31.03.17, 10:49

Constantus @ Сегодня, 10:28 * ,
Все, что делается с "ТабДок" до применения метода "Показать()".

Автор: Constantus 31.03.17, 10:58

Petre @ Сегодня, 13:49 * ,
Код большой... привожу цитаты:

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

    Область = Макет.ПолучитьОбласть("Подвал");
    Область.Параметры.СуммаЗаказаИ = СЗ;
    Область.Параметры.СуммаРеалИ = СРИ;
    Область.Параметры.СуммаНалИ = СНИ;
    Область.Параметры.СуммаБНалИ = СПИ;
    Область.Параметры.СуммаКредитИ = СКИ;
    Область.Параметры.СуммаВозвратИ = СВИ;
    Область.Параметры.СуммаПКОИ = СДИ;


    ТабДок.Вывести(Область);
    
    
    ТабДок.РазмерКолонтитулаСверху = 0;
    ТабДок.РазмерКолонтитулаСнизу = 0;
    ТабДок.АвтоМасштаб = Истина;

    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Истина;
    ТабДок.ПолеСлева = 5;
    ТабДок.ПолеСправа = 5;


    
    ТабДок.Показать();


Автор: Bernet 31.03.17, 11:12

Попробуйте раскомментировать и написать эту строку в самом конце, перед функцией "Показать"

//ТабДок.ФиксацияСверху = 10;

Автор: Petre 31.03.17, 11:13

Constantus @ Сегодня, 10:58 * ,
Установите

ТабДок.ФиксацияСверху = 10;

непосредственно перед
ТабДок.Показать();

Автор: Constantus 31.03.17, 11:22

Petre @ Сегодня, 14:13 * ,
Не помогло, доктор...

Автор: Bernet 31.03.17, 11:31

Сохраните ваш макет в внешнюю обработку и выложите сюда, посмотрим

Автор: Constantus 31.03.17, 11:37

Bernet @ Сегодня, 14:31 * ,
Как здесь прикрепить файл? Смог сохранить обработку как внешнюю, макет был в обработке...

http://pro1c.org.ua/redirect.php?https://cloud.mail.ru/public/HPmJ/Q2biVrt9n

Автор: Bernet 31.03.17, 11:56

Не знаю честно говоря почему для макета это свойство не срабатывает, но если добавить на форму ПолеТабличногоДокумента, вывести туда ваш ТабДок и установить свойство ПолеТабличногоДокумента.ФиксацияСверху = 3 то тогда работает

Автор: Constantus 31.03.17, 12:34

Bernet @ Сегодня, 14:56 * ,


Как правильно это сделать с учетом уже существующего кода? Что потребуется изменить?

Constantus @ Сегодня, 15:06 * ,


В форме обработки создал "ПолеТабличногоДокумента1"

В конце кода указал:

ТабДок.Показать();


Форма = ЭтотОбъект.ПолучитьФорму("Форма");
Форма.ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ТабДок);
Форма.Открыть();


Результат вышел в "ПолеТабличногоДокумента1"... Но

1. Так и не сработала фиксация. Как теперь правильно делать фиксацию?
2. Ранее в макете у меня был запрет на редактирование значений результата, теперь можно изменять. Как заблокировать возможность изменения в ПолеТабличногоДокумента?
3. ранее в макете по расшифровке, я мог открыть любой документа: Область.Параметры.НомерПКОСылка = ВыборкаДенег.Ссылка; Как теперь мне прописать ссылки, чтобы они открывали нужный документ?

Автор: Bernet 31.03.17, 12:46

1. На форму добавьте элемент "ПолеТабличногоДокумента", назовите его "ПолеТабличногоДокумента"
2. В форме когда происходит вызов процедуры "ВашаПроцедура() добавте его параметром

Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка) Экспорт
ЭлементыФормы.ПолеТабличногоДокумента.Очистить();    
       ВашаПроцедура(ЭлементыФормы.ПолеТабличногоДокумента);
КонецПроцедуры

3. В Модуле объекта выводите ТабДок в ПолеТабличного документа в самом конце вместо строки ТабДок.Показать() напишите следующие строки:
        ПолеТабличногоДокумента.Вывести(ТабДок);
    ПолеТабличногоДокумента.ФиксацияСверху = ТабДок.ФиксацияСверху;

Автор: Constantus 31.03.17, 13:00

Bernet @ Сегодня, 15:46 * ,


Отлично! Спасибо!

1. Теперь как поступить с блокировкой на изменение значений? В Поле табличной части все данные можно изменить и испортить

2. В результате, у меня в Макете была возможность при двойном клике вызвать соответствующий документ. Т.е. код:

Область.Параметры.НомерПКОСылка = ВыборкаДенег.Ссылка;

открывал мне (в данном случае) нужный ПКО... Как поступить в этом случае? Что сделать?

Автор: Petre 31.03.17, 13:12

Constantus @ Сегодня, 11:37 * ,
Раскоментировал фиксацию - все работает...

Автор: Constantus 31.03.17, 13:20

Благодарю за терпение!

Поставил только просмотр, ссылки заработали!!!


Чёрд! Другой подводный камень всплыл...

Дело в том, что у меня из другой обработке вызывается эта Обработка вот код:


ОбработкаДетРез = Обработки.ЕжедневныйАнализПоЗаказам.Создать();

ФормаДетальногоРезультата = ОбработкаДетРез.ПолучитьФорму("Форма");
ФормаДетальногоРезультата.ДатаНачала = Даты;
ФормаДетальногоРезультата.До2кв = До2кв;

ОбработкаДетРез.ВашаПроцедура();


Соответственно вызов "ВашаПроцедура" требует параметр, УКАЗЫВАЮЩИЙ НА ПолеТабличногоДокумента1

Как из другой Обработке прописать вызов этого параметра?

ОбработкаДетРез.ВашаПроцедура(ХХХХХХХХХХХХХХХХХХХХХХХХ);


Автор: Bernet 31.03.17, 13:59

Constantus @ Сегодня, 14:20 * ,
попробуйте так

ОбработкаДетРез.ВашаПроцедура(ФормаДетальногоРезультата.ЭлементыФормы.ПолеТабличногоДокумента1);

Автор: Constantus 31.03.17, 14:26

Bernet @ Сегодня, 16:59 * ,

Именно так и попробовал.
Выполнение кода срабатывает, т.е. в макет выводит данные, а вот результат в ПолеТабличногоДокумента не выводит на экран

Странно

Поставил открыть

ОбработкаДетРез.ВашаПроцедура(ФормаДетальногоРезультата.ЭлементыФормы.ПолеТабличногоДокумента1);
ФормаДетальногоРезультата.Открыть();


Форма открылась с правильным результатом, но нет настроек по ширине колонок и фиксация сверху на одну позицию сбита...


Автор: Bernet 31.03.17, 14:35

Constantus @ Сегодня, 15:26 * ,
Все эти свойства надо передать в поле ТабличногоДокумента

 ТабДок.РазмерКолонтитулаСверху = 0;
    ТабДок.РазмерКолонтитулаСнизу = 0;
    ТабДок.АвтоМасштаб = Истина;

    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Истина;
    ТабДок.ПолеСлева = 5;
    ТабДок.ПолеСправа = 5;

т.е.
ПолеТабличногоДокумента.РазмерКолонтитулаСверху = 0;
ПолеТабличногоДокумента.РазмерКолонтитулаСнизу = 0;
ПолеТабличногоДокумента.АвтоМасштаб = Истина;
ПолеТабличногоДокумента.ОтображатьСетку = Ложь;
ПолеТабличногоДокумента.Защита = Ложь;
ПолеТабличногоДокумента.ТолькоПросмотр = Истина;
ПолеТабличногоДокумента.ОтображатьЗаголовки = Истина;
ПолеТабличногоДокумента.ПолеСлева = 5;
ПолеТабличногоДокумента.ПолеСправа = 5;


У меня результат вывелся, параметр передался, фиксация есть

Автор: Constantus 31.03.17, 14:49

Bernet @ Сегодня, 17:35 * ,

Сделал так

ОбработкаДетРез.ВашаПроцедура(ФормаДетальногоРезультата.ЭлементыФормы.ПолеТабличногоДокумента1);


Процедура ВашаПроцедура(ПТД) Экспорт
    
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
...............................
    ТабДок.ФиксацияСверху = 4;
    ТабДок.ФиксацияСлева = 5;
    
    ПТД.РазмерКолонтитулаСверху = 0;
    ПТД.РазмерКолонтитулаСнизу = 0;
    ПТД.АвтоМасштаб = Истина;
    ПТД.ОтображатьСетку = Ложь;
    ПТД.Защита = Ложь;
    ПТД.ТолькоПросмотр = Истина;
    ПТД.ОтображатьЗаголовки = Истина;
    ПТД.ПолеСлева = 5;
    ПТД.ПолеСправа = 5;
    
    //ТабДок.Показать();

    
    ПТД.Вывести(ТабДок);
    ПТД.ФиксацияСверху = ТабДок.ФиксацияСверху;


Что я опять таки сделал не так, что у меня не выводится результат?

Автор: Constantus 01.04.17, 7:24

Благодарю!

Не знаю что было, но просто скопировал Ваши коды в "ВашаПроцедура" и всё заработало. Ничего принципиального не менял...

Странная вещчЪ получилося...

Автор: Constantus 01.04.17, 14:02

Constantus @ Сегодня, 10:24 * ,


Вся проблема была в

ПолеТабличногоДокумента.Очистить();

У меня ее не было...

Автор: logist 02.04.17, 11:47

Цитата(Bernet @ 31.03.17, 12:56) *
Не знаю честно говоря почему для макета это свойство не срабатывает, но если добавить на форму ПолеТабличногоДокумента, вывести туда ваш ТабДок и установить свойство ПолеТабличногоДокумента.ФиксацияСверху = 3 то тогда работает

Свойство не срабатывает потому, что оно предназначено для использования в интерфейсе, т.е. работает только когда документ помещен в ПолеТабличногоДокумента. ТабДок.Показать() это по сути вывод в файл, а не в интерфейс с которым работает родительская форма.

Автор: Petre 03.04.17, 13:24

logist @ Вчера, 11:47 * ,
Только что проверил, проблема в другом - релизе платформы. В 8.3.8 - не работает, в 8.3.9 - работает.

Автор: logist 03.04.17, 14:11

Цитата(Petre @ 03.04.17, 14:24) *
проблема в другом - релизе платформы. В 8.3.8 - не работает, в 8.3.9 - работает.

Так это видимо реализовали в 8.3.9, у меня в 8.3.5/6/7 не работает.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua