Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Зафиксировать верхние строки в макете
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Constantus
Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

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

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

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

Пытался:

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

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

Область = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Область);
Bernet
ну в общем-то все правильно, свойство "ФиксацияСверху" отвечает за вертикальную фиксацию. Может там строк больше до заголовка? попробуйте увеличить число до 10 и посмотрите зафиксируется или нет
Constantus
Bernet @ Сегодня, 13:05 необходимо зарегистрироваться для просмотра ссылки ,

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

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

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


Constantus @ Сегодня, 13:13 необходимо зарегистрироваться для просмотра ссылки ,


Процедура вывода макета расположена в Модуле Объекта
Bernet
Скиньте что происходит с ТабДок в конце процедуры, куда передается.

По идее эти настройки друг на друга не влияют
Constantus
Bernet @ Сегодня, 13:23 необходимо зарегистрироваться для просмотра ссылки ,

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


Не совсем понял что и как скинуть...
Bernet
Constantus @ Сегодня, 11:28 необходимо зарегистрироваться для просмотра ссылки ,
код процедуры, что происходит в самом конце с табличным документом, он сразу на печать выводится или передается в общие модули для вывода на экран?
весь код процедуры если можно
Petre
Constantus @ Сегодня, 10:28 необходимо зарегистрироваться для просмотра ссылки ,
Все, что делается с "ТабДок" до применения метода "Показать()".
Constantus
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
Попробуйте раскомментировать и написать эту строку в самом конце, перед функцией "Показать"
//ТабДок.ФиксацияСверху = 10;
Petre
Constantus @ Сегодня, 10:58 необходимо зарегистрироваться для просмотра ссылки ,
Установите
ТабДок.ФиксацияСверху = 10;

непосредственно перед
ТабДок.Показать();
Constantus
Petre @ Сегодня, 14:13 необходимо зарегистрироваться для просмотра ссылки ,
Не помогло, доктор...
Bernet
Сохраните ваш макет в внешнюю обработку и выложите сюда, посмотрим
Constantus
Bernet @ Сегодня, 14:31 необходимо зарегистрироваться для просмотра ссылки ,
Как здесь прикрепить файл? Смог сохранить обработку как внешнюю, макет был в обработке...

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


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

Constantus @ Сегодня, 15:06 необходимо зарегистрироваться для просмотра ссылки ,


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

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

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


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


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

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

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


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

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

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

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

открывал мне (в данном случае) нужный ПКО... Как поступить в этом случае? Что сделать?
Petre
Constantus @ Сегодня, 11:37 необходимо зарегистрироваться для просмотра ссылки ,
Раскоментировал фиксацию - все работает...
Constantus
Благодарю за терпение!

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


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

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


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

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

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


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

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

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

Bernet
Constantus @ Сегодня, 14:20 необходимо зарегистрироваться для просмотра ссылки ,
попробуйте так
ОбработкаДетРез.ВашаПроцедура(ФормаДетальногоРезультата.ЭлементыФормы.ПолеТабличногоДокумента1);
Constantus
Bernet @ Сегодня, 16:59 необходимо зарегистрироваться для просмотра ссылки ,

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

Странно

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

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


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

Bernet
Constantus @ Сегодня, 15:26 необходимо зарегистрироваться для просмотра ссылки ,
Все эти свойства надо передать в поле ТабличногоДокумента
 ТабДок.РазмерКолонтитулаСверху = 0;
    ТабДок.РазмерКолонтитулаСнизу = 0;
    ТабДок.АвтоМасштаб = Истина;

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

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


У меня результат вывелся, параметр передался, фиксация есть
Constantus
Bernet @ Сегодня, 17:35 необходимо зарегистрироваться для просмотра ссылки ,

Сделал так

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


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

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


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

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

Странная вещчЪ получилося...
Constantus
Constantus @ Сегодня, 10:24 необходимо зарегистрироваться для просмотра ссылки ,


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

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

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

Свойство не срабатывает потому, что оно предназначено для использования в интерфейсе, т.е. работает только когда документ помещен в ПолеТабличногоДокумента. ТабДок.Показать() это по сути вывод в файл, а не в интерфейс с которым работает родительская форма.
Petre
logist @ Вчера, 11:47 необходимо зарегистрироваться для просмотра ссылки ,
Только что проверил, проблема в другом - релизе платформы. В 8.3.8 - не работает, в 8.3.9 - работает.
logist
Цитата(Petre @ 03.04.17, 14:24) необходимо зарегистрироваться для просмотра ссылки
проблема в другом - релизе платформы. В 8.3.8 - не работает, в 8.3.9 - работает.

Так это видимо реализовали в 8.3.9, у меня в 8.3.5/6/7 не работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.