Рассмотрены возможности произвольного использования стандартных функций, вызываемых из меню платформы "Все функции" - "Стандартные" (Активные пользователи, Журнал регистрации, Поиск ссылок на объект, Проведение документов ...).
Неожиданно. Если не секрет, то где подобную информацию можно раскопать? И можно ли еще что-то стандартное сделать нестаднартным? "Изменить форму", например.
(1) friend0, (4) Dementor, В официальном описании ничего этого нет.
Поэтому и "недокументированное использование".
Вытянуто из ресурсных файлов .res в поставке платформы.
Случайно наткнулась при разборе ошибок платформы.
(1) Реализовать такую функциональность через документированную объектную модель управляемой формы невозможно. В частности невозможно снаружи формы получить результирующие заголовки ее полей. Поэтому такой обработки скорее всего не существует. А если она и существует, то она должна использовать какие то недокументированные возможности в объектной модели управляемой формы, которые я очень хотел бы познать.
Круто, спасибо. В обработке "StandardDocumentsPosting" можно вернуть закладку "Восстановление последовательностей", заменив код:
"Items.RestoreSequence.Enabled" на "True", далее изучить код для заполнения списка восстановления последовательностей.
Автор, действительно, поделитесь методом поиска информации!
О ресурсах v8res:// в официальной документации я ничего не находил. Единственные упоминания появляются в описаниях ошибок. Но с типовыми пунктами меню сгенерировать ошибку нереально.
Не там искал... Оказывается это тема годичной давности с партнерского форума. Там и полный состав стандартных обработок и код для сохранения/переопределения. А так же официальная позиция компании 1С по этому поводу:
Вполне очевидно, что данная возможность не является лицензионной.
Тот факт, что стандартные обработки не предоставляются в пользовательский интерфейс - это осознанное решение. Конкретное прикладное решение опирается на некоторый конкретный и прогнозируемый (прикладным разработчиком) список функциональных возможностей. Стандартные функции развиваются синхронно с платформой, а не с прикладным решением. Поэтому пользователю, кажется, будет совершенно непонятно, почему (после обновления платформы и без обновления прикладного решения) какая-то функция внезапно поменяла свой внешний вид и предоставляемые возможности.
Кроме того, переопределение системных форм ведет к тому, что теряется некоторый пользовательский опыт, когда пользователь, переходя от одного прикладного решения к другому, внезапно для него получает совершенно другую форму с (в пределе) совершенно другим поведением и возможностями.
Также стоит отметить, что любое использование недокументированных возможностей в любой момент времени может перестать работать (описываемая возможность не является исключением).
(84) не нужно путать отмену документированных и недокументированных фич. Согласен, что документированные возможности тоже отменяют и изменяют, но при этом такие изменения явно документируют и о них извещают пользователей платформы (а далее это уже ваше право не читать файл V8Update.htm). Стоит отметить, что отмененные фичи в новых платформах могут продолжить работать, если для конфигурации выбрать режим совместимости с предыдущими версиями.
Недокументированные возможности могут появляться и исчезать хаотично, про их жизненный цикл никто не отчитывается и если они пропадут, то никакой режим совместимости уже не поможет.
, конечно тут элементарный копипаст с изменением пары фраз и выдача за свой титанический труд ( цитата "Случайно наткнулась при разборе ошибок платформы. " - ха .. ха)
(8) Поручик, Официально это делать действительно нельзя.
Позиция 1С по поводу таких переопределений описана в (6). И в принципе я с ней согласна. Их подход правильный. Есть стандартные функции, которые зависят от релиза платформы и развиваются параллельно с ней.
Но в некоторых случаях все-таки пользоваться под свою ответственность можно.
Автор, а кроме стандартных обработок есть еще другие стандартные встроенные объекты? Например, по списку внутренних идентификаторов платформы: "v8res://mngbase/" или "v8res://...".
(13) mburkin, А с какими это "со всеми"?
Насколько я знаю, других обработок в платформе нет.
На самом деле в данном случае для подключения используется стандартный метод менеджера внешних обработок ВнешниеОбработки.Подключить()
Смысл этой статьи только в определении внутренних адресов, по которым можно взять стандартные обработки.
(17) w.r., Всегда есть платформенная в меню "Все функции".
Плюс дополнительно в конфигурации может быть включена обработка, адаптированная под особенности конкретной конфигурации.
Например, в УТ11, есть отдельные обработки "Удаление помеченных объектов", "Управление итогами и агрегатами", "Управление полнотекстовым поиском".
Но это именно отдельные независимые обработки.
В общем случае при наличии обработок в конфигурации лучше использовать их, а не встроенные в платформу.
(18) Fragster, Насколько я понимаю, это не платформенная, а стандартная встроенная в конфигурацию обработка.
С ней можно делать все, что угодно, стандартными средствами из конфигуратора.
Автор, и еще в примере 1 ошибка ПодключитьВнешнююОбработкуНаСервере() это процедура, иначе нужно что-нибудь возвращать в функции и лучше вызывать без контекста
(21) w.r., Да, действительно. с точки зрения идеологии работы правильнее Процедура.
Поправила.
Хотя, как ни странно, вариант с функцией тоже работает и ошибок не выдает.
По поводу контекста, это пример для модуля команды.
В нем нет варианта директивы &НаСервереБезКонтекста.
Но при вызове из формы логичнее использовать без контекста.
(22) функция без явного указания возвращаемого значения возвращает Неопределено, вот когда вызывают процедуру, как функцию, тогда будет ошибка выполнения. Если общая команда, то логично, что всегда есть контекст, извиняюсь. Но я бы конфигурацию менять не стал без особой крайней надобности. Лучше внешняя обработка
(22) стало интересно, тут с точки зрения идеологии нужна все-таки функция, тк метод ВнешниеОбработки.Подключить возвращает имя подключенной обработки, значит можно контролировать этот процесс :
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ИмяОбработки = ПодключитьВнешнююОбработкуНаСервере();
Если ИмяОбработки = "StandardFindByRef" Тогда
ОткрытьФорму("ВнешняяОбработка.StandardFindByRef.Форма");
Иначе
Предупреждение("Не удалось подключить внешнюю обработку!");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПодключитьВнешнююОбработкуНаСервере()
ИмяОбработки = ВнешниеОбработки.Подключить("v8res://mngbase/StandardFindByRef.epf", "StandardFindByRef", Ложь);
Возврат ИмяОбработки;
КонецФункции
Показать
Ну если не используется модальность, то показать через метод ПоказатьПредупреждение
24.
Aleksey.Bochkov
361820.06.15 09:26 Сейчас в теме
(0) поясню минус - ИМХО, от таких возможностей больше вреда, чем пользы. По этим соображениям и не публиковал тут подобную информацию когда раскопал эту фичу.
(24) Aleksey.Bochkov, У меня были сомнения о том, стоит ли описывать такие вещи о работе платформы. Думаю, то что они не описаны в официальной документации от 1С это правильно.
Однако я также считаю что для правильной работы с платформой программист должен понимать, как она работает, из чего состоит программный продукт, как взаимосвязаны его части (платформа, конфигурация, информационная база), какой функционал выполняется на каком уровне, какие настройки на каком уровне настраиваются.
При возникновении проблем со стандартными механизмами, нужно иметь возможность разобраться, в чем именно проблема. Программист должен уметь понять как работает нужный функционал. Именно для того, чтобы понять, в чем именно проблема в данных в конкретнй базе. А для этого нужно иметь возможность взять эту же обработку из текущей версии платформы в виде файла и пройтись отладчиком по непонятным вещам.
Также я считаю полезной возможность делать свои обработки на базе стандартных встроенных, а не изобретать каждый раз велосипеды, которые работают каждый по-разному.
И на мой взгляд, Инфостарт именно тот ресурс, на котором должна быть подобная информация. Также как информация о внутреннней структуре .cf и .dt файлов, структуре хранения системных данных базы в SQL. Да, неправильное использование такой информации может навредить, но понимание этих вещей необходимо для правильной работы и возможности оперативно решать возникающие задачи.
(25) Не согласен. Работа программиста прежде всего разработка. Порнимать механизмы нужно, но только касаемо части разработки. Если возникли проблемы с платформой, то лучше и правильней все-таки откатиться на предыдущую версию, где нет проблемы, и сообщить о ней разработчику, чем пытаться ее устранить самостоятельно, используя недокументируемые функции
Интересно а внешние обработки с обычными формами там есть? Считаю было бы очень полезно в статье указать ссыдку на тему партнерского форума, где даны официальные разъяснения по этой возможности.
(28) tormozit, Формы обычные есть. Обработок в явном виде не видела.
Насколько я понимаю, тема имелась в виду эта. Ничего больше не встречала. https://partners.v8.1c.ru/forum/topic/1252472 Там нет особо официальных разъяснений. Основная идея: использовать функции платформы можно только из основного меню.
Очень интересная идея автора!
И чуть-чуть ее можно продолжить.
Информация о файлах v8res://mngbase/StandardActiveUsers.epf и т.п. лежит в файле mngbase_root.res
"v8res://mngbase/dcssFormModuleRus.txt"
"v8res://mngbase/searchFormModuleRus.txt"
"v8res://mngbase/FileSystemExtension.zip"
"v8res://mngbase/CryptoProtectionExtension.zip"
"v8res://mngbase/html.txt"
"v8res://mngbase/model.xdto"
Ставлю жирный плюс. В УТ 11.1 в обработке поиска ссылки не объект нет справочника "Номенклатура". Благодаря Вашему способу, смогу вытянуть стандартную обработку, подправить ее и пользоваться в свое удовольствие
(31) mrmasson, На самом деле в Вашем случае это не обязательно.
Он там есть, просто называется "Позиция номенклатуры".
Вытягивать придется только если нужно будет какие-то еще опции в поиск добавить.
У меня есть ощущение, что таковое появилось недавно. Потому что я копался в 8.2.12 ровно с той же идеей, и нихрена не обрёл. Ну и в любом случае это может завтра измениться, и тогда будут грабли)
Автору за кропотливое копание в потрохах 1С - респект.
44.
infostartfilipich
06.07.15 11:12 Сейчас в теме
Не могу открыть в Бухгалтерии 2.0 на платформе 8.2.19.116 (и клиент-сервер и файловая, код выполняется в модуле внешней обработки) - пробовал и так:
ВнешниеОбработки.Подключить("v8res://mngbase/StandardFindByRef.epf", "StandardFindByRef", false);
ВнешниеОбработки.Создать("StandardFindByRef");
и так:
ВнешниеОбработки.Создать("v8res://mngbase/StandardFindByRef.epf", false);
Ругается:
"Ошибка подключения внешних метаданных
по причине:
Файл не обнаружен 'StandardFindByRef'"
Что я не так делаю? - на платформе 8.3 работает...
(46) infostartfilipich, Да я сама не знала. Только сейчас попробовала.
Не могу понять, почему обычный вариант не работает.
Вроде должен работать аналогично.
Синтаксис команд работы с внешними обработками в 8.2 и 8.3 одинаковый.
(47) Адресное пространство "v8res://mngbase..." недоступно для проводника Windows? По этой причине или требуется разрешение на запись в "v8res://mngbase..."?
Нашёл там ещё описания форм. Есть идеи как их вытащить? Интересует диалог выбора цвета (ColorChoose.lf), хотелось бы его доработать и вставить себе в конфигурацию. Просмотрел весь код формы — не нашёл, как формируется список цветов и как они отображаются.
Обработка хорошая, только сразу не запустилась.
Пришлось СтрРазделить(Стр, ";", Ложь);
заменить на
ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,";");
Также процедура КаталогВыгрузкиНачалоВыбора
не сработала. Пришлось полностью переписать
Я с "детства" мечтал добраться до этих обработок, чтоб хотя бы вызвать из из своего кода. Это самая качественная и нужная статья по недокументированным возможностям. Хотя не пойму, почему разработчики платформы не добавили возможность хотя бы просто вызова этих диалогов из кода, пусть даже с административными правами...
Кстати, тут уже спрашивали, так что повторюсь - как добраться до обработок для обычного приложения, не управляемого? Я имею ввиду, может кто нибудь уже разобрался как до них добраться...
(64) frkbvfnjh, Про обычное не знаю. Теоретически это должны быть те же самые обработки.
(65) Abbra, Не совсем поняла, как скопировали. Эти обработки не являются элементами конфигурации, соответственно на них не может быть внешней ссылки. При их открытии даже звездочка неактивна. Если нужно дать на них ссылку, то я вижу только вариант встраивать их в конфигурацию.
А нельзя ли как-нибудь эти ссылки использовать по кнопке Перейти по ссылке (Звездочка с зеленой стрелкой) для открытия обработок? Просто скопировал - не получилось.
Надеюсь тема актуальна и развивается, найти бы стандартную форму сообщения об ошибке, в частности формы с кнопкой подробно, для создания "подписки на ошибку" и дальнейшем обработки и сбора информации, что-бы не выискивать, что пользователю там выдалось, а иметь корректно сохраненный текст ошибки, если еще и контекст удастся зацепить было бы совсем замечательно.
(70) Trise, С формами так, к сожалению, не получится.
Механизм подключения внешних файлов с внутренними именами есть только для отчетов и обработок.
Формы теоретически можно вытащить, но подменить стандартные внешними нельзя.
(77) German_Tagil, учитывая, что для управляемых используется внутренний каталог v8res://mngbase/, покопайте в сторону OrdinaryApplication. что-нибудь в духе ordbase