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

  • Автор темы Автор темы set2333
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
S

set2333

Здравствуйте!
Не мог бы кто-нибудь подсказать, как открыть документ из печатной формы.
 
Прежде чем выводить на печать печатную форму зайди в свойствая ячейки при нажатии на которую ты хотел чтобы открывался документ.Внизу ты увидиш поле расшифровка, вбей туда какую нибудь переменную(ТекДок). Далее при формировании печатной формы при выводе этой секции укажи что
Код:
ТекДок= ВыборкаДокументов.ТекущийДокумент();
,т.е. передай в эту переменную ссылку на документ.
Далее у печатной формы установи свойство:
ПечФорма.ТолькоПросмотр(1);
Вот и все.
Так, же чтоб расширить возможности выбора советую через отладчик протестить процедуру ОбработкаЯчейкиТаблицы()
 
А что делать если у меня в обработке своя процедура ОбработкаЯчейкиТаблицы(). Переменная ТекДок принимает значение требуемого документа, но далее открывается пустая печатная форма.
 
В таком случае поможет функция открытьФорму(), передаш в нее свой докумен и открывай наздоровье

Так, тогда давай так, в ОбработкаЯчейкиТаблицы вставиш ТипЗначения(Значение_Расшифровки_Ячейки) и если это документ то через открытьФорму.
 
А если переменная содержащая документ строкового типа? Функция открытьФорму() не срабатывает. Можно сделать так, чтобы строка опять стала документом?
 
По идеи то можно, создать функцию, найти документ по номеру...но зачем все это.Напиши плиз кусочек кода где заполняеться значение печатной формы "Документ"
 
Всё, разобрался. Спасибо за то, что подсказали функцию ОткрытьФорму(). Я про неё незнал, а она вон какая полезная оказалась.


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

Пров = Прав(ЗНПров, 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);
КонецПроцедуры


Вот весь код, если интересно
 
Ясн, ток чет я недогоняю
Код:
Если СокрЛП(Док.ТекущийДокумент()) = ЗН Тогда
ОткрытьФорму(Док.ТекущийДокумент());
Получаеться что ЗН это КакойтоДокумент.Вид() или нет.И где это значение заполняетья? <_<
 
ЗН это какойто документ из истории, точнее строка содержащая документ (СокрЛП(КакойтоДокумент)). Заполняется в расшифровке.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab