Как реализовать открытие документа через гиперссылку на форме в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как реализовать открытие документа через гиперссылку на форме в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33192
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        &НаСервере
        Процедура ЗаписатьРазделенныеТКПНаСервере()
        Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
        Сообщить(«Сначала запишите данное коммерческое предложение!»);
        Возврат
        КонецЕсли;

        ТаблицаЗаказовКлиентовЭМИ[ЭМИ_НомерТекущегоЗаказаКлиента-1].ЗаказКлиента.Загрузить(ТоварыЗаказКлиента.Выгрузить());

        Ном = 1;

        Для Каждого Стр Из ТаблицаЗаказовКлиентовЭМИ Цикл
        Если Стр.ЗаказКлиента.Количество()>0 Тогда
        Если ЗначениеЗаполнено(Стр.Ссылка) Тогда
        НовТКП = Стр.Ссылка.ПолучитьОбъект();
        Иначе
        НовТКП = Объект.Ссылка.Скопировать();
        НовТКП.ТКП = Объект.Ссылка;
        НовТКП.Дата = ТекущаяДата();
        КонецЕсли;
        НовТКП.Товары.Загрузить(Стр.ЗаказКлиента.Выгрузить());
        Для Каждого Стр2 Из НовТКП.Товары Цикл
        Ключ = Стр2.КлючСвязи;
        СтрокаТовары = Объект.Товары[Ключ — 1];
        ЗаполнитьЗначенияСвойств(Стр2, СтрокаТовары);
        Стр2.КлючСвязи = Ключ;
        КонецЦикла;

        НовТКП.Комментарий = ?(ПустаяСтрока(НовТКП.Комментарий),»Деление «+Объект.Ссылка,»Деление «+Объект.Ссылка+»
        |»+НовТКП.Комментарий);
        НовТКП.Записать(РежимЗаписиДокумента.Запись);
        Стр.Ссылка = НовТКП.Ссылка;
        Сообщить(«Записан документ «+НовТКП);
        Элементы[«НоваяНадпись»+Ном].Заголовок = Стр.Ссылка;

        КонецЕсли;
        Ном = Ном + 1
        КонецЦикла;
        КонецПроцедуры

        как из этого кода получить ссылку на документ и релизовать процедуру открытия через гиперссылку на форме документа?

      • #33193
        bot_avaOdin — Одинэсник
        Участник

          Привет, Денис!

          Чтобы получить ссылку на документ из вашего кода и реализовать процедуру открытия через гиперссылку на форме документа, вам нужно сделать следующее:

          1. **Получить ссылку на документ**: В вашем коде вы уже получаете ссылку на новый документ через `НовТКП.Ссылка`. Это значение можно использовать для создания гиперссылки.

          2. **Создать гиперссылку на форме документа**: Для этого вам нужно добавить элемент управления на форму, который будет представлять собой гиперссылку. Затем в обработчике события этого элемента вы можете открыть документ по ссылке.

          Вот пример, как это можно сделать:

          ### Шаг 1: Получение ссылки на документ
          В вашем коде вы уже получаете ссылку на документ, когда записываете новый документ:

          1C
          Стр.Ссылка = НовТКП.Ссылка;
          

          ### Шаг 2: Реализация гиперссылки на форме
          Предположим, что у вас есть элемент управления типа «Гиперссылка» на форме, назовем его `ГиперссылкаДокумент`. Вам нужно добавить обработчик события для этого элемента:

          1C
          &НаКлиенте
          Процедура ГиперссылкаДокументНажат()
              Если ЗначениеЗаполнено(Элементы.ГиперссылкаДокумент.Значение) Тогда
                  Ссылка = Элементы.ГиперссылкаДокумент.Значение;
                  ОткрытьЗначение(Ссылка);
              Иначе
                  Сообщить("Ссылка на документ не задана.");
              КонецЕсли;
          КонецПроцедуры
          

          ### Шаг 3: Установка значения гиперссылки
          После того как вы записали новый документ, вам нужно установить значение гиперссылки на форме:

          1C
          Элементы.ГиперссылкаДокумент.Значение = Стр.Ссылка;
          

          ### Полный пример
          Объединяя все вместе, ваш код может выглядеть так:

          1C
          &НаСервере
          Процедура ЗаписатьРазделенныеТКПНаСервере()
              Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
                  Сообщить("Сначала запишите данное коммерческое предложение!");
                  Возврат;
              КонецЕсли; 
              
              ТаблицаЗаказовКлиентовЭМИ[ЭМИ_НомерТекущегоЗаказаКлиента-1].ЗаказКлиента.Загрузить(ТоварыЗаказаКлиента.Выгрузить());
          
              Ном = 1;
              
              Для Каждого Стр Из ТаблицаЗаказовКлиентовЭМИ Цикл
                  Если Стр.ЗаказКлиента.Количество()>0 Тогда
                      Если ЗначениеЗаполнено(Стр.Ссылка) Тогда
                          НовТКП = Стр.Ссылка.ПолучитьОбъект();
                      Иначе
                          НовТКП = Объект.Ссылка.Скопировать();
                          НовТКП.ТКП = Объект.Ссылка;
                          НовТКП.Дата = ТекущаяДата();
                      КонецЕсли;
                      НовТКП.Товары.Загрузить(Стр.ЗаказКлиента.Выгрузить());
                      Для Каждого Стр2 Из НовТКП.Товары Цикл
                          Ключ = Стр2.КлючСвязи;
                          СтрокаТовары = Объект.Товары[Ключ - 1];
                          ЗаполнитьЗначенияСвойств(Стр2, СтрокаТовары);
                          Стр2.КлючСвязи = Ключ;
                      КонецЦикла;
                      
                      НовТКП.Комментарий = ?(ПустаяСтрока(НовТКП.Комментарий),"Деление "+Объект.Ссылка,"Деление "+Объект.Ссылка+"
            |"+НовТКП.Комментарий);
                      НовТКП.Записать(РежимЗаписиДокумента.Запись);
                      Стр.Ссылка = НовТКП.Ссылка;
                      Элементы["ГиперссылкаДокумент"].Значение = Стр.Ссылка; // Установка значения гиперссылки
                      Сообщить("Записан документ "+НовТКП);
                      Элементы["НоваяНадпись"+Ном].Заголовок = Стр.Ссылка;
                  КонецЕсли;
                  Ном = Ном + 1;
              КонецЦикла;
          КонецПроцедуры
          
          &НаКлиенте
          Процедура ГиперссылкаДокументНажат()
              Если ЗначениеЗаполнено(Элементы.ГиперссылкаДокумент.Значение) Тогда
                  Ссылка = Элементы.ГиперссылкаДокумент.Значение;
                  ОткрытьЗначение(Ссылка);
              Иначе
                  Сообщить("Ссылка на документ не задана.");
              КонецЕсли;
          КонецПроцедуры
          

          Теперь, когда вы записываете новый документ, ссылка будет установлена в гиперссылку на форме, и при нажатии на гиперссылку документ будет открываться.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С