|
v7: Новое решение старых проблем. "Config Spy" для 1С:Предприятие 7.7 от АЛьФа | ☑ | ||
---|---|---|---|---|
0
АЛьФ
23.11.16
✎
11:28
|
Проблема 1: в пакетном режиме иногда ночное создание резервной копии заканчивается неудачей, при этом в журнал регистрации ничего не пишется, выводится только в окно сообщений, что бесполезно, т.к. после выполнения пакета окно 1С закрывается.
Проблема 2: 1С не хочет зиповать выгрузку больше 2 гигабайт. Решение: 1. Перехват сообщений и запись их во внешний лог (аналог 1spy.dll для Предприятия). 2. Подключение внешнего архиватора. http://dorex.pro/files/configspy.zip |
|||
138
Масянька
25.11.16
✎
13:09
|
АЛьФ
В общем журнале слетает раскраска. Все галки стоят (не меняется). Не часто бывает, но бывает. Помогает - закрыть/открыть. Интересует причина. Спасибо. |
|||
139
Масянька
25.11.16
✎
13:09
|
+ (138) Закрыть/открыть - эска, имеется ввиду.
|
|||
140
АЛьФ
25.11.16
✎
13:18
|
2(138) Только в одном журнале?
|
|||
141
Масянька
25.11.16
✎
13:22
|
(140) А у меня раскраска и есть только в общем.
|
|||
142
АЛьФ
25.11.16
✎
13:25
|
2(141) Частичная раскраска используется?
|
|||
143
Масянька
25.11.16
✎
13:26
|
(142) Да, по условию.
|
|||
144
АЛьФ
25.11.16
✎
13:27
|
2(143) Лучше перейти на использование плана раскраски. Скорее всего, из-за частичной раскраски и глючит.
|
|||
145
Масянька
25.11.16
✎
13:31
|
(144) Обе галки стоят. В коде:
//****************************************************************************** Процедура ПослеОткрытия() РФорма = СоздатьОбъект("РасширениеФормы"); РФорма.РаскрашиватьТаблицу("МногострочнаяЧасть"); КонецПроцедуры // ПослеОткрытия //****************************************************************************** Функция ПоказатьКонтроль() Если ТекущийДокумент.Выбран() = 0 Тогда Возврат ""; КонецЕсли; Если ТекущийДокумент.Вид() = "Реализация" Тогда Возврат ТекущийДокумент.Контроль + 1; КонецЕсли; Если ТекущийДокумент.Вид() = "ДневнаяРеализация" Тогда Возврат "FONT[" + глПолучитьЦвет(128, 0, 128) + "] "; КонецЕсли; КонецФункции |
|||
146
АЛьФ
25.11.16
✎
13:33
|
2(145) Вот я и рекомендую отказаться от частичной раскраски. Бестолковая штука. Перехват все равно ставится на отрисовку всех таблиц.
|
|||
147
Масянька
25.11.16
✎
13:34
|
(146) А где почитать/посмотреть про план?
|
|||
148
Cool_Profi
25.11.16
✎
13:34
|
Леш, спасибо, интересное решение.
Жаль - применять уже некуда... |
|||
149
АЛьФ
25.11.16
✎
13:42
|
2(147)
"План раскраски", "@Описание Для ускорения и упрощения работы раскраски таблиц в компоненту с версии 2.0.5.85 введен функционал плана раскраски таблицы. Для его активизации необходимо вызвать метод ИспользоватьПланРаскраски() объекта Сервис с параметром 1 (соответсвенно, для отключения и перехода на старый принцип раскраски надо вызвать тот же метод, но с параметром 0). По умолчанию функционал плана раскраски отключен и работает старая методика раскраски. Для реализации раскраски по новому функционалу плана раскраски, необходимо добавить в раскрашиваемую таблицу колонку с заголовком ''''FormEx_ПланРаскраски'''' (без кавычек, регистронезависимо). Колонка может располагаться в любом месте таблицы. Содержимое этой колонки задает план раскраски таблицы, основанный на тех же макросах, которые описаны в части ''''Раскраска таблиц''''. При этом макросы COUNT и INDENT не обрабатываются. В плане раскраски каждая ячейка текущей строки определяется круглыми скобками. В плане учитываются как видимые, так и невидимые колонки. Макросы раскраски надо помещать в места, соответсвующие смене раскраски. Несколько примеров помогу лучше понять этот принцип. @Пример плана раскраски ''''()()()(BRUSH[255])()()(BRUSH[NONE)'''' - обозначает, что начиная с четвертой колонки (включительно) цвет фона ячеек устанавливается красным, а с седьмо раскраска фона отключается и все остальные колонки не раскрашиваются; ''''(BRUSH_S[255])'''' - обозначается, что вся строка, когда она становится текущей, подсвечивается красным фоном. " |
|||
150
АЛьФ
25.11.16
✎
13:42
|
2(148) На здоровье.
|
|||
151
Cool_Profi
25.11.16
✎
13:44
|
(150) Кстати идея на будущее - попробуй прикрутить события OnBeforeUnload()/onAfterUnload()...
|
|||
152
vcv
25.11.16
✎
13:46
|
(149) А про проблему, когда журнал/справочник с включенной раскраской не прорисовывается при открытии (табличная часть выглядит пустой) кому-нибудь что-нибудь случайно неизвестно?
|
|||
153
Масянька
25.11.16
✎
13:47
|
(149) Спасибо! Ппопробую.
|
|||
154
АЛьФ
25.11.16
✎
13:48
|
2(151) А что по ним должно вызываться в конфигураторе? Скрипты прикручивать?
|
|||
155
Cool_Profi
25.11.16
✎
13:49
|
(154) Не в конфигураторе. Вовне.
Это может решить проблему с захватом базы в EM |
|||
156
АЛьФ
25.11.16
✎
13:50
|
2(152) Известно. Только нормально не получилось разобраться в причине. В компоненте это пытается лечиться путем повторного обновления таблицы. Правда это вызывает так же повторный пересчет вычисляемых функций в таблице и торможению в некоторых случаях. Поэтому в некоторых релизах FormEx это обновление отключалось.
|
|||
157
АЛьФ
25.11.16
✎
13:51
|
2(155) Типа прописать так же выполнение некой программы (или батника), как архиватор вызывается?
|
|||
158
Cool_Profi
25.11.16
✎
13:53
|
(157) да, что-то вроде.
Или например, удостовериться, что целевой каталог существует. Или после выгрузки результат проверить и отправить на резервное хранение. Или уведомить админов о начале/завершении. много чего можно придумать. |
|||
159
АЛьФ
25.11.16
✎
13:56
|
2(158) Боюсь, что не получится. Выгрузка вся идет во внутренней функции, нет точек для перехвата. Только если некие косвенные точки найти.
|
|||
160
Cool_Profi
25.11.16
✎
13:59
|
(159) Жаль...
Но ты повентилируй эту мыслю, может, приснится что... ) |
|||
161
Злопчинский
25.11.16
✎
20:47
|
(136) я нечасто, но набегаю в Питер, то на ИС ивенты, то по проекту ктонить зовет, так что не все еще потеряно ;-)
|
|||
162
АЛьФ
27.11.16
✎
15:51
|
Нормально так. Новый проект представляю я, а "пивом/водкой/виски/коньяком" угощают Злопчинского.
|
|||
163
Злопчинский
27.11.16
✎
16:38
|
(162) заходит и ты, и тебе нальем!
|
|||
164
Злопчинский
27.11.16
✎
16:42
|
Кстати, почему почти все используют вычисляемые функции для цветов...? Я так писал давным давно. А сейчас всегда пишу через шестнадцатиричную нотацию, типа
Светложеленый это BRUSH[0xCCFFCC] |
|||
165
MadDAD
28.11.16
✎
08:59
|
(162) АЛьФ, Спасибо за новую няшку! А может все таки получится поправить добавление контролов в формексе?
Мне без правильных хедеров так и не удалось собрать формекс из исходников 101 версии :( |
|||
166
АЛьФ
28.11.16
✎
09:01
|
2(165) А что не так с добавлением контролов? Я туда и не лез, Артур все доделывал.
|
|||
167
Это_mike
28.11.16
✎
09:03
|
(164) "светложеленый" - это как? :-)
(165) а что за проблемы, и что изменилось? |
|||
168
MadDAD
28.11.16
✎
09:03
|
Кстати, ковыряю тут плагин для OpenConf + GComp чтоб работал с TFS. Обнаружил в опенконфе неприятный баг. Если у документа/справочника и пр. печатных форм больше 10 то при попытке получить имя 11 и больше происходит вылет.
Поковырялся, поправил. если кому надо - вот свежая версия: https://cloud.mail.ru/public/Fae8/KyN3oWpsi |
|||
169
MadDAD
28.11.16
✎
09:03
|
(166) Не добавляется статик в табличную часть :(
|
|||
170
Это_mike
28.11.16
✎
09:07
|
(169) гы... я пару месяцев назад попробовал, не получилось - ну я и плюнул. Значит, это не у меня руки кривые, а в компоненте трабла.
|
|||
171
АЛьФ
29.11.16
✎
11:14
|
2(169) Посмотрел-повертел. Нет, явно не в этом релизе.
|
|||
172
Злопчинский
30.11.16
✎
19:21
|
(74) После отключения использования ПриПечатиТаблицы() ситуация стабилизировалась. Прога не падает. Понаблюдаю еще до конца недели. Результат сообщу (на днях будет много печати).
|
|||
173
Djelf
30.11.16
✎
21:16
|
(0) Поставил на боевую линуксовку под wine`ом (так уж совпало что из-за длинных строк база опять переполнилась, а чистить было лень). Полет нормальный (да я почти и не сомневался что заработает), и размер в 2 раза меньше, чего давно хотелось.
P.S.Запуск под wine хорошо проверяет на баги, если там заработало то и везде должно. |
|||
174
АЛьФ
01.12.16
✎
09:28
|
2(172) Отлично.
2(173) Круто. Спасибо. |
|||
176
trdm
20.12.16
✎
20:15
|
(168) Лучше с сорцами.
У меня тоже опенконф правленный слегка. Может у Саши спросить его позволения и залить на гитхаб? Что-бы не бегать по инетам. |
|||
177
trdm
20.12.16
✎
20:16
|
(176) + скрипты опенконфа тоже на гитхаб залить. Легче глядеть чегось новенького есть.
|
|||
178
MadDAD
21.12.16
✎
10:21
|
(176) Да я только за. Исходники тут - https://cloud.mail.ru/public/7Wzz/Q8xyY6jKv
А что у тебя допилено? |
|||
179
MadDAD
21.12.16
✎
10:23
|
(178)+ могу подготовить материал по разработке визуального плагина для OpenConf на C#. Для знающих толк, так сказать :)
|
|||
180
ADirks
21.12.16
✎
10:27
|
скрипты
svn co svn://[email protected]/p/openconf-scripts/code |
|||
181
trdm
21.12.16
✎
11:14
|
(178) > А что у тебя допилено?
У меня допилены некоторые реакции на ввод символа в строке. И вызов события телепатонинсерт. Это для редактирования прямых запросов. К сожалению исходники не могу найти, диск крякнул. |
|||
182
Djelf
14.01.17
✎
19:03
|
(0) Наткнулся на проблемку. Openconf определяет свою версию по версии файла config.dll и выкидывает ее как переменную version. В не работающем скрипте то я поправил, но может и еще где-то странное вылезти.
|
|||
183
vadim777
16.01.17
✎
12:44
|
Настроил configspy на локальном компе, проверил на небольших базах - все Ok. Установил на сервер с базами на MS SQL 2008, делаю выгрузку базы (размер mdf-файла 73Гб), долго работает, сообщает, что выгрузка завершена. Но сам файл выгрузки отсутствует. Где копать?
|
|||
184
АЛьФ
16.01.17
✎
13:15
|
2(183) Настроить лог внешнего архиватора и смотреть что он там возвращает.
|
|||
185
АЛьФ
16.01.17
✎
13:16
|
2(182) Тут неплохо бы допилить именно openconf.
|
|||
186
vadim777
16.01.17
✎
15:44
|
(184) Пытаюсь сделать согласно http://superuser.com/questions/519114/how-to-write-error-status-for-command-line-7-zip-in-variable-or-instead-in-te
изменяю строку Параметр: Параметры='u -tzip -ssw -mx7 "%1%" "%2%" >> log_file.log' При этом формируется архив, в котором файл 1cv77.dat, и пустой каталог базы. Лог-файл не создается. Как правильно сформировать лог-файл архиватора 7zip для случая запуска его из 1с? |
|||
187
АЛьФ
16.01.17
✎
16:51
|
2(186) Хм... Значит так. Можно попробовать еще параметр "Показывать" в файле ini поставить в 1. Тогда будет показано окно архиватора и можно будет глазками посмотреть что там происходит.
Еще при ошибке архивирования в каталоге базы должен создаваться подкаталог log с тестовым файлом "СлужебныйЛог". Там должен быть выведен код ошибки. |
|||
188
vadim777
16.01.17
✎
18:58
|
(187) Сделал явное направление лог-файла:
Параметры='u -tzip "%1%" "%2%" >> D:\LOG_FILE.LOG' Также: Показывать=1 База (папка) с именем Test Выгружаю в файл D:\123.zip На экране быстро проскакивает окно архиватора - щелкают проценты.В итоге в архиве - файл 1Cv77.dat и пустая папка Test. Файл D:\LOG_FILE.LOG не создан. В каталоге базы создан подкаталог log, в нем файл Статусы_20170116.txt. Последние строки этого файла: .......... 2017.01.16 18:50:02 :: Выгрузка плана счетов: Основной 2017.01.16 18:50:02 :: Выгрузка плана счетов: Основной - 100 2017.01.16 18:50:02 :: Выгрузка плана счетов: Основной - 200 2017.01.16 18:50:02 :: Выгрузка плана счетов: Основной - 300 2017.01.16 18:50:02 :: Выгрузка плана счетов: Основной - 400 2017.01.16 18:50:02 :: Выгрузка документа: Договор 2017.01.16 18:50:02 :: Выгрузка календарей 2017.01.16 18:50:02 :: Для получения подсказки нажмите F1 |
|||
189
Злопчинский
16.01.17
✎
19:08
|
Параметр с логфайлом попробовать взять в кавычки?
|
|||
190
Djelf
16.01.17
✎
19:21
|
(186) Если с маленькими базами все в порядке то строка архивации правильная, значит дело в чем-то другом.
Попробуй обновить 7zip т.к. возможно это баг, все таки zip64 не родной формат. Либо сменить контейнер на 7z. А... вот что может быть https://sourceforge.net/p/sevenzip/bugs/1551/ 1С сначала упаковывает .md, потом .dat, потом .usr Т.е. возможна ситуация (см.выше) что 7zip делает контейнер в формате zip32, потом пытается в него запихнуть огромный файл и на этом падает. |
|||
191
vadim777
16.01.17
✎
19:22
|
(189) Перед этим попробовал
Параметры='u -tzip "%1%" "%2%"' >> D:\LOG_FILE.LOG Ничего - ни лога, ни архива. Пробую Параметры='u -tzip "%1%" "%2%"' >> 'D:\LOG_FILE.LOG' В архиве только пустая папка Test, без 1Cv77.dat. Лог-файла нет. В каталоге базы создан подкаталог log, в нем файл Статусы_20170116.txt, последние строки - те же, что выше. Попробовал даже так: Параметры='u -tzip "%1%" "%2%"' '>> D:\LOG_FILE.LOG' Архив вообще пустой. |
|||
192
vadim777
16.01.17
✎
19:23
|
(190) У мен сервер 2008 - 32 битный.
|
|||
193
vadim777
16.01.17
✎
19:24
|
(190) 7-Zip 16.04
|
|||
194
vadim777
16.01.17
✎
19:28
|
(190) В (76) выгружали базу в 13Гиг, у мена - 73Гиг. Похоже, ты прав.
|
|||
195
Djelf
16.01.17
✎
19:35
|
(192) При чем тут битность сервера?
Я говорю про битность контейнера http://www.artpol-software.com/ziparchive/KB/0610051629.aspx |
|||
196
vadim777
16.01.17
✎
19:37
|
(190) Пробую со строкой
Параметры='u -tzip -mx0 -mmt -bd "%1%" "%2%"' на сервере.... |
|||
197
vadim777
16.01.17
✎
19:37
|
(195) Та да, уже прочел.
|
|||
198
Djelf
16.01.17
✎
19:48
|
(196) С логом, да, что то не хочет...
Грязный хак: подмени после запуска users.usr на что-то объемное, тогда на нем упаковка подторомозит и будет видно что случилось после dat файла. А толку то менять режимы компрессии, если я все таки прав? -tzip в этом случае надо поменять на -t7z |
|||
199
vadim777
16.01.17
✎
19:52
|
(198) Или вообще заменить на rar-архиватор, с созданием архивов в расширением zip.
|
|||
200
Злопчинский
16.01.17
✎
20:00
|
(191) полный путь логфайла возьми в лвойные кавычки точно также как параметрыпроценты
|
|||
201
vadim777
16.01.17
✎
20:05
|
(200) Сделал:
Параметры='u -tzip -mx0 -mmt -bd "%1%" "%2%"' >> "D:\LOG_FILE.LOG" Нет ни архива, ни лог-файла. |
|||
202
Злопчинский
16.01.17
✎
20:07
|
О ты побач яка подлюка...
Тогда копать не вширь а вглубь придется |
|||
203
vadim777
16.01.17
✎
20:08
|
(202) Есть мысль : завернуть этот вызов в bat-файл. Счас попробую...
|
|||
204
vadim777
16.01.17
✎
20:16
|
(203) Попробовал - ерунда получается - пытается запихнуть в архив все базы:
configspy.ini [zip] Архиватор='"C:\Program Files\7-Zip\7z.bat"' Параметры='"%1%" "%2%"' ПараметрПароля='-p' Показывать=1 7z.bat: "C:\Program Files\7-Zip\7z.exe" u -tzip -mm=ppmd -mmt=on -mmem=256m -mo=16 "%1%" "%2%"' >> D:\LOG_FILE.LOG |
|||
205
vadim777
16.01.17
✎
20:42
|
(204) Совсем забыл передачу параметров в dos, извиняюсь за ламерство :(
К тому-же: Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...] [<@listfiles...>] К тому-же из ReadMe.txt к configspy: маска %1% заменятся на имя архива, генерируемое 1С; маска %2% заменяется на имя текущего архивируемого файла. Так понимаю, configspy передает 7zip'у список файлов для архивирования во втором параметре. В общем, вызывать 7zip через батник не получится. Как и получить лог-файл работы архиватора. Если ошибся - поправьте. |
|||
206
Djelf
16.01.17
✎
21:46
|
(205) Забыл ;)
Запусти такой батник echo $1 $2 Но все таки попробуй не -tzip, а -t7z |
|||
207
vadim777
16.01.17
✎
22:57
|
(206) Вот смотри:
7z.bat echo %1 %2 pause "C:\Program Files\7-Zip\7z.exe u -tzip -mm=ppmd -mmt=on -mmem=256m -mo=16 %1 %2" >> D:\LOG_FILE.LOG Вот его вывод: D:\1C7_Bases\Test>echo "D:\123.zip" "D:\1C7_Bases\Test\1Cv7.MD" "D:\123.zip" "D:\1C7_Bases\Test\1Cv7.MD" D:\1C7_Bases\Test>pause Для продолжения нажмите любую клавишу . . . |
|||
208
Djelf
16.01.17
✎
23:23
|
(207) Мне смотреть там нечего...
"C:\Program Files\7-Zip\7z.exe" u -t7z -aoa -mm=ppmd -mmt=on -mmem=256m -mo=16 %1 %2 >> D:\LOG_FILE.LOG Упаковывает, в лог выводит. Старый файл архива с тем же названием лучше удалить. Хотя можно и батник доработать... |
|||
209
Djelf
16.01.17
✎
23:25
|
Ну и Параметры='"%1%" "%2%" '
И больше ничего там не надо. С паролем не знаю, возможно как %3 передается... |
|||
210
orefkov
17.01.17
✎
04:16
|
(176)
Я не против. Лейте опенконф на гитхаб. |
|||
211
Emery
17.01.17
✎
07:09
|
(210) Вопрос Александру Орефкову.
Извиняюсь, что не по теме. Мне нравится в вашем методе построения внешних компонент для 1С77 полное игнорирование механизма COM, отсутствие каких-либо экспортируемых функций в dll-ке и при этом полный доступ к внутренностям платформы «семерки», например, построение собственных окон средствами MFC, воспринимаемыми 1С как родные. Мне, правда, больше нравиться цепляться с динамическим окнам (объекты «Текст» и «Таблица»), удалять их содержимое (фрейм и клиентскую область) и замещать их собственными окнами. Для этого меня интересует, как получить аналоги функций в вашем шаблоне ВК: m_iExtWndsSupport-> GetAppMainFrame(&hMainFrame) и m_iExtWndsSupport->GetAppMDIFrame(&hMDIFrame), используемые в стандартных шаблонах «семерки»? Конечно, я могу использовать функции WinAPI, вроде: FindWindow(), GetWindow() и им подобным, но хотелось бы знать, как это сделать в вашем шаблоне внешней компоненты (шаблон Орефкова?), на котором построены проекты 1sqlite.dll, TurboMD.dll и др. И вообще как в вашем шаблоне получать hWnd окон? |
|||
212
АЛьФ
17.01.17
✎
10:04
|
2(209) Пароль с помощью отдельного параметра в ini устанавливается: ПараметрПароля='-p'
Компонента сама допишет к этому параметру пароль. |
|||
213
Emery
17.01.17
✎
11:19
|
(211) Как важно правильно формулировать вопросы! В Интернете сразу же нашлись ответы. Вот, пожалуйста:
HWND hMainFrame = AfxGetApp()->m_pMainWnd->m_hWnd; HWND hMDIFrame = GetWindow(hMainFrame, GW_CHILD); HWND hLastChildFrame = GetWindow(hMDIFrame, GW_CHILD); Здесь hLastChildFrame это последнее открытое окно в «семерке», с которым уже можно делать, что хочешь, менять содержимое на свое окно и прочее. |
|||
214
orefkov
17.01.17
✎
13:13
|
(211) (213)
Я не один всё это придумывал, моя в этом малая часть. Лучше всего вдумчиво изучать исходники 1C++, FormEx, OpenConf. |
|||
215
АЛьФ
17.01.17
✎
14:02
|
Кстати, если кто-нибудь возьмется внедрить подключение внешнего архиватора в OpenConf, то свои исходники я готов предоставить с удовольствием.
|
|||
216
Emery
17.01.17
✎
15:19
|
(214) > Я не один всё это придумывал, моя в этом малая часть.
Я так понимаю, это касается хидер-файлов «семерки», т.е. все, что идет в папке «1CHEADERS». Но файл ContextImpl.hpp, в котором определена суть обхода COM-технологии (нужной разве что, программистам Visual Basic, Visual FoxPro, чтобы использовать у себя компоненты, написанные на С++, да в пользовательских средах, поддерживающих VBA или аналоги, вроде MS-Офисных продуктов) стоит ваш копирайт: (с) Александр Орефков t*****[email protected]. Именно это мне и интересно, поэтому, полагаю, что термин «шаблон Орефкова», по аналогии с шаблонами внешних компонент 1С77, версий 1 и 2, вполне корректен. Я бы даже предложил всем пишущим ВК для «семерки» использовать ваш шаблон, который можно получить убрав содержательную часть из вышеупомянутых проектов. > Лучше всего вдумчиво изучать исходники 1C++, FormEx, OpenConf. Да, это подразумевается, причем это далеко не полный список ВК77 с открытым исходным кодом. |
|||
217
trdm
17.01.17
✎
15:28
|
(210) Мерси. Рад видеть!
|
|||
218
Emery
17.01.17
✎
15:35
|
(215) > Кстати, если кто-нибудь возьмется внедрить подключение внешнего архиватора в OpenConf, то свои исходники я готов предоставить с удовольствием.
OpenConf, штука конечно замечательная, как и другие ваши продукты, только, откровенно говоря, я не очень понимаю, смысла во внешнем архиваторе. Для себя я всегда использую внешнее архивирование всей базы 1С во внешний rar-файл, с помощью WinRar’a, в т.ч. 64-разрядного , а dt / dat / zip’ами не пользуюсь уже много лет и как то не страдаю, хотя рабочих, достаточно объемных баз у меня много. Места на дисках пока хватает, даже для множественного копирования (5-10 и более копий важных баз для меня нормально). |
|||
219
trdm
17.01.17
✎
15:53
|
(215) > Кстати, если кто-нибудь возьмется внедрить подключение внешнего архиватора в OpenConf, то свои исходники я готов предоставить с удовольствием.
А нафига внешний архиватор в OpenConf???? |
|||
220
АЛьФ
17.01.17
✎
16:05
|
2(219) Для решение проблемы из (0) без необходимости подключения двух компонент.
|
|||
221
trad
17.01.17
✎
16:14
|
(216) +1
тоже использовал "шаблон Орефкова" в нескольких своих ВК |
|||
222
trad
17.01.17
✎
16:17
|
(218) как я понимаю, при миграции dbf <-> sql без "штатной" выгрузки/загрузки не обойтись
|
|||
223
trdm
17.01.17
✎
17:07
|
(220) Я бы для этой задачи не рекомендовал бы использовать OpenConf, а рекомендовал бы сделать чистую инсталяцию такого же релиза без OC и пойти путем Ромикса.
Нафига при выгрузке возможности опенконфа? |
|||
224
trdm
17.01.17
✎
17:09
|
+(223) Причем впихнул бы архиватор сразу в компоненту, что-бы не гоняться за ней ри инсталяциях.
в (223) имеется ввиду что при архивации не нужны пользовательские примочки и прочая интерактивная шняготень, которая может и поглючивать. Я за экогомию памяти и упрошение в таком серьезном деле как бекап. |
|||
225
АЛьФ
17.01.17
✎
17:10
|
2(223) И чем обосновываешь?
|
|||
226
АЛьФ
17.01.17
✎
17:11
|
2(224) Понятно.
|
|||
227
Emery
17.01.17
✎
17:48
|
(221) Да, замечательная штука, я давно такую хотел :) .
(222) С этим согласен, только если уж переводить dbf в sql в 7.7, то не надо ждать пока превысится двух-гектарный лимит, потенциальные проблемы должны быть прочувствованы заранее. В обратную сторону можно двигаться и при превышении лимита, используя скриптовые возможности SQL-сервера, хотя в данном случае желательно избегать проблем на ровном месте. |
|||
228
Emery
17.01.17
✎
21:46
|
(213) К сожалению, эксперименты показали, что надежно работает только первая строчка кода. Последние две строки, в общем случае могут показывать на любые окна, например, статусную строку, что нас в данном случае мало интересует. Поэтому придется перебирать всех потомков главного окна приложения либо можно воспользоваться другим кодом, дающего в итоге хэндл активного MDI-шного окна, например, предварительно созданного (и отображенного!) программными средствами «семерки» объекта «Текст» или «Таблица»:
CMDIFrameWnd *pFrameWnd = (CMDIFrameWnd *) AfxGetApp()->GetMainWnd(); if(!pFrameWnd) return FALSE; // Get a pointer of the active MDI child window //CMDIChildWnd *pActChildWnd = (CMDIChildWnd *) pFrameWnd->GetActiveFrame(); CMDIChildWnd *pActChildWnd = pFrameWnd->MDIGetActive(); if(!pActChildWnd) return FALSE; // Get a handle of the active MDI child window HWND hActChildWnd = pActChildWnd->m_hWnd; if(!hActChildWnd) return FALSE; Теперь ненулевой хэндл hActChildWnd указывает на искомое активное (динамическое) дочернее окно, которое является целью наших притязаний. |
|||
229
АЛьФ
17.01.17
✎
22:55
|
2(228) Зачем это все?
|
|||
230
Emery
18.01.17
✎
07:18
|
(229) > Зачем это все?
Закономерный вопрос. Надо писать статью. Но, в двух словах. Пишу внешнюю компоненту для «семерки». Общая идея – попытка разделения данных и кода. Хочется, чтобы с помощью только внешней обработки можно было бы получать полноценный доступ к базе данных. Имеется в виду полнофункциональный грид, с возможностью MMF навигации и редактирования в виртуальном режиме по произвольным dbf-файлам. Подобные исследования у меня есть, можно обрабатывать dbf-ки объемом в сотни мегабайт, навигация летает, что дурная. При этом встает вопрос об индексации, поиске, сортировке, select sql'у и т.п. Для этого удается привлечь рантайм-библиотеки Visual FoxPro. Причем, здесь тоже удалось обойти COM-механизм, тем более, что в этих библиотеках он реализован нестандартно, если не сказать грубее. Остается грид. До сих пор я экспериментировал с компонентом на базе SysListView32, в т.ч. пытался работать с ним напрямую, минуя COM. Это возможно, только объект нужно переименовывать, например, в SysListCtrl32. Однако сам по себе этот контрол требует хорошей обёртки, проще уж воспользоваться другими компонентами, особенно на базе опен-сорса. Скажем, взять грид из wxWidgets или Qt, как самые продвинутые. Но можно выбрать что-то и попроще, вроде SimpleGrid и т.п. Таким образом, мы приходим к необходимости создания внешних визуальных оконных компонентов в 1С. Легко создать независимые окна и присоединить их к MDI клиенту «семерки» или даже «восьмерки». Только при этом наблюдается сильное мерцание при обновлении и об этих внешних окнах 1С ничего не знает, соответственно их нет ни в закладках, ни в меню. Следовательно, более желательно, чтобы окна порождались самой системой 1С (например, динамические окна «Текст» или «Таблица» и их аналоги «ТекстовыйДокумент» / «ТабличныйДокумент» в 8.х), а затем мы бы цеплялись к этим окнам, удаляли их клиентскую часть и фрейм и замещали бы своими окнами (для этого и обсуждался здесь вопрос о хэндле активного дочернего MDI-шного окна). Правда, в проекте TurboMD.dll реализован способ создания родных окон 1С, средствами MFC, только этот метод более громоздкий, хотя и полезный. В результате, все замечательно, 1С видит эти окна, регистрирует их у себя, мы, в принципе, можем работать с произвольными внешними dbf-файлами и даже писать внешние скрипты на VFP. Все просто чудесно! И, благодаря шаблону Орефкова, никакого назойливого COM'а! |
|||
231
АЛьФ
18.01.17
✎
09:11
|
2(230) Я сильно извиняюсь, но это сильно напоминает попытку почесать левое ухо правой ногой. В семерке прекрасно открываются собственные окна по майкрософтовской технологии документ-вид.
|
|||
232
Emery
18.01.17
✎
09:26
|
(231) > В семерке прекрасно открываются собственные окна по майкрософтовской технологии документ-вид.
Так я про это тоже говорил. Пример в TurboMD.dll. Естественно, это я имею в виду. Только это более громоздкий вариант. У меня всего несколько строчек кода вместо оформления трех классов и вызова шаблона для них. M$ любит приводить в пример «Документ-Вид» различные представление документа в Ворде. Только, самое смешное, что эта MFC-шная технология не реализована в Ворде от слова «совсем». Не более, чем визуальная демонстрация. Поэтому, я не в особом восторге и от этой технологии. На уровне логики согласен абсолютно, а на уровне формальной реализации, не очень. А в данном проекте это совершенно не принципиальный момент, считайте, что я использовал классы Document-View. Что это меняет? |
|||
233
АЛьФ
18.01.17
✎
09:37
|
2(232) По этой технологии построена семерка. Поэтому приходится под нее подстраиваться. Если вообще от 1С отвязываться, то на фига тогда она вообще? Почему бы не написать отдельное приложение и не рулить в нем как хочется?
|
|||
234
Emery
18.01.17
✎
10:10
|
(233) «Семерка» хороша по своему, как по мне, одна из лучших программ. Трудоёмкость ее создания 20 человеко-лет (10 программистов писали ее два года). Поэтому частным лицам ее аналог потянуть трудно, а все форки уходят в сторону клиент-серверных систем, тогда как ниша файл-серверных систем пустеет. Но не зря говорят, новое это хорошо забытое старое, уверен, что файл-сервер еще ждет свой ренессанс.
Насчет «подстраиваться», спорный вопрос. Достаточно обеспечить совместимость, пусть и нестандартную или неочевидную. Думаю, что нет особого смысла тратить время на построение полного аналога 7.7. Вполне можно решать свои проблемы путем внешних обработок и внешних компонент. В этом есть даже свой цимус, мы ничего не трогаем в работающей конфигурации клиента, только подключаем внешнюю обработку с внешней компонентой и расширяем функционал до требуемого уровня. |
|||
235
vadim777
23.01.17
✎
18:02
|
(0) База на MS SQL 2008 на Server 2008 32бит.
mdf - размер 78Гб, log - 17Гб. Выгрузилась база в архив размером 8,4Гб. Для эксперимента попробовал загрузить, тут же на сервере, в dbf-формате - дня три загружалась, выдала ошибку "Ошибка поиска в файле безымянный файл". Попробую загрузить в базу SQL, о результатах доложу. |
|||
236
Djelf
23.01.17
✎
18:13
|
(235) Было такое. Мне кажется это было связано с непечатными символами в таблицах. На dbf после тии ошибка ушла. А вот проверки физической целостности на sql из конфигуратора не сделать...
|
|||
237
Злопчинский
23.01.17
✎
19:06
|
(235) Каспара ещё на всяк случай выключи когда в дбф
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |