Имя: Пароль:
1C
1C 7.7
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) Каспара ещё на всяк случай выключи когда в дбф