Помогите с печатной формой

Тема в разделе "1C и всё что с ней связано", создана пользователем set2333, 6 авг 2009.

Статус темы:
Закрыта.
  1. set2333

    set2333 Гость

    Здравствуйте!
    Не мог бы кто-нибудь подсказать, как открыть документ из печатной формы.
     
  2. Allexei

    Allexei Well-Known Member

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

    set2333 Гость

    А что делать если у меня в обработке своя процедура ОбработкаЯчейкиТаблицы(). Переменная ТекДок принимает значение требуемого документа, но далее открывается пустая печатная форма.
     
  4. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    В таком случае поможет функция открытьФорму(), передаш в нее свой докумен и открывай наздоровье

    Так, тогда давай так, в ОбработкаЯчейкиТаблицы вставиш ТипЗначения(Значение_Расшифровки_Ячейки) и если это документ то через открытьФорму.
     
  5. set2333

    set2333 Гость

    А если переменная содержащая документ строкового типа? Функция открытьФорму() не срабатывает. Можно сделать так, чтобы строка опять стала документом?
     
  6. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    По идеи то можно, создать функцию, найти документ по номеру...но зачем все это.Напиши плиз кусочек кода где заполняеться значение печатной формы "Документ"
     
  7. set2333

    set2333 Гость

    Всё, разобрался. Спасибо за то, что подсказали функцию ОткрытьФорму(). Я про неё незнал, а она вон какая полезная оказалась.


    Функция Проверка(ЗНПров)

    Пров = Прав(ЗНПров, 1);
    Если Пров = "ъ" Тогда
    ЗНПров = 1;
    ИначеЕсли Пров = "ы" Тогда
    ЗНПров = 2;
    Иначе
    ЗНПров = 0;
    КонецЕсли;

    Возврат ЗНПров;

    КонецФункции

    //*******************************************
    // Процедура генерации запроса Сформировать.
    //
    Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    ФизЛ = Строка("Физическое лицо");
    Форма.ид.Видимость(1);
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |с ВыбНачПериода по ВыбНачПериода;
    |Наименование = Справочник.Сотрудники.Наименование;
    |Должность = Справочник.Сотрудники.Должность;
    |Оклад = Справочник.Сотрудники.Оклад;
    |Состояние = Справочник.Сотрудники.СостояниеФизлица;
    |Группировка Должность;
    |Группировка Оклад;
    |Группировка Наименование;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
    ДляСчета = 0;
    Пока Запрос.Группировка(2) = 1 Цикл
    Пока Запрос.Группировка(3) = 1 Цикл
    Если (Строка(Запрос.Состояние) <> "") и (Строка(Запрос.Состояние) <> "Временно не работает") Тогда
    ДляСчета = ДляСчета + 1;
    КонецЕсли;
    КонецЦикла;
    Если ДляСчета <> 0 Тогда
    Таб.ВывестиСекцию("Оклад");
    КонецЕсли;
    ДляСчета = 0;
    КонецЦикла;
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
    Форма.ид.Видимость(0);
    КонецПроцедуры

    Процедура ОбработкаЯчейкиТаблицы(ЗН)
    ЗН2 = ЗН;
    Форма.ид.Видимость(1);
    Флаг = Проверка(ЗН2);
    Если Флаг = 0 Тогда

    Длинна = СтрДлина(ЗН);
    Длинна = Длинна - 1;
    ЗН = Лев(ЗН, Длинна);
    ДелениеСтрок = Найти(ЗН, " ");
    ДляПрав = Длинна - ДелениеСтрок;
    Окл = Прав(ЗН, ДляПрав);
    Долж = Лев(ЗН, ДелениеСтрок);
    Окл = СокрЛП(Окл);
    Долж = СокрЛП(Долж);
    Запрос2 = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Расшифровать)
    |с ВыбНачПериода по ВыбНачПериода;
    |Наименование = Справочник.Сотрудники.Наименование;
    |Должность = Справочник.Сотрудники.Должность;
    |Оклад = Справочник.Сотрудники.Оклад;
    |Состояние = Справочник.Сотрудники.СостояниеФизлица;
    |Группировка Наименование;
    |Условие((Строка(Должность) = Долж) и (Строка(Оклад) = Окл));
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос2.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Таб2 = СоздатьОбъект("Таблица");
    Таб2.ИсходнаяТаблица("Таблица");
    // Заполнение полей "Заголовок"
    Таб2.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб2.Опции(0, 0, Таб2.ВысотаТаблицы(), 0);
    Пока Запрос2.Группировка(1) = 1 Цикл
    Если (Строка(Запрос2.Состояние) <> "") и (Строка(Запрос2.Состояние) <> "Временно не работает") Тогда
    Сотр = СоздатьОбъект("Справочник.Сотрудники");
    Сотр.ВыбратьЭлементы();
    Пока Сотр.ПолучитьЭлемент() = 1 Цикл
    Если СокрЛП(Сотр.Наименование) = СокрЛП(Запрос2.Наименование) Тогда
    Сот = Сотр.ТекущийЭлемент();
    Периодич = СоздатьОбъект("Периодический");
    Периодич.ИспользоватьОбъект("Оклад", Сот);
    //ЗначениеОклада = Периодич.ЗначениеНаДату(ВыбНачПериода);

    //Сообщить(ЗначениеОклада);
    Периодич.ВыбратьЗначения(, ВыбНачПериода);
    Пока Периодич.ПолучитьЗначение() = 1 Цикл
    //Если ЗначениеОклада = Периодич.Значение Тогда
    ОкладПериод = Периодич.ТекущийДокумент();
    //КонецЕсли;
    КонецЦикла;
    //Сообщить(ОкладПериод);
    КонецЕсли;
    КонецЦикла;
    //Сот = Сотр.Наименование;
    //Периодич = СоздатьОбъект("Периодический");
    //Периодич.ИспользоватьОбъект("Оклад");
    //ОкладПериод = Периодич.ЗначениеНаДату(ВыбНачПериода);
    //Сообщить(ОкладПериод);
    Таб2.ВывестиСекцию("Оклад");
    ОклСотра = Запрос2.Оклад;
    ФИОСотра = Запрос2.Наименование;
    //Сообщить(Запрос2.Введ);
    КонецЕсли;
    КонецЦикла;
    // Вывод заполненной формы
    Таб2.ТолькоПросмотр(1);
    Таб2.Показать("Таблица", "");
    ИначеЕсли Флаг = 1 Тогда
    Таб3 = СоздатьОбъект("Таблица");
    Таб3.ИсходнаяТаблица("История");
    Длинна = СтрДлина(ЗН);
    Длинна = Длинна - 1;
    ЗН = Лев(ЗН, Длинна);
    Таб3.ВывестиСекцию("Заголовок");
    СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
    СпрСотр.ВыбратьЭлементы();
    Пока СпрСотр.ПолучитьЭлемент() = 1 Цикл
    Если СокрЛП(СпрСотр.Наименование) = СокрЛП(ЗН) Тогда
    Сотруд = СпрСотр.ОсновнойЭлемент;
    История = СоздатьОбъект("Периодический");
    История.ИспользоватьОбъект("Оклад", Сотруд);
    История.ВыбратьЗначения(, ВыбНачПериода);
    Пока История.ПолучитьЗначение() = 1 Цикл
    ТекДок = История.ТекущийДокумент();
    Таб3.ВывестиСекцию("Данные");
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    Таб3.ТолькоПросмотр(1);
    Таб3.Показать("История", "");
    ИначеЕсли Флаг = 2 Тогда
    Длинна = СтрДлина(ЗН);
    Длинна = Длинна - 1;
    ЗН = Лев(ЗН, Длинна);
    Док = СоздатьОбъект("Документ");
    Док.ВыбратьДокументы();
    Пока Док.ПолучитьДокумент() = 1 Цикл
    Если СокрЛП(Док.ТекущийДокумент()) = ЗН Тогда
    ОткрытьФорму(Док.ТекущийДокумент());
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    Форма.ид.Видимость(0);
    КонецПроцедуры


    Вот весь код, если интересно
     
  8. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Ясн, ток чет я недогоняю
    Код (Text):
    Если СокрЛП(Док.ТекущийДокумент()) = ЗН Тогда
    ОткрытьФорму(Док.ТекущийДокумент());
    Получаеться что ЗН это КакойтоДокумент.Вид() или нет.И где это значение заполняетья? <_<
     
  9. set2333

    set2333 Гость

    ЗН это какойто документ из истории, точнее строка содержащая документ (СокрЛП(КакойтоДокумент)). Заполняется в расшифровке.
     
Загрузка...
Похожие Темы - Помогите печатной формой
  1. limbra
    Ответов:
    3
    Просмотров:
    46
  2. NylevoiChelovek
    Ответов:
    4
    Просмотров:
    108
  3. Ruska132
    Ответов:
    46
    Просмотров:
    387
  4. gURaBA_N
    Ответов:
    7
    Просмотров:
    148
  5. uxbmw3w
    Ответов:
    0
    Просмотров:
    68
Статус темы:
Закрыта.

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