[РЕШЕНО] Текущая таблица

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Samouchka, 2 апр 2015.

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    В 1С открыта единственная таблица (печатная форма), которая может быть любая, но она одна только открыта. Как к такой таблице обратиться в конфигураторе, а также определить ее заголовок? Есть ли для этого какой-нибудь код. Подскажите, пожалуйста.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    компонента FormEx вам в помощь.
  3. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    А какой именно объект и метод не подскажите?
  4. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Пробую метод СписокТаблиц() объекта Сервис. Что не так в моем коде. Если верить документации, метод возвращает саму таблицу, а у меня 1С пишет что как будто бы он вернул заголовок таблицы. Вот такая ошибка

    ТабЗнач.ПараметрыСтраницы(,,,,,,,,,,,"Bullzip PDF Printer");
    {C:\DOCUMENTS AND SETTINGS\USER\РАБОЧИЙ СТОЛ\ДЕНИС ПАПКА\ПДФ И ОТПРАВКА.ERT(32)}: Значение не представляет агрегатный объект (ПараметрыСтраницы)

    Код:
        Путь = КаталогИБ() + "FormEx.dll";
        Если ЗагрузитьВнешнююКомпоненту(Путь) = 0 Тогда
            Сообщить("Неудачная попытка загрузить FormEx.dll");
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
        Таблиц = СоздатьОбъект("Сервис");
        СПТ=Таблиц.СписокТаблиц();
        СПТ.ПолучитьЗначение(1,ТабЗнач);
        ТабЗнач.ПараметрыСтраницы(,,,,,,,,,,,"Bullzip PDF Printer");
        ТабЗнач.Напечатать(0);
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Поясните чего вы хотите добиться
  6. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Имею одну открытую таблицу в 1с. Нужно:
    1) Обратиться к открытой в 1с таблице из конфигуратора
    2) "Напечатать" эту таблицу на виртуальный принтер для ПДФ, т.е. фактически сохранить в формате PDF
    3) Вывести заголовок данной таблицы в переменную (чтобы в дальнейшем обратиться к сохраненному файлу)
  7. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.441
    Симпатии:
    374
    Баллы:
    104
    а конфигуратор то тут при чём?
  8. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    думаю, он имел ввиду как запрограммировать
  9. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Я пишу обработку для сохранения в ПДФ и отправке по электронной почте любой открытой печатной таблице в 1с. Поэтому мне нужно напечатать в ПДФ одной кнопкой, а не начинать выбирать принтер. А затем вернуть заголовок таблицы, т.к. этот принтер сохраняет по умолчанию файл с именем как заголовок у таблицы. Чтобы в дальнейшем обратиться к имени файла для его отправки.
  10. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    подойди с другой стороны
    пиши имя таблицы в глпеременную, списокзначений, тз - по своему выбору, а саму таблицу сохраняй в фай mxl
    по кнопке отправки открывай этот файл, конвертируй, сохраняй, отправляй, наслаждайся...
  11. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.441
    Симпатии:
    374
    Баллы:
    104
    файл штатно можно в xls сохранить или в html
    при открытии печатной формы :)

    вывод в коде обычно заканчивается так примерно
    Код:
        Таб.ТолькоПросмотр(1);
        Таб.Опции(0,0,0,0,ПарСтрДок);
        Таб.Показать("Печать акта списания","");
    
    а задействовав
    Код:
    Записать(<?>,);
    Синтаксис:
    Записать(<ИмяФайла>,<ТипФайла>)
    Назначение:
    Записать таблицу в файл.
    Параметры:
    <ИмяФайла> - имя файла.
    <ТипФайла> - необязательный параметр. Числовое или строковое выражение, определяющее тип файла:
    · отсутствует, 0 или ''MXL'' - формат 1C;
    · 1 или ''XLS'' - формат Ms Excel;
    · 2 или ''HTM'' или ''HTML'' - формат HTML;
    · 3 или ''TXT'' - формат TXT.
    Замечание:
    Метод может использоваться при работе с таблицей в режиме ввода данных.
    получим примерно так
    Код:
        Таб.ТолькоПросмотр(1);
        Таб.Опции(0,0,0,0,ПарСтрДок);
        Таб.Показать("Печать акта списания","");
        Таб.Записать("C;\нужный файл",1);
    
    в результате когда таблица будет на экране
    она одновременно будет сохранена в корень диска С с указанным именем
  12. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    только в эксель не сохраняет объединение и форматирование ячеек
    нужно подгрузить компоненту йоксель, тода фсё хоккей
    она, кстати позволяет и пдф сохранять
    на инфостарте есть несколько решений данного (0) вопроса, платные и бесплатные
  13. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Так у меня Таб - это переменная величина, если можно так сказать. Все дело в том, что таблица может быть любая. Мне надо в модуле именно к открытой таблице обратиться.
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    В FormEx есть метод
    АктивныйКонтекст(<Контекст>) Возвращает контекст активного в данный момент окна.
  15. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Следующий код дает снова ошибку:

    Конт.ПараметрыСтраницы(,,,,,,,,,,,"Bullzip PDF Printer");
    {C:\DOCUMENTS AND SETTINGS\USER\РАБОЧИЙ СТОЛ\ДЕНИС ПАПКА\ПДФ И ОТПРАВКА.ERT(16)}: Поле агрегатного объекта не обнаружено (ПараметрыСтраницы)

    Активным то остается окно обработки, а не таблицы. Наверно в этом проблема. Код вот:

    Код:
    Перем Конт2;
    
    Процедура СохранитьВПДФ()
        Перем Конт;   
        //Сохраняем в ПДФ
        //определяем текущую таблицу
        Путь = КаталогИБ() + "FormEx.dll";
        Если ЗагрузитьВнешнююКомпоненту(Путь) = 0 Тогда
            Сообщить("Неудачная попытка загрузить FormEx.dll");
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
        Таблиц = СоздатьОбъект("Сервис");
        Таблиц.АктивныйКонтекст(Конт);
        Конт.ПараметрыСтраницы(,,,,,,,,,,,"Bullzip PDF Printer");
        Конт.Напечатать(0);
        //Название файла - это заголовок открытой таблицы +pdf
        ВыборОтчет=СокрЛП(Константа.КаталогФайловЭлПочты);
        ПутьКФайлу=ВыборОтчет+"\"+НазваниеФайла;
        //Пихаем в строку что нужно
        Конт2=ПутьКФайлу+";"+НазваниеФайла;
    КонецПроцедуры
  16. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    в какой момент вызывается процедура?
    у тебя активный контекст не таблица

    и вот это вынеси за процедуру
    Путь = КаталогИБ() + "FormEx.dll";
    Если ЗагрузитьВнешнююКомпоненту(Путь) = 0 Тогда
    Сообщить("Неудачная попытка загрузить FormEx.dll");
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
  17. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Процедура вызывается после открытия формы обработки. По другому никак. Вот если бы как-то сделать форму обработки неактивной, может тогда бы таблица оставалась активной и всё бы получилось?
  18. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    тебе надо из обработки вызвать процедуру печати тогда таблица будет активной
    типа такого
    Если Сервис.ВыполнитьПроцедуру(Конт, имяПроц, СпПарам)=1 Тогда
    Если флНаЭкран=2 Тогда
    аКонт = "";
    Если Сервис.АктивныйКонтекст(аКонт) = 1 Тогда
    Если ТипЗначенияСтр(аКонт) = "Таблица" Тогда
    //Ном="";
    //ТЗПринтеры.НайтиЗначение(СокрЛП(ТекПринтер),Ном,"Имя");
    //Путь=СокрЛП(ТЗПринтеры.ПолучитьЗначение(Ном,"Путь"));
    аКонт.ПараметрыСтраницы(,,,,,,,,,1,,ПутьПРН);
    //аКонт.ПараметрыСтраницы(,,,,,,,,,1,,ТекПринтер);
    аКонт.КоличествоЭкземпляров(Кол);
    аКонт.Напечатать(0);
    аКонт.Показать("", "", -1);
    Сообщить(""+Тек+" послали на печать на "+ПутьПРН);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    Конт.Форма.Закрыть(0);
  19. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Вы не совсем поняли. Ещё раз опишу задачу. Я хочу в 1с открывать любые документы и отчеты, формировать печатные формы (таблицы), а затем эти таблицы сохранять в ПДФ и отправлять по эл. почте. Из всего сказанного я не знаю как сохранять в ПДФ именно открытую таблицу, которая может быть любой. Знаю только что технически сохранение в ПДФ происходит за счет печати на виртуальный принтер "Bullzip PDF Printer". Кстати, имена процедур печати (вывода таблицы) у разных форм разные. Поэтому данный код не совсем подходит. А если допустить что все процедуры печати будут с одним именем, то как тогда в Конт (ВыполнитьПроцедуру(Конт)) передать контекст открытой формы, причем не формы обработки, которая опять же будет активной, а другой под ней формы, из которой идет печать.
  20. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    ммм, не обязательно печатать на этот принтер, загрузи компоненту йоксель, там это есть
    зы: поищи на инфостарте по ".pdf" - первая же ссылка на печать/отправку из тис

Поделиться этой страницей