Как поделиться ссылкой на документ в обработке Диадок

05.12.23

Интеграция - ЭДО и ОФД

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

От наших любимых пользователей, которые работают с обработкой Диадок, поступает много предложений, как хороших, так и не очень. В один солнечный весенний день поступило письмо с предложением как-нибудь облегчить им работу и сделать функционал для удобного обмена документами. Т.к. они много пересылают в письмах друг другу информацию для обработки документов, а идентифицируют документы по номеру, дате, контрагенту и сумме платежа., то такой обмен данными не очень удобный т.к. на поиск документа у второго пользователя уходит много времени. Поэтому решили сделать обмен ссылками на документы. То есть дать пользователю возможность привычным образом через функционал «Получить ссылку» (Ctrl + F11) скопировать ссылку, переслать второму пользователю, а он по этой ссылке открыть документ.

Постановка задачи.

  1. Пользователь должен привычным способом получить ссылку на документ в виде текста (чтобы можно было отправить эту ссылку в мессенджере или по почте).
  2. Второй пользователь, который получает ссылку мог воспользоваться штатным функционалом «Перейти по ссылке» (Shift + F11), вставить ссылку и отрыть документ.

Пожелания: если обработка Диадок не открыта, то открыть обработку, а затем открыть документ из ссылки. Если обработка уже открыта, то сразу открыть документ по ссылке.

Вот так это выглядит итоговый результат:

 

 

Реализация.

Для получения строки со ссылкой на документ воспользуемся обработчиками формы ОбработкаПолученияСпискаНавигационныхСсылок и ОбработкаПолученияНавигационнойСсылки. Обработчики доступны, начиная с версии 8.3.19 (см. подробнее).

На форму ФормаПакетаУправляемая добавляем обработчики с кодом:

Формируем список навигационных ссылок, который покажем в системном диалоге. Будем формировать ссылку на документ ЭДО в 1С по уникальному идентификатору ссылки, а также сформируем ссылку на документ в веб версию Диадок.

&НаКлиенте

Процедура ОбработкаПолученияСпискаНавигационныхСсылок(СписокНавигационыхСсылок, КлючПоУмолчанию)   

СписокНавигационыхСсылок.Очистить();
СписокНавигационыхСсылок.Добавить("ДокументЭДО", "Документ " + ТекущийДокумент.ИмяФайла);
СписокНавигационыхСсылок.Добавить("ДокументЭДОWeb", "Ссылка в Диадок " + ТекущийДокумент.ИмяФайла);Q95;

КонецПроцедуры

В обработчике ОбработкаПолученияНавигационнойСсылки сформируем значения навигационных ссылок:

&НаКлиенте

Процедура ОбработкаПолученияНавигационнойСсылки(Ключ, Представление, НавигационнаяСсылка, СтандартнаяОбработка)
 Если Ключ = "ДокументЭДО" Тогда
  НавигационнаяСсылка = ЭтотОбъект.ПолучитьНавигационнуюСсылкуОбработки()
   + СтрШаблон("?ДокументЭДО=%1", ТекущийДокумент.Идентификаторы.ДокументЭДО.УникальныйИдентификатор());
  
  СтандартнаяОбработка = Ложь;
  ИначеЕсли Ключ = "ДокументЭДОWeb" Тогда
   НавигационнаяСсылка = МетодСервераБезКонтекста(Истина, "Модуль_Ядро().Документы_СсылкаВБраузере", ТекущийДокумент);
   СтандартнаяОбработка = Ложь;
  Иначе
   Возврат;
  КонецЕсли;

КонецПроцедуры

Половина задачи сделана. Теперь нужно реализовать функционал «Перейти по навигационной ссылке».

В модуль управляемого приложения добавляем обработчик ОбработкаПереходаПоНавигационнойСсылке.

В обработчике прописываем логику:

  1. Проверяем полученную ссылку на то, что она ссылается на обработку Диадок.
  2. Далее если среди открытых окон есть окно с обработкой Диадок, то формируем оповещение "Диадок_ОткрытьДокументЭДО" с параметрами из навигационной ссылки.
  3. Если окно с обработкой не открыто, то открываем форму обработки с параметрами формы из параметров навигационной ссылки.
Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка)

 Если СтрНайти(ДанныеПереходаПоНавигационнойСсылке.ОтносительнаяНавигационнаяСсылка,
  "e1cib/app/Обработка.КонтурЭДО?") Тогда

 структураПараметрыНавигационнойСсылки = Новый Структура();

 Для Каждого КлючИЗначение Из ДанныеПереходаПоНавигационнойСсылке.ПараметрыНавигационнойСсылки Цикл
  структураПараметрыНавигационнойСсылки.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);                   
 КонецЦикла;
                             
 ОткрытыеОкна = ПолучитьОкна();
 Для Каждого ОткрытоеОкно Из ОткрытыеОкна Цикл
  Если СтрНайти(ОткрытоеОкно.Заголовок, "АРМ.Диадок") Тогда
   СтандартнаяОбработка = Ложь;
   // в новых версиях Диадок добавлена проверка на идентификатор окна
   // поэтому нужно определить Источник
   СодержимоеОкна = ОткрытоеОкно.Содержимое;
   УИИсточник = ?(СодержимоеОкна.Количество(), СодержимоеОкна[0].УникальныйИдентификатор, Неопределено);
   Оповестить("Диадок_ОткрытьДокументЭДО", структураПараметрыНавигационнойСсылки, УИИсточник);
   Прервать;
  КонецЕсли;      
 КонецЦикла;

 // если окно не найдено, значит обработка не запущена
 Если СтандартнаяОбработка Тогда
  СтандартнаяОбработка = Ложь;
  ПараметрыФормы = Новый Структура("ДокументЭДО", структураПараметрыНавигационнойСсылки);
  ОткрытьФорму("Обработка.КонтурЭДО.Форма", ПараметрыФормы, , Новый УникальныйИдентификатор);
  КонецЕсли;                      
 КонецЕсли;

КонецПроцедуры

Теперь в ФормаУправляемая обработки Диадок необходимо добавить процедуру обработки оповещение и обработки параметров при открытии формы.

В обработчик ПриСозданииНаСервере добавил программное создание реквизита формы, в котором будут храниться данные по документу, который необходимо открыть. Если форма открывается из обработчика выше, то заполняем этот параметр из параметра формы:

НовыйРеквизит_СтрокаСписка = Новый РеквизитФормы("СтрокаСписка",
Новый ОписаниеТипов(), , "Строка списка при открытии по ссылке");
МассивНовыхРеквизитов.Добавить(НовыйРеквизит_СтрокаСписка);

СтрокаСписка = Неопределено;
Если Параметры.Свойство("ДокументЭДО", СтрокаСписка) Тогда
 ЭтотОбъект["СтрокаСписка"] = СтрокаСписка;
КонецЕсли;

Дальше после выполнения авторизации на форме запускаются разные обработчики. В последний из запускаемых обработчиков ОжиданиеОплатыСервисаИОшибокМЧД подключил свой обработчик ожидания ОбработчикОткрытияДокументаЭДОПоСсылке:

&НаКлиенте
Процедура ОжиданиеОплатыСервисаИОшибокМЧД()
…

 // подключаем обработчик перехода по ссылке документа ЭДО
 ПодключитьОбработчикОжидания("ОбработчикОткрытияДокументаЭДОПоСсылке", 0.1, Истина);

КонецПроцедуры

 

Текст процедуры:

&НаКлиенте
Процедура ОбработчикОткрытияДокументаЭДОПоСсылке()

 // параметр перезаписываем структурой документа, который нужно открыть          
 ЭтотОбъект["СтрокаСписка"] = ПолучитьСтрокуСпискаНаСервере(ЭтотОбъект["СтрокаСписка"]);
 ОжиданиеОткрытияДокументовПоСсылке();

КонецПроцедуры

Функция ПолучитьСтрокуСпискаНаСервере возвращает структуру документа с такими же данными, как если бы мы открывали документ из списка документов формы Диадок:

&НаСервере
Функция ПолучитьСтрокуСпискаНаСервере(Параметр)
 
 // при пустом значении параметра значит, что мы просто открываем форму
 Если Не ЗначениеЗаполнено(Параметр) Тогда
  Возврат Неопределено;
 КонецЕсли;

 // получаем документ ЭДО, который нужно открыть  по уникальному идентификатору
 ДокументЭДО = Справочники.Диадок_Документы.ПолучитьСсылку(
    Новый УникальныйИдентификатор(Параметр.ДокументЭДО));

 // формируем данные аналогично если бы открывали документ из списка
 Ядро = Модуль_ЯдроНаСервере();
 Результат = Ядро.Контракт_СтрокаСпискаДокументов();
 ДанныеДокумента = Ядро.Документы_СохраненныйДокумент(ДокументЭДО);
 ПараметрыПоиска = Ядро.Контракт_ПараметрыПолученияСпискаДокументов();
 ОтборПоПакету   = Новый Структура("BoxID, LetterID, DocumentID, ИдентификаторПакета");
 ЗаполнитьЗначенияСвойств(ОтборПоПакету, ДанныеДокумента.Идентификаторы);
 ОтборПоПакету.Вставить("ИдентификаторПакета", ОтборПоПакету.LetterId);
 
 ПараметрыПоиска.Вставить("Режим",
    ?(ДанныеДокумента.Направление = "Входящее", "ПолученныеДокументы", "ОтправленныеДокументы"));
 ПараметрыПоиска.Вставить("ПоказыватьЗавершенные", Истина);
 ПараметрыПоиска.Вставить("ОтборПоПакету", ОтборПоПакету);
 ПараметрыПоиска.Вставить("НачалоПериода", ДокументЭДО.ДатаЗагрузки - 1);
 ПараметрыПоиска.Вставить("КонецПериода", ДокументЭДО.ДатаЗагрузки + 1);
 
 ДанныеПолученныхДокументов = Ядро.СписокДокументов_Документы(ПараметрыПоиска);
 СтрокаПоДокументу = ДанныеПолученныхДокументов.Найти(ДокументЭДО, "ДокументЭДО");
 ЗаполнитьЗначенияСвойств(Результат, СтрокаПоДокументу);
 
 Если ЗначениеЗаполнено(СтрокаПоДокументу.LetterId) Тогда
   ИдентификаторПакета = СтрокаПоДокументу.LetterId;
 ИначеЕсли ЗначениеЗаполнено(СтрокаПоДокументу.Документ) Тогда
   ИдентификаторПакета = СтрокаПоДокументу.Документ.УникальныйИдентификатор();
 Иначе
   ИдентификаторПакета = Новый УникальныйИдентификатор;
 КонецЕсли;
 
 Результат.Ключ = ИдентификаторПакета;
 
 Возврат Результат;

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

В процедуре ОжиданиеОткрытияДокументовПоСсылке открываем форму пакета с документом если наш реквизит заполнен данными:

&НаКлиенте
Процедура ОжиданиеОткрытияДокументовПоСсылке()
 
Если ЗначениеЗаполнено(ЭтотОбъект["СтрокаСписка"]) Тогда                           
  ОткрытьФормуПакета(ЭтотОбъект["СтрокаСписка"]);
 КонецЕсли;

КонецПроцедуры      

В процедуру ОбработкаОповещения добавил обработку своего оповещения, которое отрабатывает, когда форма обработки Диадок уже открыта и нужно только открыть пакет с документом:

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

…

 ИначеЕсли ИмяСобытия = "Диадок_ОткрытьДокументЭДО" Тогда
   ЭтаФорма["СтрокаСписка"] = Параметр;         
   ОбработчикОткрытияДокументаЭДОПоСсылке();
 КонецЕсли;                                               

КонецПроцедуры

На этом всё. Получили желаемый результат на требование пользователей.

Диадок

См. также

Регламентированный учет и отчетность Обмен с ГосИС ЭДО и ОФД Бухгалтер Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Работаете по контрактной схеме, сталкивались с проблемой, что в контракте жестко указаны наименование, цена, единица измерения товара. И не все готовы создавать новую номенклатуру под каждый контракт или менять наименование и единицу измерения для уже имеющейся. Тем более, бывает так, что контракт - это формальность. Контракт не описывает жесткие условия поставки, нужно соблюсти правильность в предоставлении документов. Данное решение позволит вам оперировать своей номенклатурой при оформлении реализаций по государственному контракту в УТ 11.5 и КА 2.5.11, в то же время выводить на печать документы, соответствующие данным контракта. Реализована выгрузка для сайта госзакупок (ЕИС) по 44-ФЗ.

60000 руб.

19.12.2022    12012    34    20    

21

Кассовые операции ЭДО и ОФД Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Платные (руб)

Согласно 54-ФЗ по правилам ведения кассовых операций необходимо оформлять приходные кассовые ордера (ПКО) и расходные кассовые ордера (РКО) на основании чеков ККМ. Все данные о чеках, можно взять на сайте оператора фискальных данных (ОФД). Обработка загрузки данных из ОФД в 1С сделает за вас в 1С - ПКО и РКО, Операции по платежным картам или Отчет о розничных продажах (может создать номенклатуру в 1С, указать налоги и др. реквизиты в документах в зависимости от налогообложения ККМ в торговой точке).

5640 руб.

09.08.2017    151719    901    372    

548

ЭДО и ОФД Учет документов 8.3.14 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

ПОДПИСЫВАЙТЕ ДОКУМЕНТЫ С ФИЗЛИЦАМИ ПО СМС. Ваши клиенты и сотрудники смогут подписывать документы простой электронной подписью (ПЭП) без визита к вам в офис. С телефона или компьютера без установки приложений и регистраций.

29990 руб.

28.05.2024    1446    5    0    

7

SALE! 50%

Кассовые операции Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

В публикации размещены специализированные обработки для загрузки кассовых чеков в базах 1С (для локальных баз): 1С:БП 3.0, 1С:УНФ 3.0, 1С:КА. 2.5, 1С:ERP Управление предприятием, ред. 2 и 1С:УТ 11.5. Вы просто сканируете QR коды с бумажных и электронных чеков c помощью мобильного приложения ФНС и чеки автоматически (без ручного ввода) загружаются в документы 'Авансовый отчет', 'Расходы предпринимателя', 'Путевой лист', 'Приходная накладная', 'Поступление (акты, накладные, УПД)', 'Приобретение товаров и услуг', 'Отчет о розничных продажах' и 'Поступление денежных документов'.

12960 9720 руб.

19.08.2020    69093    339    80    

225

ЭДО и ОФД Загрузка и выгрузка в Excel Бухгалтер Бухгалтерский учет 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Платные (руб)

Кто получает документы в формате XML из различных сервисов ЭДО (формат 820 приказ ФНС 31 мая 2019) и набивает их вручную в 1С, тот наверняка хотел бы автоматизировать этот процесс. Поддержка конфигураций: Бухгалтерии 3, УПП 1.3, 1С:КА 2.4 и 1С:КА 2.5, УТ10, УТ11.4 и УТ11.5.

3600 руб.

11.02.2020    92654    301    156    

220

Документооборот и делопроизводство (СЭД) ЭДО и ОФД Учет документов Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Мощный, единый инструмент для решения всех проблем, связанных с переходом на ЭДО. Экономит бумагу и время - организует архив оригиналов первичных документов прямо в базе 1С, в прикрепленных файлах к соответствующим документам. С помощью комплексного отчета по ошибкам в ЭДО позволяет выявить и исправить все возможные ошибки - ошибочно сопоставленные документы, не подписанные документы, подписанные, но не загруженные в 1С документы. Автоматически сопоставляет не сопоставленные между собой документы. Может работать по расписанию и присылать отчет о состоянии архива/по ошибкам на почту. Взаимодействует напрямую с сервисами Диадок/СБИС, имеет интуитивно понятный интерфейс и учитывает 3-х летний опыт 40+ клиентов.

14880 руб.

17.12.2018    45655    65    59    

79
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. fatman78 20 17.10.23 15:23 Сейчас в теме
Если используется подсистема Диадок, чтобы собрать ссылку на документ в браузере не обращаясь к обработке Диадок достаточно собрать ее по шаблону:

		Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
		               |	Диадок_Документы.Ссылка КАК Ссылка,
		               |	Диадок_Документы.BoxId КАК BoxId,
		               |	Диадок_Документы.LetterId КАК LetterId,
		               |	Диадок_Документы.DocumentId КАК DocumentId
		               |ИЗ
		               |	Справочник.Диадок_Документы КАК Диадок_Документы
		               |ГДЕ
		               |	Диадок_Документы.Документ = &Объект
		               |	И НЕ Диадок_Документы.ПометкаУдаления";
		
	
	Запрос.УстановитьПараметр("Объект", Документ); 
	
	Результат = Запрос.Выполнить();
	
	Если Результат.Пустой() Тогда 
		Возврат Неопределено;
	КонецЕсли;	

	СтрокаШаблона = "https://diadoc.kontur.ru/%1/document/show?letterId=%2&documentId=%3";
	Выборка = Результат.Выбрать();
	Выборка.Следующий();
	Возврат СтрШаблон(СтрокаШаблона,Выборка.BoxId,Выборка.LetterId,Выборка.DocumentId);
Показать
VyacheslavShilov; user1490177; simgo83; +3 Ответить
Оставьте свое сообщение