Задание:
Нужно доработать типовой отчет 1С «Динамика продаж».
Проблема в том что в конфигураторе 1С нет отчета с названием или синонимом «Димика продаж» .
Таких отчетов много и сейчас мы узнаем как нам найти их в конфигураторе.
Решение:
Ищем этот отчет в режиме 1с предприятие:
либо так:
В конфигураторе по названию мы этот отчет не найдем:
Запустим отчет «динамика продаж» и кликнем на «получить ссылку»:
Получаем ссылку на справочник — варианты отчетов.
Найдем справочник варианты отчетов :
Вот нужный справочник, найдем в нем отчет(вариант отчета) «Динамика продаж»:
Открываем элемент «Динамика продаж» , на реквизите отчет нажимаем открыть:
Вот наш отчет:
открываем его и открываем скд:
Наш искомый отчет «Динамика продаж» всего лишь один из его вариантов:
Как найти отчет по ссылке
Бывает продвинутый клиент скидывает ссылку на отчет в таком виде:
e1cib/data/Справочник.ВариантыОтчетов?ref=ada700151711599111e4c4ff626ef8ea
Но возникает вопрос, а что это за отчет?
- если нет специфического наименования сохраненного варианта, то сохраняем вариант с уникальным наименованием
- открываем обработку «УстановкаЗначенийРеквизитовОбъекта» и выбираем объект «Вариант отчета» (иногда «Отчеты»)
- Находим наш вариант
- смотрим реквизит «Отчет, (Отчет)»
БСП отчеты — как определить какой отчет открыт (открыть в конфигураторе) |
Я |
01.04.21 — 08:45
Собственно — встроенные отчеты (в конфигурации) и доп отчеты — внешние файлы
у отчетов куча вариантов отчетов — названия пишут пользователи
читая СКД (нет выполняемого кода)
вот звонит пользователь — открыт отчет — что-то надо исправить — как определить что за отчет открыт?
1 — 01.04.21 — 08:51
Какая хорошая первоапрельская тема.
Спросить пользователя, если не сможет объяснить откуда он это взял — значит оно ему и не надо.
2 — 01.04.21 — 08:53
Справа три точки вертикальные — Информация для технического специалиста
3 — 01.04.21 — 09:09
(2) о — это для встроенных отчетов
остались дополнительные — там такого нет
4 — 01.04.21 — 09:13
С дополнительными все проще — просто спроси у пользователя. Потому что со встроенными отчет может называться «супер отборка», а на самом деле это один из вариантов строенного отчета «мегаотчет»
5 — 01.04.21 — 09:18
(4) что спросить?
пользователь открывает из панели отчетов — «Отчет имени Ивана Васильевича», а на самом дела это внешний отчет «СреднееПоМаксимумам»
6 — 01.04.21 — 09:19
(5) > что спросить?
Порядок действий, который пользователь совершал для достижения результата. Ваш К.О.
7 — 01.04.21 — 09:22
(6) ты БСП вообще видел — иди мальчик отсюда, не мешай взрослым дядям разговаривать
8 — 01.04.21 — 11:02
нашел идентификатор я только тут:
https://ibb.co/tH7Pr5V
только костыль в общую форму? или этот идентификатор можно в типовой увидеть?
9 — 01.04.21 — 11:09
(1) хы… «он у меня под звездочкой!!!»
10 — 01.04.21 — 11:10
(8) поищи в справочнике Отчеты
11 — 01.04.21 — 11:12
(10) что искать? еще раз — ты же сам пишешь в (9)
у пользователя отчет «под звездочкой» «Отчет имени Ивана Ивановича»
я подключаюсь к рабочему столу пользователя вижу этот открытый отчет
как найти его в конфигураторе?
12 — 01.04.21 — 11:16
(11) Смотришь, куда юзверг нажал, чтобы открыть отчет. Ставишь точку останова у себя и нажимаешь на этот отчет, а дальше прыгаешь по процедурам и находишь куда обращается 1ска, чтобы его открыть. Профит…
13 — 01.04.21 — 11:19
14 — 01.04.21 — 11:20
(12) тоже вариант. Но если юзверг нажал у себя «под звездочкой», то только под его сеансом смотреть..
15 — 01.04.21 — 11:20
(12) а на будущее, умные люди придумали справку, создаешь внешний отчет и пишешь в справке, что за отчет и откуда ноги растут и будет тебе счастье
16 — 01.04.21 — 11:20
(15) надо хоть немного документировать доработки в том числе и отчеты…
17 — 01.04.21 — 11:21
(12) это надо зайти в администрирование, установить пользователю вход по паролю
из конфигуратора выполнить запуск под пользователем .. долго и печально
(13) а как в этот список попасть из формы отчета?
18 — 01.04.21 — 11:21
(17) а разве нельзя тупо в конфигураторе подключить сеанс юзверга в отладку?
19 — 01.04.21 — 11:24
(17) из формы отчета — никак. а найти по названию, которое отображается — можно
20 — 01.04.21 — 11:24
(11) пользователи сами варианты накручивают-сохраняют?
21 — 01.04.21 — 11:27
(20) еще как… более того, дошли уже до такого ТЗ:
Еще есть одна задача, её решение тоже может сохранить ресурс времени, в результате ускорить в целом выполнение процессов.
Когда я получаю очередную задачу по составлению отчета, обычно я не знаю, будет это единоразовый запрос или он станет регулярным.
Я мог бы сохранять каждый вариант отчета с настройками, которые бы я для него делал, но работать с вариантами отчетов в текущем интерфейсе неудобно.
Все варианты одного отчета вываливаются неструктурированным списком, их могут быть сотни. Их уже сотни.
По названию тоже не всегда удобно ориентироваться.
Нужно сделать следующее:
Создать структурированное хранилище вариантов отчетов на месте кнопки перебора листа вариантов отчетов.
Дать возможность создавать в нем папки, называть их.
Создавать папки с автоматически сохраненными вариантами отчетов с указанием даты создания. — система может чистить те, к которым не обратился пользователь спустя некоторое время, например, в течение недели.
22 — 01.04.21 — 11:28
+(21) «я уже джва года хочу…»
23 — 01.04.21 — 11:34
(21) ну ссылку справочник ВариантыОтчетов храни сбоку в каком придумаешь виде и показывай как надо
24 — 01.04.21 — 11:34
(17) ладно, так уж и быть научу тебя магии)
Жмякаешь на значок «Получить ссылку», копируешь ссылку на отчет.
У себя можешь создать обработку и там написать что то типа:
&НаКлиенте
Процедура Пуск(Команда)
ПерейтиПоНавигационнойСсылке(Ссылка);
КонецПроцедуры
Поставить точку останова и посмотреть откуда вызывается отчет)
25 — 01.04.21 — 11:35
(24) тут полюбому можно еще поковырять и выдать уже имя отчета внешнего
26 — 01.04.21 — 11:40
(25) в форме элемента справочника ВариантыОтчетов ИзменитьФорму и галки на Родитель и группу Техническая информация
27 — 01.04.21 — 11:42
У либо о отчета есть уникальная ссылка. Просишь её прислать тебе У пользователя.
28 — 01.04.21 — 11:44
(27) ему в конфигураторе нужен очет
29 — 01.04.21 — 11:47
(28) а что мешает в конфигураторе перейти по ссылке и найти, что за отчет?
30 — 01.04.21 — 11:50
(23) это переписывать типовой механизм придется.
или я туплю и чего-то не понял?
31 — 01.04.21 — 11:51
(30) ну не сильно, добавить менюху свою в общую форму, обработчики сохранения вариантов подогнуть
32 — 01.04.21 — 11:52
(29) по какой ссылке?
33 — 01.04.21 — 11:53
(32) по присланной…
(31) я смотрел — многовато получалось.
сказал, что «зашито в платформу»… в общем, «тактично послал»…
34 — 01.04.21 — 11:54
(32) у любой открытой формы есть ссылка в 1с. К примеру «e1cib/data/Справочник.ВариантыОтчетов?ref=b2670cc47aaa3e5611e94b0cb5208d3e» с помощью процедуры ПерейтиПоНавигационнойСсылке можно в конфигураторе глянуть куда 1ска долбится чтобы открыть данную форму. В данном случае, какой отчет запускает
35 — 01.04.21 — 12:10
костыль:
ОтчетыПереопределяемый:
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
Форма.НавигационнаяСсылкаОтчета = ПолучитьНавигационнуюСсылку(Форма.Параметры.Отчет);
НоваяКоманда = Форма.Команды.Добавить(«ПерейтиПоНавигационнойСсылкеОтчета»);
НоваяКоманда.Действие = «ПерейтиПоНавигационнойСсылкеОтчета»;//Имя процедуры
НоваяКоманда.Заголовок = «Перейти к отчету»;
НовыйЭлемент = Форма.Элементы.Добавить(«ПерейтиПоНавигационнойСсылкеОтчета»,
Тип(«КнопкаФормы»),
Форма.Элементы.ГруппаПрограммныйИнтерфейс);
НовыйЭлемент.ИмяКоманды = «ПерейтиПоНавигационнойСсылкеОтчета»;
НовыйЭлемент.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
КонецПроцедуры
в модуле формы ФормаОтчета добавить:
&НаКлиенте
Процедура ПерейтиПоНавигационнойСсылкеОтчета(Команда)
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылкаОтчета);
КонецПроцедуры
… можно конечно переопределить навигационную ссылку формы — но тогда ссылку на вариант отчета будет сложно послать
а так пользователь шлет навигационную варианта — а я уже перехожу либо в ИдентификаторыОбъектовМетаданных
либо в Доп обработки и отчеты
36 — 01.04.21 — 12:14
(34) есть меню перейти по ссылке. И замер производительности в отладчике.
RomaH
37 — 01.04.21 — 12:17
+(35) надо еще реквизит формы программно добавить
«НавигационнаяСсылкаОтчета»
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
ДобавляемыеРеквизиты = Новый Массив;
// Опишем ревизиты формы
НавигационнаяСсылкаОтчета = Новый РеквизитФормы(«НавигационнаяСсылкаОтчета», Новый ОписаниеТипов(«Строка», , , Новый КвалификаторыСтроки(200)));
// Заполним массив после описания реквизитов формы
ДобавляемыеРеквизиты.Добавить(НавигационнаяСсылкаОтчета);
// Добавим новые реквизиты в форму
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
Форма.НавигационнаяСсылкаОтчета = ПолучитьНавигационнуюСсылку(Форма.Параметры.Отчет);
НоваяКоманда = Форма.Команды.Добавить(«ПерейтиПоНавигационнойСсылкеОтчета»);
НоваяКоманда.Действие = «ПерейтиПоНавигационнойСсылкеОтчета»;//Имя процедуры
НоваяКоманда.Заголовок = «Перейти к отчету»;
НовыйЭлемент = Форма.Элементы.Добавить(«ПерейтиПоНавигационнойСсылкеОтчета»,
Тип(«КнопкаФормы»),
Форма.Элементы.ГруппаПрограммныйИнтерфейс);
НовыйЭлемент.ИмяКоманды = «ПерейтиПоНавигационнойСсылкеОтчета»;
НовыйЭлемент.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
КонецПроцедуры
В статье будет описано, как в 1с открыть ссылку на документ, справочник и т.д. В данном случае имеется в виду открытие формы объекта, используя ссылку на него. Рассмотрим три способа решения поставленной задачи.
Открыть ссылку используя ПоказатьЗначение
Самый простой способ, использовать метод глобального контекста ПоказатьЗначение. Который показывает в диалоге значение переданное в параметре.
ПоказатьЗначение(<ОписаниеОповещенияОЗавершении>, <Значение>)
В параметр Значение передадим ссылку, которую необходимо открыть. Данный метод является ассинхронным, т.е. не ожидает закрытие указанного значения. Для целей ожидания и обработки закрытого значения, в процедуре существует первый параметр. Но для нашей задачи он не нужен и указывать его не следует.
Таким образом открытие ссылки будет выглядеть следующим образом:
ПоказатьЗначение(, Ссылка);
Если в вашей конфигурации разрешено открытие модальных окон (Свойства конфигурации -> Режим использования модальности, принимает значения Использовать или Использовать с предупреждениями), то можно использовать метод ОткрытьЗначение.
ОткрытьЗначение(<Значение>)
Открытие формы по ссылке
Также в 1с открыть ссылку можно при помощи метода ОткрытьФорму. Этот способ более сложен в реализации, но зато универсален. У него довольно много параметров, но для данной задачи нас интересуют первые два.
ОткрытьФорму(<ИмяФормы>, <Параметры>)
ИмяФормы — в параметре следует указать полный путь к форме, которую вы собираетесь открыть.
Пример 1. Можно указать форму, которая является формой объекта по умолчанию:
"Документ.ПоступлениеТоваров.ФормаОбъекта"
Пример 2. Либо указать имя конкретной формы, которую вы хотите открыть. Если, например, форм объекта несколько.
"Документ.ПоступлениеТоваров.Форма.МояФормаОбъекта"
Параметры — структура параметров, которая передается в форму. Набор параметров разработчик выбирает сам, исходя их своих целей. Но некоторые параметры являются стандартными и используются для конкретных целей. Например, параметр Ключ, используется для указания платформе, форму какого объекта следует открыть (если Ключ, не указан, то будет открыта форма нового объекта). Таким образом в данный параметр необходимо передать ссылку на открываемый объект.
Пример 3. Открыть форму объекта для документа Поступление товаров.
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Ссылка);
ОткрытьФорму("Документ.ПоступлениеТоваров.ФормаОбъекта", ПараметрыФормы);
Получить более подробную информацию по методу ОткрытьФорму можно в статье Как в 1с открыть форму программно
Открытие формы по навигационной ссылке
Если у вас есть навигационная ссылка на документ или справочник, перейти по ней и открыть форму объекта можно, используя метод ПерейтиПоНавигационнойСсылке.
ПерейтиПоНавигационнойСсылке(<НавигационнаяСсылка>)
Пример 4.
НавигационнаяСсылка = "e1cib/data/Документ._ДемоПоступлениеТоваров?ref=acb79eb068770e2511e47c89f0b33406";
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
Также навигационную ссылку можно получить из обычной ссылки. Для этого используется метод ПолучитьНавигационнуюСсылку.
ПолучитьНавигационнуюСсылку(<Объект>, <ИмяРеквизита>, <Индекс>)
В параметр Объект, в том числе, можно передать ссылку на документ или справочник.
Пример 5. Получить навигационную ссылку, используя обычную ссылку и открыть форму объекта.
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Ссылка);
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
Пусть переменная СсылкаНаОбъект принадлежит любому ссылочному типу: справочнику, документу, плану счетов и т.д. Получить объект по ссылке можно так:
Объект = СсылкаНаОбъект.ПолучитьОбъект();
Пусть переменная Объект принадлежит любому объектному типу. Получить ссылку из объекта можно так:
СсылкаНаОбъект = Объект.Ссылка;
Будьте внимательны, реквизит “Ссылка” заполняется только при записи объекта. Если объект не записан — ссылки не будет.