MiracleV8: Расширенная версия
Разработка - Разработка внешних компонент
Бесплатные
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО
| Наименование | Скачано | Бесплатно |
|---|---|---|
|
Ссылка на скачивание
.txt 0,03Kb
2324
|
2324 | Скачать бесплатно |
|
-
.txt 29,04Kb
1335
|
1335 | Скачать бесплатно |
|
Тест77
.zip 657,27Kb
646
|
646 | Скачать бесплатно |
|
Тест81
.zip 681,43Kb
554
|
554 | Скачать бесплатно |
Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Работа с xls-файлами на считывание/запись напрямую (не требует наличия Excel или Open Office), интерактивная иконка окна 1С в трее,
медиа, индикаторы, работа с htm-файлами и веб-ссылками, аниматоры, прогресс-бары, некоторые возможности WinAPI для продвинутых, некоторые полезные функции для администрирования и т.д. (см. файл описания)
MiracleV8_TestBase81.zip - тестовая база 8.1, dll внутри
MiracleV8_TestBase77.zip - тестовая база 7.7, dll внутри
Описание (ReadMe).txt - описание методов
Примечание: обновления dll в четвертом файле с номером актуальной версии
ВНИМАНИЕ: в связи с вопросами кое-кого сообщаю, что внутри тестовых баз лежат самые дремучие версии dll, тестовые базы не обновляются с начала публикации.
Версия 2.1.3.0, добавлен "Рабочий стол". Скачивать по ссылке в публикации
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Загрузка и выгрузка в Excel Маркетплейсы Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)
Реальный помощник, с помощью которого Вы преобразуете необходимые документы для Wildberries, OZON, ЯндексМаркет, ЛаМода, Мегамаркет, Aliexpress, Детский мир, Магнит Маркет (быв.МагнитЭкспресс), Лемана про, ЭНФАНТА (Акушерство), Летуаль, Твой дом, Золотое Яблоко, Каспи, Авито, Аптеки+, М.Видео,Тинькоф в документы "Отчет комиссионера (агента) о продажах" и другие. Работает в 1С:БП 3.0, 1С:БП 3.0 КОРП, 1С:УТ 11, 1С:УНФ, 1С:ERP.
5490 руб.
12.08.2021 48436 654 71
Загрузка и выгрузка в Excel Маркетплейсы Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Платные (руб)
Обработки загрузки данных о продажах WildBerries предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 3.0; Розница, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3
6000 руб.
11.12.2019 68026 1163 3
Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Разработчик 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)
Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.
12444 руб.
29.10.2014 237863 777 544
Загрузка и выгрузка в Excel Маркетплейсы Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)
Обработки загрузки данных о продажах Ozon предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 3.0; Розница, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3
6000 руб.
26.11.2020 51271 865 4
SALE! 30%
Загрузка и выгрузка в Excel Оптовая торговля Бухгалтер Пользователь 1С:Предприятие 8 1С 8.3 1С 8.5 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 1.х 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)
Загрузка данных из Excel в 1С одним кликом: документы, номенклатура, цены, прайсы и справочники без ручного ввода в УТ, КА, ERP, БП, УНФ и др. Попробуйте демо-версию бесплатно!
8000
7200 руб.
09.11.2016 286119 971 964
SALE! 35%
Загрузка и выгрузка в Excel Учет документов Распознавание документов и образов Бухгалтер Пользователь 1С:Предприятие 8 1С 8.3 1С 8.5 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)
Программа для распознавания сканов или фотографий товарных документов в 1С. Просто выбираете файл (PDF, XML, JPG, DOC, XLS, HTML) и нажимаете кнопку "Распознать и загрузить".
8540
5551 руб.
04.06.2019 127953 385 183
Загрузка и выгрузка в Excel Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Управленческий учет Платные (руб)
Загрузка данных отчета о реализации товаров из сервиса Lamoda «Ламода» для конфигурации: 1С:Бухгалтерия предприятия, редакция 3.0; 1C:Управление торговлей, редакция 11 и 1C:Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".
6000 руб.
01.03.2021 13426 89 0
Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)
Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 07.10.2026, версия 9.5.0 - 10.9.0)
20740 руб.
20.11.2015 179820 430 401
1. Если база запущенна под Windows 7 то СтрокаСоединенияИнформационнойБазы() выдает "File="D:\infobase\8.1\MiracleV8_TestBase81\";" т.е. слэш на конце строки уже есть
2. Обработка Статус прогресс бар ничего не показывает. Т.е. мигнуло что то и все бара нет внизу окна, хотя курсор был еще какое-то время был занят т.е. цикл счетчика работал
3 При закрытии главного окна программы иконка в трэе не проподает пока на неё не наведешь мышью
Да... Abadonna молодец. Супер гений!
{МодульПриложения(17)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней компоненты
ЗагрузитьВнешнююКомпоненту(Путь+"MiracleV8.dll");
по причине:
Ошибка при загрузке внешней компоненты
В чем проблема?...
Без всяких там "обработок внешних событий".
Кубик - это не интересно... Таких уже полно разработок.
Но скачать никак не удается, администрация сайта гонит, 2 дня ничего отсюда не качаю, а мне с утра по раньше говорит уже лимит исчерпан :)
И чего все так любят всё в 1С запихать? ;)
> классная вещь прогресс бар в 1с нижней панели
В 8.1 можно сделать стандартными методами, в 7.7, конечно, фиг.
>Но скачать никак не удается
Оставь мыло - закину, если у так надо
мыло: pavlo1c собачара mail.ru
время заполнения xls-матрицы 50000х10 (пятьдесят тыс. строк, 10 столбцов) словом "Тест"
Старт: 08.11.2009 21:51:36
Финиш: 08.11.2009 21:51:58
Старт: 08.11.2009 21:52:09
Финиш: 08.11.2009 21:52:32
Старт: 08.11.2009 21:52:59
Финиш: 08.11.2009 21:53:21
______________________________________
тачка:
Процессор:AMD Athlon 64 X2 Dual Core Processor 4600+ частота 2420
Оперативная память, MB: 2146
однако он видно на панели внизу что открыт и там если только правой кнопкой нажать и сказать развернуть то тогда появляется снова до след клика по "часам" :(
других сернуться. На 8.1 они спокойно сворачиваются и разворачиваются кликом в панели (левым). В 7.7, значит, немного по другому...
Кстати, не полько по часам, а и просто клик по MDI заставляет их свернуться
Спецом не стал указывать, чтобы цветом не баловались ;)
А вообще-то это стартовый и финишный цвета индикатора (по умолчанию от белого до серого)
>а как вылечить это кто нить знает?
Настраивал по свой монитор с разрешением 1280x1024, левая граница задана жестко, так, чтобы правый край индикатора приходился вплотную
к индикатору [CAP]/
Мне проще добавить еще один парамерт куда помещать Лево, чем все виды разрешений учитывать... Щас прям и добавлю ;)
SetStatusBarGauge(ЦветСтарт, ЦветФиниш, Лево: целые)
ЦветСтарт, ЦветФиниш, Лево - необязательные, по умролчанию
ЦветСтарт- белый, ЦветФиниш- серый, Лево - 0
Если Лево не ноль - тогда заданное значение, иначе - встроенное
Добавил метод ScreenParam() - возвращает разрешение экрана, вида
Ширина x Высота - строка (разделитель англ "x")
исправляешь ошибку и запускаешь обработку снова, поле бара с процентами которое осталось белеет на простую полоску белую и все, больше бар не пашет вовсе, пока 1С не перезапустишь :(
Исправил, раз 10 прерывание сделал - все ОК.
P.S. И не надо теперь перед началом установки разрушать (ставить в 100).
Он теперь сам обязательно разрушит старый по SetStatusBarGauge
Ексель.NewXLS(ИмяФайла);
//Шапка
индекс=Ексель.XLSAddFormat("Arial Cyr",10,1,0);
Ексель.CellSetString(1,1,"Товар",индекс);
Ексель.CellSetString(1,2,"Цена,руб",индекс);
Ексель.CellSetString(1,3,"Есть",индекс);
Ексель.CellSetString(1,4,"В пути",индекс);
Ексель.CellSetString(1,5,"Заказ",индекс);
Ексель.XLSWrite(); // зафиксировали (записали файл)
В итоге, вниз добавляет таблицу с примером, которую я не прошу добавлять :)
p.s. Опечатка в методе XLSDelFomat(Индекс) вместо XLSDelFo"R"mat(Индекс) ;)
По просьбе (4,5)
добавлены методы:
StayOnTop() - сделать главное окно 1С всегда поверх всех окон
Примечание:
в связке с MainNoMinimize() юзвери никак от окна избавиться не смогут, только закрыть ;)
PlayBeep(Частота, Длительность: целые) - пискнуть системным динамиком
Частота, Длительность - необязательные, по умолчанию 440 Гц (Ля) и 1000 - одна секунда.
Примечание: проверить не смог, динамика нема ;)
Нашел подложечку, куда можно компоненты всадить ;)
Мудро тупым методом:
function EnumChildMain(wnd: hwnd; LParam: LParam): bool; stdcall;
var b: array[0..100] of char;
var hexwnd:string;
begin
hexwnd:=IntToHex(wnd,8);
GetClassName(wnd,@b,100);
Form1.Memo1.Lines.Add(hexwnd+' '+StrPas(b));
ShowMessage(hexwnd);
PB:=TProgressBar.CreateParented(wnd);
PB.UpdateControlState;
PB.Left:=10;
PB.Top:=40;
PB.Width:=200;
PB.Height:=20;
PB.Visible:=true;
PB.Enabled:=true;
PB.Position:=60;
end;
ПоказатьТупо жмем кнопочку на ShowMessage(hexwnd) и смотрим, когда же он, родной видимо появится на форме 8.2 ;)
SetButtonCaptionEx(ЗаголовокКнопки1С,ЦветФонОт,ЦветФонДо,ЦветРамки,ЦветШрифта)
Для более явного выделения кнопки (рамка вокруг)
Дополнительный параметр ЦветРамки - целое
//-- бардовая рамка (128)
L.SetButtonCaptionEx("Закрыть",8684799,255,128,65021);
Не применять для форм, открываемых модально!!!
//-- синяя рамка (15966336)
L.SetButtonCaptionEx("С&формировать",16245453,7950848,15966336,0);
Добавьте "для продвинутых" GetPID1C() пл3 :)
А скоро ли появятся обещанные кнопочки на родных тулбарах ? :oops:
1.SetStatusBarGauge(ЦветСтарт,ЦветФиниш,Лево,Ширина:целые) – установить индикатор прогресса на статус-панели 1С (там, где выводится Состояние(«бла-бла»), в правой части панели). Значение процента прогресса выводится посередине индикатора.
ЦветСтарт,ЦветФиниш - необязательные, по умолчанию от белого до темно-серого, цвет полоски индикатора
Лево - необязательный, если ноль - встроенное, иначе указанное - левая граница бара на статус панели
Ширина - необязательный, если ноль - встроенное (150), иначе указанное - ширина бара на статус панели.
Используй параметр Лево. Автоматом наличие панелей не определяется
2. Кнопки уже есть (давно)
пост 50
1.9.9.2
GetThreadPID(Что:число): целое.
Что - необязательный, по умолчанию 0.
Если 0 - возвращает ИД процесса (PID), иначе ИД нити (ThreadID)
Пример:
Сообщить("PID = "+L.GetThreadPID());
Сообщить("ThreadID = "+L.GetThreadPID(1));
GetMainRect(Что:строка):число
Что - необязательный, по умолчанию "L"
Что="L" - абсолютная Х-координата верхнего-левого угла окна 1С
Что="T" - абсолютная Y-координата верхнего-левого угла окна 1С
Что="W" - ширина в пикселях окна 1С
Что="H" - высота в пикселях окна 1С
Метод
RunAndWait(КоманднаяСтрока:строка, ПараметрыЗапуска:строка, ОконныйРежим:целое) - запустить внешнее приложение и подождать его выполнения.
КоманднаяСтрока - строка для запуска приложения
ПараметрыЗапуска - строка стартовых параметров, необязательный, по умолчанию без параметров
ОконныйРежим: целое 0-10 (стандарные режимы окна Windows), необязательный, по умолчанию 1 - показать окно в обычном режиме (SW_SHOWNORMAL)
Кроме того, основные:
0 - не показывать окно (SW_HIDE)
2- минимизировать окно (SW_SHOWMINIMIZED)
3- максимизировать окно (SW_SHOWMAXIMIZED)
Для чего? Например, надо запустить программу, которая что-то там сделает (посчитает) и поместит результат в определенный файл. После RunAndWait можно будет считать этот файл.
Пример:
L.RunAndWait("C:\Program Files\Total Commander\Plugins\exe\AkelPad.exe");
// следующий оператор отработает только после закрытия блокнота (AkelPad)
Сообщить("Закрыл, гаденыш? Молодец!");
Добавлены методы для работы с картинками XLS-файлов:
XLSPictCount() - возвращает количество картинок в xls-файле
Примечание: считаются картинки во всех листах открытого файла
XLSSavePicture(ПорядковыйНомерКартинки:число,ИмяФайлаДляЗаписи) -
считать картинку с указанным номером и сохранить её в указанный файл. Возвращает строку размеров записанной картинки вида Ширина х Высота
Примечания:
Отсчет картинок от 1 до Счетчик
Номер картинки в файле - это не как они видятся в файле, а в порядке их добавления туда
Пример:
L.ReadXLS("c:\MiracleV8_TestBase77\Картинки.xls");// открыли файл
Для А=1 По L.XLSPictCount() Цикл // цикл по всем картинкам файла
ИмяФайла=Строка(А)+".bmp";
Сообщить(L.XLSSavePicture(А,КаталогИБ()+ИмяФайла));
КонецЦикла;
P.S. Навеяно , но извратов поменьше ;)
при чтении из экселя ячейки где стоит не значение, а формула, результатом которой получается значение не целое, то он вываливается в исключение при чтении:
L.ReadCell(Лист,Стр,Столб);
AddIn.MiracleClass: '97.43' is not a valid integer value
причем он правильно считывает значение, но почему-то ждет что оно должно быть целое....
как с этим бороться?
Новый метод:
GetTraffic() - возвращает строку с разделителями вида:
00-22-15-D3-D3-BC;NVIDIA nForce Networking Controller - Kaspersky Anti-Virus NDIS Miniport;13058897;5995229
MAC-адрес; Имя сетевого интерфейса; Всего принято байт; Всего отправлено байт
(за время сеанса Windows)
P.S. Например, во всех линуксах есть лицензионное соглашение, несмотря на открытый исходный код - требование закона.
Программа распространяется бесплатно, на условиях «как есть», за возможный вред, нанесенный программой, автор ответственности не несет
Чего еще дядькам надо? Если они захотят, то и до ФИО докопаются - где лицензия? :D
P.S Для иностранных будет "free... as is..."
Правда, таких мерзких напихали :cry: :D
А КАКУЮ именно базу? А то я тут от 7.7 до 8.2 бедный тружусь :(
7.7 скорее?
(178) Фиг его знает, может я там уже типы поменял, надо вспоминать.
Как только совсем делать нечего станет - напишу полноценный хелп. Жаль только, что из форума из 6 страниц пропало 5, там и примеры кода были...:(
И еще:
L.SetGifAnimator(10, 10, Путь+"Bird-06.gif");
выдает ошибку: "ошибка при вызове метода... Типы не совпадают (0)".
Подскажите в чем дело, пожалуйста.
выдает ошибку: "ошибка при вызове метода... Типы не совпадают (0)".
Я там в описаловке наврал: сначала файл, потом точки надо.
Т.е. надо L.SetGifAnimator(Путь+"Bird-06.gif",10,10);
а вообще их можно совсем не задавать [L.SetGifAnimator(Путь+"Bird-06.gif");], тогда к краешку прижмется сама (по умолчанию там 5 и 32 - как раз под формочку 8.1 заточено)
Короче, фиг его уж знает почему, для GifAnimator я сделал всё наоборот, чем на AviAnimator :cry:
Честно говоря, звук и видео я больше ради баловства воткнул, ибо как раз являюсь противником пихания в 1С всего-всего... Один фиг внешний плейер всегда будет лучше.
Но, вообще-то, проблем расширить функционал работы со звуком и видео особых нет
По поводу внешнего плеера я согласен, что он будет лучше, есть конечно и визуальные activex компоненты (wmp), но мне не особо нравиться как они работают в терминальном режиме, да и видео не всегда нужно, нужна простая не визуальная компонента, которая сможет проигрывать, останавливать, продолжать с указанного места проигрывать аудио файл, а незатейливый интерфейс можно и самой 1С состряпать.
1. При наведении мышкой на кнопку подсказка всплывает не регулярно, со специфическим голубым фоном и фиксированной ширины (не весь текст показывает либо много пустого места).
2. При наведении мышкой на кнопку в строку состояния пишется бред из подсознания 1С типа "Справочник", "SrtReplace,СтрЗаменить", "Коллекции не поддерживаются" и т.д. При переоткрытии формы текст меняется.
3. Иногда при попытке создать кнопку начинает сыпать ошибку "Bits index out of range" и кнопок при этом не видно. Помогает перезаход в програму.
4. Нельзя ли сделать так, чтобы при наведении на кнопку она становилась выпуклой (как стандартные кнопки).
Заранее спасибо.
По просьбе, новый метод для установки jpeg/jpg картинок на форму 1С 7.7 (отчет, обработка, справочник, документ...) с возможностью пропорционального масштабирования и откликом на двойной клик на картинке.
Метод:
L.SetJpgPicture(ПолноеИмяФайла:строка,Масштаб:число,Лево,Верх:целые);
Масштаб - возможно дробное, больше, равно или меньше 1.
Если Масштаб меньше 1 - картинка увеличивается, если больше - уменьшается
Лево,Верх - необязательные, по умолчанию 5, расположение верхнего/левого угла картинки относительно верхнего/левого угла клиентской части формы.
Двойной клик по картинке генерирует внешнее событие, которое может быть обработано процедурой ОбработкаВнешнегоСобытия(Источник,Событие,Данные),
где Источник: строка "MiracleV8", Событие: строка "PictureDblClick", даные: строка полного имени файла картинки.
Примечание: на форму можно установить неограниченное количество картинок, каждая картинка "помнит" свой файл.
Возвращает строку вида ШиринахВысота - новые размеры установленной картинки
Пример:
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
Если Событие="PictureDblClick" Тогда
Сообщить("ВНЕШНЕЕ СОБЫТИЕ: Двойной клик по картинке. Файл: "+Данные,"i");
КонецЕсли;
КонецПроцедуры
Процедура Сформировать()
// с маштабом 1:1.5, лево по умолчанию - 5 пикс., верх по умолчанию 5 пикс.
L.SetJpgPicture("c:\MiracleV8_TestBase77\ExtForms\Роза.jpeg",1.5);
// с маштабом 1:1.3, сдвинуто влево на 180 пикселей, верх по умолчанию 5 пикс.
L.SetJpgPicture("c:\MiracleV8_TestBase77\ExtForms\Цветы.jpeg",1.3,180);
КонецПроцедуры
ПоказатьПримечание: если в ОбработкаВнешнегоСобытия поставить
ЗапуститьПриложение(Данные), у меня, например, картинка открывается для просмотра в программе просмотра факсов и изображений
Добавлен симпатичный календарик из Дельфи с возможностью получения выбранной даты через ОбработкаВнешнегоСобытия
Метод L.SetCalendar(Лево,Верх:целые);
Лево, Верх - необязательные, по умолчанию 5.
Примечание: для 8.1 Верх ставить не меньше 30, иначе прячется под верхней панелью.
Генерит событие Источник="MiracleV8", Событие="CalendarChange", Данные - выбранная дата.
Примечание: технология получение отклика (обработки событий компонент Дельфи)
изложена в
Навеяно
Метод ScaleAndCompressJpg(ФайлВходной,ФайлВыходной,Качество,Масштаб);
ФайлВходной,ФайлВыходной: строки, полные имена файлов
Качество: целое от 1 до 100. При 1 наихудшее качество, но и наименьший размер файла,
при 100 - наоборот
Масштаб: число. При Масштаб<1 картинка увеличивается, при >1 - уменьшается
Возвращает размер нового записанного файла в байтах
Пример кода:
Процедура Сформировать()
ФайлВходной="c:\MiracleV8_TestBase77\ExtForms\Роза.jpeg";
ФайлКачество100="c:\MiracleV8_TestBase77\ExtForms\Роза100.jpeg";
ФайлКачество50="c:\MiracleV8_TestBase77\ExtForms\Роза50.jpeg";
ФайлКачество25="c:\MiracleV8_TestBase77\ExtForms\Роза25.jpeg";
// исходный файл уменьшается в 2 раза (параметр 4)
// все три новых файла получаются одного размера (картинки),
//но разного качества (параметр 3) и разного размера файла
Р1=L.ScaleAndCompressJpg(ФайлВходной,ФайлКачество100,100,2);
Р2=L.ScaleAndCompressJpg(ФайлВходной,ФайлКачество50,50,2);
Р3=L.ScaleAndCompressJpg(ФайлВходной,ФайлКачество25,25,2);
Сообщить("Записан файл с качеством 100, размер: "+Р1);
Сообщить("Записан файл с качеством 50, размер: "+Р2);
Сообщить("Записан файл с качеством 25, размер: "+Р3);
КонецПроцедуры
ПоказатьПримечание: что-то я на глаз особо не заметил ухудшения качества ;) А вот размер прилично меняется (см. рис.)
Да когда-же описание нормальное (полное) или примеры будут?!! :cry:
Откуда-то по крупицам приходится дергать инфу...
А как кнопки на форме сделать - так и не нашел!
А. Кучер - молодец, конечно; вешь уникальная, но как ОБЫЧНЫМ людям пользоваться-то?
Поэтому добавил метод IntToDateStr(ДатаЧислом: целое), но когда его надо применять придется определять самому.
Возвращаемое значение: дата строкой.
Версия 1.9.9.13
По IntToDateStr(0) вываливает дату "начала мира" 30.12.1899
По твоему примеру IntToDateStr(40415) как раз 25.08.2010
Метод
MidiPlayNote(НомерMidiНоты,Длительность,НомерMIDIИнструмента), где
НомерMidiНоты - число (см. ниже)
Длительность - число, длительность звучания ноты, мс.
НомерMIDIИнструмента - число 0..127, каким инструментом проигрывать
Для определения названия инструмента по его номеру метод
GetInstrumentName(НомерMIDIИнструмента) - возвращает строку названия
НомерMidiНоты=60 соответствует ДО первой октавы.
Каждая единичка вверх/вниз - полтона вверх/вниз.
Т.е:
59 - СИ малой октавы (между ними полтона)
58 - СИ-бемоль (ЛЯ-диез) ... и т.д. вниз
61 - ДО-диез (РЕ-бемоль)
62 - РЕ
63 - РЕ-диез (МИ-бемоль)
64 - МИ
65 - ФА (между ними полтона) ...и т.д. вверх
Пример кода:
Для А=0 По 127 Цикл
Инструмент=L.GetInstrumentName(А);
Состояние(""+А+"."+Инструмент);
// ДО первой октавы, 500 мс, по всем инструментам последовательно
L.MidiPlayNote(60,500,А);
КонецЦикла;
P.S. Прикольный (и "предупреждалистый") звук у инстурмента 55 - OrchestraHit
А картинки на них накладывать ему лень.
По его просьбе версия 1.9.9.15, новый метод:
L.SetButtonCaption(ЗаголовокКнопки1С,ЦветФонОт,ЦветФонДо,ЦветШрифта), где:
ЗаголовокКнопки1С - строка, заголовок кнопки на форме, которую видоизменяем
(не забываем, что может быть с амперсандом, например: С&формировать)
(Кстати, реакция на быструю клавишу, обозначенную амперсандом, остается в силе).
Кнопки могут иметь объемно-цилиндрический вид, поэтому
ЦветФонОт,ЦветФонДо - целые, соотвествующие цвета
ЦветШрифта - целое, цвет надписи на кнопке.
Пример кода:
Процедура Сформировать()
Сообщить("Процедура Сформировать отработала","i");
КонецПроцедуры
Процедура УстановитьКнопки()
Форма.ОбработкаОжидания("УстановитьКнопки",0);
// от розового до красного, шрифт желтый
L.SetButtonCaption("Закрыть",8684799,255,65021);
// от светло голубого до голубого, шрифт черный
L.SetButtonCaption("С&формировать",16245453,15966336,0);
КонецПроцедуры
Процедура ПриОткрытии()
Форма.ОбработкаОжидания("УстановитьКнопки",1);
КонецПроцедуры
ПоказатьПримечание 1: применен метод полного перекрытия родной кнопки кнопкой TJvNavPanelButton, обработчик события OnClick которой посылает сообщение родной,
что она нажата. Спецам по дельфи - статья
Примечание 2: у кнопок TJvNavPanelButton нет метода отровнять заголовок по центру.
Смещение слева на один пробел задано в библиотеке, центровку регулируйте шириной кнопки на этапе проектирования
Примечание 3: только для 7.7, да для 8х оно и не надо
Примечание 4: если кто не знал (забыл) в библиотеке есть метод для визуального выбора нужного цвета SelectColor(). Возвращает число, соответствующее выбранному цвету
Теперь формы разрисую а-ля попугай. Это не моя прихоть - есть у меня юзеры, которые просят, чтобы формы были гламурненькие. Нате вам гламура!
А реально, бухи еще не жалуются на стандартную палитру форм, а операторы, когда в прошлом году их перевели с моего дизайна на стандартный восьмерочный (темно-серое на светло-сером) аж взвыли.
Изменен метод SetButtonCaptionEx:
SetButtonCaptionEx(ЗаголовокКнопки1С,ЦветФонОт,ЦветФонДо,ЦветРамки,ЦветШрифта,Центровать)
Новый параметр Центровать: число, необязательный, по умолчанию 1.
Если Центровать=0 - фонт жирный без центровки
Если Центровать=1 - фонт обычный, почти автоцентровка
"Почти" - потому что центровка пробелами слева, а не пикселями.
P.S. Добавлена проверка на существование кнопки с заданным заголовком.
Если при вызове методов SetButtonCaption иSetButtonCaptionEx была ошибка
в параметре 1 (нет кнопки на форме с таким заголовком), то происходит просто выход из процедуры без выведения ошибки
____________________________________________________________
После 13:45 Москвы
Извращения для развлечения ;)
Форма 77 прикидывается восьмерочной
Метод As81Form(ЛинияПодПанельюИструментов)
ЛинияПодПанельюИструментов - 0 или 1 - рисовать линию под ПИ
Необязательный, по умолчанию 0.
Процедура Сформировать()
КонецПроцедуры
Процедура ИзменитьФорму()
Форма.ОбработкаОжидания("ИзменитьФорму",0);
L.As81Form();
КонецПроцедуры
Процедура ПриОткрытии()
Форма.ОбработкаОжидания("ИзменитьФорму",1);
КонецПроцедуры
ПоказатьНюансики:
1. Метод блокирует кнопку максимизации формы.
2. Родные края формы обрезаны (гусары, молчать! ;)), поэтому форма размеры не изменяет
Подправлено в версии 17 - все отловит теперь
Не применять метод на формах с рамками групп!!!
Например вызывал с заголовком "Сформировать", а не с "С&формировать"
В последней закачке поставил проверку на существование кнопки с заданным заголовком, если нет такой - просто выходит из процедуры
Еще метод проверки
Вызови метод hButton(ТвойЗаголовок)
Если вернет 0 - значит не так заголовок задан
И еще: ты, случаем, не в процедуре ПриОткрытии() сразу вызываешь?
Так нельзя - у формы еще хэндла нет. Пример кода, чтобы сразу кнопки ставила
был выше приведен
Где ж я тебе в dll 1С-идентификаторы возьму? :D
Это у нас Альф с формексом молодец, в самое нутро влез. А мы все больше "со стороны"
Если бы hButton(ЗаголовокКноки) вернул ноль, ничего бы не работало.
Опять ты там чего-то намудрил ;)
MiracleV8_TestBase81.zip
Новый метод (для 7.7)
As81FormEx() - без параметров
Более-менее похоже на форму 8.1
Нюансы:
1. Форма уменьшается на 3-4 пикселя с каждой стороны + 3 пикселя на синюю рамку.
Предусмотрите соотв. свободное место
2. Заголовочная часть окна замещает 1С-панель инструментов, поэтому:
а) панель должна быть на форме
б) панель будет перекрыта после применения метода
3. Заменяются только кнопки и надписи на форме, другие контролы - "родные"
4. Не применять для максимированной формы, кнопка максимизации методом блокируется
5. Рамки групп на форме тоже имеют класс "button", метод заменит их на кнопки (не за что зацепиться, чтобы отличить), поэтому не применять для форм с рамками
Новый метод
ShowWind(ХэндлОкна,РежимПоказа: целые)
РежимПоказа: от 0 до 10, стандартные константы ShowWindow
SW_HIDE = 0;
SW_SHOWNORMAL = 1;
SW_SHOWMINIMIZED = 2;
SW_SHOWMAXIMIZED = 3;
SW_MAXIMIZE = 3;
SW_SHOWNOACTIVATE = 4;
SW_SHOW = 5;
SW_MINIMIZE = 6;
SW_SHOWMINNOACTIVE = 7;
SW_SHOWNA = 8;
SW_RESTORE = 9;
SW_MAX = 10;
Примечание:
Для определения хэндлов окон 1С библиотека предоставляет методы:
h1C() - хэндл главного окна
hReport() - хэндл активной формы
hButton(ЗаголовокКноки) - хэндл кнопки активной формы по ее заголовку
hPanel() - хэндл панели инструментов активной формы
Процедура ИзменитьФорму()
Форма.ОбработкаОжидания("ИзменитьФорму",0);
L.As81FormEx();
КонецПроцедуры
Процедура ПриОткрытии()
Форма.ОбработкаОжидания("ИзменитьФорму",1);
КонецПроцедуры;
на полную перерисовку формы (Форма.Обновить()).
Новые методы (после 20.30 Москвы)
SetPILabel(Лево,ЦветШрифта,ЖирныйШрифт: целые) - установить надпись на панели инструментов формы
Лево - необязательный, по умолчанию 100 (как раз под ПИ отчета)
ЦветШрифта - целочисленное значение цвета, необязательный, по умолчанию 0 (черный)
ЖирныйШрифт - если 0 - обычный, любое другое - жирный. По умолчанию 0
PILabelText(НашТекст:строка) - вывести текст в ранее установленный PILabel
FreePILabel() - разрушить ранее установленный PILabel
Процедура Сформировать()
//Слева на 100, красным, жирным
L.SetPILabel(,255,1);
Для А=1 По 200 Цикл
Т="Текущее значение равно: "+А+"...";
L.PILabelText(Т);
// задержка, чтобы разглядеть успеть
L.SleepTime(30);
КонецЦикла;
// разрушили компонент
L.FreePILabel();
КонецПроцедуры
Добавлены методы межоконного сообщения через Widows-сообщение WM_COPYDATA.
Может работать с любыми приложениями, осуществляющими контроль этого сообщения.
В первую очередь задумывалось как общение со своей (не 1С-программой)
Разумеется только для приложений, работающих на одном компьютере, например, в терминальном режиме.
Метод
SendCopyData(ХэндлЦели,Сообщение), где
ХэндлЦели - целое, хэндл окна, которому посылаем сообщение
Сообщение - строка сообщения
ВНИМАНИЕ: для приема сообщений окном 1С необходимо переопределить оконную процедуру окна MDI методом SetNewMDIWindowProc()
После обработки сообщения метод вернет "родную" оконную процедуру
Получение сообщения производится через обработку внешнего события:
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
//.......................................................................
Если Событие="DATACOPY" Тогда
Сообщить(Источник+"; "+Данные);
КонецЕсли;
В прикрепленном файле заготовка (рабочая) под программу обмена с 1С.
Далее полный простор для творчества: можно вести учет пользователей в системе,
учитывать блокировки, диспетчеровать сообщения между сеансами 1С (можно и между 7.7 и 8.1).
Код для посылки сообщений в 1С данной программе:
Процедура Сформировать()
// я обозвал форму MessageForm
// соотвественно ее класс TMessageForm
// ищем хэндл по имени класса
ХэндлЦели=L.FindWnd("TMessageForm","");
Для А=1 По 5 Цикл
Стр=ТекущееВремя()+" Сообщение номер "+Строка(А);
L.SendCopyData(ХэндлЦели,Стр);
КонецЦикла;
КонецПроцедуры
ПоказатьТе, кому Дельфи по барабану, могут побаловаться с скомпилированным файлом
MessFromTo1C.exe.
Приложение: папка с исходниками на D7
Результат теста - на рисунке
Т.е. когда защищены только листы - работает. Как только включаешь защиту книги - вываливается сообщение "Нет считанного XLS-файла".
Остается только уточнить: это не про пароли на открытие/редактирование файла, а про защиту которая в меню живет в "Сервис/Защита"...
Если это именно с ней так пишет... тады жаль... придется читать ч/з OLE. А так не хочется...
Это я как раз защитил
Как только снял с
Новый метод (улучшенный CreateToolButton)
NewToolButton(Лево, ИмяКнопки, ФайлКартинки, Хинт) где
Лево: целое - положение слева на тулбаре формы;
ИмяКнопки: строка - любое имя по английски;
ФайлКартинки: спрока - полное имя файла для картинки на кнопку, картинка 16х16
Хинт: строка - хинт (подсказка) кнопки
Кнопка при нажатии генерирует внешнее событие:
Источник="MiracleV8"; Событие="ToolButtonClick"; Данные=ИмяКнопки
Пример:
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
Если Событие="ToolButtonClick" Тогда
Сообщить("Нажата кнопка "+Данные);
КонецЕсли;
КонецПроцедуры
Процедура Сформировать()
L.NewToolButton(100,"TBt1","c:\MiracleV8_TestBase77\btpict.bmp","Скрыть форму");
L.NewToolButton(130,"TBt2","c:\MiracleV8_TestBase77\Закрыть.bmp","Показать форму");
КонецПроцедуры
Показать
Новый метод
SetStatusBarPanelEx(Лево,Ширина, Цвет,Бордюр)
Цвет: целочисленное значение цвета панели, если=0, то системный цвет кнопок (clBtnFace)
Бордюр: число, если 0 - плоская, другое - объемная
StatusBarPanelExText(Текст) - установить текст в панели
При клике на панели генерируется внешнее событие:
Источник="MiracleV8"; Событие="StPanelClick"; Данные=ТекстВПанели
Собираюсь поюзать Ваше обновлённое творение (когда-то, ради прогресс-бара, юзал v.1.2.2.1 - не впечатлило).
Вижу, что работа проделана немалая и с "огоньком".
Очень хотельсь бы увидить полный хелп с примерами (и ALS не помешал бы) или полную тестовую конфу !!! На это стоит потратить время (а то, дествительно, приходится собирать информацию по крупицам).
Рекомендую продолжать всё "валить" в одну DLL-ку, а не разбивать на отдельные (как предлагал Душелов),- очень хочется иметь "всё в одном". Туда бы запихнуть функционал ещё нескольких компонет... :cry:
Сразу вопрос (здесь его уже задавали, но ответа я не нашёл):
Что с регистрацией? Не хочется регится под локальным админом. Даже единожды. Через vk_loader, как я понял, не прокатит... Этот вопрос вообще будет решаться или оставишь как есть? :(
P.S. ОГРОМНАЯ БЛАГОДАРНОСТЬ за поддержку 1Cv77 !!!
Через Regsvr32 регить - нет проблем. Но не в этом суть.
У нкоторых потенциальных клиентов нет доступа к уч.записи лок. админа. И админа рядом тоже нет. А если есть, - с ним бывает трудно найти общий язык...
Так что лучше, чтоб ВК в этом плане вела себя тихо и незаметно...
P.S. И она НИКОГДА не зарегится на терминале, если первый запуск не с правами админа на терминале. V7Plus даже не зарегится.
По хотелкам maxpiter
Изменен метод
StatusBarPanelExText(Текст,ЦветШрифта,Жирный)
ЦветШрифта,Жирный: целые,необязательные, по умолчанию=0 (черный, нежирный)
Добавлен
StatusBarPanelExShow(Режим)
Режим=0 - спрятать, любое другое - показать
Новый метод (для 7.7)
StatusLineLogOn(ПолноеИмяФайлаЛога: строка) - включить запись в лог файл всего, что отображается в статус строке 1С
Пример сформированного лог-файла (мышкой водил по меню)
Для получения подсказки нажмите F1
Открытие журнала документов
Открыть список Журналов расчетов
Список операций
Открыть журнал проводок
Справочник
Список констант
Открыть список Календарей
Список праздников
Список счетов
Список Корректных проводок
Открыть список типовых операций
Открыть список Отчетов
Открыть список Обработок
Удаление помеченных на удаление объектов
StatusLineLogOff() - прекратить логгирование статус-строки
Примечание: удобно в "длинном" отчете сделать вывод через Состояние(Комментарий), а потом просмотреть лог
Реализуется уже тем что, есть:
Перем КолМиг;
Перем Таймер;
Процедура Мигнуть()
КолМиг=КолМиг+1;
Если КолМиг/2=Цел(КолМиг/2) Тогда
L.StatusBarPanelExText(" Мигающий текст",0,1);
Иначе
L.StatusBarPanelExText(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",255,1);
КонецЕсли;
Если КолМиг=100 Тогда
КолМиг=0;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
Если Событие="StPanelClick" Тогда
// по клику мигать перестаем
L.KillMainTimer(Таймер);
L.StatusBarPanelExText(" А, гад, заметил! ;)",0,1);
КонецЕсли;
Если Событие="MAINTIMER" Тогда
Мигнуть();
КонецЕсли;
КонецПроцедуры
Процедура Сформировать()
Таймер=L.SetMainTimer(350);
КонецПроцедуры
КолМиг=0;
Новый метод:
UDPChatCreate(ИмяПользователяЧата)
1. Чат по принципу ВСЕ-ВИДЯТ-ВСЁ с момента входа
2. Для работы метода должна быть запущена программа UDPServer.exe, которая "разруливает" сообщения (прикрепляется к комментарию)
3. Программа может быть запущена на любом доступном сетевом компьютере, лучше, конечно, на сервере
4. Чат работает между любыми базами 1С: от 7.7 до 8.2
5. Обнаружился странный глюк у Кушнира на XP SP3 - не видны кнопки на верхней панели (у него же на Server2003 видны). Прошу сообщить, если такое будет еще у кого-нибудь
6. На случай невидимости по п.5 работает контекстное меню по правой кнопке
А в общем спасибо за отличную библиотеку.
Огромный респект создателю сиго чуда.
В miracle v.1.0x.x был метод:
Lib.SetMDIPanel();
Lib.SetMDIPanelText("Демонстрация возможностей библиотеки. Это - MDIPanel",1,,12,1,,2);
Есть ли возможность внедрить его в новую версию. Очень полезная вещь.
Заранее благодарю за ответ.
Еще раз спасибо за труды.
SetMDIPanel(КтоРодитель: целое) - возвращает ссылку на интерфейс.
КтоРодитель - необязательный, 0 (по умолчанию) - MDI, не ноль - главное окно 1С
Нюансы:
Если родитель главное окно, панель не будет перекрываться при разворачивании родных окон 1С
(отчетов, журналов, документов), но будет закрывать 30 пикселей верхней части этих окон
Методы интерфейса:
p_Text(ТекстПанели:строка);
p_Font(Размер,Цвет,Жирный,Подчеркнутый,Наклонный: целые);
Все необязательные, по умолчанию: 8,0 (черный), 0,0,0
p_Blink(Интервал: целое) - помигать текстом в панели
Интервал - необязательный, интервал таймера мигания, по умолчанию 350 мс.
Текст на панели будет мигать до клика пользователя по панели, либо до применения метода p_StopBlink().
p_Colors(ОтЦвета,ПоЦвет:целые) - цвета панели. При одинаковых значениях панель "плоская"
p_Show(Режим: целое) - режим показа панели
Скрыть (0)/показать(1), необязательный, по умолчанию показать
p_Free() - разрушить ранее созданную панель
Перем v; // интерфейс панели - OLE_VARIANT
//Перем L; // переменная библиотеки
Процедура Шрифт()
v.p_Font(22,255,1);
КонецПроцедуры
Процедура Мигать()
v.p_Blink();
КонецПроцедуры
Процедура ЦветПанели()
v.p_Colors(15400959,53970);
КонецПроцедуры
Процедура ПриОткрытии()
//Путь= КаталогИБ();
//ЗагрузитьВнешнююКомпоненту(Путь+"MiracleV8.dll");
//L=СоздатьОбъект("AddIn.MiracleClass");
v=L.SetMDIPanel();
v.p_Text(" Это MDI Panel библиотеки MiracleV8.");
КонецПРоцедуры
Процедура ПриЗакрытии()
Если ПустоеЗначение(v)=0 Тогда
v.p_Free();
КонецЕсли;
КонецПроцедуры
Спасибо за ответ.
Да об этой панели мне известно. но её не очень хватает. много текста не отобразишь, да и размер шрифта большой не сделаешь.
Обосную просьбу.
В работе используется 6 валют. Есть обработка, которая отображает и актуальный курс и кросс курсы. Но хотелось бы это отображать в панели под главным меню. Будет очень удобно и наглядно.
Но есть одна трабла. Есть в конфе пользовательские панели, MDI панель их перекрывает, панели можно конечно передвинуть, т.е. фича не критичная.
Есть еще одна идея. в конфе есть "рабочие столы" (тоже не оригинально :)) у разных групп пользователей, на них дофига ТЗ. конечно же организована фильтрация, и сортировка. Но хотелось бы иметь возможность фильтрации, как в xls т.е. поле со списком и с пометками. Это конечно не совсем в духе miracle но ... Задачу я решил обходными кругами, но это не то пальто. Хочется облегчить жизть пользователей. Основная трабла, в поле со списком, не отображаются галочки (пометки). Много гуглил решения не встречал.
Приблуда instOLEGenerator.vbs (спасибо товарищу Трошину)
сгенерировала мне .als и .ints файлы
Версия библиотеки 2.0.0.3
CAPICOM не для версии, она сама по себе.
Проверь просто в 1С:
Если ругнется - что-то у тебя не там оно лежит. Должна находится в
WINDOWS\system32\
(301) На многослойных не работает
(302) Именно как раз потому что мне не нравятся ПБ в виде отдельных окон, я и начал изучать в свое время наследование окон в 1С;) Доделаю FlyGauge c возможностью установления родителя, но не более
P.S. И сделаю еще один на тулбаре формы 7.7 (давно собирался), тогда ему и места не надо будет, и слои по фиг
:!: Я спрашивал для какой версии 1С написаны методы EncodeText() и DecodeText(): для 1C v77 или 1Cv8... Но ни как не про CAPICOM ! И лежит она там где надо.
Ладно, допустим создал объект А=СоздатьОбъект("CAPICOM.EncryptedData"); Что дальше ? Дальше так?:
A.EncodeText(); и A.DecodeText();
P.S. А про ПБ ты зря...
:idea: Предлагаю сделать ещё один прогресс-бар, который будет выводиться в виде отдельной формочки и ложиться поверх вызвавшей его формы (и модальной и немодальной). По окончании - авторазрушение. Корректная отрабатка прерывания по Esc. На формочку можно положить 2 -3 кнопки. Входные параметры: заголовок ПБ, тип ПБ - одиночный или двойной (как, например, в TotalCommandere), координаты XY ПБ относительно MDI или вызвавшей его формы (лучше предусмотреть оба варианта), Число = 100%, заголовки кнопок.
Я думаю, многих бы устроил именно такой вариант...
P.S.Похожий прогресс-бар сделан в ВК bcs_wnd.dll (спасибо автору), но там есть минусы. :cry: И автор вроде больше не апгрейдит свою ВК.
Новые методы:
FlyCreate(Родитель: целое) - создать плавающий индикатор (см. рис.)
Родитель - необязательный, по умолчанию 0
Если Родитель=0, то родительское окно - главное окно 1С. При этом форма индикатора будет всегда поверх всех других, кроме модальных
Если Родитель=1, то родительское окно MDI, форма будет закрываться другими формами
Если Родитель=иное, то родительское окно Desktop, форма будет всегда поверх ВСЕХ окон в системе, в т.ч. поверх модальных форм 1С. Нюанс: форма, созданная таким образом, не будет сворачиваться при сворачивании главного окна 1С.
FlyPosition1(Прогресс) - установить позицию индикатора 1
FlyPosition2(Прогресс) - установить позицию индикатора 2
FlyDestroy() - разрушить форму индикатора
Примечания: форма индикаторов таскается мышкой за верх, по правой кнопке - контекстное меню на интерактивное закрытие формы.
Процедура Сформировать()
L.FlyCreate();
L.FlyPosition2(25);
Для А=0 По 100 Цикл
L.FlyPosition1(А);
L.SleepTime(30);
КонецЦикла;
КонецПроцедуры
Процедура ПриЗакрытии()
L.FlyDestroy();
КонецПроцедуры
P.S. Это последнее бесплатное обновление библиотеки
Для любой.
Если 1С создала, то и библиотека должна создать
Только сейчас проверил
Сообщить(L. EncodeText("Привет","123"));
Вернуло:
MFoGCSsGAQQBgjdYA6BNMEsGCisGAQQBgjdYAwGgPTA7AgMCAAECAmYCAgIA
UN9FRYP2iGUEEBo1qaZs/tAVhlGLcM1/XeEEEGnm2K/tYcf3l5oEwF+tNIM=
SetFlyGauge()
SetFlyText()
SetProgressBar()
SetProgressBarEx()
SetRCGauge()
SetStatusBarGauge()
SetStatusBarPanel()
SetStatusBarPanelEx()
SetStatusLine()
SetTrackBar()
SetVertGauge()
Только для журналов доков ?
В форме самого дока - не лепятся, ошибок тоже не выдаёт:
Процедура ПослеСозданияФормы() Экспорт
Картинка = КаталогИБ() + "\вася.ico";
Miracle.NewToolButton(340, "But"+_GetPerformanceCounter(), Картинка, "тра ля ля");
Miracle.SetFormIcon(Картинка);
КонецПроцедурыВ форме журнала работает, в форме дока - нет, вк - последней сборки.
По идее, должно везде... посмотрю...
Но больше версий без регистрации не будет.
Первым трем тестерам работоспособности регистрации - регистрация на один комп бесплатно.
P/S. Сейчас тестирую добавление любых пунктов меню (с реакцией, разумеется) для 7.7
Кстати, заработал наконец-то форум разработки (все страницы теперь на месте, спасибо support-у). Там есть описание многих новых методов
В хэлпе четко написано:
Так как компоненты типа ProgressBar, AviAnimator, GifAnimator и т.п. используют для установки хэндл отчета, нельзя применять их установку в процедуре ПриОткрытии() - хэндл еще не существует.
Способ обойти проблему, если хотите установить сразу при запуске отчета (обработки)
7.7
Процедура УстановитьТрекБар()
// ОбработкаОжидания отрабатывает только один раз, ниже ее отключаем.
// Хэндл окна отчета уже есть
Форма.ОбработкаОжидания("УстановитьТрекБар",0);
L.SetTrackBar(400,255);
L.TrackPosition(255);
КонецПроцедуры
Процедура ПриОткрытии()
Форма.ОбработкаОжидания("УстановитьТрекБар",1);
КонецПроцедуры
Другой вариант для 7.7 - formex, процедура ПослеОткрытия()
Рекомендаций по ПослеСозданияФормы я там не давал ;)
Разбираюсь с NewToolButton
Работает как нужно. Но!
После перерисовки формы новая кнопка не видна!
Ловится ситуация при такой последовательности шагов:
1. Открыли форму, в которой добавили новую кнопку в тулбар
2. При нажатии на эту кнопку открылось модальное окно, которое НЕ перекрывало кнопку в тулбаре!
3. После закрытия этой модальной формы кнопка в тулбаре не отображается, хотя продолжает реагировать на нажатия и показывает всплывающую подсказку, если подвести к ней мышь
Если же модальная форма перекрывала кнопку перед закрытием, то кнопка не пропадает.
ЗЫ: пользуясь случаем, позвольте поблагодарить автора за проделанную работу!
ЗЫ2: вдруг идея понравится и реализуете: я сейчас юзаю одну dll для снятия скриншота с окон внутри 1С. И только для этого. Скриншот документов удобно посылать в мыле юзерам для согласования - чтобы они сразу имели представление о том, какой документ им предстоит согласовать. Если это не очень сложно, есть пожелание заиметь такой функционал в Вашей компоненте (хотелось бы загружать поменьше dll в 1С).
Там метод испокон веков существует, просто в описание забыл включить ;)
ScreenShot(ПолноеИмяФайла:строка);
ПолноеИмяФайла - имя файла "*.jpg" для сохранения картинки экрана.
В у меня в 77 так "фотает" экран при обломе ночного восстановления ГП
Файл сжимается с CompressionQuality = 25 - самое оптимальное по опыту (и небольшой, и всё нормально видно)
А какие еще методы - не скажу ;) Смотрите позже на нашем сайте
Блин, забыл :
ZCompressString(ВходнаяСтрока:строка); - ужимаем строку
ZDecompressString(ВходнаяСтрока:строка); - распаковываем ранее ужатую строку
По просьбе :
ZCompressFile(ПолноеИмяИсходногоФайла,ПолноеИмяСжатогоФайла: строки):число
ПолноеИмяСжатогоФайла - необязательный, по умолчанию файл в той же директории, с тем же именем, расширение *.ZLIB
При упаковке в res-header прописывается полное имя исходного файла
Возвращает размер упакованного файла в байтах
ZDecompressFile(ПолноеИмяИсходногоФайла,ПапкаДляИзвлечения: строки):строка
ПапкаДляИзвлечения - необязательный, по умолчанию в ту же папку, которая была прописана при упаковке в res-header. Оригинальное имя файла для
распаковки тоже берется из res-header
Возвращает имя распакованного файла.
Пример:
Процедура Упаковать()
Результат=L.ZCompressFile(КаталогИБ()+"IndyInDepth.doc");
Сообщить(""+Результат+" байт");
КонецПроцедуры
Процедура Распаковать()
Результат=L.ZDecompressFile(КаталогИБ()+"IndyInDepth.ZLIB");
Сообщить(Результат);
КонецПроцедуры
ПоказатьТест на сжатие:
1 564 672 байт - исходный (IndyInDepth.doc)
453 798 байт - архиватор zip из-под Total Commander (29,00%)
459 451 байт - этот архиватор (29,36%)
P.S. Архивы, созданные ZCompressFile, читаются только ZDecompressFile (может в этом даже польза есть ;))
AddIn.MiracleClass: buffer error
сначала сжимаю строку, которая получается вот так: ЗначениеВСтрокуВнутр(ТаблицаЗначений)
если в ТЗ данных нет, то распаковка проходит нормально
если есть хоть одна строка - получаю ошибку
Кстати, 1С и не пишет в этом методе от ТЗ
ЗначениеВСтрокуВнутр(<Объект>)
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
<Объект> - значение объекта агрегатного типа данных которое нужно преобразовать.
Зато в ЗначениеВСтроку конкретно указано
Синтаксис:
ЗначениеВСтроку(<Объект>)
Назначение:
Преобразование значения объекта в строковое системное представление. Возвращает: строковое представление значения объекта.
Параметры:
<Объект> - значение, которое нужно преобразовать. В качестве параметра для данного
метода допускается передавать объекты типа "СписокЗначений" и "ТаблицаЗначений" .
Код
Процедура ТЗ()
ТЗ.Очистить();
ТЗ.НоваяКолонка("Первая");
ТЗ.НоваяКолонка("Вторая");
ТЗ.НоваяСтрока();
ТЗ.Первая="Раз";
ТЗ.Вторая=1;
ТЗ.НоваяСтрока();
ТЗ.Первая="Два";
ТЗ.Вторая=2;
Стр1=ЗначениеВСтроку(ТЗ);
Стр10=ЗначениеВСтрокуВнутр(ТЗ);
Сообщить(Стр10); // вот тут глянь какие кракозябры внутри текста !
Стр2=L.ZCompressString(Стр1);
Стр3=L.ZDecompressString(Стр2);
пТЗ=СоздатьОбъект("ТаблицаЗначений");
пТЗ=ЗначениеИзСтроки(Стр3);
ТЗН.Загрузить(пТЗ);
КонецПроцедуры
Показатьотработал без проблем (рис).
Это либо базовый тип, понятный любой системе (число, строка, дата), либо объект, имеющий внутренний идентификатор в метаданных
(элемент справочника, документ, перечисление). ТЗ к таковым никаким боком не относится. А вот ячейка ТЗ - да.
плюс очевиден, минус только один - строка длиннее получается, причем, чем больше строк в ТЧ, тем больше разница. для примера: 1 строка в ТЧ, ЗначениеВстрокуВнутр() длинее на 18%, а для 15 строк в ТЧ - уже 35% разницы
щас тестировал твою компоненту. версия 2.1.1.4. сравнивал со своей zipstring.dll
все равно твоя выдает ошибку buffer error, причем на любой ТЗ - хоть ЗначениеВСтрокуВнутр(), хоть ЗначениеВСтроку().
причем miracle как-то подозрительно хорошо упаковывает строки:
исходный размер 7771 байт, miracle 137 байт, zipstring 792 байта
похоже, что метод ZCompressString() возвращает строку, в которой есть символы с кодом 0 (но не всегда), а на первом таком символе 1С прекращает обработку строки. У меня тоже был такой баг, я взял алгоритм преобразования сжатой строки из binfiles.dll
Выше же есть код (проверенный), где у меня без базаров отработало ЗначениеВСтроку() и все компрессии/декомпресии
Картинка прям с окна 1С
у меня этот проверенный метод ЗначениеВСтроку() на реальной ТЗ из табл части документа тоже ошибку выдает при распаковке.
повторюсь, ZCompressString() выдает строку, в которой может быть символ с кодом 0, а может и не быть. если исходная строка маленькая (203 байта занимает твоя тестовая ТЗ, выгруженная методом ЗначениеВСтроку()), то скорее всего этого символа там не будет, а если строка длинная, ну хотя бы 7 килобайт, как у меня на реальной ТЗ, то - вуаля, ловим ошбику
ZCompressString(ВходнаяСтрока,ИмяФайлаДляСохранения: строки):строка
ВходнаяСтрока - что сжимать
ИмяФайлаДляСохранения - необзятельный, при указанном сжатый поток сохраняется в указанный файл
Возвращает сжатую строку в кодировке base64 (и читать, и записывать удобнее)
ZDecompressString(ВходнаяСтрока:строка):строка
ВходнаяСтрока - ранее сжатая строка
Возвращает распакованную строку
Тест проводился на ТЗ с 4 колонками и 2000 строками
Процедура Сформировать()
Спр=СоздатьОбъект("Справочник.Номенклатура");
Спр.ВыбратьЭлементы();
ТЗ.Очистить();
ТЗ.НоваяКолонка("НомерПП");
ТЗ.НоваяКолонка("Элемент");
ТЗ.НоваяКолонка("Наименование");
ТЗ.НоваяКолонка("Код");
НомерПП=0;
Пока Спр.ПолучитьЭлемент()=1 Цикл
Если Спр.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли;
НомерПП=НомерПП+1;
Если НомерПП>До Тогда Прервать; КонецЕсли;
Состояние("Обрабатывается строка ТЗ "+НомерПП);
ТЗ.НоваяСтрока();
ТЗ.НомерПП=НомерПП;
ТЗ.Элемент=Спр.ТекущийЭлемент();
ТЗ.Наименование=Спр.Наименование;
ТЗ.Код=Спр.Код;
КонецЦикла;
Стр1=ЗначениеВСтрокуВнутр(ТЗ);
Т=СоздатьОбъект("Текст");
Т.ДобавитьСтроку(Стр1);
Т.Записать("d:\ZIPTEST_1С.txt");
Состояние("Упаковка...");
Стр2=L.ZCompressString(Стр1,"d:\ZIPTEST_ZIP.txt");
Состояние("Распаковка...");
Стр3=L.ZDecompressString(Стр2);
пТЗ=СоздатьОбъект("ТаблицаЗначений");
пТЗ=ЗначениеИзСтрокиВнутр(Стр3);
ТЗН.Загрузить(пТЗ);
КонецПроцедуры
ПоказатьРезультаты теста:
Записанная "родная" ЗначениеВСтрокуВнутр(ТЗ) - 320К
Сжатая - 66К
Оптимизированы методы
ZCompressString и ZDecompressString (скорострельность)
Примечание: не стоит упаковывать строки длиннее 500 тыс. символов
Добавлены методы:
BinToBase64(ИмяФайлаИсточника,ИмяВыходногоФайла:строки) - преобразует любой бинарный файл в файл base64
Base64ToBin(ИмяФайлаИсточника,ИмяВыходногоФайла:строки) - преобразует ранее преобразованный файл base64 в оригинал
Процедура Сформировать()
L.BinToBase64("d:\2EMAIL\MiracleV8\Картинки\Fly.PNG","d:\2EMAIL\MiracleV8\Картинки\Fly.b64");
L.Base64ToBin("d:\2EMAIL\MiracleV8\Картинки\Fly.b64","d:\2EMAIL\MiracleV8\Картинки\Fly1.PNG");
КонецПроцедуры
Примечание: файлы считываются в поток не поблочно, целиком, не используйте для гиговых файлов
компонента грузится в ПриНачалеРаботыСистемы
просто тупо выдаёт ошибку: "не удалось загрузить ВК"
до этого стояла 1.9.6.4 с ней всё без проблем работало (да и сейчас работает, пробовал менять на эту старую версию),
токо я уже в своей самописке довольно приличный прибамбас написал, а там используются методы по упаковке строк и файлов,
которых в версии 1.9.6.4 нет :D
Теперь взяли Ubuntu 10.04, в ней компонента регистрируется в 1с, но при выполнении метода ReadXLS виснет намертво (пробовал обновить до свежайшей 2.1.1.6, пробовал менять режим совместимости в настройках WINE - не помогает).
Вот хоть убей, если я знаю, что я там кардинально менял;) Кажись, ничего
Что касается XLS, то там используется спецкомпонента для Дельфи, в ней я ничего не менял, as is
Видимо это именно она и не желает работать под тем, подо что не заточена
Сдаётся мне, что в 2000-й Винде чего-то не хватает (ну типа dll-лек каких-нить, не силен в этом к сожалению :()
Вот в постах увидел упоминание о ZlibEx - это к примеру что за штука?
(Например есть у меня одна ДЛЛ-ка, которая требует обязательной регистрации, так она таким макаром регится без проблем).
Вобщем, в результате некоторых изысканий, пришел к тому, что перестаёт грузиться уже с версии 1.9.8.1
(других промежуточных версий между 1.9.6.4, которая грузиться нормально у меня нет).
Сравнил используемые модули из PACKAGEINFO обеих библиотек, вот что получилось (см. прикрепленный файл)
Может натолкнёт на мысль
ass = l.CreateExtWnd(X,Y, 250, 75, 150);
Оно сначала создается видимым, с охрененными размерами.
А потом подгоняется по размерам и координатам. Если я конечно все правильно понимаю.
Соответственно происходит очень неприятное для глаза перемиргивание.
Пытался использовать эту штуку для вывода всплывающих подсказок, и получается очень неприятное зрелище,
поскольку, чтобы сменить координаты или размеры окна приходиться его пересоздавать, это мигание возникает часто.
Зрелище ужасное.
Предложение:
Добавить метод менять размеры и координаты динамически, без пересоздавания.
Либо чтобы оно создавалось невидимым, подплывало к координатам, задавалось размером, а потом показывалось.
Спасибо)
А как кстате насчет платной версии с документацией? Дело движется?
Еще окошко появляется на панели задач. Соответственно, если его периодически появлять исчезать, то оно достаточно противно мигает внизу, то появляясь то исчезая.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 59436
Создание 24.10.09 12:33
Обновление 03.11.11 04:15
Просмотры 82297
Загрузки 4859
Рейтинг
268
Комментарии 350
Код открыт Не указано
Рубрики Разработка внешних компонент Загрузка и выгрузка в Excel
Кому Разработчик
Тип файла Компонента, плагин (dll, vbs,..)
Платформа Не имеет значения
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)