Рассмотрены возможности использования стандартных форм, вызываемых из платформы.
Первоисточник: Недокументированное использование стандартных обработок из меню "Все функции".
Отличие:
- Используются стандартные формы, вызываемые из платформы.
В этой статье я буду писать про недокументированное использование стандартных форм.
LF — это стандартная компилированная управляемая форма, вызываемая платформой. В платформе 1с предприятия есть стандартные формы: "Все функции", "Все сообщения", "Выбрать цвет", "Выбрать тип документа", "Выбрать шрифт" и т.д. тому подобно.
Первичная цель: Как из компилированной управляемой формы перенести данные в форму с модулями из внешней обработки?
Порядок выполнения действий "Преобразование стандартных форм":
- Открыть обработку, нажать на кнопку "Получить список ресурсов", отметить необходимые ресурсы, выбрать каталог и нажать "Распаковать и упаковать".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
- Открыть форму внешней обработки, восстановить в ней связи между элементами и реквизитами, записать и закрыть.
- Открыть записанную обработку в режиме предприятия.
Что делает обработка "Преобразование стандартных форм":
- Получает встроенную в виде отдельного файла LF.
- Получает готовый шаблон внешней обработки из макета обработки и сохраняет его во временный файл.
- Распаковывает временный файл внешней обработки во временный каталог.
- Заменяет файл "<guid.0>" на содержимое файла LF.
- Упаковывает в обработку обратно в обычный каталог.
Чтобы сделать самому себе обработку "AllFunction.lf", имея на руках V8Unpack, нужно выполнить следующее действие:
- Создать в конфигураторе новую обработку.
- Создать в ней новую управляемую форму.
- Сохранить обработку.
- Распаковать получившуюся обработку с помощью V8Unpack.
- Там должен быть один файл с именем вида <guid>.0 — поменять его содержимое на содержимое файла "AllFunctions.lf".
- После этого обратно собрать обработку с помощью V8Unpack.
Чтобы получить встроенную в виде отдельного файла "AllFunctions.lf", нужно выполнить код:
КопироватьФайл("v8res://mngbase/AllFunctions.lf","C:AllFunctions.lf");
Информация обо всех файлах в формате LF лежит в файлах:
C:Program Files (x86)1cv8хх.хх.хх.ххinmngbase_root.res
C:Program Files (x86)1cv8хх.хх.хх.ххinmngbase_ru.res
Помимо этого была сделана внешняя обработка для тестирования для конфигураций 1С: Предприятия 8. Все изменения касательно внешней обработки "Все функции":
- Восстановлена связь между элементами и реквизитами.
- Закомментирован код закрытия формы обработки после выбора формы.
- Изменено поведение Enter в форме обработки выбора.
- Изменено поведение Esc (запрашивает подтверждение при закрытии приложения).
Второисточник: Просмотр ресурсов 1С методами встроенного языка (8.3.9).
Автор r0610201 любезно разрешил опубликовать расширенный анализ ресурсов 1С со ссылкой на второисточник. За что ему большое спасибо!
Отличие:
- Добавлено преобразование стандартных форм (*.lf, *.f).
- Сохранение всех файлов с ресурсами одним нажатием кнопки.
В последнее время авторы жалуются на отсутствие информации о стандартных обычных формах.
Вторичная цель: Как вытащить стандартные обычные формы?
В файле mngbase_ru.res или mngbase_root.res лежат управляемые формы (*.lf), а обычные формы (*.f) в basicui_ru.res и других файлах.
F — это стандартная компилированная обычная форма, вызываемая платформой.
Была проблема с извлечением ресурсов *.f через ‘КопироватьФайл("v8res://….")’. Порыскал в интернете и нашёл инфу о том, что можно распаковать ресурсы непосредственным чтением двоичных данных res-файла, которые другими способами извлечь не получается.
Порядок выполнения действий "Анализ ресурсов 1С (расширенный)":
- Открыть обработку, нажать "Выбрать расширения", снять все ресурсы, выбрать ресурс "f" или "lf", нажать на кнопку "Выбрать" и "Анализ".
- Поставить галочку ".f (…)" или ".lf (…)", выбрать каталог в поле "Каталог" и нажать "Преобразовать форму(ы)".
- В выбранном каталоге открыть любую обработку в режиме конфигуратора.
Идеи для разработки:
Получить системную папку bin 1С, прочитать файл mngbase_root.res, найти в нём позицию первого ".lf" и нулевой байт и читать пока идут печатаемые символы или нулевой байт.Уметь сравнивать ресурсы: какие ресурсы добавлены, а какие удалены. Например, сравнить 2 файла mngbase_root.res разных версий платформы.Анализировать ресурсы всех файлов.Преобразовать стандартные обычные формы (*.f).
Не стоит забывать, что такое использование стандартных форм является недокументированным.
Выражаю благодарность awa за оказанную помощь.
А «Все действия» — «Настроить список» — эту форму/обработку можно получить вашей обработкой?
(1) klinval, конечно, есть стандартная форма «UniversalListSettings.lf». В ней нужно восстанавливать связи между элементами и реквизитами непосредственно в обработке, такие как: Filter, Order, Group и т.д.
А зачем такие сложности?
http://infostart.ru/public/369487/ тут вариант значительно проще
(3) LSV79, там нет вариантов со стандартными формами, только упоминания в комментариях
Ой, ой, ой… На фоне шумихи с вирусом для 1С… Т.е. теперь можно подложить файлы в каталог бин и пользователь сам когда-нибудь да откроет обработку.
А также можно обойти ограничение на открытие внешних обработок…
Большая-большая дыра в безопасности каждой компании, где у пользователей есть доступ на запись в каталог bin
(5) Serj1C, тсссс
екарук писала уже, но плюсану за обработку, лень копаться 🙂
(7) vano-ekt, спасибо.
ЖЫРНЫЙ ПЛЮС!
(10) fishca, спасибо
А действительно… можно ли вытянуть стандартную форму, слегка ее переделать (например вставить попытку открыть другую форму из состава конфигурации в случае ее там присутствия) и поместить ее обратно в bin?
(12)я знаю только вытянуть и переделать форму но поместить ее обратно в бин нет, не пробовал
Нашел инструмент у Орефкова на сайте… Полностью разобрать получилось, а вот собрать пока не очень…
Что-то я не в теме. А зачем все это? Поясните плиз где и как это может пригодиться
(15)
Мне она пригодилась для тестирования для конфигураций: «Управление торговлей, редакция 11» и «Управление предприятием, редакция 2». На всякий случай указал первоисточник.
(16)
а еще чуть подробней.. 🙂
что здесь имеется ввиду под «тестированием»?
может пример тестового сценария, в котором это используется… может так понятнее будет 🙁
(17)ну изначально я тестировал руками все формы, вызываемые через меню все функции, например, открыть и закрыть формы документа или справочника, но после длительного использования были проблемы, что автоматически закрывается стандартная форма «Все функции» после выбора любой формы и деактивируется строка дерева значений «Table» после переоткрытия стандартной формы «Все функции», что практически невозможно было выбрать следующую форму нажатием стрелочки «вниз» или «вверх», так вот решил создать темуhttps://partners.v8.1c.ru/forum/topic/1510855 , но ответа там до сих пор не дали, затем вспомнил про статью «Недокументированное использование стандартных обработок из меню «Все функции»» на инфостарте от автора екарук и мне нужно было придумать как стандартную форму «Все функции» вызываемую из платформы перенести во внешнюю обработку с формой для этого и была придумана мной статья. Все изменения касательно внешней обработки «Все функции» я писал выше.
(18)
Спасибо, теперь более-менее понятно.
(136)пожалуйста
28.07.2017:
Что изменилось:
Добавил внешнюю обработку «Стандартная форма «Все функции» для ERP». Проверял на версии ERP 2.4.1.126. На УТ данная обработка не подходит, так как к каждой конфигурации проверяется право доступа «TotalsControl», «CollaborationSystemInfoBaseRegistration» и т.д.
Спасибо. Познавательно. Пометки в списке не учитываются при выгрузке (ошибка). Добавил формы истории данных
(22)Всегда пожалуйста!
19.04.2017:
Что изменилось:
Добавлены формы:
BorderChoose
ChartLabelArea
ChartAxis
ChartScale
GanttChartChoiceValue
DataHistoryVersions
DataHistoryVersionsFilter
DataHistoryVersionsFilterUser
DataHistoryVersionData
DataHistoryVersionsDiff
ECSMainForm
fdSave
fullscreen
moxelName
moxelNames
moxelDupName
NotificationsDlgNew
TrendLines
Исправлена ошибка, в которой не учитываются пометки в списке при выгрузке.
А как программно открыть такую форму? Например DataHistoryVersions
(25)воспользоваться обработкой «Преобразование стандартных форм.epf» и вызвать форму методом ОткрытьФорму(«ВнешняяОбработка.DataHistoryVersions.Форма»);
(26) То есть без вынесения из конфигурации никак?
(27)Никак.
Есть пример в первоисточнике:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПодключитьВнешнююОбработкуНаСервере();
ОткрытьФорму(«ВнешняяОбработка.StandardFindByRef.Форма»);
КонецПроцедуры
&НаСервере
Процедура ПодключитьВнешнююОбработкуНаСервере()
ВнешниеОбработки.Подключить(«v8res://mngbase/StandardFindByRef.epf», «StandardFindByRef», false);
КонецПроцедуры
но сделать так же для стандартной формы не получится
ВнешниеОбработки.Подключить(«v8res://mngbase/DataHistoryVersions.lf», «DataHistoryVersions», false);
А настройка панели навигации в списке есть?
(29)эта dcschangesettingsstructure?
(30)
похоже на то. Понять бы еще, как ее отключить.
А для обычных форм (не управляемых) что-то есть? Нужно стандартные обработки под обычным приложение достать. Или если это расписывалось где-то подкинте ссылку. Спасибо.
(32)для обычных форм не делал. здесь только стандартные формы, а в первоисточнике — стандартные обработки.
Ясно. Жаль. Просто стандартные обработки есть и в режиме запуска обычного приложения. Вот про эти обработкиформы (операции-проведения документов) хотелось узнать. Буду искать. Спасибо.
(22) 1С:Предприятие 8.3 (8.3.13.1865)
DataHistoryVersions — открывается
DataHistoryVersionData — не открывается (ошибка — форма не обнаружена)
DataHistoryVersionsDiff — не открывается (ошибка — форма не обнаружена)
При выгрузке в файл аналогично —
{ВнешняяОбработка.ZhokhovM_ConversionOfStandardForms.МодульОбъекта(39)}: Ошибка при вызове метода контекста (КопироватьФайл)
КопироватьФайл(«v8res://mngbase/»+п_Форма.Значение+».lf»,п_Файл.ПолноеИмя);
по причине:
Ошибка копирования файлов
по причине:
Файл не обнаружен ‘v8res://mngbase/DataHistoryVersionData.lf’. Ресурс не найден
Нашел похожие формы
DataHistoryVersionDataRuForm
DataHistoryVersionsDiffRuForm
Но уже с русскими именами параметров
(35)
DataHistoryVersionsDiffRuFormDataHistoryVersionDifferenecesRuForm(35) Понял, исправлю.
04.06.2019:
Что изменилось:
Добавлены формы:
dcsgroupselecteditems_mobile
dcstableselecteditems_mobile
dcschartselecteditems_mobile
dcssettingselecteditems_mobile
dcsnestedsettingselecteditems_mobile
image
StandardPeriodM
moxelGoToCell
moxelInsert
moxelSplitCell
moxelRowHeight
moxelColumnWidth
moxelDeleteCell
MoxelHeadersAndFooters
moxelSectType
FontChooseDlgMobile
HelpM
PrintInfo
PageSettings
About
InputPurchaseEmu
SelectFileDlg
ChartPaletteDescription
ChartRefLines
ChartRefBands
DCSChartRefLine
DCSChartRefBand
ChartTypeChoose
DataHistoryChangeHistoryEnForm
DataHistoryChangeHistoryRuForm
DataHistoryVersionDataEnForm
DataHistoryVersionDataRuForm
DataHistoryVersionDifferencesEnForm
DataHistoryVersionDifferencesRuForm
DataHistoryVersionsFilterDialog
DataHistoryUsersChooseDialog
ECSSettings
SearchForm
SearchForm_ru
ECSMainFormMA
ECSMainFormMA2
ECSConvAddMA
ECSConvTitleMA
ECSConvMembersMA
ECSUserInfoMA
ECSContextConvSmallMA
ECSContextConvLargeMA
ECSFullUserInfoDlgMA
TypeDomainDlgMA
ECSSettingsMA
ECSContextConvSmallMAv13
ECSContextConvLargeMAv13
ECSConvAddMAv13
ECSConvMembersMAv13
ECSFullUserInfoDlgMAv13
ECSMainFormMAv13
ECSMainFormMA2v13
CertificateInfo
CryptoCertManager
Тестировал на платформе 8.3.14.1779.
(36)Добавил. Список изменений предоставил. Файлы, которые выгружаются с ошибками — рекомендуется выгружать на старых платформах. Похожие формы обнаруживаются только в новых платформах.
Может просто обработкой получить системную папку bin 1С, прочитать файл mngbase_root.res. Найти в нём позицию первого «.lf» + нулевой байт и читать пока идут печатаемые символы или нулевой байт.
(40)Тоже об этом подумал, но времени пока не нашлось.
Для других языков свои версии формы истории данных?
(40)А еще нужно уметь сравнивать формы: какие добавлены, а какие удалены.
(42)Для языка RU в некоторых формах есть код или форма на русском.
(41)
Показать
(45)О, спасибо! Постараюсь внести изменения в ближайшие дни.
(18) а через ОткрытьФорму(…) нельзя было протестить?
(47)так список форм нужен был не полный, а тот который в стандартной форме «Все функции». если открывать все формы, то там большинство не ошибки. например, при проверке материалов или совместимо 1с проверяет практически все формы и не все из них является ошибками.
(45)В список ресурсов попадает не только ресурс .lf, но и .mxl, .txt, .zip, .epf и т.д. Нужно слегка подправить код.
07.06.2019:
Что изменилось:
Получение списка ресурсов непосредственно из файлов «mngbase_root.res» и «mngbase_ru.res».
Чтобы получить нужную системную папку bin 1С нужно запускать конкретную версию платформы.
10.10.2019:
Что изменилось:
Добавлено сравнение ресурсов с другими каталогами.
Порядок действий:
Запустить 1С:Предприятие в режиме толстого клиента — открыть обработку преобразования стандартных форм — нажать на кнопку «Сравнить с другими каталогами (толстый-клиент)» — выбрать другую системную папку bin 1С и нажать «Выбор папки» — будут отображены отличия в специальном окне (см. скриншот в публикации).
Пример системной папки:
C:Program Files (x86)1cv8хх.хх.хх.ххin
(51) А есть форма предварительного просмотра табличного документа?
(52)Не нашел форму, вроде нет.
(53) Прискорбно, спасибо
(54)используйте типовую форму «ОбщаяФорма.ПечатьДокументов».
(32)Пока в разработке — обычные формы.
07.11.2019:
Что изменилось:
Добавлена возможность анализировать ресурсы всех файлов и преобразовать стандартные обычные формы без модуля(*.f).