powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отдельный топик для Быкиса и П-Л по совету Вади
323 сообщений из 323, показаны все 13 страниц
Отдельный топик для Быкиса и П-Л по совету Вади
    #34561459
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадя прав, удобнее продолжать в отдельном месте.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34561544
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Речь вот об этом?
http://sql.ru/forum/actualthread.aspx?tid=316832&pg=368

Названия всех секшенов в форме на правильном языке?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34561614
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, нашйл на работе русский офис, поставил всё русское. Всй работает! Щас кнопочки тыкать буду :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34561615
Любопыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычРечь вот об этом?
http://sql.ru/forum/actualthread.aspx?tid=316832&pg=368

Названия всех секшенов в форме на правильном языке?
а так-же всех контролов (лейблов, линий, прямоугольников), единиц измерений в размерах колонок, символов-разделителей... короче лучше форму рисовать в аглицком аксессе.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34561659
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диаграммы в SQL сервере видны ? Я там старался с подписями и комментариями.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34561800
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть видны. А почему не работает получить список юзеров и ролей с скл?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34562194
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
}{итрО ты с пивотами, xirr'ами... А почему аудит не пишет какое значение было и какое стало? Нехорошо... А вообще супер! :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34562239
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. У меня юзеры с сервера благополучно приезжают. Потрассируй, посмотри где не срабатывает.
2. Могл остаться кой-какой мусор, ты уж не обессудь... Про пайвоты не понял, XIRR у меня есть абсолютно честный на VBA написанный...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34562295
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто я с пайвотами мучаюсь и они мне по ночам сняться - всё пытался сделать чтобы количество столбцов было как и должно быть динамическое (типо настоящий Pivot Transformation)... Щас сделал на подобие твоего и добавил префикс pivot - сижу и радуюсь :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34562315
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За стенкой в форуме про МС сервер куча рецептов про пайвоты.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563102
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-Л письмо мне не дошло... повтори пжлста на office_sk2@lebgok.ru с темой для Коршикова Д.С.
Спасибо.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563129
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отправил только что
sergio2нольнолл4гавyandex.ru
mcgrowшестьчетырегавmail.ru
office_skдвагавlebgok.ru

Кто писал что мыло в профиле - корпроративный фильтр отрезает нафик картинки с адресами, если желаете получить - пишите сюда текстом.

Выкладывать честно говоря не очень хочется, надо было бы от мусора хорошенько почистить, а то выдрано из живого приложения... Как-то не симпатично...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563144
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никСабакаМэйлТчкРу. Если можно.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563149
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отправил mds_world'у
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563150
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мыло в профиле
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563153
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторнадо было бы от мусора
мне в мусоре копаться не привыкать
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563154
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ILL HEADмыло в профиле
По слогам: МНЕ НЕ-ВИД-НО. (см выше про злые фильтры).
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563158
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r e p a i r c d dog mail.ru
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563177
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ушло Голове.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563183
Фотография ruprext
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Программист-Любитель
теперь ты еще и Спамер-Любитель
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563214
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получил.... открыл... в ужосе.... заболела голова....
.... спасибо....
)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563258
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель... а то выдрано из живого приложения... Как-то не симпатично...Вот-вот! Приложение можно отослать туда-же
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563279
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или, как я и говорил, струтктуру / скрипт на создание. Или жаба не велит? :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563281
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, хорошие, оптимистические отзывы.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563291
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSИли, как я и говорил, струтктуру / скрипт на создание. Или жаба не велит? :)
Скрипт на создание чего ?

Системные и таблицы метаданных присутствуют, их связи и пр. имеются в бд. Пользовательские таблицы ориентированы на конкретные бизнес процессы и всем другим, кроме меня, бесполезны.

Не жалко, просто не вижу смысла.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563310
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и ине они как бы сами по себе не нужны - просто посмотреть что и как ты называешь, как нормализуешь (до какой степени) и т.д. и т.п... (Хендерсона примеры мне тоже не нужны, а изучаю, вот и с твоей базой типо того - оизучал бы). Если не жалко, то скинь скрипт на создание базы на мыло.
ЗЫ: Кстати, можешь из своего мне кидать ВСЁ , что не жалко ! :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563333
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне интересно в твоем примеры - это то как управлять юзверами, ролями из клиента... но чет пока туго доходит... хлама (то чего я не понимаю) шо ппц...
буду дальше копать...
а по поводу оптимистических отзывов - да блин, все кул.... просто жаба душит что я не такой умный
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34563381
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага. Я щас тоже пойду убьюс ап стену что ниасилил все на студии с человеческим наследованием форм и собственным визуальным конструктором.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34565572
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель1. У меня юзеры с сервера благополучно приезжают. Потрассируй, посмотри где не срабатывает.Там что-то пишется, так быстро картинки перед глазами мелькают... Крассиво.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34565602
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел в виду банально из под вибиа по шагам пройтись.

Кстати, что-то совсем нет вопросов и/или критики. Гладишь объясняя и сам бы что понял. Уже после отсылки довел до блеска автоматический проверятель данных. Дерево условий набирается мышкой. Красота!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34565636
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопросов не бывает только в одом случае - когда вапче ничего не понятно :) Если вопросов от меня ждёшь - то паре неделек подождать придётся - я в алвавитном поряке пока только до медик таблиц дошёл
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34565712
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диаграммы @Audit, @Meta, @Sys, @Syntax посмотрел ? Подписи и комментарии в них видны ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34565721
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел. Всё видно - я ж писал уже.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34565917
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это шо?
CurrentProject.Properties("DataSource")
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34565926
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Шо?" - в смысле - у меня почему-то не работает :(
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566012
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему у тебя работает
Код: plaintext
CurrentProject.Properties("DataSource")
а у меня только
Код: plaintext
CurrentProject.Connection.Properties("Data Source")
??
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566159
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Программист-Любитель
Спасибо за присланное. К сожалению, сейчас даже не на чем испытать, нет сервера, нет адп. При первой же возможности немедленно попробую.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566170
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже получил - пасибки.
Пока не тестил - сплошной переход на лицензионное ПО, но попозже обязательно.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566175
Любопыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_world2 Программист-Любитель
Спасибо за присланное. К сожалению, сейчас даже не на чем испытать, нет сервера, нет адп. При первой же возможности немедленно попробую.
+1
Спасибо. Правда в SQL пока дуб-дубом. :( да и нету его.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566192
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё не доходит - форма стартуп он таймер - всегда висит как нивидимка? Зачам? Что она делает после
Me.TimerInterval = 0
Me.OnTimer = ""
Me.Visible = False
?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566223
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а мне ничего не пришло :( хотя есть и пиво и сервер :)
плиз на repaircd@list.ru (этот точно рабочий) ибо в профиле :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566227
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты там когда блокировочки в буйстве выставлял, может и програмиста нечаянно запихнул?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566264
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSПочему у тебя работает
Код: plaintext
CurrentProject.Properties("DataSource")
а у меня только
Код: plaintext
CurrentProject.Connection.Properties("Data Source")
??
Щас под рукой дома нету кода, но там же вроде проверяется. Если проперти нету оно создается и в него пишется значение. После этого оно есть и им дальше можно пользоваться.

Стартап форма все время висит. Показывается из пункта меню Состояние базы данных. Суперпользователь может в ней выбрать другого юзера чтобы испытать на своей шкуре его роль - формы для каждой роли ведут себя по разному - см. Настройку интерфейса по ролям.

При закрытии стартап формы из-за выхода из приложения разрывается CurrentProject.Connection и отключаются ссылки. После этого при следующем запуске приложение будет "чистенькое".

Эх, народ, зачем было просить адепешник если запускать не на чем ?

Кому не дошло завтра утечком пошлю снова.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34566833
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За плагият конечно извинтиляюся (но я там оставил в модуле "За основу дизайн некоторых форм взятя информационная система Програмиста-Любителя) :)

Хотел форму подержать подольше
Код: plaintext
1.
2.
    Dim PauseTime: PauseTime =  2  * Rnd
    Dim Start:     Start = Timer
    Do While Timer < Start + PauseTime:  DoEvents: Loop
это не хорошо что он в тот момент делает с CPU :)

Это я просто брюзжу по ходу, а так - всё супер (уже говорил) :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34567084
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как ты убрал эти стрелочки в меню?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34567237
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот что мне показал акцесс, когда я удалил файл scrrun.dll
Никакого окна с
Код: plaintext
"Не найдена библиотека или компонент: " & ref.Name & " (" & ref.Guid & ")", _
я не увидел :(
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34567259
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В связи с чем сделал вывод, что
авторПри закрытии стартап формы из-за выхода из приложения разрывается CurrentProject.Connection и отключаются ссылки. После этого при следующем запуске приложение будет "чистенькое".
тут что-то не так
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34567705
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, там есть подводные камни.

Перед передачей проекта "на сторону" надо убрать все ссылки кроме двух (кнопка "удалить все" в диалоговом окошке управления ссылок). Тогда "по свежему" ссылки подключаются и отключаются нормально. Кстати, при каждом запуске генерится файл .Reference.Log в котором записываются действия со ссылками.

Если ссылки были подключены к проекту изначально, или были поломатые, то с ними бяда. Поэтому я чищу ссылки перед выкладыванием.

По поводу всяких других недоработок или недочетов - это естественно, т.к. вы получили живой рабочий проект а не отлакированное завершенной нечто. AS IS, AS IS, господа.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34567726
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Debug.Print oServer.Logins.Count =  0 
Почему? Они там есть...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34568245
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потаюсь разобраться почему юзеры не приезжают... Разобрал твой код, проверил логины на СКЛ... Что я не так делаю? Где говырять хотябы?

SQL Manager
Код: plaintext
select name from master..syslogins
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
name
--------------------------------------------------------------------------------------------------------------------------------
sa
##MS_SQLResourceSigningCertificate##
##MS_SQLReplicationSigningCertificate##
##MS_SQLAuthenticatorCertificate##
BUILTIN\Administrators
NT AUTHORITY\SYSTEM
LAURESTA\SQLServer2005MSSQLUser$BAZE$BAZE
LAURESTA\SQLServer2005MSFTEUser$BAZE$BAZE
BUILTIN\Users
NT AUTHORITY\NETWORK SERVICE
LAURESTA\qwerqwerqwerqwer
LAURESTA\qwerqwerqwerqwer
LAURESTA\qwerqwerqwerqwer
##MS_AgentSigningCertificate##
LAURESTA\qwerqwerqwerqwer
LAURESTA\qwerqwerqwerqwer
LAURESTA\qwerqwerqwerqwer
LAURESTA\qwerqwerqwerqwer
LAURESTA\qwerqwerqwerqwer
LAURESTA\qwerqwerqwerqwer

(20 row(s) affected)

VBA
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
Set oServer = New SQLDMO.SQLServer

With oServer
    .LoginSecure = True
    .Connect
End With
    'Stop
For Each oUser In oServer.Logins
    If Left(oUser.Name,  2 ) <> "sa" And Left(oUser.Name,  7 ) <> "BUILTIN" Then
True Then
        Debug.Print oUser.Name
    End If
Next oUser
Код: plaintext
1.
2.
3.
4.
5.
6.
LAURESTA\d.bykovas
LAURESTA\qweqweqwer
LAURESTA\qweqweqwer
LAURESTA\qweqweqwer
LAURESTA\qweqweqwer
LAURESTA\qweqweqwer
LAURESTA\qweqweqwer

Где ещё двое спрятались?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34568379
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему по несколько одинаковых логинов ?

У меня получается список, совпадающий с тем, что видно в консоли сервера.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34568404
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Они не одираковае - это я беледерду место имён написал. Но результат -то не изменился от этого - двое не приехали
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34568639
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я убил все логины на сервере. СКЛДМО по прежнему выдаёт свой список. Блин, ну что я не так делваю? Законектиться этим дмо куда-нибудь надо?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34568665
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
|___|___|___|___|___|___|___|___|
__|___|___|___|___|___|___|___|_
|___|___|___|___|___|___|___|___|
__|_ ДА! Надо зако - __|___|___|_
|___|ннектиться... ___|___|___|
__|___|___|___|___|___|___|___|_
|___|___|___|___|___|___|___|___|

Достучался! А как и куда? проект правильно подключён. А как SQLDMO нвстроить?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34568711
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function list()
Dim oServer As SQLDMO.SQLServer: Set oServer = New SQLDMO.SQLServer
Dim oUser As SQLDMO.Login
    
With oServer
    .LoginSecure = True
    .Connect
End With

For Each oUser In oServer.Logins
    Debug.Print oUser.Name
Next oUser

End Function
Вот так. Если
Код: plaintext
    .Connect
или
Код: plaintext
    .Connect ("Bychara")
Работает правильно... Когда бычару останавливаю и делаю
Код: plaintext
    .Connect ("BAZE\BAZE")
вот такая картинка
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34569142
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблицы SYS_* - это обыкновенные копии данных СКЛ сервера?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34569195
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем? Зачем создавать копию пользователей понятно, зачем создавать копию ролей понятно. Зачем делать таблицу-копию ЮЗЕР<->РОЛЬ ? Непонятно. Это же в любой момент можно с сервера получить... И к томуже двойная работа - добавил пользователя в роль на сервере, прибежал к себе и сделал тоже у себя в программе...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34569220
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему nvarchar именно 64 ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34569303
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL, thanks
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34569360
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiS Зачем? Зачем создавать копию пользователей понятно, зачем создавать копию ролей понятно. Зачем делать таблицу-копию ЮЗЕР<->РОЛЬ ? Непонятно. Это же в любой момент можно с сервера получить... И к томуже двойная работа - добавил пользователя в роль на сервере, прибежал к себе и сделал тоже у себя в программе...
Патаму что для управления пользователиями и ролями получается не нужен сервер. Локально включили пользователя в роль, выключили. И только когда на сервере на самомо деле добавился пользователь можно с сервера же это дело обновить. Все управление завязано на роли - доступ к таблицам и т.п. При каждом открытии любой формы код берет пользователя и проверяет его роли. Проверка делается в локальной таблице.

Мне наверняка взбредет в голову добавить еще какую-нибудь инфоромацию к пользователям и ролям. В локальной копии я сделаю это как только захочу.

Ну и наконец, я сначала сделал управление ролями и только потом стал получать из с сервера.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34569361
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSПочему nvarchar именно 64 ?
Патаму что я так решил.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34569362
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSТаблицы SYS_* - это обыкновенные копии данных СКЛ сервера?
Плюс то дополнительное что мне захочется иметь.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34571092
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы какую нибудь рабочую форму, для понятия работы аудита... А то я сделал чё-то и в результате такой явлений (работая с формой):
1) Открыли форму для добовления новой записи, ввели что-то (получили лог таблицы 1 INSERTED)
2) Записали что-то на субформе (получили лог таблицы 2 INSERTED)
3) Сохранили и закрыли (получили лог таблицы 1 UPDATED)

Что в принципе (п. 3) не есть правильно...

Хотя допускаю, что я не правильно сделал формы (игрался с DIC_RaitingAgency и DIC_RaitingRank).
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34571100
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ:
Код: plaintext
.Connect ("BAZE\BAZE")
- почему-то не нравилось "\" в названии инстанса. Без этой фиговины всй работает и всё приезжает.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34571219
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSХотелось бы какую нибудь рабочую форму, для понятия работы аудита... А то я сделал чё-то и в результате такой явлений (работая с формой):
1) Открыли форму для добовления новой записи, ввели что-то (получили лог таблицы 1 INSERTED)
2) Записали что-то на субформе (получили лог таблицы 2 INSERTED)
3) Сохранили и закрыли (получили лог таблицы 1 UPDATED)
Что в принципе (п. 3) не есть правильно...
Хотя допускаю, что я не правильно сделал формы (игрался с DIC_RaitingAgency и DIC_RaitingRank).
Почему не правильно ? Перед входом в субформу произошло сохранение свежедобваленной записи.
В субформе записи добавились.
В главной форме запись отредактировалась и сохранилась.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Описание таблицы	Описание схемы	Дата	Оп.	Код	Расшифровка
Справочник рейтинговых агентств	06. Рейтинговые агентства и оценки по организациям	04.06.2007 10:28:04	U	222	222
Справочник рейтинговых агентств	06. Рейтинговые агентства и оценки по организациям	04.06.2007 10:27:25	I	222	222

Описание таблицы	Описание схемы	Дата	Оп.	Код	Расшифровка
Таблица сравнительная шкала оценок рейтинговых агентств	06. Рейтинговые агентства и оценки по организациям	04.06.2007 10:27:55	I	222	222
Таблица сравнительная шкала оценок рейтинговых агентств	06. Рейтинговые агентства и оценки по организациям	04.06.2007 10:27:39	I	222	222

Insert в главную, 2 Insert в подчиненную, 1 Update главной.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34571269
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То что код работает правильно - согласен. Не правильно с точки зрения... моей :) Пользователю до лампечки форма это или субформа - он вводит записю (то бишь инсертит) и потом тыкает в сохранить (то биш инсерт). А я вижу и I, и U и начинается внутренняя борьба с непреодолимым желанием вызвать на ковёр и наорать, почему мол сразу правильно не вводите? зачем изменяете? :)
Это я так брюзжу... Похоже делал сам и сталкнулся, с тем, что когда на вкладках (котрых штук 6) разные субформы, получаю >6 лог-записей (указывающих об изменения записей) ... А если ещё и дефалты, то >6 * кол-во дефалтов. У тебя, смотрю, это тоже не учтено...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34571651
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вкладках данные из других таблиц, связаннных с основной как правило 1:М. Так что логирование их записей отдельно мне кажется правильным.

Было бы интересно "оживить" формы по созданию и заполнению документов-экземпляров Ворда на базе шаблонов. Не хочешь попробовать ?

Если да, то постараюсь выкроить время и написать сюда инструкцию, как это сделать.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34571678
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительНе хочешь попробовать ?Хочу. Попытка - не пытка :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34571995
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда по шагам надо будет выполнять инструкции. Награда - собсно система формирования документов.

На этом пути придется разобраться как работать с метаданными (описаниями пользовательских таблиц), как делать шаблоны документов и как связывать закладки в документах с полями источников из описания метаданных.

1. Шаг. Заводи таблицу, запрос из нескольких таблиц - что хочешь делай и описывай его как источник данных в описании метаданных.

1.1. Создаешь сам объект в SQL сервере.
1.2 Идешь в меню База данных->Метаданные->Описание источников метаданных
1.3 В форме в верхней табличке в поле Источник данных выбираешь мышой свой запрос/таблицу.
Заполняешь остальные поля. Обязательно ID поле и Alias поле.
ID поле - поле PK. Во всех пользовательских таблицах PK у меня из одного столбца, по другому система и не умеет.
Alias поле - Поле с максимально информативным описанием записи. Для Физ.лиц это скленные Фамилия + Имя + Отчество.

Остальные поля пока можно не трогать.

1.4 В нижней табличке нажимаешь Заполнить. Туда вываливаются все поля запроса/таблицы. Делаешь для каждого членораздельное описание на русском или прибалтийском языке.

Сделаешь - пойдем дальше.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34572809
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будем попробать...
ЗЫ: Пасиба. Имортнул к себе в рабочую и нажал btnUnlinkAll
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574081
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574353
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пачиму?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574409
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что после нажатия кнопки Заполнить он сама вставляет имеющиеся фактически поля. Тебе нужно лапками только дополнить описания. Новые записи создавать не нужно (надо было АллоуАддишинс запретить).

Как закончишь с полями - можно начинать шаблон документа городить. Свистни, я отпишу инструкцию.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574429
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тама я закончил... Свисть! :)

А "пачиму" это по другой теме, форма dlgStartup и dlgLogin глючуть...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574487
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прекрасно. Следующим номером нашего марлезонского балета выступает... (барабанная дробь) Автоматический Супер Генератор Документов по источникам данных из БД.

(Зрители, спрашивающие "как мне подставить вместо закладки значение" в смятении рвут волосы на всех местах организма.)

Понятия.

Тип документов - самый верхний уровень классификации документов.
Шаблон документов - обязательно относится к конкретному типу. В нем содержится вордовский ОЛЕ объект с размеченными закладками для подставновки значений).
Экземпляр документа - последний уровень классификации документов. Сделан по конкретному шаблону на базе конкретной записи из источника данных, заботливо описанного тобой на предыдущем этапе.

Для правильного отображение полей из источника данных в шаблоне заполняется таблица пар поле источника данных - закладка в вордовском шаблоне. Посему следует знать список своих полей в своем источнике данных и имена закладок в вордовском шаблоне.

Что делать.

Открыть форму Документы :: Типы, Шаблоны и Экземпляры в виде таблицы
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574521
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И дальше никак ;(
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574532
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этой форме завести по вкусу свой новый Тип и в нем - новый Шаблон.

Приготовить файлик в Ворде. Открыть панель инсрументов "Формы" и навтыкать закладок, куда будут с восторгом сливаться поля из источников данных.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574542
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закладки вставляются кнопкой текстовое поле на панели формы. Имена закладок задаются через нажатие кнопки свойства на панели формы. Имена закладок запомнить!

После того, как файл готов, закрыть ворд и идти взад на форму с типами, шаблонами и экземплярами.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574563
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семеня ногами от нетерпения
Дык готов документ... Дальше што?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574580
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открыть форму Карточка Шаблона со своим свежезаведенным шаблоном.

На вкладке Метаданные задать свой источник данных.
На вкладке Файл Шаблона нажать кнопочку Загрузить и найти в дебрях свой файловой системы тот документ ворд, куда были вставлены поля.
Сохранить запись.
На вкладке заполнение шаблона Разобрать шаблон и для каждой закладки вордовского файла задать поле из источника данных.

На вкладке Экземпляры документов в поле Запись выбираешь свою запись, по которой будет генерится документ. Сохраняешь запись, открываешь Карточку Экземпляра.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574594
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSИ дальше никак ;(
Свой Тип ты благополучно добавил - ОК.
Почему для Типа новый шаблон не добавляется ? Я только что вколотил новый - ОК. Надо обязательно заполнить №, Название и Код шаблона.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574603
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что бы не запутаться, напиши все ли шаги с картинками выполнились. А то какая-то рассинхронизация ощущается.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574627
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот тут я и застрял... Кнопка "карточка записи" не жмакается, выйти из записи не могу. А дальнейшие картинки (про создание doc - всё нормально, уже с утра всё подготовлено и ждёт)...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34574684
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя - да, печатать. На момент передачи файла заполнение еще не работало.

Важно! После ввода Номера, Кода и Названия шаблона запись ДОЛЖНА сохраниться. Если нет - посмотри в VBA коде почему, исправь ошибку.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575004
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вечером попробую. Пока вопрос - когда заполнеятся (и как) dtUserLogoutDate ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575058
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При выходе из приложения - во время выгрузке dlgStartup.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Sub Form_Unload(Cancel As Integer)

    Dim i As Integer, n As Integer
    n = Forms.Count
    
    For i = n To  1  Step - 1 
        If Forms(i -  1 ).Name <> Me.Name Then
            DoCmd.Close acForm, Forms(i -  1 ).Name, acSaveNo
        End If
    Next i
    
    Cancel = False
    
    Call ClearMenu
    CurrentProject.Connection.Execute _
        "exec dbo.ins_SYS_AuditUserLogout " & Me.iAuditUserID
    CurrentProject.CloseConnection
   
    . . .
                
End Sub

...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575097
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быкис... а ты разобрался с получением ролей с сервера?
я прошелся по вба у меня не коннектится на этой строчке (.connect)... вылетает на эрор

п.с. и еще... я так и не разобраля с загрузочной формой... после проверки всех библиотек (dlgStartup) открывается вторая форма dlgLogin и по нажатию на "подключиться" соединение происходит (появляется панель), но форма так и остается на экране в модальном режиме...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575112
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу соединения с сервером:
Во-первых, нужно указывать голоое имя сервера, а не всю строку подключения. Посмотрите, очему строка правильно не распарсилась.
Во-вторых, вижу в строке имя пользователя, а у меня все сделано через Windows аутентификацию, имя/пароль указывать нельзя.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575125
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаю, почему не распарсилась, я успел подправить гетцевский класс TaggedValues. Надо исправить 1 метод:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Public Property Let Text(value As String)
    ' Parse all the values out into
    ' text/value pairs.
    
    ' Look for mstrSeparator, and break up
    '  the string into x=y pairs. Then parse
    ' each of those, looking for equal signs.
    Dim varItems As Variant
    Dim varText As Variant
    Dim i As Integer, j As Integer
    Dim strTag As String
    Dim strValue As String
    
    On Error GoTo HandleErrors
    
    Set mcolItems = New Collection
    
    varItems = Split(value, mstrSeparator)
    For i = LBound(varItems) To UBound(varItems)
        varText = Split(varItems(i), "=")
        strTag = varText(LBound(varText))
        strValue = "" ' <<== вот этой строки не хватает.
        For j = LBound(varText) +  1  To UBound(varText)
            If Len(strValue) >  0  Then strValue = strValue & "="
            strValue = strValue & varText(j)
        Next j
        Call Add(strTag, strValue)
NextItem:
    Next i
    
ExitHere:
    Exit Property
    
HandleErrors:
    Select Case Err.number
        Case  9   ' Index out of bounds
            Resume NextItem
        Case Else
            Err.Raise Err.number, Err.Source, Err.Description
    End Select
End Property

...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575164
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не разобрался, их так тяну
Код: plaintext
1.
2.
3.
With oServer
    .LoginSecure = True
    .Connect ("BAZE\BAZE")
End With

А сам он почему-то не понимает мой инстанс с "\"... На всех остальных инстансах ("langai", "baze", "bychara") - вроде работает...

Насчёт логина - пишет Вигвам! Невышло подключение... Скакает на SetupProperty а потом на ерор.

ЗЫ: Щас буду смотреть чё там у тебя в последнем посте ж)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575180
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже самое с taggedValues..
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575183
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня все поехало... и роли получаю и загрузка базы теперь нормально проходит щас буду с шаблонами разбираться....
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575417
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такая проблема... при загрузке формы "Ошибка метаданных: не найден источник данных 'DocType'"
покапался в вб дошел до этого... отчего-то не попадают в селект данные...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575422
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tblDoc форма
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575465
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DiDisтакая проблема... при загрузке формы "Ошибка метаданных: не найден источник данных 'DocType'"
покапался в вб дошел до этого... отчего-то не попадают в селект данные...
Судя по картинкам Быкиса, у него эта форма работает. Сейчас подумаю...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575492
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DiDisтакая проблема... при загрузке формы "Ошибка метаданных: не найден источник данных 'DocType'"
покапался в вб дошел до этого... отчего-то не попадают в селект данные...
Проверь в Администрировании -> Настройка интерфейса по ролям -> Вкладка источники для форм

должна быть форма DocType.

Если она не там не прописана, то форма при заргузке не может взять свои данные.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34575583
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заработало! делаю дальше...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34577235
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что же, остался один шаг.

Источник данных с описанными полями есть. В источнике данных указано, какое поле (одно) является PK и какое Строковым Описанием (Alias). Например, для таблицы физ лиц Alias поле - это склеенные Фамилия Имя Отчество, для документов - Тип документа + его номер или исходящий номер и т.п.

Тип документа есть, Шаблон есть. В шаблон загружен размеченый закладками вордовский файл. Он разобран и для каждой закладки указано соответсвующее поле источника данных.

Через большую форму с типами, шаблонами, экземплярами открываем Карточку Шаблона.

В ней на вкладке Метаданные :
Проверить что все поля заполены.
Источник данных - описанный по полям запрос или таблица.
Базовая таблица - в случае запроса имя таблицы фактов для схемы звезда. Будут генерится динмаические "SELECT " "INSERT " с именем этой таблицы (примерно как однозначная таблица в аксесе)
Ключевое поле - поле PK в источнике
Поле представления - Alias поле в источнике
Таблица с экземплярами документов - имя таблицы, в которой есть поля ссылающиеся на таблицу документов.
Поле ссылки на документ - имя поля, в котором лежит такая ссылка.

Пояснения к последним двум пунктам.

У вас есть источник данных, служащий основой для формирования документов. Пусть для примера это будет картотека заявок на инвестиции. Есть сгенеренные экземпляры документов. Связь межжу этими понятиями работает в обе стороны. В таблице экземпляров документов есть поле, хранящее PK записи, по которой он был сгенерирован. И одновременно с генерацией документа PK этого экземпляра помещается в некую таблицу, некое поле. Вот эти таблица и поля как раз и указываются в последних двух полях. Честно говоря, пока у меня таблицы с экземлярами документов всегда совпадали с таблицами, являющимися источниками данными для формирования документов. Наверное и вам лучше сделать также. Для этого в таблице должно быть обычное целое поле, в которое будет помещаться PK свежеиспеченного экземпляра документа. Я его обычно называю iDocInstanceID.

На вкладке Файл шаблона :
Можно полюбоваться на свой файл шаблона с закладками, отредактировать его или закладки в нем.

На вкладке Заполнение шаблона :
Можно выполнить определение закладок из вордовского объекта и для каждой найденной закладочки определить поле источника данных.

На вкладке Экземпляры :
Дробавить новую запись.
Обязательно задать произвольный Код/шифр/номер документа, выбрать в поле "Запись" конкретную запись из источника данных. Поле "Описание" заполнить по вкусу.
Сохранить запись.
Открыть карточку экземпляра.

В форме Карточка экземпляра :

Вкладка Заполнение шаблона :
Нажать кнопку Подготовить данные для вставки в шаблон. Проверить, что все закладки заполнены данными (Значение поля).

Вкладка Формирование экземляра :
Нажать кнопку Сформировать по шаблону.
Дождаться пока будет ворд несколько раз откроется/закроется и появится экземпляр со вставленными данными. Во избежание коллизий перед началом не держите открытым ворд.
Вот собственно и финиш.

В качестве бесплатного бонуса можно подсоединить к этому документу отсканированную картинку с подписями, печатью и т.п. На следующей, последней вкладке Изображение документа .

Хоуп зис хелпс! Энджой!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34578395
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быкис! Заснул, что ли ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34578417
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОЙ! Ага, проспал Щас перечитаем
У меня интернета не было 3 часа, линию меняли. Щас скорость 4Mb/2Mb, разницы, если честно никакой.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34578576
sdfgsdfgsdf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, пинками не пинать :). Привет.
Чё это за штука-база такая, скриншоты которой Программист - Любитель во всю представляет ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34579302
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел продемонстировать пару интересных вещей и их взаимодействие. Если кратко - метаданные, управление пользователями, проверочные отчеты, генерация документов по шаблону.

Метаданные - получение списка полей, таблиц с SQL сервера и дополнение их еще кое-какой информацией.

Роли и пользователи - получение через SQL DMO с сервера и опять таки расширение по моей потребности. Аудит действий пользователей.

Управление доступом к данным на базе метаданных и данных о ролях/пользователях. Автматическая генерация триггеров, обеспечивающих аудит.

Генерация документов на базе шаблонов ворда (эдакое слияние) с использованием тех же метаданных.

Проверочные отчеты о полноте и непротиворечивости данных. Мышкой строится выражение WHERE. Выгрузка результатов в Excel. (NEW, в экземпляре Быкиса еще нету).
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34579309
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут комбу сделать не можешь, а он дразнится... ;)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34579331
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты шо уже домой упошол? А мне помогать кто будет?! Ладно, пойду и я. Что б завтра с утра мне там всё исправлено было!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34579334
sdfgsdfgsdf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiS Тут комбу сделать не можешь, а он дразнится... ;)

Я не про то, а про какой-то конструктор каких то запросов ,типа того...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34579346
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделал себе конструктор части WHERE запроса. Синтаксическое дерево выражения строится мышкой. Узлы - И, ИЛИ. Листья - функции и операции =, <>, <, >, IS NULL, IS DUPLICATE. В качестве операндов используются описанные в источниках данных поля.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34579818
DiDis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на формирование отчета такая ошибка...
вроде везде все нормально прошло... поля заполнились...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34579836
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соболезную. Трассируйте, определяйте где место ошибки. Так по описанию сам подсказать не могу - ФЫ8 нужен.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34579880
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще способ ловли ошибки: на этом окне сообщения нажать Ctl-Break. Провалитесь в исходный код функции вывода сообщения по ошибке. Нажимая ФЫ8 доходите до ее конца. Меделенно! Нажимаете ФЫ8. Попадаете во внешнюю (по стеку вызовов) программу, где и произошла ошибка. Там после вызова ErrorMessage будет срока типа
Код: plaintext
Resume Exit_Label
Непринужденным движением делаете из нее
Код: plaintext
Resume 'Exit_Label
и - вуаля - попадаете на ту строку где и стряслась беда. Осматриваетесь, проверяете значения объектов и переменных, морщите лоб и, вот оно! находите причину ошибки.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34580018
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительМеделенно! Нажимаете ФЫ8...и - вуаляКак на картинке
Программист-ЛюбительОсматриваетесь, проверяете значения объектов и переменных, морщите лобДа
Программист-Любительи, вот оно! находите причину ошибкиА вот тут вы и соврамши... Ничё мы не находим - по прежнему морщим лоб
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34580059
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохо морщил!

Либо wApp плохой, либо по Caption'у формы нужный документ в апликейшене не отыскивается.

Найди выше по тексту момент создания wApp. Поставь брекпоинт, проверь правильно ли создался. Посмотри коллекцию документов внутри апликейшена, найди есть ли там нужный и почему он из него не вытаскивается.

У меня это место работает.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34580109
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати почему нету установки библиотек? Я имею ввиду, если на компе нет SQLDMO.dll - то программа его и не добавляет... А надо бы ;)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34580205
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернёмся к получению ролей с сервера? Так и долджно быть?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34580208
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34580264
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это уже обсудили выше. Ашипка в классе TaggedValues. Есть точный рецепт исправления в этом топике.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34580304
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, укусил себя опять... Ненахожу IsLoaded. Хде оно?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34580312
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу. Нашёл, укусил, смотрю дальше.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34583244
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На форму frmSYS_SQL напросилось
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Sub cmdSendMassage_Click()
Dim sUser, sInMsg, sOutMsg As String

sUser = Mid(Me.grSYS_User.Form.sUserName, InStr(Me.grSYS_User.Form.sUserName, "\") +  1 )

sInMsg = InputBox( _
        "Введите текст сообщения." & vbNewLine & vbNewLine & _
        "При нажатии OK сообщение будет сразу же показано на мониторе пользователя," & vbNewLine & _
        "при нажатии CFNCEL действие будет отменено.", _
        "Сообщение для " & sUser, "Привет!")
            
If StrPtr(sInMsg) =  0  Then
    GoTo Exit_cmdSendMassage_Click
Else
    sOutMsg = sInMsg
End If

Call Shell("net send " & sUser & " " & sOutMsg,  1 )
            
Exit_cmdSendMassage_Click:
    Exit Sub

End Sub
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34583310
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, надо чат делать с возможность вставки ссылок на формы и конкретные записи за счет использования метаданных.

Кстати, после долгого и мучительного прохода по всем шагам изготовления экземпляра документа замечание. Это универсальный способ, почти не испоьзуемый обычными пользователями. В конкретных формах, относящихся к тому или бизнес процессу формирование документа происходит прозрачно для пользователя. Ввел данные по инвестиции, расчетному счету, ... нажал сделать распоряжение, записку, ... и бац! Готовый документ. Благо все уже настроено.

Вчера сделал архиинтересную весч.

У меня работает графический построитель части WHERE запросов. Но при добвалении новых функций, операций и т.п. иногда надо было добавлять и код, строящий выражение на SQL. Теперь не надо. Для операции задается шаблон формирования. Поясню:
3-х местная BETWEEN шаблон @1 @OP @2 AND @3 превращается в fld1 BETWEEN 1 AND 100
2-х местная LIKE шаблон @1 @OP @2 превращается в fld2 LIKE '%AAA%'
1 местная DUPLICATE (поиск записей имеющих более одного совпадения в данном поле)
шаблон @1 IS NOT NULL AND @1 IN (SELECT @1 FROM @DS WHERE @1 IS NOT NULL GROUP BY @1 HAVING COUNT(@1)>1)
превращается в
fld3 IS NOT NULL AND fld3 IN (SELECT fld3 FROM qrData WHERE fld3 IS NOT NULL GROUP BY fld3 HAVING COUNT(fld3)>1)

В твоем экземпляре БД этого еще не было.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34583383
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык это ж не чат! Это так... Туда же добавить окошко типо такого , куда сливать все ашипки (отвечающие категории важные или там по своему усмотрению), аудит юзеров и т.д. и т.п. (штобы сидеть и видеть всехние процессы). И иметь вохможность на них реагировать. С односторонней связью (какой же это чат?) - например слилось что продана жалюзя по цене меньше минимальной, и сразу месагу "Ты чё творишь, а? Ты чё беспределишь? Чё генерального на шугняк ставишь? Всё, хана тебе, крыса поднарная. Бью стрелу через час у меня в кабинете, и до выяснения ты отсраняешься от работы!"... Типа так :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34584878
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это просто побрюзжать перед выходными... Может я не прав, исправь.

А мне всё равно почему-то кажется, что моё горизонтальное разделение базы лучше. Хотя бы тем, что оно происходит на сервере. Всё что надо разделять, принадлежит к какому либо отделу и это указано в таблицах. Доступа к таблицам нет - только к вьюхам, в которых условие
Код: plaintext
WHERE iDeptID IN (SELECT iDeptID FROM dbo.MyDept() AS MD)
и сама
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE FUNCTION dbo.MyDept()
RETURNS TABLE
AS
RETURN (
SELECT iDeptID 
FROM dbo.SYS_SQLLoginsDepartments
WHERE (SQLLoginName = SYSTEM_USER) )

И второе - почему у тебя в тригерах
Код: plaintext
IF (COUNT(*) FROM inserted) >  0 
а не
Код: plaintext
IF EXISTS (SELECT TOP( 1 ) * FROM inserted)
Для гарантии? Мол, вы уверены, что больше нуля? Сначала пересчетайте точно сколько и уж потом сравните.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34589156
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пов. пр. - повис програмист Хомяков? :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34589301
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё бы меню в метаданные засунуть...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34590584
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От этого я никуда не денусь. Но из общего перечня нерешеных задач эта - не самая горячая.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34590846
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гы. Я уж подумал ты на Кипре... А ты оказывается с понедельника за компьютер и лаботать, лаботать...
Поделись потом идеями насчёт метаданных меню по ролям. А "Пов. пр." - это то и означает, что я написал? :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34601657
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если update делает тригер, это можно как-то отследить и енту операцию не аудитить?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34601678
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Ценой изменения кода триггера. Там есть глобальные не то ф-ии не то переменные отвечающие за вложенность триггеров друг в друга и за рекурсию триггеров.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34601701
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще похвастаюсь: немного доработал универсальный импорт из ексела.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34601992
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще там у тебя обучить всех sql юзать?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34603037
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕще похвастаюсь: немного доработал универсальный импорт из ексела.
А я наконец-то доковырялся до начала ковыряния procAuditGenerateTrigger...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34606704
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень даже хорошая идея. Главное, понравилось генеральному - он теперь сам может тригеры делать
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34606717
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начальству все данные сугубо ридоунли. Чтобы упаси бог какую кнопку не нажали.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34606752
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поподробнее пожалуйста... Во первых, начальство - это кто? Во вторых, поидее, начальство как раз наоборот должно иметь все права (возьми к примеру секурити груп - ентерпрайз админс) А кто у вас работает в "тригер генераторе"?
Поставил меня на шугняк, понимаешь.. Я теперь боюсь, чтоб "упаси бог какую кнопку не нажали" :)

PS: Попутно вопрос -
У тебя в метаданных роли, пользователи, схемы (и соответсвенно ихнии взаимосвязи) живут сами по себе? На SQL в реалиях всё живёт отдельно от тебя и по другому?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34606909
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вручную копируются из сервера при заведении новых ролей/пользователей.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34622334
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
760.
761.
762.
763.
764.
765.
766.
767.
768.
769.
770.
771.
772.
773.
774.
775.
776.
777.
778.
779.
780.
781.
782.
783.
784.
785.
786.
787.
788.
789.
790.
791.
792.
793.
794.
795.
796.
797.
798.
799.
800.
801.
802.
803.
804.
805.
806.
807.
808.
809.
810.
811.
812.
813.
814.
815.
816.
817.
818.
819.
820.
821.
822.
823.
824.
825.
826.
827.
828.
829.
830.
831.
832.
833.
834.
835.
836.
837.
838.
839.
840.
841.
842.
843.
844.
845.
846.
847.
848.
849.
850.
851.
852.
853.
854.
855.
856.
857.
858.
859.
860.
861.
862.
863.
864.
865.
866.
867.
868.
869.
870.
871.
872.
873.
874.
875.
876.
877.
878.
879.
880.
881.
882.
883.
884.
885.
886.
887.
888.
889.
890.
891.
892.
893.
894.
895.
896.
897.
898.
899.
900.
901.
902.
903.
904.
905.
906.
907.
908.
909.
910.
911.
912.
913.
914.
915.
916.
917.
918.
919.
920.
921.
922.
923.
924.
925.
926.
927.
928.
929.
930.
931.
932.
933.
934.
935.
936.
937.
938.
939.
940.
941.
942.
943.
944.
945.
946.
947.
948.
949.
950.
951.
952.
953.
954.
955.
956.
957.
958.
959.
960.
961.
962.
963.
964.
965.
966.
967.
968.
969.
970.
971.
972.
973.
974.
975.
976.
977.
978.
979.
980.
981.
982.
983.
984.
985.
986.
987.
988.
989.
990.
991.
992.
993.
994.
995.
996.
997.
998.
999.
1000.
1001.
1002.
1003.
1004.
1005.
1006.
1007.
1008.
1009.
1010.
1011.
1012.
1013.
1014.
1015.
1016.
1017.
1018.
1019.
1020.
1021.
1022.
1023.
1024.
1025.
1026.
1027.
1028.
1029.
1030.
1031.
1032.
1033.
1034.
1035.
1036.
1037.
1038.
1039.
1040.
1041.
1042.
1043.
1044.
1045.
1046.
1047.
1048.
1049.
1050.
1051.
1052.
1053.
1054.
1055.
1056.
1057.
1058.
1059.
1060.
1061.
1062.
1063.
1064.
1065.
1066.
1067.
1068.
1069.
1070.
1071.
1072.
1073.
1074.
1075.
1076.
1077.
1078.
1079.
1080.
1081.
1082.
1083.
1084.
1085.
1086.
1087.
1088.
1089.
1090.
1091.
1092.
1093.
1094.
1095.
1096.
1097.
1098.
1099.
1100.
1101.
1102.
1103.
1104.
1105.
1106.
1107.
1108.
1109.
1110.
1111.
1112.
1113.
1114.
1115.
1116.
1117.
1118.
1119.
1120.
1121.
1122.
1123.
1124.
1125.
1126.
1127.
1128.
1129.
1130.
1131.
1132.
1133.
1134.
1135.
1136.
1137.
1138.
1139.
1140.
1141.
1142.
1143.
1144.
1145.
1146.
1147.
1148.
1149.
1150.
1151.
1152.
1153.
1154.
1155.
1156.
1157.
1158.
1159.
1160.
1161.
1162.
1163.
1164.
1165.
1166.
1167.
1168.
1169.
1170.
1171.
1172.
1173.
1174.
1175.
1176.
1177.
1178.
1179.
1180.
1181.
1182.
1183.
1184.
1185.
1186.
1187.
1188.
1189.
1190.
1191.
1192.
1193.
1194.
1195.
1196.
1197.
1198.
1199.
1200.
1201.
1202.
1203.
1204.
1205.
1206.
1207.
1208.
1209.
1210.
1211.
1212.
1213.
1214.
1215.
1216.
1217.
1218.
1219.
1220.
1221.
1222.
1223.
1224.
1225.
1226.
1227.
1228.
1229.
1230.
1231.
1232.
1233.
1234.
1235.
1236.
1237.
1238.
1239.
1240.
1241.
1242.
1243.
1244.
1245.
1246.
1247.
1248.
1249.
1250.
1251.
1252.
1253.
1254.
1255.
1256.
1257.
1258.
1259.
1260.
1261.
1262.
1263.
1264.
1265.
1266.
1267.
1268.
1269.
1270.
1271.
1272.
1273.
1274.
1275.
1276.
1277.
1278.
1279.
1280.
1281.
1282.
1283.
1284.
1285.
1286.
1287.
1288.
1289.
1290.
1291.
1292.
1293.
1294.
1295.
1296.
1297.
1298.
1299.
1300.
1301.
1302.
1303.
1304.
1305.
1306.
1307.
1308.
1309.
1310.
1311.
1312.
1313.
1314.
1315.
1316.
1317.
1318.
1319.
1320.
1321.
1322.
1323.
1324.
1325.
1326.
1327.
1328.
1329.
1330.
1331.
1332.
1333.
1334.
1335.
1336.
1337.
1338.
1339.
1340.
1341.
1342.
1343.
1344.
1345.
1346.
1347.
1348.
1349.
1350.
1351.
1352.
1353.
1354.
1355.
1356.
1357.
1358.
1359.
1360.
1361.
1362.
1363.
1364.
1365.
1366.
1367.
1368.
1369.
1370.
1371.
1372.
1373.
1374.
1375.
1376.
1377.
1378.
1379.
1380.
1381.
1382.
1383.
1384.
1385.
1386.
1387.
1388.
1389.
1390.
1391.
1392.
1393.
1394.
1395.
1396.
1397.
1398.
1399.
1400.
1401.
1402.
1403.
1404.
1405.
1406.
1407.
1408.
1409.
1410.
1411.
1412.
1413.
1414.
1415.
1416.
1417.
1418.
1419.
1420.
1421.
1422.
1423.
1424.
1425.
1426.
1427.
1428.
1429.
1430.
1431.
1432.
1433.
1434.
1435.
1436.
1437.
1438.
1439.
1440.
1441.
1442.
1443.
1444.
1445.
1446.
1447.
1448.
1449.
1450.
1451.
1452.
1453.
1454.
1455.
1456.
1457.
1458.
1459.
1460.
1461.
1462.
1463.
1464.
1465.
1466.
1467.
1468.
1469.
1470.
1471.
1472.
1473.
1474.
1475.
1476.
1477.
1478.
1479.
1480.
1481.
1482.
1483.
1484.
1485.
1486.
1487.
1488.
1489.
1490.
1491.
1492.
1493.
1494.
1495.
1496.
1497.
1498.
1499.
1500.
1501.
1502.
1503.
1504.
1505.
1506.
1507.
1508.
1509.
1510.
1511.
1512.
1513.
1514.
1515.
1516.
1517.
1518.
1519.
1520.
1521.
1522.
1523.
1524.
1525.
1526.
1527.
1528.
1529.
1530.
1531.
1532.
1533.
1534.
1535.
1536.
1537.
1538.
1539.
1540.
1541.
1542.
1543.
1544.
1545.
1546.
1547.
1548.
1549.
1550.
1551.
1552.
1553.
1554.
1555.
1556.
1557.
1558.
1559.
1560.
1561.
1562.
1563.
1564.
1565.
1566.
1567.
1568.
1569.
1570.
1571.
1572.
1573.
1574.
1575.
1576.
1577.
1578.
1579.
1580.
1581.
1582.
1583.
1584.
1585.
1586.
1587.
1588.
1589.
1590.
1591.
1592.
1593.
1594.
1595.
1596.
1597.
1598.
1599.
1600.
1601.
1602.
1603.
1604.
1605.
1606.
1607.
1608.
1609.
1610.
1611.
1612.
1613.
1614.
1615.
1616.
1617.
1618.
1619.
1620.
1621.
1622.
1623.
1624.
1625.
1626.
1627.
1628.
1629.
1630.
1631.
1632.
1633.
1634.
1635.
1636.
1637.
1638.
1639.
1640.
1641.
1642.
1643.
1644.
1645.
1646.
1647.
1648.
1649.
1650.
1651.
1652.
1653.
1654.
1655.
1656.
1657.
1658.
1659.
1660.
1661.
1662.
1663.
1664.
1665.
1666.
1667.
1668.
1669.
1670.
1671.
1672.
1673.
1674.
1675.
1676.
1677.
1678.
1679.
1680.
1681.
1682.
1683.
1684.
1685.
1686.
1687.
1688.
1689.
1690.
1691.
1692.
1693.
1694.
1695.
1696.
1697.
1698.
1699.
1700.
1701.
1702.
1703.
1704.
1705.
1706.
1707.
1708.
1709.
1710.
1711.
1712.
1713.
1714.
1715.
1716.
1717.
1718.
1719.
1720.
1721.
1722.
1723.
1724.
1725.
1726.
1727.
1728.
1729.
1730.
1731.
1732.
1733.
1734.
1735.
1736.
1737.
1738.
1739.
1740.
1741.
1742.
1743.
1744.
1745.
1746.
1747.
1748.
1749.
1750.
1751.
1752.
1753.
1754.
1755.
1756.
1757.
1758.
1759.
1760.
1761.
1762.
1763.
1764.
1765.
1766.
1767.
1768.
1769.
1770.
1771.
1772.
1773.
1774.
1775.
1776.
1777.
1778.
1779.
1780.
1781.
1782.
1783.
1784.
1785.
1786.
1787.
1788.
1789.
1790.
1791.
1792.
1793.
1794.
1795.
1796.
1797.
1798.
1799.
1800.
1801.
1802.
1803.
1804.
1805.
1806.
1807.
1808.
1809.
1810.
1811.
1812.
1813.
1814.
1815.
1816.
1817.
1818.
1819.
1820.
1821.
1822.
1823.
1824.
1825.
1826.
1827.
1828.
1829.
1830.
1831.
1832.
1833.
1834.
1835.
1836.
1837.
1838.
1839.
1840.
1841.
1842.
1843.
1844.
1845.
1846.
1847.
1848.
1849.
1850.
1851.
1852.
1853.
1854.
1855.
1856.
1857.
1858.
1859.
1860.
1861.
1862.
1863.
1864.
1865.
1866.
1867.
1868.
1869.
1870.
1871.
1872.
1873.
1874.
1875.
1876.
1877.
1878.
1879.
1880.
1881.
1882.
1883.
1884.
1885.
1886.
1887.
1888.
1889.
1890.
1891.
1892.
1893.
1894.
1895.
1896.
1897.
1898.
1899.
1900.
1901.
1902.
1903.
1904.
1905.
1906.
1907.
1908.
1909.
1910.
1911.
1912.
1913.
1914.
1915.
1916.
1917.
1918.
1919.
1920.
1921.
1922.
1923.
1924.
1925.
1926.
1927.
1928.
1929.
1930.
1931.
1932.
1933.
1934.
1935.
1936.
1937.
1938.
1939.
1940.
1941.
1942.
1943.
1944.
1945.
1946.
1947.
1948.
1949.
1950.
1951.
1952.
1953.
1954.
1955.
1956.
1957.
1958.
1959.
1960.
1961.
1962.
1963.
1964.
1965.
1966.
1967.
1968.
1969.
1970.
1971.
1972.
1973.
1974.
1975.
1976.
1977.
1978.
1979.
1980.
1981.
1982.
1983.
1984.
1985.
1986.
1987.
1988.
1989.
1990.
1991.
1992.
1993.
1994.
1995.
1996.
1997.
1998.
1999.
2000.
2001.
2002.
2003.
2004.
2005.
2006.
2007.
2008.
2009.
2010.
2011.
2012.
2013.
2014.
2015.
2016.
2017.
2018.
2019.
2020.
2021.
2022.
2023.
2024.
2025.
2026.
2027.
2028.
2029.
2030.
2031.
2032.
2033.
2034.
2035.
2036.
2037.
2038.
2039.
2040.
2041.
2042.
2043.
2044.
2045.
2046.
2047.
2048.
2049.
2050.
2051.
2052.
2053.
2054.
2055.
2056.
2057.
2058.
2059.
2060.
2061.
2062.
2063.
2064.
2065.
2066.
2067.
2068.
2069.
2070.
2071.
2072.
2073.
2074.
2075.
2076.
2077.
2078.
2079.
2080.
2081.
2082.
2083.
2084.
2085.
2086.
2087.
2088.
2089.
2090.
2091.
2092.
2093.
2094.
2095.
2096.
2097.
2098.
2099.
2100.
2101.
2102.
2103.
2104.
2105.
2106.
2107.
2108.
2109.
2110.
2111.
2112.
2113.
2114.
2115.
2116.
2117.
2118.
2119.
2120.
2121.
2122.
2123.
2124.
2125.
2126.
2127.
2128.
2129.
2130.
2131.
2132.
2133.
2134.
2135.
2136.
2137.
2138.
2139.
2140.
2141.
2142.
2143.
2144.
2145.
2146.
2147.
2148.
2149.
2150.
2151.
2152.
2153.
2154.
2155.
2156.
2157.
2158.
2159.
2160.
2161.
2162.
2163.
2164.
2165.
2166.
2167.
2168.
2169.
2170.
2171.
2172.
2173.
2174.
2175.
2176.
2177.
2178.
2179.
2180.
2181.
2182.
2183.
2184.
2185.
2186.
2187.
2188.
2189.
2190.
2191.
2192.
2193.
2194.
2195.
2196.
2197.
2198.
2199.
2200.
2201.
2202.
2203.
2204.
2205.
2206.
2207.
2208.
2209.
2210.
2211.
2212.
2213.
2214.
2215.
2216.
2217.
2218.
2219.
2220.
2221.
2222.
2223.
2224.
2225.
2226.
2227.
2228.
2229.
2230.
2231.
2232.
2233.
2234.
2235.
2236.
2237.
2238.
2239.
2240.
2241.
2242.
2243.
2244.
2245.
2246.
2247.
2248.
2249.
2250.
2251.
2252.
2253.
2254.
2255.
2256.
2257.
2258.
2259.
2260.
2261.
2262.
2263.
2264.
2265.
2266.
2267.
2268.
2269.
2270.
2271.
2272.
2273.
2274.
2275.
2276.
2277.
2278.
2279.
2280.
2281.
2282.
2283.
2284.
2285.
2286.
2287.
2288.
2289.
2290.
2291.
2292.
2293.
2294.
2295.
2296.
2297.
2298.
2299.
2300.
2301.
2302.
2303.
2304.
2305.
2306.
2307.
2308.
2309.
2310.
2311.
2312.
2313.
2314.
2315.
2316.
2317.
2318.
2319.
2320.
2321.
2322.
2323.
2324.
2325.
2326.
2327.
2328.
2329.
2330.
2331.
2332.
2333.
2334.
2335.
2336.
2337.
2338.
2339.
2340.
2341.
2342.
2343.
2344.
2345.
2346.
2347.
2348.
2349.
2350.
2351.
2352.
2353.
2354.
2355.
2356.
2357.
2358.
2359.
2360.
2361.
2362.
2363.
2364.
2365.
2366.
2367.
2368.
2369.
2370.
2371.
2372.
2373.
2374.
2375.
2376.
2377.
2378.
2379.
2380.
2381.
2382.
2383.
2384.
2385.
2386.
2387.
2388.
2389.
2390.
2391.
2392.
2393.
2394.
2395.
2396.
2397.
2398.
2399.
2400.
2401.
2402.
2403.
2404.
2405.
2406.
2407.
2408.
2409.
2410.
2411.
2412.
2413.
2414.
2415.
2416.
2417.
2418.
2419.
2420.
2421.
2422.
2423.
2424.
2425.
2426.
2427.
2428.
2429.
2430.
2431.
2432.
2433.
2434.
2435.
2436.
2437.
2438.
2439.
2440.
2441.
2442.
2443.
2444.
2445.
2446.
2447.
2448.
2449.
2450.
2451.
2452.
2453.
2454.
2455.
2456.
2457.
2458.
2459.
2460.
2461.
2462.
2463.
2464.
2465.
2466.
2467.
2468.
2469.
2470.
2471.
2472.
2473.
2474.
2475.
2476.
2477.
2478.
2479.
2480.
2481.
2482.
2483.
2484.
2485.
2486.
2487.
2488.
2489.
2490.
2491.
2492.
2493.
2494.
2495.
2496.
2497.
2498.
2499.
2500.
2501.
2502.
2503.
2504.
2505.
2506.
2507.
2508.
2509.
2510.
2511.
2512.
2513.
2514.
2515.
2516.
2517.
2518.
2519.
2520.
2521.
2522.
2523.
2524.
2525.
2526.
2527.
2528.
2529.
2530.
2531.
2532.
2533.
2534.
2535.
2536.
2537.
2538.
2539.
2540.
2541.
Option Compare Database
Option Explicit

'============================================================================
'   Тяжелая форма-карточка, вложенная в форму-эксплорер like
'============================================================================

Public WithEvents PersonGrid As Form
Public WithEvents CustomerChildGrid As Form
Public WithEvents InvestmentGrid As Form
Public WithEvents AccountGrid As Form
Public WithEvents RaitingGrid As Form
Public WithEvents CustomerHistoryGrid As Form
Public WithEvents CustomerSourceGrid As Form

Dim rsFind As ADODB.Recordset
Public bQueryUpdate As Boolean
Dim bLoading As Boolean
Public iTabIndex As Integer

Private Sub Form_Current()

    If bLoading Then Exit Sub
    Me.Painting = False
    
    On Error Resume Next
    Me!sTop.ForeColor =  16711680  ' синий
    Me!lblTop.ForeColor =  16711680  ' синий
    bQueryUpdate = True
    Dim s: s = Me.ActiveControl.Name
    Me!btnTransparent.SetFocus
    modCustomer.SetupCustomerForm Me
    Me.Controls(s).SetFocus
    On Error GoTo  0 
    
    On Error Resume Next
    If Me.Recordset.EOF And Me.Recordset.BOF Or Me.NewRecord Then
        Me.Parent.lblSub.Visible = True
        Me.Parent.Controls("subCustomer").Visible = False
    Else
        Me.Parent.lblSub.Visible = False
        Me.Parent.Controls("subCustomer").Visible = True
    End If
    On Error GoTo  0 
    
    Me.Painting = True

End Sub

Private Sub Form_AfterInsert()

    modCustomer.HandleAfterInsert Me
    Call Form_Current
    
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)

    If bQueryUpdate Then Call modMessage.QueryUpdate(Cancel)
    modCustomer.CheckOGRN Me, Cancel
    modCustomer.CheckINN Me, Cancel
    modCustomer.CheckBIK Me, Cancel
    If Cancel Then Exit Sub
    If Me.NewRecord Then Exit Sub
        
    Dim bSaveHistory As Boolean: bSaveHistory = False
    modCustomer.CheckSaveHistory Me, bSaveHistory
    If Not bSaveHistory Then Exit Sub
    modCustomer.SaveHistory Me

End Sub

Private Sub Form_AfterUpdate()

    Me.Painting = False
    Call modCustomer.SetupCustomerForm(Me)
    Me.Painting = True

End Sub

Private Sub Form_Load()
On Error GoTo err_label

    bLoading = True
    Me.TimerInterval =  100 : Me.OnTimer = "[Event Procedure]"
    
exit_label:
    Exit Sub
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Sub

Private Sub Form_Resize()

    Dim s: s = ""
    On Error Resume Next
    s = Me.Parent.Name
    On Error GoTo  0 
    If Len(s) =  0  Then
        ResizeSubForm Me.InsideHeight, Me.InsideWidth
    End If

End Sub

Private Sub Form_Timer()
On Error GoTo err_label

    bLoading = True
    iTabIndex =  0 
    Me.TimerInterval =  0 : Me.OnTimer = ""
    Me.Repaint: Me.Painting = False
    
DoCmd.Hourglass True

    modSYS.SetList Me!lstSort_Person, "PersonPositionOrderBy"
    modSYS.SetList Me!lstFilter_Person, "PersonPositionGEFilter"
    modSYS.SetList Me!iCustomerParentID, "CustomerList"
    
    modSYS.SetList Me!lstSort_InqueryInvestment, "InqueryInvestmentOrderBy"
    modSYS.SetList Me!sInstrumentTypeCode, "InstrumentTypeFilter"
    modSYS.SetList Me!sInqueryInvestmentStatusCode, "InqueryInvestmentStatusFilter"
    modSYS.SetList Me!iCustomerBankID_InqueryInvestment, "CustomerBankFilter"
    modSYS.SetList Me!sInstrumentTypeCode, "InstrumentTypeFilter"
    
    modSYS.SetList Me!lstSort_InqueryAccount, "InqueryAccountOrderBy"
    modSYS.SetList Me!sInqueryAccountStatusCode, "InqueryAccountStatusFilter"
    modSYS.SetList Me!iCustomerBankID_InqueryAccount, "CustomerBankFilter"
    
    Me!lstSort_Person = Me!lstSort_Person.ItemData( 0 )
    Me!lstFilter_Person = Me!lstFilter_Person.ItemData( 0 )
    Me!optFilter_Person = False
    Me!optFilter_Person.Enabled = False
    Me!btnQuickFind_Person.Enabled = False
    
    Me!lstSort_InqueryInvestment = Me!lstSort_InqueryInvestment.ItemData( 0 )
    Me!optFilter_InqueryInvestment = False
    Me!optFilter_InqueryInvestment.Enabled = False
    Me!btnQuickFind_InqueryInvestment.Enabled = False
    
    Me!lstSort_InqueryAccount = Me!lstSort_InqueryAccount.ItemData( 0 )
    Me!optFilter_InqueryAccount = False
    Me!optFilter_InqueryAccount.Enabled = False
    Me!btnQuickFind_InqueryAccount.Enabled = False
    
    Call RequeryData
    bLoading = False
    Call Form_Current

    Me.Painting = True: Me.Repaint

Application.Echo True
DoCmd.Hourglass False
    
exit_label:
    Exit Sub

err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Sub

'===========================================================
'   Main Form - Загрузка данных
'===========================================================
Public Function MakeSQL() As String
On Error GoTo err_label

    MakeSQL = modSYS.FormRecordSource("CustomerAll", "", "")
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function RequeryData()

    Me.RecordSource = MakeSQL

End Function

'===========================================================
'   Sub 2 Customer - Загрузка данных
'===========================================================
Public Function MakeSQL_Customer() As String
On Error GoTo err_label

    MakeSQL_Customer = modSYS.FormRecordSource _
        ("Customer", "", "")
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function RequeryData_Customer()
On Error GoTo err_label

    DoCmd.Hourglass True
    With Me!grcCustomerChild
        If Me.ActiveControl.Name = "grcCustomerChild" Then
            Me!btnTransparent.SetFocus
        End If
        .Visible = False
        .Form.RecordSource = MakeSQL_Customer
        .Visible = True
    End With
    DoCmd.Hourglass False

exit_label:
    Exit Function

err_label:
    Me!grcCustomerChild.Visible = True
    DoCmd.Hourglass False
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume 'exit_label

End Function

'===========================================================
'   Sub 3 Person - Загрузка данных
'===========================================================
Public Function MakeWhere_Person() As String

    MakeWhere_Person = ""
    
    If Me!optFilter_Person Then
        If Me!txtQuickFind_Person <> "" Then
            MakeWhere_Person = _
                "(sPersonName1 LIKE '%" & Me!txtQuickFind_Person & "%' OR " & _
                "sPersonName2 LIKE '%" & Me!txtQuickFind_Person & "%' OR " & _
                "sPersonName3 LIKE '%" & Me!txtQuickFind_Person & "%' OR " & _
                "sPersonPositionCode LIKE '%" & Me!txtQuickFind_Person & "%')"
        End If
    End If

    '   SELECT 0 AS iPersonPositionID, '<Все записи>' AS sPersonPositionCode, 0 AS iPersonPositionRank
    '   UNION ALL SELECT iPersonPositionID, sPersonPositionCode, iPersonPositionRank
    '   FROM TBD_PersonPosition
    '   ORDER BY iPersonPositionRank
    If Me!lstFilter_Person <=  0  Then
        MakeWhere_Person = MakeWhere_Person
    Else
        If Len(MakeWhere_Person) >  0  Then MakeWhere_Person = MakeWhere_Person & " AND "
        MakeWhere_Person = MakeWhere_Person & _
            "(iPersonPositionRank<=" & Me!lstFilter_Person.Column( 2 ) & ")"
    End If
    
End Function

Public Function MakeOrderBy_Person() As String

    MakeOrderBy_Person = Nz(Me!lstSort_Person.Column( 2 ), "")
    
End Function

Public Function MakeSQL_Person() As String

    MakeSQL_Person = modSYS.FormRecordSource( _
        "CustomerPerson", _
        MakeWhere_Person, _
        MakeOrderBy_Person)
    
End Function

Public Function RequeryData_Person()

    DoCmd.Hourglass True
    With Me!grcPerson
        Me!btnTransparent.SetFocus
        .Visible = False
        Me.Repaint: Me.Painting = False
        .Form.RecordSource = MakeSQL_Person
        Me!btnOpenPerson.Enabled = _
            .Form.Recordset.RecordCount >  0  _
            And Not .Form.Recordset.BOF _
            And Not .Form.Recordset.EOF
        .Visible = True
        .SetFocus
    End With
    Me.Painting = True
    DoCmd.Hourglass False

exit_label:
    Exit Function

err_label:
    Me!grcPerson.Visible = True
    DoCmd.Hourglass False
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

'===========================================================
'   Sub 7 Investment - Загрузка данных
'===========================================================
Public Function MakeWhere_InqueryInvestment() As String
On Error GoTo err_label

    Dim s As String: s = ""

    If Nz(Me!optFilter_InqueryInvestment, False) Then
        If Me!txtQuickFind_InqueryInvestment <> "" Then
            s = _
                "(sCustomerFilialName LIKE '%" & Me!txtQuickFind_InqueryInvestment.value & "%' OR " & _
                "sCustomerFilialReportName LIKE '%" & Me!txtQuickFind_InqueryInvestment.value & "%' OR " & _
                "sCustomerBankName LIKE '%" & Me!txtQuickFind_InqueryInvestment.value & "%' OR " & _
                "sCustomerBankReportName LIKE '%" & Me!txtQuickFind_InqueryInvestment.value & "%' OR " & _
                "sInqueryInvestmentOutCode LIKE '%" & Me!txtQuickFind_InqueryInvestment.value & "%' OR " & _
                "sInstrumentTypeName LIKE '%" & Me!txtQuickFind_InqueryInvestment.value & "%')"
        End If
    End If

    Select Case Me!sInqueryInvestmentStatusCode
    Case "<Все>"
        s = s
    Case Else
        If DCount( _
            "*", "DIC_InqueryInvestmentStatus", _
            "sInqueryInvestmentStatusCode='" & Me!sInqueryInvestmentStatusCode & "'" _
        ) =  1  Then
            If Len(s) >  0  Then s = s & " AND "
            s = s & "(sInqueryInvestmentStatusCode='" & Me!sInqueryInvestmentStatusCode & "')"
        Else
            If Len(s) >  0  Then s = s & " AND "
            s = s & Me!sInqueryInvestmentStatusCode
        End If
    End Select
    
    Dim sCustomerField As String
    If Me!sCustomerCreditFlag = "Y" Then
        sCustomerField = "iCustomerFilialID"
    ElseIf Me!iCustomerFilialLevel =  3  Then
        sCustomerField = "iCustomerBankID"
    End If
    
    Select Case Me!iCustomerBankID_InqueryInvestment
    Case  0 , - 1 :
        s = s
    Case Else:
        If Len(s) >  0  Then s = s & " AND "
        s = s & "(" & sCustomerField & "=" & Me!iCustomerBankID_InqueryInvestment & ")"
    End Select
    Select Case Me!sInstrumentTypeCode
    Case "<Все>":
        s = s
    Case Else:
        If Len(s) >  0  Then s = s & " AND "
        s = s & "(sInstrumentTypeCode='" & Me!sInstrumentTypeCode & "')"
    End Select
    
    MakeWhere_InqueryInvestment = s

exit_label:
    Exit Function
err_label:
    If Err.number =  2427  Then
        'Введенное выражение не содержит значения.
        Resume Next
    Else
        Call modError.ErrorMessage(Err.number, Err.Description)
        Resume 'exit_label
    End If

End Function

Public Function MakeOrderBy_InqueryInvestment() As String
On Error GoTo err_label

    MakeOrderBy_InqueryInvestment = Me!lstSort_InqueryInvestment.Column( 2 )
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function MakeSQL_InqueryInvestment() As String
On Error GoTo err_label

    Dim sWhere As String, sOrderBy As String
    Dim sFormWhere As String, sFormSource As String, sFormOrderBy As String
    Dim sControlWhere As String, sControlOrderBy As String
    
    sWhere = ""
    sOrderBy = ""
    modSYS.FormInfo "InqueryInvestment", sFormSource, sFormWhere, sFormOrderBy
    sControlWhere = MakeWhere_InqueryInvestment
    sControlOrderBy = MakeOrderBy_InqueryInvestment
    
    If Len(sFormWhere) >  0  Then sWhere = "(" & sFormWhere & ")"
    If Len(sControlWhere) >  0  Then
        If Len(sWhere) >  0  Then sWhere = sWhere & " AND "
        sWhere = sWhere & "(" & sControlWhere & ")"
    End If
    
    If Len(sControlOrderBy) >  0  Then
        sOrderBy = sControlOrderBy
    Else
        If Len(sFormOrderBy) >  0  Then
            If Len(sOrderBy) >  0  Then sOrderBy = sOrderBy & ", "
            sOrderBy = sOrderBy & sFormOrderBy
        End If
    End If
    
    If Len(sWhere) >  0  Then sWhere = "WHERE " & sWhere
    If Len(sOrderBy) >  0  Then sOrderBy = "ORDER BY " & sOrderBy
    MakeSQL_InqueryInvestment = "SELECT * FROM " & sFormSource & " " & sWhere & " " & sOrderBy
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function RequeryData_InqueryInvestment()
On Error GoTo err_label

    On Error Resume Next
    Me.Repaint: DoEvents

    With Me!grcInqueryInvestment.Form
        .RecordSource = MakeSQL_InqueryInvestment
        If .Recordset.RecordCount >  0  Then
            .Recordset.MoveLast
        End If
    End With

    Me.Repaint: DoEvents
    On Error GoTo  0 

exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

'===========================================================
'   Sub 8 Account - Загрузка данных
'===========================================================
Public Function MakeWhere_InqueryAccount() As String
On Error GoTo err_label

    Dim s As String: s = ""

    If Nz(Me!optFilter_InqueryAccount, False) Then
        If Nz(Me!txtQuickFind_InqueryAccount, "") <> "" Then
            s = _
                "(sCustomerFilialName LIKE '%" & Me!txtQuickFind_InqueryAccount.value & "%' OR " & _
                "sCustomerFilialReportName LIKE '%" & Me!txtQuickFind_InqueryAccount.value & "%' OR " & _
                "sCustomerBankName LIKE '%" & Me!txtQuickFind_InqueryAccount.value & "%' OR " & _
                "sCustomerBankReportName LIKE '%" & Me!txtQuickFind_InqueryAccount.value & "%' OR " & _
                "sInqueryAccountOutCode LIKE '%" & Me!txtQuickFind_InqueryAccount.value & "%')"
        End If
    End If

    Select Case Nz(Me!sInqueryAccountStatusCode, "<Все>")
    Case "<Все>"
        s = s
    Case Else
        If DCount( _
            "*", "DIC_InqueryAccountStatus", _
            "sInqueryAccountStatusCode='" & Me!sInqueryAccountStatusCode & "'" _
        ) =  1  Then
            If Len(s) >  0  Then s = s & " AND "
            s = s & "(sInqueryAccountStatusCode='" & Me!sInqueryAccountStatusCode & "')"
        Else
            If Len(s) >  0  Then s = s & " AND "
            s = s & Me!sInqueryAccountStatusCode
        End If
    End Select
    
    Dim sCustomerField As String
    If Me!sCustomerCreditFlag = "Y" Then
        sCustomerField = "iCustomerFilialID"
    ElseIf Me!iCustomerFilialLevel =  3  Then
        sCustomerField = "iCustomerBankID"
    End If
    
    Select Case Me!iCustomerBankID_InqueryAccount
    Case  0 , - 1 :
        s = s
    Case Else:
        If Len(s) >  0  Then s = s & " AND "
        s = s & "(" & sCustomerField & "=" & Me!iCustomerBankID_InqueryAccount & ")"
    End Select
    Select Case Me!sInstrumentTypeCode
    Case "<Все>":
        s = s
    Case Else:
        If Len(s) >  0  Then s = s & " AND "
        s = s & "(sInstrumentTypeCode='" & Me!sInstrumentTypeCode & "')"
    End Select
    
    MakeWhere_InqueryAccount = s

exit_label:
    Exit Function

err_label:
    If Err.number =  2427  Then
        'Введенное выражение не содержит значения.
        Resume Next
    Else
        Call modError.ErrorMessage(Err.number, Err.Description)
        Resume exit_label
    End If

End Function

Public Function MakeOrderBy_InqueryAccount() As String
On Error GoTo err_label

    MakeOrderBy_InqueryAccount = Nz(Me!lstSort_InqueryAccount.Column( 2 ), "")
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function MakeSQL_InqueryAccount() As String
On Error GoTo err_label

    Dim sWhere As String, sOrderBy As String
    Dim sFormWhere As String, sFormSource As String, sFormOrderBy As String
    Dim sControlWhere As String, sControlOrderBy As String
    
    sWhere = ""
    sOrderBy = ""
    modSYS.FormInfo "InqueryAccount", sFormSource, sFormWhere, sFormOrderBy
    sControlWhere = MakeWhere_InqueryAccount
    sControlOrderBy = MakeOrderBy_InqueryAccount
    
    If Len(sFormWhere) >  0  Then sWhere = "(" & sFormWhere & ")"
    If Len(sControlWhere) >  0  Then
        If Len(sWhere) >  0  Then sWhere = sWhere & " AND "
        sWhere = sWhere & "(" & sControlWhere & ")"
    End If
    
    If Len(sControlOrderBy) >  0  Then
        sOrderBy = sControlOrderBy
    Else
        If Len(sFormOrderBy) >  0  Then
            If Len(sOrderBy) >  0  Then sOrderBy = sOrderBy & ", "
            sOrderBy = sOrderBy & sFormOrderBy
        End If
    End If
    
    If Len(sWhere) >  0  Then sWhere = "WHERE " & sWhere
    If Len(sOrderBy) >  0  Then sOrderBy = "ORDER BY " & sOrderBy
    MakeSQL_InqueryAccount = "SELECT * FROM " & sFormSource & " " & sWhere & " " & sOrderBy
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function RequeryData_InqueryAccount()

    On Error Resume Next
    Me.Repaint: DoEvents

    With Me!grcInqueryAccount.Form
        .RecordSource = MakeSQL_InqueryAccount
        If .Recordset.RecordCount >  0  Then .Recordset.MoveLast
    End With

    Me.Repaint: DoEvents
    On Error GoTo  0 

exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

'===========================================================
'   Sub 9 Raiting - Загрузка данных
'===========================================================
Public Function MakeSQL_Raiting() As String
On Error GoTo err_label

    MakeSQL_Raiting = modSYS.FormRecordSource("CustomerRaitingBase", "", "")
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function RequeryData_Raiting()
On Error GoTo err_label

    DoCmd.Hourglass True
    With Me!grcRaiting
        If Me.ActiveControl.Name = "grcRaiting" Then Me!btnTransparent.SetFocus
        .Visible = False
        .Form.RecordSource = MakeSQL_Raiting
        .Visible = True
    End With
    DoCmd.Hourglass False

exit_label:
    Exit Function

err_label:
    Me!grcRaiting.Visible = True
    DoCmd.Hourglass False
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

'===========================================================
'   Sub 10 CustomerHistory - Загрузка данных
'===========================================================
Public Function MakeSQL_CustomerHistory() As String
On Error GoTo err_label

    MakeSQL_CustomerHistory = modSYS.FormRecordSource("CustomerHistoryBase", "", "")
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function RequeryData_CustomerHistory()
On Error GoTo err_label

    DoCmd.Hourglass True
    With Me!grcCustomerHistory
        If Me.ActiveControl.Name = "grcCustomerHistory" Then Me!btnTransparent.SetFocus
        .Visible = False
        .Form.RecordSource = MakeSQL_CustomerHistory
        .Visible = True
    End With
    DoCmd.Hourglass False

exit_label:
    Exit Function

err_label:
    Me!grcCustomerHistory.Visible = True
    DoCmd.Hourglass False
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

'===========================================================
'   Sub 12 CustomerSource - Загрузка данных
'===========================================================
Public Function MakeSQL_CustomerSource() As String
On Error GoTo err_label

    MakeSQL_CustomerSource = modSYS.FormRecordSource("CustomerSource", "", "")
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function RequeryData_CustomerSource()
On Error GoTo err_label

    DoCmd.Hourglass True
    With Me!grcCustomerSource
        If Me.ActiveControl.Name = "grcCustomerSource" Then Me!btnTransparent.SetFocus
        .Visible = False
        .Form.RecordSource = MakeSQL_CustomerSource
        .Visible = True
    End With
    DoCmd.Hourglass False

exit_label:
    Exit Function

err_label:
    Me!grcCustomerSource.Visible = True
    DoCmd.Hourglass False
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

'===========================================================
'   TabStrip - Переключение
'===========================================================
Private Sub tabStrip_Change()

    Me.Repaint
    Me.Painting = False
    Select Case iTabIndex +  1 
    Case  2 : modCustomer.DisableCustomer Me
    Case  3 : modCustomer.DisablePerson Me
    Case  7 : modCustomer.DisableInvestment Me
    Case  8 : modCustomer.DisableAccount Me
    Case  9 : modCustomer.DisableRaiting Me
    Case  10 : modCustomer.DisableCustomerHistory Me
    Case  12 : modCustomer.DisableCustomerSource Me
    End Select
    Select Case Me.tabStrip +  1 
    Case  2 : modCustomer.EnableCustomer Me
    Case  3 : modCustomer.EnablePerson Me: SetupPerson Me
    Case  7 : modCustomer.EnableInvestment Me: SetupInvestment Me
    Case  8 : modCustomer.EnableAccount Me: SetupAccount Me
    Case  9 : modCustomer.EnableRaiting Me: SetupRaiting Me
    Case  10 : modCustomer.EnableCustomerHistory Me: SetupCustomerHistory Me
    Case  12 : modCustomer.EnableCustomerSource Me: SetupCustomerSource Me
    End Select
    iTabIndex = Me.tabStrip
    modSYS.SaveUserSetting "Form.TreeCustomer.Tab", Me.tabStrip
    Me.Painting = True
    
End Sub

'===========================================================
'   Main Form - Обработка событий
'===========================================================
Private Sub btnRefresh_Click()
On Error GoTo err_label

    If Me.Dirty Then Me.Dirty = False
    Me!iCustomerParentID.Requery
    Select Case (iTabIndex +  1 )
    Case  2 : RequeryCustomer
    Case  3 : RequeryPerson
    Case  7 : RequeryInvestment
    Case  8 : RequeryAccount
    Case  9 : RequeryRaiting
    Case  10 : RequeryCustomerHistory
    Case  12 : RequeryCustomerSource
    End Select
exit_sub:
    Exit Sub
    
err_label:
    If Err.number =  2101  Or Err.number =  2115  Or Err.number =  0  Then
        'Введенное значение не подходит для данного свойства.
        Err.Clear
        Resume Next
    Else
        Call modError.ErrorMessage(Err.number, Err.Description)
        Resume exit_sub
    End If

End Sub

Private Sub iCustomerParentID_AfterUpdate()
    Me!btnOpenParentCustomer.Enabled = Not IsNull(Me!iCustomerParentID)
End Sub
Private Sub btnOpenTable_Click()
    Call OpenCustomerTable
End Sub
Private Sub btnOpenTree_Click()
    Call OpenCustomerTree
End Sub
Private Sub btnOpenParentCustomer_Click()
    Call OpenParentCustomerForm
End Sub
Private Sub iCustomerTypeID_AfterUpdate()
    Cal modCustomer.HandleCustomerTypeUpdate(frm)
End Sub
Private Sub sCustomerResidentFlag_AfterUpdate()
    Call modCustomer.HandleResidentUpdate(frm)
End Sub

'===========================================================
'   Sub 2 Customer - Обработка событий
'===========================================================
Public Sub CustomerChildGrid_Current()

    On Error GoTo exit_sub
    Me!btnOpenChildCustomer.Enabled = False
    With Me!grcCustomerChild.Form
        If .NewRecord Then GoTo exit_sub
        If .Recordset.EOF Or .Recordset.BOF Then GoTo exit_sub
    End With
    Me!btnOpenChildCustomer.Enabled = True
    
exit_sub:
    Exit Sub

End Sub
Private Sub CustomerChildGrid_DblClick(Cancel As Integer)
    Call OpenChildCustomerForm
End Sub
Private Sub btnOpenChildCustomer_Click()
    Call OpenChildCustomerForm
End Sub

'===========================================================
'   Sub 3 Person - Обработка событий
'===========================================================
Private Sub lstSort_Person_AfterUpdate()
    RequeryData_Person
End Sub
Private Sub lstFilter_Person_AfterUpdate()
    RequeryData_Person
End Sub
Private Sub txtQuickFind_Person_Change()

    If Len(Me!txtQuickFind_Person.Text) =  0  Then
        Me!btnQuickFind_Person.Enabled = False
        Me!optFilter_Person.Enabled = False
        Exit Sub
    End If
    
    Me!btnQuickFind_Person.Enabled = True
    Me!optFilter_Person.Enabled = True
    
    Dim grcPerson As Form
    Dim rsPerson As ADODB.Recordset
    Set grcPerson = Me!grcPerson.Form
    Set rsPerson = grcPerson.Recordset
    
    Dim i As Long, sFoundField As String
    If IsNumeric(Me!txtQuickFind_Person.Text) Then
    Else
FIND_NAME:
        Dim rsFind2 As ADODB.Recordset
        Set rsFind2 = grcPerson.RecordsetClone
        
        rsFind2.Bookmark = grcPerson.Bookmark
        rsFind2.Find "sPersonName1 LIKE '" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcPerson.Bookmark
        rsFind2.Find "sPersonName2 LIKE '" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcPerson.Bookmark
        rsFind2.Find "sPersonName3 LIKE '" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
    
        rsFind2.Bookmark = grcPerson.Bookmark
        rsFind2.Find "sPersonName1 LIKE '%" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcPerson.Bookmark
        rsFind2.Find "sPersonName2 LIKE '%" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcPerson.Bookmark
        rsFind2.Find "sPersonName3 LIKE '%" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
    
        rsFind2.MoveFirst
        rsFind2.Find "sPersonName1 LIKE '%" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
        rsFind2.MoveFirst
        rsFind2.Find "sPersonName2 LIKE '%" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
        rsFind2.MoveFirst
        rsFind2.Find "sPersonName3 LIKE '%" & Me!txtQuickFind_Person.Text & "*'"
        If Not rsFind2.EOF Then
            rsPerson.MoveFirst
            rsPerson.Find "iPersonID=" & rsFind2!iPersonID
            grcPerson!iPersonID.SetFocus
            GoTo exit_label
        End If
    
    End If
    
exit_label:
    Set rsFind2 = Nothing
    Exit Sub

End Sub
Private Sub btnQuickFind_Person_Click()
On Error GoTo Err_btnFindCustomer_Click

    If IsNull(Me!txtQuickFind_Person) Then
        Beep
        Exit Sub
    End If
    If Len(Me!txtQuickFind_Person.value) =  0  Then
        Beep
        Exit Sub
    End If
    Me!txtQuickFind_Person.SetFocus
    Call txtQuickFind_Person_Change

Exit_btnFindCustomer_Click:
    Exit Sub

Err_btnFindCustomer_Click:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume Exit_btnFindCustomer_Click
    
End Sub
Private Sub optFilter_Person_AfterUpdate()
    
    If Me!optFilter_Person Then
        If IsNull(Me!txtQuickFind_Person.value) Or Me!txtQuickFind_Person.value = "" Then
            Beep
            Me!optFilter_Person = False
            Me!grcPerson.SetFocus
            Exit Sub
        End If
    End If
    RequeryData

End Sub
Private Sub PersonGrid_Current()

    Me!btnOpenPerson.Enabled = False
    On Error Resume Next
    If PersonGrid.NewRecord Then Exit Sub
    If PersonGrid.Recordset.EOF Or PersonGrid.Recordset.BOF Then Exit Sub
    If Err.number <>  0  Then Exit Sub
    Err.Clear
    Me!btnOpenPerson.Enabled = True

End Sub
Private Sub PersonGrid_DblClick(Cancel As Integer)
    Call OpenPersonForm
End Sub
Private Sub btnOpenPerson_Click()
    Call OpenPersonForm
End Sub
Private Sub btnOpenPersonTable_Click()
    Call OpenPersonTable
End Sub
Private Sub btnCustomerPersonAdd_Click()
    Call CustomerPersonAdd
End Sub
Private Sub btnOpenPersonPositionTable_Click()
    Call OpenPersonPosition
End Sub

'===========================================================
'   Sub 7 Investment - Обработка событий
'===========================================================
Private Sub lstSort_InqueryInvestment_AfterUpdate()
    RequeryData_InqueryInvestment
End Sub
Private Sub iCustomerBankID_InqueryInvestment_AfterUpdate()
    RequeryData_InqueryInvestment
End Sub
Private Sub sInqueryInvestmentStatusCode_AfterUpdate()
    RequeryData_InqueryInvestment
End Sub
Private Sub sInstrumentTypeCode_AfterUpdate()
    RequeryData_InqueryInvestment
End Sub
Private Sub optFilter_InqueryInvestment_AfterUpdate()

    If Me!optFilter_InqueryInvestment Then
        If _
            IsNull(Me!txtQuickFind_InqueryInvestment.value) Or _
            Me!txtQuickFind_InqueryInvestment.value = "" _
        Then
            Beep
            Me!optFilter_InqueryInvestment = False
            Me!grcInqueryInvestment.SetFocus
            Exit Sub
        End If
    End If
    RequeryData_InqueryInvestment

End Sub
Private Sub txtQuickFind_InqueryInvestment_Change()

    If Len(Me!txtQuickFind_InqueryInvestment.Text) =  0  Then
        Me!btnQuickFind_InqueryInvestment.Enabled = False
        Me!optFilter_InqueryInvestment.Enabled = False
        Exit Sub
    End If
    
    Me!btnQuickFind_InqueryInvestment.Enabled = True
    Me!optFilter_InqueryInvestment.Enabled = True
    
    Dim grcInqueryInvestment As Form
    Set grcInqueryInvestment = Me!grcInqueryInvestment.Form
    
    Dim i As Long, sFoundField As String
    Dim rsFind As ADODB.Recordset
    Dim rsData As ADODB.Recordset
    
    Set rsFind = grcInqueryInvestment.RecordsetClone
    Set rsData = grcInqueryInvestment.Recordset
    rsFind.Bookmark = grcInqueryInvestment.Bookmark
    If IsNumeric(Me!txtQuickFind_InqueryInvestment.Text) Then
        i = CLng(Trim(Me!txtQuickFind_InqueryInvestment.Text))
        rsFind.MoveFirst
        While i <  99999999 #
            rsFind.MoveFirst
            rsFind.Find "iInqueryInvestmentID=" & CStr(i)
            If Not rsFind.EOF Then
                sFoundField = "iInqueryInvestmentID"
                GoTo FOUND_NUMBER
            Else
                rsFind.MoveFirst
                rsFind.Find "iInqueryInvestmentID >= " & CStr(i)
                If Not rsFind.EOF Then
                    sFoundField = "iInqueryInvestmentID"
                    GoTo FOUND_NUMBER
                End If
            End If
            i = i *  10 
        Wend
FOUND_NUMBER:
        If Not rsFind.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind!iInqueryInvestmentID
            grcInqueryInvestment.Controls(sFoundField).SetFocus
            GoTo exit_label
        Else
            GoTo FIND_NAME
        End If
    Else

FIND_NAME:
        Dim rsFind2 As ADODB.Recordset
        Set rsFind2 = grcInqueryInvestment.RecordsetClone
        
        Dim sCustomerRoot As String
        If Me!sCustomerCreditFlag = "Y" Then
            sCustomerRoot = "CustomerFilial"
        ElseIf Me!iCustomerFilialLevel =  3  Then
            sCustomerRoot = "CustomerBank"
        End If
        
        rsFind2.Bookmark = grcInqueryInvestment.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "s" & sCustomerRoot & "Name LIKE '" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment.Controls("i" & sCustomerRoot & "ID").SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcInqueryInvestment.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "sInstrumentTypeName LIKE '" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment!sInstrumentTypeCode.SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcInqueryInvestment.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "sInqueryInvestmentOutCode LIKE '" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment!sInqueryInvestmentOutCode.SetFocus
            GoTo exit_label
        End If
        
        rsFind2.Bookmark = grcInqueryInvestment.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "s" & sCustomerRoot & "Name LIKE '%" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment.Controls("i" & sCustomerRoot & "ID").SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcInqueryInvestment.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "sInstrumentTypeName LIKE '%" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment!sInstrumentTypeCode.SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcInqueryInvestment.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "sInqueryInvestmentOutCode LIKE '%" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment!sInqueryInvestmentOutCode.SetFocus
            GoTo exit_label
        End If
        
        rsFind2.MoveFirst
        rsFind2.Find "s" & sCustomerRoot & "Name LIKE '%" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment.Controls("i" & sCustomerRoot & "ID").SetFocus
            GoTo exit_label
        End If
        rsFind2.MoveFirst
        rsFind2.Find "sInstrumentTypeName LIKE '%" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment!sInstrumentTypeCode.SetFocus
            GoTo exit_label
        End If
        rsFind2.MoveFirst
        rsFind2.Find "sInqueryInvestmentOutCode LIKE '%" & Me!txtQuickFind_InqueryInvestment.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryInvestmentID=" & rsFind2!iInqueryInvestmentID
            grcInqueryInvestment!sInqueryInvestmentOutCode.SetFocus
            GoTo exit_label
        End If
    End If

exit_label:
    Me!txtQuickFind_InqueryInvestment.SetFocus
    Me!txtQuickFind_InqueryInvestment.SelStart = Len(Me!txtQuickFind_InqueryInvestment.Text)
    Set rsFind2 = Nothing
    Exit Sub

End Sub
Private Sub btnQuickFind_InqueryInvestment_Click()
On Error GoTo err_label

    If IsNull(Me!txtQuickFind_InqueryInvestment) Then
        Beep
        Exit Sub
    End If
    If Len(Me!txtQuickFind_InqueryInvestment.value) =  0  Then
        Beep
        Exit Sub
    End If
    Me!txtQuickFind_InqueryInvestment.SetFocus
    Call txtQuickFind_InqueryInvestment_Change

exit_label:
    Exit Sub

err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label
    
End Sub
Private Sub InvestmentGrid_Current()

    Me!btnTransparent.SetFocus
    Me!btnInqueryInvestmentID.Enabled = False
    Me!btnCustomerBankID_InqueryInvestment.Enabled = False
    On Error Resume Next
    If InvestmentGrid.NewRecord Then Exit Sub
    If InvestmentGrid.Recordset.EOF Or InvestmentGrid.Recordset.BOF Then Exit Sub
    If Err.number <>  0  Then Exit Sub
    Err.Clear
    Me!btnInqueryInvestmentID.Enabled = True
    Me!btnCustomerBankID_InqueryInvestment.Enabled = True

End Sub
Private Sub InvestmentGrid_DblClick(Cancel As Integer)
    Call OpenInqueryInvestment
End Sub
Private Sub btnInqueryInvestmentID_Click()
    Call OpenInqueryInvestment
End Sub
Private Sub btnInqueryInvestmentTable_Click()
    Call OpenInqueryInvestmentTable
End Sub
Private Sub btnInstrumentTypeCode_Click()
    Call OpenInstrumentType
End Sub
Private Sub btnInqueryInvestmentStatusCode_Click()
    Call OpenInqueryInvestmentStatusForm
End Sub
Private Sub btnCustomerBankID_InqueryInvestment_Click()
    If Me!iCustomerFilialLevel =  3  Then
        Call OpenInqueryInvestmentCustomerBank
    ElseIf Me!sCustomerCreditFlag = "Y" Then
        Call OpenInqueryInvestmentCustomerFilial
    End If
End Sub

'===========================================================
'   Sub 8 InqueryAccount - Обработка событий
'===========================================================
Private Sub lstSort_InqueryAccount_AfterUpdate()
    RequeryData_InqueryAccount
End Sub
Private Sub iCustomerBankID_InqueryAccount_AfterUpdate()
    RequeryData_InqueryAccount
End Sub
Private Sub sInqueryAccountStatusCode_AfterUpdate()
    RequeryData_InqueryAccount
End Sub
Private Sub optFilter_InqueryAccount_AfterUpdate()

    If Me!optFilter_InqueryAccount Then
        If _
            IsNull(Me!txtQuickFind_InqueryAccount.value) Or _
            Me!txtQuickFind_InqueryAccount.value = "" _
        Then
            Beep
            Me!optFilter_InqueryAccount = False
            Me!grcInqueryAccount.SetFocus
            Exit Sub
        End If
    End If
    RequeryData_InqueryAccount

End Sub
Private Sub txtQuickFind_InqueryAccount_Change()

    If Len(Me!txtQuickFind_InqueryAccount.Text) =  0  Then
        Me!btnQuickFind_InqueryAccount.Enabled = False
        Me!optFilter_InqueryAccount.Enabled = False
        Exit Sub
    End If
    
    Me!btnQuickFind_InqueryAccount.Enabled = True
    Me!optFilter_InqueryAccount.Enabled = True
    
    Dim grcInqueryAccount As Form
    Set grcInqueryAccount = Me!grcInqueryAccount.Form
    
    Dim i As Long, sFoundField As String
    Dim rsFind As ADODB.Recordset
    Dim rsData As ADODB.Recordset
    
    Set rsFind = grcInqueryAccount.RecordsetClone
    Set rsData = grcInqueryAccount.Recordset
    rsFind.Bookmark = grcInqueryAccount.Bookmark
    If IsNumeric(Me!txtQuickFind_InqueryAccount.Text) Then
        i = CLng(Trim(Me!txtQuickFind_InqueryAccount.Text))
        rsFind.MoveFirst
        While i <  99999999 #
            rsFind.MoveFirst
            rsFind.Find "iInqueryAccountID=" & CStr(i)
            If Not rsFind.EOF Then
                sFoundField = "iInqueryAccountID"
                GoTo FOUND_NUMBER
            Else
                rsFind.MoveFirst
                rsFind.Find "iInqueryAccountID >= " & CStr(i)
                If Not rsFind.EOF Then
                    sFoundField = "iInqueryAccountID"
                    GoTo FOUND_NUMBER
                End If
            End If
            i = i *  10 
        Wend
FOUND_NUMBER:
        If Not rsFind.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryAccountID=" & rsFind!iInqueryAccountID
            grcInqueryAccount.Controls(sFoundField).SetFocus
            GoTo exit_label
        Else
            GoTo FIND_NAME
        End If
    Else

FIND_NAME:
        Dim rsFind2 As ADODB.Recordset
        Set rsFind2 = grcInqueryAccount.RecordsetClone
        
        Dim sCustomerRoot As String
        If Me!sCustomerCreditFlag = "Y" Then
            sCustomerRoot = "CustomerFilial"
        ElseIf Me!iCustomerFilialLevel =  3  Then
            sCustomerRoot = "CustomerBank"
        End If
        
        rsFind2.Bookmark = grcInqueryAccount.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "s" & sCustomerRoot & "Name LIKE '" & Me!txtQuickFind_InqueryAccount.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryAccountID=" & rsFind2!iInqueryAccountID
            grcInqueryAccount.Controls("i" & sCustomerRoot & "ID").SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcInqueryAccount.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "sInqueryAccountOutCode LIKE '" & Me!txtQuickFind_InqueryAccount.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryAccountID=" & rsFind2!iInqueryAccountID
            grcInqueryAccount!sInqueryAccountOutCode.SetFocus
            GoTo exit_label
        End If
        
        rsFind2.Bookmark = grcInqueryAccount.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "s" & sCustomerRoot & "Name LIKE '%" & Me!txtQuickFind_InqueryAccount.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryAccountID=" & rsFind2!iInqueryAccountID
            grcInqueryAccount.Controls("i" & sCustomerRoot & "ID").SetFocus
            GoTo exit_label
        End If
        rsFind2.Bookmark = grcInqueryAccount.Bookmark
        rsFind2.MoveNext
        rsFind2.Find "sInqueryAccountOutCode LIKE '%" & Me!txtQuickFind_InqueryAccount.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryAccountID=" & rsFind2!iInqueryAccountID
            grcInqueryAccount!sInqueryAccountOutCode.SetFocus
            GoTo exit_label
        End If
        
        rsFind2.MoveFirst
        rsFind2.Find "s" & sCustomerRoot & "Name LIKE '%" & Me!txtQuickFind_InqueryAccount.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryAccountID=" & rsFind2!iInqueryAccountID
            grcInqueryAccount.Controls("i" & sCustomerRoot & "ID").SetFocus
            GoTo exit_label
        End If
        rsFind2.MoveFirst
        rsFind2.Find "sInqueryAccountOutCode LIKE '%" & Me!txtQuickFind_InqueryAccount.Text & "%'"
        If Not rsFind2.EOF Then
            rsData.MoveFirst
            rsData.Find "iInqueryAccountID=" & rsFind2!iInqueryAccountID
            grcInqueryAccount!sInqueryAccountOutCode.SetFocus
            GoTo exit_label
        End If
    End If

exit_label:
    Set rsFind2 = Nothing
    Me!txtQuickFind_InqueryAccount.SetFocus
    Me!txtQuickFind_InqueryAccount.SelStart = Len(Me!txtQuickFind_InqueryAccount.Text)
    Exit Sub

End Sub
Private Sub btnQuickFind_InqueryAccount_Click()
On Error GoTo err_label

    If IsNull(Me!txtQuickFind_InqueryAccount) Then
        Beep
        Exit Sub
    End If
    If Len(Me!txtQuickFind_InqueryAccount.value) =  0  Then
        Beep
        Exit Sub
    End If
    Me!txtQuickFind_InqueryAccount.SetFocus
    Call txtQuickFind_InqueryAccount_Change

exit_label:
    Exit Sub

err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label
    
End Sub
Private Sub AccountGrid_Current()

    Me!btnInqueryAccountID.Enabled = False
    Me!btnCustomerBankID_InqueryAccount.Enabled = False
    On Error Resume Next
    If AccountGrid.NewRecord Then Exit Sub
    If AccountGrid.Recordset.EOF Or AccountGrid.Recordset.BOF Then Exit Sub
    If Err.number <>  0  Then Exit Sub
    Err.Clear
    Me!btnInqueryAccountID.Enabled = True
    Me!btnCustomerBankID_InqueryAccount.Enabled = True

End Sub
Private Sub AccountGrid_DblClick(Cancel As Integer)
    Call OpenInqueryAccount
End Sub
Private Sub btnInqueryAccountID_Click()
    Call OpenInqueryAccount
End Sub
Private Sub btnInqueryAccountTable_Click()
    Call OpenInqueryAccountTable
End Sub
Private Sub btnInqueryAccountStatusCode_Click()
    Call OpenInqueryAccountStatusForm
End Sub
Private Sub btnCustomerBankID_InqueryAccount_Click()

    If Me!iCustomerFilialLevel =  3  Then
        Call OpenInqueryAccountCustomerBank
    ElseIf Me!sCustomerCreditFlag = "Y" Then
        Call OpenInqueryAccountCustomerFilial
    End If

End Sub

'===========================================================
'   Sub 9 Raiting - Обработка событий
'===========================================================
Private Sub btnRaiting_Click()
    Call OpenRaitingAgencyTable
End Sub
Private Sub btnRaitingTable_Click()
    Call OpenCustomerRaitingTable
End Sub

'===========================================================
'   Main Form
'===========================================================
Public Function OpenCustomerTable()

    Dim id
    If Me!iCustomerTypeID =  7000  Or Me!iCustomerTypeID =  8000  Then
        Call modForm.GetObjectID(Me, "iCustomerID", id)
        Call modBusiness.OpenCustomerInsuaranceTable(id)
    Else
        Call modForm.GetObjectID(Me, "iCustomerID", id)
        Call modBusiness.OpenCustomerForm(id, "TABLE")
    End If
    
End Function
Public Function OpenCustomerTree()

    Dim id
    Call modForm.GetObjectID(Me, "iCustomerID", id)
    Call modBusiness.OpenCustomerForm(id, "TREE")
    
End Function
Public Function OpenParentCustomerForm()
On Error GoTo err_handler

    If Me.NewRecord Then GoTo exit_label
    If IsNull(Me!iCustomerParentID) Then GoTo exit_label
    
    Dim id: id = Me!iCustomerParentID
    With Me.Parent
        .FindCustomerID id, True
        !iCustomerID = id
    End With
    
exit_label:
    Exit Function

err_handler:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label
    
End Function

'===========================================================
'   Sub 2 Customer
'===========================================================
Public Function OpenChildCustomerForm()
On Error GoTo err_handler

    If Me.NewRecord Then GoTo exit_label
    If Me!grcCustomerChild.Form.NewRecord Then GoTo exit_label
    If IsNull(Me!grcCustomerChild.Form!iCustomerID) Then GoTo exit_label
    
    Dim id As Variant
    id = Me!grcCustomerChild.Form!iCustomerID
    
    With Me.Parent
        .FindCustomerID id, True
        !iCustomerID = id
    End With
    
exit_label:
    Exit Function

err_handler:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label
    
End Function

'===========================================================
'   Sub 3 Person
'===========================================================
Public Function OpenPersonForm()

    Dim icID, ipID
    Call modForm.GetObjectID(Me, "iCustomerID", icID)
    Call modForm.GetObjectID(Me!grcPerson.Form, "iPersonID", ipID)
    Call modBusiness.OpenPersonForm(ipID, "FORM", "iCustomerID", icID)

End Function
Public Function OpenPersonTable()

    Dim icID, ipID
    Call modForm.GetObjectID(Me, "iCustomerID", icID)
    Call modForm.GetObjectID(Me!grcPerson.Form, "iPersonID", ipID)
    Call modBusiness.OpenPersonForm(ipID, "TABLE", "iCustomerID", icID)

End Function
Public Function OpenPersonPosition()
On Error GoTo err_handler

    Dim ipID, ippID
    Call modForm.GetObjectID(Me!grcPerson.Form, "iPersonID", ipID)
    Call modForm.GetObjectID(Me!grcPerson.Form, "iPersonPositionID", ippID)
    Call modBusiness.OpenPersonPositionForm(ippID, "", "iPersonID", ipID)

exit_label:
    Exit Function

err_handler:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label
    
End Function
Public Function CustomerPersonAdd()
On Error GoTo err_handler

    If Me.NewRecord Then Exit Function
    modCustomer.AddCustomerPerson Me!grcPerson.Form

exit_label:
    Exit Function

err_handler:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label
    
End Function

'===========================================================
'   Sub 7 Investment
'===========================================================
Public Function OpenInqueryInvestment()

    Dim id
    If modForm.GetObjectID(Me!grcInqueryInvestment.Form, "iInqueryInvestmentID", id) Then
        Call modBusiness.OpenInqueryInvestmentForm(id)
    Else
        Call modBusiness.OpenInqueryInvestmentForm(Null, "TABLE")
    End If

End Function
Public Function OpenInqueryInvestmentTable()

    Dim id
    Call modForm.GetObjectID(Me!grcInqueryInvestment.Form, "iInqueryInvestmentID", id)
    Call modBusiness.OpenInqueryInvestmentForm(id, "TABLE")

End Function
Public Function OpenInqueryInvestmentCustomerBank()

    Dim id
    If Me!iCustomerFilialLevel =  3  Then
        Call modForm.GetObjectID(Me!grcInqueryInvestment.Form, "iCustomerBankID", id)
        Me.Parent.treeCustomer.SetFocus
        Me.Parent!subCustomer.Visible = False
        Me.Parent.lblSub.Visible = True
        Me.Parent.Repaint
        Me.Parent.Painting = False
        Me.Parent.FindCustomerID id
        Me.Parent.UpdateCustomer
        Me.Parent!subCustomer.Visible = True
        Me.Parent.lblSub.Visible = False
        Me.Parent.Painting = True
    End If

End Function
Public Function OpenInqueryInvestmentCustomerFilial()

    Dim id
    If Me!sCustomerCreditFlag = "Y" Then
        Call modForm.GetObjectID(Me!grcInqueryInvestment.Form, "iCustomerFilialID", id)
        Me.Parent.treeCustomer.SetFocus
        Me.Parent!subCustomer.Visible = False
        Me.Parent.lblSub.Visible = True
        Me.Parent.Repaint
        Me.Parent.Painting = False
        Me.Parent.FindCustomerID id
        Me.Parent.UpdateCustomer
        Me.Parent!subCustomer.Visible = True
        Me.Parent.lblSub.Visible = False
        Me.Parent.Painting = True
    End If

End Function
Public Function OpenInqueryInvestmentStatusForm()

    Dim id
    Call modForm.GetObjectID(Me!grcInqueryInvestment.Form, "sInqueryInvestmentStatusCode", id)
    Call modBusiness.OpenInqueryInvestmentStatusForm(id)

End Function
Public Function OpenInstrumentType()

    Dim id
    Call modForm.GetObjectID(Me!grcInqueryInvestment.Form, "sInstrumentTypeCode", id)
    Call modBusiness.OpenInstrumentTypeForm(id)

End Function

'===========================================================
'   Sub 8 Account
'===========================================================
Public Function OpenInqueryAccount()

    Dim id
    If modForm.GetObjectID(Me!grcInqueryAccount.Form, "iInqueryAccountID", id) Then
        Call modBusiness.OpenInqueryAccountForm(id)
    Else
        Call modBusiness.OpenInqueryAccountForm(Null, "TABLE")
    End If

End Function
Public Function OpenInqueryAccountTable()

    Dim id
    Call modForm.GetObjectID(Me!grcInqueryAccount.Form, "iInqueryAccountID", id)
    Call modBusiness.OpenInqueryAccountForm(id, "TABLE")

End Function
Public Function OpenInqueryAccountCustomerBank()

    Dim id
    If Me!iCustomerFilialLevel =  3  Then
        Call modForm.GetObjectID(Me!grcInqueryAccount.Form, "iCustomerBankID", id)
        Me.Parent.treeCustomer.SetFocus
        Me.Parent!subCustomer.Visible = False
        Me.Parent.lblSub.Visible = True
        Me.Parent.Repaint
        Me.Parent.Painting = False
Application.Echo False
        Me.Parent.FindCustomerID id
        Me.Parent.UpdateCustomer
        Me.Parent!subCustomer.Visible = True
        Me.Parent.lblSub.Visible = False
        Me.Parent.Painting = True
Application.Echo True
    End If

End Function
Public Function OpenInqueryAccountCustomerFilial()

    Dim id
    If Me!sCustomerCreditFlag = "Y" Then
        Call modForm.GetObjectID(Me!grcInqueryAccount.Form, "iCustomerFilialID", id)
        Me.Parent.treeCustomer.SetFocus
        Me.Parent!subCustomer.Visible = False
        Me.Parent.lblSub.Visible = True
        Me.Parent.Repaint
        Me.Parent.Painting = False
Application.Echo False
        Me.Parent.FindCustomerID id
        Me.Parent.UpdateCustomer
        Me.Parent!subCustomer.Visible = True
        Me.Parent.lblSub.Visible = False
        Me.Parent.Painting = True
Application.Echo True
    End If

End Function
Public Function OpenInqueryAccountStatusForm()

    Dim id
    Call modForm.GetObjectID(Me!grcInqueryAccount.Form, "sInqueryAccountStatusCode", id)
    Call modBusiness.OpenInqueryAccountStatusForm(id)

End Function

'===========================================================
'   Sub 9 Raiting
'===========================================================
Public Function OpenRaitingAgencyTable()

    Call modBusiness.OpenRaitingAgencyTable
    
End Function
Public Function OpenCustomerRaitingTable()

    Dim id
    Call modForm.GetObjectID(Me, "iCustomerID", id)
    Call modBusiness.OpenCustomerRaitingTable(id)

End Function

'===========================================================
'   Resizing Form
'===========================================================
Public Sub ResizeSubForm(iFormHeight As Integer, iFormWidth As Integer)
    
    Me.Painting = False
    Me.Section( 0 ).Height = iFormHeight
    Dim h, w
    
    With Me!lblCustomerName
        .Top =  100 
        .Left =  100 
    End With
    With Me!sCustomerName
        .Width =  0 
        .Top = Me!lblCustomerName.Top
        .Left = Me!lblCustomerName.Left + Me!lblCustomerName.Width
        w = iFormWidth -  270  - .Left -  100 
        If w <  1000  Then w =  1000 
        .Width = w
    End With
    With Me!lblCustomerReportName
        .Top = Me!lblCustomerName.Top + Me!lblCustomerName.Height +  45 
        .Left = Me!lblCustomerName.Left
    End With
    With Me!sCustomerReportName
        .Width =  0 
        .Top = Me!lblCustomerReportName.Top
        .Left = Me!lblCustomerReportName.Left + Me!lblCustomerReportName.Width
        .Width = w
    End With
    With Me!lblCustomerFullName
        .Top = Me!lblCustomerReportName.Top + Me!lblCustomerReportName.Height +  30 
        .Left = Me!lblCustomerReportName.Left
    End With
    With Me!sCustomerFullName
        .Width =  0 
        .Top = Me!lblCustomerFullName.Top
        .Left = Me!lblCustomerFullName.Left + Me!lblCustomerFullName.Width
        .Width = w
    End With
    With Me!lblCustomerParentID
        .Top = Me!lblCustomerFullName.Top + Me!lblCustomerFullName.Height +  30 
        .Left = Me!lblCustomerFullName.Left
    End With
    With Me!iCustomerParentID
        .Width =  0 
        .Top = Me!lblCustomerParentID.Top
        .Left = Me!lblCustomerParentID.Left + Me!lblCustomerParentID.Width
        .Width = w - Me!btnOpenParentCustomer.Width
    End With
    With Me!btnOpenParentCustomer
        .Top = Me!iCustomerParentID.Top
        .Left = Me!iCustomerParentID.Left + Me!iCustomerParentID.Width
        .Height = Me!iCustomerParentID.Height
    End With
    Dim t, l
    t = Me!lblCustomerParentID.Top + Me!lblCustomerParentID.Height +  100 
    l = Me!lblCustomerParentID.Left
    h = iFormHeight - (Me!lblCustomerParentID.Top + Me!lblCustomerParentID.Height +  100 ) -  100 
    w = iFormWidth -  270  - Me!lblCustomerParentID.Left -  100 
    Dim htbs: htbs = h
    Dim wtbs: wtbs = w
    
    On Error Resume Next
    Me.tabStrip.Height =  0 
    Me.tabStrip.Width =  0 
    Me.tabStrip.Top = t
    Me.tabStrip.Left = l
    
    Dim ctl As Control
    For Each ctl In Me.Controls
        With ctl
            If InStr( 1 , .Tag, "wi") >  0  Then
                .Width =  0 
            End If
            If InStr( 1 , .Tag, "he") >  0  Then
                .Height =  0 
            End If
            If InStr( 1 , .Tag, "ta") >  0  Then
                .Top = t +  500 : .Left = l +  300 
            End If
        End With
    Next ctl
    
    Me.tabStrip.Height =  0 
    Me.tabStrip.Width =  0 
    Me.tabStrip.Top = t
    Me.tabStrip.Left = l
    
    Me.tabStrip.Height = h
    Me.tabStrip.Width = w
    
    On Error GoTo  0 
    
    t = Me.tabStrip.Top +  420 
    l = Me.tabStrip.Left +  140 
    Dim htab: htab = htbs -  420  -  140 
    Dim wtab: wtab = wtbs -  140  -  140 
    
    '=======================================================
    '   tab1Main
    '=======================================================
    '   Me.tab1Main.SetFocus
    With Me!lblCustomerTypeID
        .Top = Me.tabStrip.Top +  420  +  100 
        .Left = Me.tabStrip.Left +  140  +  100 
    End With
    With Me!iCustomerTypeID
        .Top = Me!lblCustomerTypeID.Top
        .Left = Me!lblCustomerTypeID.Left + Me!lblCustomerTypeID.Width +  100 
    End With
    With Me!lblCustomerFilialLevel
        .Top = Me!lblCustomerTypeID.Top + Me!lblCustomerTypeID.Height +  50 
        .Left = Me!lblCustomerTypeID.Left
    End With
    With Me!iCustomerFilialLevel
        .Top = Me!lblCustomerFilialLevel.Top
        .Left = Me!iCustomerTypeID.Left
    End With
    With Me!lblCustomerTypeExtra
        .Top = Me!lblCustomerFilialLevel.Top + Me!lblCustomerFilialLevel.Height +  50 
        .Left = Me!lblCustomerFilialLevel.Left
    End With
    With Me!grcCustomerTypeExtra
        .Top = Me!lblCustomerTypeExtra.Top + Me!lblCustomerTypeExtra.Height +  50 
        .Left = Me!lblCustomerTypeExtra.Left
        .Width = Me!lblCustomerTypeID.Width +  100  + Me!iCustomerTypeID.Width
    End With
   
    With lblCustomerEmitentFlag
        .Top = Me!grcCustomerTypeExtra.Top + Me!grcCustomerTypeExtra.Height +  100 
        .Left = Me!lblCustomerFilialLevel.Left
    End With
    With Me!sCustomerEmitentFlag
        .Top = Me!lblCustomerEmitentFlag.Top
        .Left = Me!lblCustomerEmitentFlag.Left + Me!lblCustomerEmitentFlag.Width +  100 
    End With
    With lblCustomerContragentFlag
        .Top = Me!lblCustomerEmitentFlag.Top + Me!lblCustomerEmitentFlag.Height +  50 
        .Left = Me!lblCustomerEmitentFlag.Left
    End With
    With Me!sCustomerContragentFlag
        .Top = Me!lblCustomerContragentFlag.Top
        .Left = Me!sCustomerEmitentFlag.Left
    End With
    With lblCustomerResidentFlag
        .Top = Me!lblCustomerContragentFlag.Top + Me!lblCustomerContragentFlag.Height +  50 
        .Left = Me!lblCustomerContragentFlag.Left
    End With
    With Me!sCustomerResidentFlag
        .Top = Me!lblCustomerResidentFlag.Top
        .Left = Me!sCustomerContragentFlag.Left
    End With
    With Me.lblCountryCode
        .Top = Me!sCustomerResidentFlag.Top + Me!sCustomerResidentFlag.Height +  50 
        .Left = Me!lblCustomerResidentFlag.Left
    End With
    With Me.iCountryCode
        .Top = Me.lblCountryCode.Top
        .Width =  0 
        .Left = Me.lblCountryCode.Left + Me.lblCountryCode.Width +  100 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
    End With

    With Me!lblCustomerOpenedDate
        .Top = lblCustomerTypeID.Top
        .Left = Me!iCustomerTypeID.Left + Me!iCustomerTypeID.Width +  200 
    End With
    With Me.dtCustomerOpenedDate
        .Top = Me!lblCustomerOpenedDate.Top
        .Left = Me!lblCustomerOpenedDate.Left + Me!lblCustomerOpenedDate.Width +  100 
    End With
    With Me!lblCustomerExpiredDate
        .Top = Me!lblCustomerOpenedDate.Top + Me!lblCustomerOpenedDate.Height +  50 
        .Left = Me!lblCustomerOpenedDate.Left
    End With
    With Me.dtCustomerExpiredDate
        .Top = Me!lblCustomerExpiredDate.Top
        .Left = Me.dtCustomerOpenedDate.Left
    End With
    With Me!lblCustomerExpiredFlag
        .Top = Me!lblCustomerExpiredDate.Top + Me!lblCustomerExpiredDate.Height +  50 
        .Left = Me!lblCustomerExpiredDate.Left
    End With
    With Me!sCustomerExpiredFlag
        .Top = Me!lblCustomerExpiredFlag.Top
        .Left = Me.dtCustomerExpiredDate.Left
    End With

    '=======================================================
    '   tab2Customer
    '=======================================================
    '   Me.tab2Customer.SetFocus
    With Me!btnOpenChildCustomer
        .Top = t
        .Left = l
    End With
    With Me!grcCustomerChild
        .Top = Me!btnOpenChildCustomer.Top + Me!btnOpenChildCustomer.Height +  100 
        .Left = Me!btnOpenChildCustomer.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
        Me.boxCustomer.Move .Left, .Top, .Width, .Height
    End With

    '=======================================================
    '   tab3Person
    '=======================================================
    '   Me.tab3Person.SetFocus
    With Me!lblCustomerPerson
        .Top = t
        .Left = l
        .Width = Me!btnCustomerPersonAdd.Width +  50  + Me!btnOpenPerson.Width +  50  + Me!btnOpenPersonTable.Width
    End With
    With Me!btnCustomerPersonAdd
        .Top = Me!lblCustomerPerson.Top + Me!lblCustomerPerson.Height +  30 
        .Left = Me!lblCustomerPerson.Left
    End With
    With Me!btnOpenPerson
        .Top = Me!btnCustomerPersonAdd.Top
        .Left = Me!btnCustomerPersonAdd.Left + Me!btnCustomerPersonAdd.Width +  50 
    End With
    With Me!btnOpenPersonTable
        .Top = Me!btnOpenPerson.Top
        .Left = Me!btnOpenPerson.Left + Me!btnOpenPerson.Width +  50 
    End With
    With Me.lblPersonPosition
        .Top = Me!lblCustomerPerson.Top
        .Left = Me!lblCustomerPerson.Left + Me!lblCustomerPerson.Width +  100 
        .Width = Me!btnOpenPersonPositionTable.Width
    End With
    With Me!btnOpenPersonPositionTable
        .Top = Me!btnOpenPersonTable.Top
        .Left = Me.lblPersonPosition.Left
    End With
    
    w = wtab - Me!lblCustomerPerson.Left - Me!lblCustomerPerson.Width _
        -  100  - Me.lblPersonPosition.Width _
        -  100  - Me.lblSort_Person.Width -  50  _
        -  100  - Me.lblQuickFind_Person.Width -  50  _
        - Me!btnQuickFind_Person.Width _
        - Me!optFilter_Person.Width
    w = w /  3 
    If w <  400  Then w =  400 
    With Me.lblSort_Person
        .Top = Me.lblPersonPosition.Top
        .Left = Me.lblPersonPosition.Left + Me.lblPersonPosition.Width +  100 
    End With
    With Me!lstSort_Person
        .Top = Me.lblSort_Person.Top
        .Left = Me.lblSort_Person.Left + Me.lblSort_Person.Width +  50 
        .Width =  2  * w
    End With
    With Me.lblFilter_Person
        .Top = Me.lblSort_Person.Top + Me.lblSort_Person.Height
        .Left = Me.lblSort_Person.Left
    End With
    With Me!lstFilter_Person
        .Top = Me.lblFilter_Person.Top
        .Left = Me!lstSort_Person.Left
        .Width =  2  * w
    End With
    With Me.lblQuickFind_Person
        .Top = Me!lstSort_Person.Top
        .Left = Me!lstSort_Person.Left + Me!lstSort_Person.Width +  100 
    End With
    With Me!txtQuickFind_Person
        .Top = Me.lblQuickFind_Person.Top
        .Left = Me.lblQuickFind_Person.Left + Me.lblQuickFind_Person.Width
        .Width = w
    End With
    With Me!btnQuickFind_Person
        .Top = Me!txtQuickFind_Person.Top
        .Left = Me!txtQuickFind_Person.Left + Me!txtQuickFind_Person.Width
    End With
    With Me!optFilter_Person
        .Top = Me!btnQuickFind_Person.Top
        .Left = Me!btnQuickFind_Person.Left + Me!btnQuickFind_Person.Width
    End With
    
    With Me!grcPerson
        .Top = Me!btnCustomerPersonAdd.Top + Me!btnCustomerPersonAdd.Height +  100 
        .Left = Me!btnCustomerPersonAdd.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140  -  100  - Me.lblPhone.Height
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
        Me.boxPerson.Move .Left, .Top, .Width, .Height
    End With
    With Me.lblPhone
        .Left = Me!grcPerson.Left
        .Top = Me!grcPerson.Top + Me!grcPerson.Height +  100 
        .Width = Me!grcPerson.Width
    End With

    '=======================================================
    '   tab4Registration
    '=======================================================
    '   Me.tab4Registration.SetFocus
    With Me!lblCustomerChamberCode
        .Top = t +  100 
        .Left = l +  100 
    End With
    With Me!sCustomerChamberCode
        .Top = Me!lblCustomerChamberCode.Top
        .Left = Me!lblCustomerChamberCode.Left + Me!lblCustomerChamberCode.Width +  50 
    End With
    With Me!lblCustomerChamberDate
        .Top = Me!sCustomerChamberCode.Top
        .Left = Me!sCustomerChamberCode.Left + Me!sCustomerChamberCode.Width +  100 
    End With
    With Me.dtCustomerChamberDate
        .Top = Me!lblCustomerChamberDate.Top
        .Left = Me!lblCustomerChamberDate.Left + Me!lblCustomerChamberDate.Width +  50 
    End With
    With Me!lblCustomerChamberComment
        .Top = Me.dtCustomerChamberDate.Top
        .Left = Me.dtCustomerChamberDate.Left + Me.dtCustomerChamberDate.Width +  50 
    End With
    
    With Me!lblCustomerOGRNCode
        .Top = Me!lblCustomerChamberCode.Top + Me!lblCustomerChamberCode.Height +  100 
        .Left = Me!lblCustomerChamberCode.Left
    End With
    With Me!sCustomerOGRNCode
        .Top = Me!lblCustomerOGRNCode.Top
        .Left = Me!sCustomerChamberCode.Left
    End With
    With Me!lblCustomerOGRNDate
        .Top = Me!sCustomerOGRNCode.Top
        .Left = Me!sCustomerOGRNCode.Left + Me!sCustomerOGRNCode.Width +  100 
    End With
    With Me.dtCustomerOGRNDate
        .Top = Me!lblCustomerOGRNDate.Top
        .Left = Me!lblCustomerOGRNDate.Left + Me!lblCustomerOGRNDate.Width +  50 
    End With
    With Me!lblCustomerOGRNComment
        .Top = Me.dtCustomerOGRNDate.Top
        .Left = Me.dtCustomerOGRNDate.Left + Me.dtCustomerOGRNDate.Width +  50 
    End With

    With Me!lblCustomerINNCode
        .Top = Me!lblCustomerOGRNCode.Top + Me!lblCustomerOGRNCode.Height +  100 
        .Left = Me!lblCustomerOGRNCode.Left
    End With
    With Me!sCustomerINNCode
        .Top = Me!lblCustomerINNCode.Top
        .Left = Me!sCustomerOGRNCode.Left
    End With
    With Me!lblCustomerKPPCode
        .Top = Me!lblCustomerINNCode.Top
        .Left = Me!sCustomerINNCode.Left + Me!sCustomerINNCode.Width +  100 
    End With
    With Me!sCustomerKPPCode
        .Top = Me!lblCustomerKPPCode.Top
        .Left = Me!lblCustomerKPPCode.Left + Me!lblCustomerKPPCode.Width +  50 
    End With
    With Me!lblCustomerINNKPPDate
        .Top = Me!sCustomerKPPCode.Top
        .Left = Me!sCustomerKPPCode.Left + Me!sCustomerKPPCode.Width +  100 
    End With
    With Me.dtCustomerINNKPPDate
        .Top = Me!lblCustomerINNKPPDate.Top
        .Left = Me!lblCustomerINNKPPDate.Left + Me!lblCustomerINNKPPDate.Width +  50 
    End With

    With Me!lblCustomerOKPOCode
        .Top = Me!lblCustomerINNCode.Top + Me!lblCustomerINNCode.Height +  100 
        .Left = Me!lblCustomerINNCode.Left
    End With
    With Me!sCustomerOKPOCode
        .Top = Me!lblCustomerOKPOCode.Top
        .Left = Me!sCustomerINNCode.Left
    End With
    With Me!lblCustomerBIKCode
        .Top = Me!sCustomerOKPOCode.Top
        .Left = Me!sCustomerOKPOCode.Left + Me!sCustomerOKPOCode.Width +  100 
    End With
    With Me!sCustomerBIKCode
        .Top = Me!lblCustomerBIKCode.Top
        .Left = Me!lblCustomerBIKCode.Left + Me!lblCustomerBIKCode.Width +  50 
    End With

    With Me!lblCustomerRegistrationCode
        .Top = Me!lblCustomerOKPOCode.Top + Me!lblCustomerOKPOCode.Height +  100 
        .Left = Me!lblCustomerOKPOCode.Left
    End With
    With Me!iCustomerRegistrationCode
        .Top = Me!lblCustomerRegistrationCode.Top
        .Left = Me!sCustomerOKPOCode.Left
    End With
    With Me!lblCustomerRegistrationDate
        .Top = Me!iCustomerRegistrationCode.Top
        .Left = Me!iCustomerRegistrationCode.Left + Me!iCustomerRegistrationCode.Width +  100 
    End With
    With Me.dtCustomerRegistrationDate
        .Top = Me!lblCustomerRegistrationDate.Top
        .Left = Me!lblCustomerRegistrationDate.Left + Me!lblCustomerRegistrationDate.Width +  50 
    End With
    With Me!lblCustomerRegistrationRevokeFlag
        .Top = Me.dtCustomerRegistrationDate.Top
        .Left = Me.dtCustomerRegistrationDate.Left + Me.dtCustomerRegistrationDate.Width +  100 
    End With
    With Me!sCustomerRegistrationRevokeFlag
        .Top = Me!lblCustomerRegistrationRevokeFlag.Top
        .Left = Me!lblCustomerRegistrationRevokeFlag.Left + Me!lblCustomerRegistrationRevokeFlag.Width +  50 
    End With
    
    With Me!lblCustomerInsuaranceData
        .Top = Me!lblCustomerRegistrationCode.Top + Me!lblCustomerRegistrationCode.Height +  100 
        .Left = Me!lblCustomerRegistrationCode.Left
    End With
    With Me!grcCustomerInsuaranceData
        .Top = Me!lblCustomerInsuaranceData.Top + Me!lblCustomerInsuaranceData.Height +  50 
        .Left = Me!lblCustomerInsuaranceData.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
    End With
    
    '=======================================================
    '   tab5Comment
    '=======================================================
    '   Me.tab5Comment.SetFocus
    With Me!lblCustomerComment
        .Top = t
        .Left = l
    End With
    With Me!sCustomerComment
        .Top = Me!lblCustomerComment.Top
        .Left = Me!lblCustomerComment.Left + Me!lblCustomerComment.Width +  50 
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
    End With
    
    '=======================================================
    '   tab6Declension
    '=======================================================
    '   Me.tab6Declension.SetFocus
    With Me!lblCustomerDeclension
        .Top = t
        .Left = l
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
    End With
    With Me!grcCustomerDeclension
        .Top = Me!lblCustomerDeclension.Top + Me!lblCustomerDeclension.Height +  50 
        .Left = Me!lblCustomerDeclension.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
    End With
    
    '=======================================================
    '   tab7InqueryInvestment
    '=======================================================
    '   Me.tab7InqueryInvestment.SetFocus
    With Me.lblInqueryInvestment
        .Top = t
        .Left = l
        .Width = Me!btnInqueryInvestmentID.Width +  50  + Me!btnInqueryInvestmentTable.Width
    End With
    With Me!btnInqueryInvestmentID
        .Top = Me.lblInqueryInvestment.Top + Me.lblInqueryInvestment.Height +  30 
        .Left = Me.lblInqueryInvestment.Left
    End With
    With Me!btnInqueryInvestmentTable
        .Top = Me!btnInqueryInvestmentID.Top
        .Left = Me!btnInqueryInvestmentID.Left + Me!btnInqueryInvestmentID.Width +  50 
    End With
    
    With Me!lblCustomerBank_InqueryInvestment
        .Top = Me.lblInqueryInvestment.Top
        .Left = Me!btnInqueryInvestmentTable.Left + Me!btnInqueryInvestmentTable.Width +  100 
        .Width = Me!btnCustomerBankID_InqueryInvestment.Width
    End With
    With Me!btnCustomerBankID_InqueryInvestment
        .Top = Me!lblCustomerBank_InqueryInvestment.Top + Me!lblCustomerBank_InqueryInvestment.Height +  30 
        .Left = Me!lblCustomerBank_InqueryInvestment.Left
    End With
    
    With Me.lblDictionary_InqueryInvestment
        .Top = Me!lblCustomerBank_InqueryInvestment.Top
        .Left = Me!lblCustomerBank_InqueryInvestment.Left + Me!lblCustomerBank_InqueryInvestment.Width +  100 
        .Width = Me!btnInstrumentTypeCode.Width +  50  + Me!btnInqueryInvestmentStatusCode.Width
    End With
    With Me!btnInstrumentTypeCode
        .Top = Me.lblDictionary_InqueryInvestment.Top + Me.lblDictionary_InqueryInvestment.Height +  30 
        .Left = Me.lblDictionary_InqueryInvestment.Left
    End With
    With Me!btnInqueryInvestmentStatusCode
        .Top = Me!btnInstrumentTypeCode.Top
        .Left = Me!btnInstrumentTypeCode.Left + Me!btnInstrumentTypeCode.Width +  50 
    End With
    
    w = wtab - Me.lblDictionary_InqueryInvestment.Left - Me.lblDictionary_InqueryInvestment.Width _
        -  100  - Me.lblSort_InqueryInvestment.Width _
        -  100  - Me!lblCustomerBankID_InqueryInvestment.Width _
        -  100  - Me.lblQuickFind_InqueryInvestment.Width _
        - Me!btnQuickFind_InqueryInvestment.Width _
        - Me!optFilter_InqueryInvestment.Width
    w = w *  0 . 2 
    If w <  100  Then w =  100 
    
    With Me.lblSort_InqueryInvestment
        .Top = Me.lblDictionary_InqueryInvestment.Top
        .Left = Me.lblDictionary_InqueryInvestment.Left + Me.lblDictionary_InqueryInvestment.Width +  100 
    End With
    With Me!lstSort_InqueryInvestment
        .Top = Me.lblSort_InqueryInvestment.Top
        .Left = Me.lblSort_InqueryInvestment.Left + Me.lblSort_InqueryInvestment.Width
        .Width = w *  2 
    End With
    With Me.lblInstrumentTypeCode
        .Top = Me.lblSort_InqueryInvestment.Top + Me.lblSort_InqueryInvestment.Height
        .Left = Me.lblSort_InqueryInvestment.Left
    End With
    With Me!sInstrumentTypeCode
        .Top = Me.lblInstrumentTypeCode.Top
        .Left = Me!lstSort_InqueryInvestment.Left
        .Width = w *  2 
    End With
    
    With Me!lblCustomerBankID_InqueryInvestment
        .Top = Me.lblSort_InqueryInvestment.Top
        .Left = Me!lstSort_InqueryInvestment.Left + Me!lstSort_InqueryInvestment.Width +  100 
    End With
    With Me!iCustomerBankID_InqueryInvestment
        .Top = Me!lblCustomerBankID_InqueryInvestment.Top
        .Left = Me!lblCustomerBankID_InqueryInvestment.Left + Me!lblCustomerBankID_InqueryInvestment.Width
        .Width = w *  2 
    End With
    With Me.lblInqueryInvestmentStatusCode
        .Top = Me.lblInstrumentTypeCode.Top
        .Left = Me!lblCustomerBankID_InqueryInvestment.Left
    End With
    With Me!sInqueryInvestmentStatusCode
        .Top = Me.lblInqueryInvestmentStatusCode.Top
        .Left = Me!iCustomerBankID_InqueryInvestment.Left
        .Width = w *  2 
    End With
        
    With Me.lblQuickFind_InqueryInvestment
        .Top = Me!lblCustomerBankID_InqueryInvestment.Top
        .Left = Me!iCustomerBankID_InqueryInvestment.Left + Me!iCustomerBankID_InqueryInvestment.Width +  100 
    End With
    With Me!txtQuickFind_InqueryInvestment
        .Top = Me.lblQuickFind_InqueryInvestment.Top
        .Left = Me.lblQuickFind_InqueryInvestment.Left + Me.lblQuickFind_InqueryInvestment.Width
        .Width = w
    End With
    With Me!btnQuickFind_InqueryInvestment
        .Top = Me!txtQuickFind_InqueryInvestment.Top
        .Left = Me!txtQuickFind_InqueryInvestment.Left + Me!txtQuickFind_InqueryInvestment.Width
    End With
    With Me!optFilter_InqueryInvestment
        .Top = Me!btnQuickFind_InqueryInvestment.Top
        .Left = Me!btnQuickFind_InqueryInvestment.Left + Me!btnQuickFind_InqueryInvestment.Width
    End With
    
    With Me!grcInqueryInvestment
        .Top = Me!btnInqueryInvestmentID.Top + Me!btnInqueryInvestmentID.Height +  50 
        .Left = Me!btnInqueryInvestmentID.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
        Me.boxInqueryInvestment.Move .Left, .Top, .Width, .Height
    End With
    
    '=======================================================
    '   tab8InqueryAccount
    '=======================================================
    '   Me.tab8InqueryAccount.SetFocus
    With Me.lblInqueryAccount
        .Top = t
        .Left = l
        .Width = Me!btnInqueryAccountID.Width +  50  + Me!btnInqueryAccountTable.Width
    End With
    With Me!btnInqueryAccountID
        .Top = Me.lblInqueryAccount.Top + Me.lblInqueryAccount.Height +  30 
        .Left = Me.lblInqueryAccount.Left
    End With
    With Me!btnInqueryAccountTable
        .Top = Me!btnInqueryAccountID.Top
        .Left = Me!btnInqueryAccountID.Left + Me!btnInqueryAccountID.Width +  50 
    End With
    
    With Me!lblCustomerBank_InqueryAccount
        .Top = Me.lblInqueryAccount.Top
        .Left = Me!btnInqueryAccountTable.Left + Me!btnInqueryAccountTable.Width +  100 
        .Width = Me!btnCustomerBankID_InqueryAccount.Width
    End With
    With Me!btnCustomerBankID_InqueryAccount
        .Top = Me!lblCustomerBank_InqueryAccount.Top + Me!lblCustomerBank_InqueryAccount.Height +  30 
        .Left = Me!lblCustomerBank_InqueryAccount.Left
    End With
    
    With Me.lblDictionary_InqueryAccount
        .Top = Me!lblCustomerBank_InqueryAccount.Top
        .Left = Me!lblCustomerBank_InqueryAccount.Left + Me!lblCustomerBank_InqueryAccount.Width +  100 
        .Width = Me!btnInqueryAccountStatusCode.Width
    End With
    With Me!btnInqueryAccountStatusCode
        .Top = Me.lblDictionary_InqueryAccount.Top + Me.lblDictionary_InqueryAccount.Height +  30 
        .Left = Me.lblDictionary_InqueryAccount.Left
    End With
    
    w = wtab _
        - Me.lblDictionary_InqueryAccount.Left - Me.lblDictionary_InqueryAccount.Width _
        -  100  - Me.lblSort_InqueryAccount.Width _
        -  100  - Me!lblCustomerBankID_InqueryAccount.Width _
        -  100  - Me.lblQuickFind_InqueryAccount.Width _
        - Me!btnQuickFind_InqueryAccount.Width _
        - Me!optFilter_InqueryAccount.Width
    w = w *  0 . 2 
    If w <  100  Then w =  100 
    
    With Me.lblSort_InqueryAccount
        .Top = Me.lblDictionary_InqueryAccount.Top
        .Left = Me.lblDictionary_InqueryAccount.Left + Me.lblDictionary_InqueryAccount.Width +  100 
    End With
    With Me!lstSort_InqueryAccount
        .Top = Me.lblSort_InqueryAccount.Top
        .Left = Me.lblSort_InqueryAccount.Left + Me.lblSort_InqueryAccount.Width
        .Width = w *  2 
    End With
    
    With Me!lblCustomerBankID_InqueryAccount
        .Top = Me.lblSort_InqueryAccount.Top
        .Left = Me!lstSort_InqueryAccount.Left + Me!lstSort_InqueryAccount.Width +  100 
    End With
    With Me!iCustomerBankID_InqueryAccount
        .Top = Me!lblCustomerBankID_InqueryAccount.Top
        .Left = Me!lblCustomerBankID_InqueryAccount.Left + Me!lblCustomerBankID_InqueryAccount.Width
        .Width = w *  2 
    End With
    With Me.lblInqueryAccountStatusCode
        .Top = Me!lblCustomerBankID_InqueryAccount.Top + Me!lblCustomerBankID_InqueryAccount.Height
        .Left = Me!lblCustomerBankID_InqueryAccount.Left
    End With
    With Me!sInqueryAccountStatusCode
        .Top = Me.lblInqueryAccountStatusCode.Top
        .Left = Me!iCustomerBankID_InqueryAccount.Left
        .Width = w *  2 
    End With
        
    With Me.lblQuickFind_InqueryAccount
        .Top = Me!lblCustomerBankID_InqueryAccount.Top
        .Left = Me!iCustomerBankID_InqueryAccount.Left + Me!iCustomerBankID_InqueryAccount.Width +  100 
    End With
    With Me!txtQuickFind_InqueryAccount
        .Top = Me.lblQuickFind_InqueryAccount.Top
        .Left = Me.lblQuickFind_InqueryAccount.Left + Me.lblQuickFind_InqueryAccount.Width
        .Width = w
    End With
    With Me!btnQuickFind_InqueryAccount
        .Top = Me!txtQuickFind_InqueryAccount.Top
        .Left = Me!txtQuickFind_InqueryAccount.Left + Me!txtQuickFind_InqueryAccount.Width
    End With
    With Me!optFilter_InqueryAccount
        .Top = Me!btnQuickFind_InqueryAccount.Top
        .Left = Me!btnQuickFind_InqueryAccount.Left + Me!btnQuickFind_InqueryAccount.Width
    End With
    
    With Me!grcInqueryAccount
        .Top = Me!btnInqueryAccountID.Top + Me!btnInqueryAccountID.Height +  50 
        .Left = Me!btnInqueryAccountID.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
        Me.boxInqueryAccount.Move .Left, .Top, .Width, .Height
    End With
    
    '=======================================================
    '   tab9Raiting
    '=======================================================
    '   Me.tab9Raiting.SetFocus
    With Me!btnRaiting
        .Left = l
        .Top = t
    End With
    With Me!btnRaitingTable
        .Left = Me!btnRaiting.Left + Me!btnRaiting.Width +  100 
        .Top = Me!btnRaiting.Top
    End With
    With Me!grcRaiting
        .Top = Me!btnRaiting.Top + Me!btnRaiting.Height +  85 
        .Left = Me!btnRaiting.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
        Me.boxRaiting.Move .Left, .Top, .Width, .Height
    End With
    
    '=======================================================
    '   tab10CustomerHistory
    '=======================================================
    '   Me.tab10CustomerHistory.SetFocus
    With Me!lblCustomerHistory
        .Left = l
        .Top = t
    End With
    With Me!grcCustomerHistory
        .Top = Me!lblCustomerHistory.Top + Me!lblCustomerHistory.Height +  50 
        .Left = Me!lblCustomerHistory.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
        Me.boxCustomerHistory.Move .Left, .Top, .Width, .Height
    End With
    
    '=======================================================
    '   tab11Contact
    '=======================================================
    '   Me.tab11Contact.SetFocus
    w = wtab -  100  - Me!lblCustomerPhone1.Width _
        -  50  -  100  - Me!lblCustomerFax1.Width -  50  -  100 
    w = w /  2 
    With lblCustomerPhone1
        .Top = Me.tabStrip.Top +  420  +  100 
        .Left = Me.tabStrip.Left +  140  +  100 
    End With
    With Me!sCustomerPhone1
        .Top = Me!lblCustomerPhone1.Top
        .Left = Me!lblCustomerPhone1.Left + Me!lblCustomerPhone1.Width +  50 
        .Width = w
    End With
    With lblCustomerPhone2
        .Top = Me!lblCustomerPhone1.Top + Me!lblCustomerPhone1.Height +  100 
        .Left = Me!lblCustomerPhone1.Left
    End With
    With Me!sCustomerPhone2
        .Top = Me!lblCustomerPhone2.Top
        .Left = Me!sCustomerPhone1.Left
        .Width = Me!sCustomerPhone1.Width
    End With
    With lblCustomerFax1
        .Top = Me!lblCustomerPhone1.Top
        .Left = Me!sCustomerPhone1.Left + Me!sCustomerPhone1.Width +  100 
    End With
    With Me!sCustomerFax1
        .Top = Me!lblCustomerFax1.Top
        .Left = Me!lblCustomerFax1.Left + Me!lblCustomerFax1.Width +  50 
        .Width = w
    End With
    With lblCustomerFax2
        .Top = Me!lblCustomerPhone2.Top
        .Left = Me!lblCustomerFax1.Left
    End With
    With Me!sCustomerFax2
        .Top = Me!lblCustomerPhone2.Top
        .Left = Me!sCustomerFax1.Left
        .Width = Me!sCustomerFax1.Width
    End With
    With Me!lblCustomerAddress
        .Top = Me!lblCustomerPhone2.Top + Me!lblCustomerPhone2.Height +  100 
        .Left = Me!lblCustomerPhone2.Left
    End With
    With Me!sCustomerAddress
        .Top = Me!lblCustomerAddress.Top
        .Left = Me!lblCustomerAddress.Left + Me!lblCustomerAddress.Width +  50 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140  -  100 
    End With
    With Me!lblCustomerAddressPost
        .Top = Me!lblCustomerAddress.Top + Me!lblCustomerAddress.Height +  100 
        .Left = Me!lblCustomerAddress.Left
    End With
    With Me!sCustomerAddressPost
        .Top = Me!lblCustomerAddressPost.Top
        .Left = Me!lblCustomerAddressPost.Left + Me!lblCustomerAddressPost.Width +  50 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140  -  100 
    End With
    With Me!lblCustomerEmail
        .Top = Me!lblCustomerAddressPost.Top + Me!lblCustomerAddressPost.Height +  100 
        .Left = Me!lblCustomerAddressPost.Left
    End With
    With Me!sCustomerEmail
        .Top = Me!lblCustomerEmail.Top
        .Left = Me!lblCustomerEmail.Left + Me!lblCustomerEmail.Width +  50 
        .Width = w
    End With
    With Me!lblCustomerWWW
        .Top = Me!lblCustomerEmail.Top
        .Left = Me!lblCustomerFax2.Left
    End With
    With Me!sCustomerWWW
        .Top = Me!lblCustomerWWW.Top
        .Left = Me!sCustomerFax2.Left
        .Width = Me!sCustomerFax2.Width
    End With
    
    '=======================================================
    '   tab12CustomerSource
    '=======================================================
    '   Me.tab12CustomerSource.SetFocus
    With Me!btnCustomerSource
        .Left = l
        .Top = t
    End With
    With Me!grcCustomerSource
        .Top = Me!btnCustomerSource.Top + Me!btnCustomerSource.Height +  90 
        .Left = Me!btnCustomerSource.Left
        .Height = Me.tabStrip.Top + htbs - .Top -  140 
        .Width = Me.tabStrip.Left + wtbs - .Left -  140 
        Me.boxCustomerSource.Move .Left, .Top, .Width, .Height
    End With

GoTo End_Proc
    
End_Proc:
    Me.Section( 0 ).Height = iFormHeight
    Me.Painting = True

End Sub
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34622884
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и впрямь по фашистски :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34622959
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
 With Me!sCustomerPhone1
        .Top = Me!lblCustomerPhone1.Top
        .Left = Me!lblCustomerPhone1.Left + Me!lblCustomerPhone1.Width +  50 
        .Width = w
    End With


так будет короче....

Код: plaintext
1.
2.
        Me!sCustomerPhone1.Top = Me!lblCustomerPhone1.Top
        Me!sCustomerPhone1.Left = Me!lblCustomerPhone1.Left + Me!lblCustomerPhone1.Width +  50 
        Me!sCustomerPhone1.Width = w


хотя, если деньги брать за количество строк....
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34622975
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По мойму первый вариант быстрее... Да и не всегда оптимизацмя кода сводиться к оптимизации текста (это насчёт денег)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34623089
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C width набивается быстрее. А по-хорошему надо было бы удобные ф-ии по размещению в бандах написать.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34623444
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это так, офтоп, на любителя......
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34623476
mcgrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительC width набивается быстрее. А по-хорошему надо было бы удобные ф-ии по размещению в бандах написать.
И быстрее код выполняется.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34623587
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcgrowИ быстрее код выполняется.Я тоже именно это и имел ввиду.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34623772
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяэто так, офтоп, на любителя......
Мля, на меня офтоп положили.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34624240
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему прогресс барами не пользуешься? Красивее ведь, чем жёлтый квадратик.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34624825
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто мне поцентаж по мере срабатывания выборки при присваивании рекордсоуру формы некоей конструкции SELECT ... FROM ... WHERE ... ORDER BY будет выдавать ? К тому же у меня максимальные паузы не более 1-2 сек или доли секунды.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34625204
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любительа кто мне поцентаж по мере срабатывания выборки при присваивании рекордсоуру формы некоей конструкции SELECT ... FROM ... WHERE ... ORDER BY будет выдавать ? А разве нельзя как-то считывать из статус бара и передавать в свой? Акцесс-то ведь откуда-то знает процентаж...
Программист-ЛюбительК тому же у меня максимальные паузы не более 1-2 сек или доли секунды.Как всегда выбрал самый лёгкий путь
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34632049
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительВручную копируются из сервера при заведении новых ролей/пользователей.А там где схемы - фамилии, что, у каждого свои таблицы? Запутался...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34632972
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSА там где схемы - фамилии, что, у каждого свои таблицы? Запутался...
Чего ???!!!

Таблицы - это таблицы в сервере.
Таблицы сгруппированы в схемы (для удобства, так как бизнес-объект как правило реализуется несколькиим таблицами, например таблица оргнанизаций+ее справочники)
Пользователи берутся с сервера.
Роли - оттуда же.
Вхождение пользователей в роли - так же.
Права на таблицы назначаютмя для ролей, тем самым пользователи получают к ним доступ опосредованно , через те роли, в которые они входят.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633000
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бабарыка, Байдаков и т.д. - это бизнесс объекты со своими справочниками?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633165
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, это пользователи скопированные с SQL сервера.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633173
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица SYS_User, держащая список этих пользователей связана как справочник (сторона один) с другими таблицами, в которых эти пользователи фигурируют на сторонах много.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633302
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сами схемы на скл (те что на картинке), функций схем как таковых не выполняют?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633801
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если под "схемы" понимаются диаграммы, то нет. Они используются только для работы со структурой БД на сервере средствами EM. Таблицы, ключи, связи и т.п. вытряхиваются из сервера запросами, базирующимися на INFORMATION_SCHEMA.*
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633878
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSА сами схемы на скл (те что на картинке), функций схем как таковых не выполняют?ой
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633928
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это у тебе в 2005 черт-те-что вылезает.

Фамилии - у нормальных людей (на 2000) это пользователи.
dbo_ - стандартные роли БД
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633933
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что не фамилии и не dbo_ - это добавленные роли в данной БД.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633949
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сралями понятно :) А чё за бабарыки?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633957
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633990
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз для тех кто в танке: это - фамилии, написанные латинницей. Они получаются из SQL сервера (логины=учетные записи домена Windows, допущенные до базы данных), форма где это происходит и код получения у тебя есть.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34633998
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и за то, что у тебя 2005 я не отвечаю!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34634040
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А? Громче пожалуйста! Совсем не слышно

Типа схемы (не роли, не логины, не пользователи, а именно СХЕМЫ), которые я вижу в 2005 - это всего лишь мираж? ;) Тогда понятно боле-менее.

ЗЫ: Распаковал твой оригинальный файл на 2000, картинка таже. Тут схемы - тоже глюк?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34634122
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 2000 НЕТУ Schemas.
Есть Server->Security->Logins
Есть Server->Database...->Users
Есть Server->Database...->Roles

В Server->Security->Logins подключаются нужные логины из домена Виндоуз.

Есть Server->Database...->Roles в дополнение к стандартным dbo_... добавляешь свои роли по вкусу. Настройка ролей у меня происходит в специальной форме, автоматически. Роли копируются в специальные таблицы в БД SYS_Role.

В Server->Databse...->Users заводятся пользователи, которые соответсвуют логинам в предыдущем пункте. Одновременно в этом пунке свежезаведеные пользователи втыкаются в нужные роли. Пользователи и их вхождение в роли тоже копируются в таблицы в БД SYS_User, SYS_RoleUser.

Я сам в администрировании сервера не силен, так, азы только, спрашивай лучше на специализированном форуме. Купи книжку про SQL сервер.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34634196
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Купил, вот и появились непонятки со схемами ;)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34634474
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ByKiS
Схема - это как некий контейнер, в рамках которого содержатся различные объекты сиквела. При создании пользователя от логина в базе данных создаётся схема для него, где он владелец (владельца потом можно поменять). В рамках разных схем в одной БД у объектов одного типа могут быть одинаковые названия (в рамках одной схемы две вьюхи одного названия иметь не могут, равно как и все объекты с одинаковым типом). Схема может содержать объекты БД, которые принадлежат другому пользователю, а не владельцу схемы. Подробнее в БОЛ.
В 2005 со схемами много чего нового в плане разрешений.

P.S. Удобно разделять по схемам объекты, которые принадлежат разным предметным областям.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34634537
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этого я не знал - вот и запутался. Прояснилось :)
BOLIn previous versions of SQL Server, database users and schemas were conceptually the same object. Beginning in SQL Server 2005, users and schemas are separate, and schemas serve as containers of objects.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34649321
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БыкисЕщё бы меню в метаданные засунуть...
ПЛОт этого я никуда не денусь. Но из общего перечня нерешеных задач эта - не самая горячая.Дяденька, подскажи как это делать?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34649355
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Элемениарно - при загрузке приложения создается меню. Все параметры при создании нового итема меню можно взять из таблички.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34649363
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вот что не ладится - меню делать надо по ролям, так? Вроде так. Для каждой роли своё меню. Вроде так. Некоторые пункты есть и у админиов, и у производства и у манагеров.
Если юзер в нескольких ролях - то не получается у меня придумать как делать меню.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34649456
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждая роль имеет вес (важность). Задавай по максимальному весу.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34676287
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи как у тебя форма грузиться из метаданных? В смысле как какой кодой она устанавливает роль пользователя и как потом подставляет нечто в источник данных?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34676480
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлЁ?!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34676489
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
Private Sub Form_Timer()

    Me.TimerInterval =  0 : Me.OnTimer = ""

    'Загрузка списков огранизаций для данной роли
    modSYS.SetList Me!lstSort, "CustomerOrderBy"
    modSYS.SetList Me!lstFilter, "CustomerFilter"
    Me!optFilter = False
    Me!optFilter.Enabled = False
    Me!btnQuickFind.Enabled = False
    
    Dim id, s
    If modForm.GetObjectByArgs("CheckData", Me.OpenArgs, s) Then
        Me!lstFilter.Enabled = False
        Me!btnAddCustomer.Enabled = False
        Me!btnDeleteCustomer.Enabled = False
    End If
    If modForm.GetObjectByArgs("iCustomerTypeID", Me.OpenArgs, id) Then
        Me!lstFilter = id
    End If

    'А внутри данной ф-ии грузится сам источник формы.
    Call RequeryData
    
    Dim ctl As Control
    If modForm.GetObjectByArgs("FieldList", Me.OpenArgs, s) Then
        For Each ctl In Me!grData.Form.Controls
            If _
                ctl.ControlType = acCheckBox Or _
                ctl.ControlType = acComboBox Or _
                ctl.ControlType = acTextBox _
            Then
                If ctl.ColumnOrder > Me!grData.Form.FrozenColumns Then
                    If InStr( 1 , s, ctl.ControlSource) >  0  Then
                        ctl.ColumnHidden =  0 
                    Else
                        ctl.ColumnHidden = - 1 
                    End If
                End If
            End If
        Next ctl
    Else
        For Each ctl In Me!grData.Form.Controls
            If _
                ctl.ControlType = acCheckBox Or _
                ctl.ControlType = acComboBox Or _
                ctl.ControlType = acTextBox _
            Then
                If ctl.ColumnOrder > Me!grData.Form.FrozenColumns Then
                    ctl.ColumnHidden =  0 
                End If
            End If
        Next ctl
    End If
    
    Me!grData.Visible = True
    Me.Repaint

    Call modForm.FindObjectByArgs(Me!grData.Form, "iCustomerID", Me.OpenArgs)

    Set DataGrid = Me!grData.Form
    DataGrid.OnDblClick = "[Event Procedure]"
    DataGrid.OnCurrent = "[Event Procedure]"
    
End Sub

Public Function MakeWhere() As String

    MakeWhere = ""
    If Me!optFilter Then
        If Me!txtQuickFind.value <> "" Then
            MakeWhere = _
                "(sCustomerName LIKE '%" & Me!txtQuickFind.value & "%' OR " & _
                "sCustomerReportName LIKE '%" & Me!txtQuickFind.value & "%' OR " & _
                "sCustomerFullName LIKE '%" & Me!txtQuickFind.value & "%')"
        End If
    End If

    Dim s
    If modForm.GetObjectByArgs("CheckData", Me.OpenArgs, s) Then
        If Len(MakeWhere) >  0  Then MakeWhere = MakeWhere & " AND "
        MakeWhere = MakeWhere & s
    ElseIf Not IsNull(Me!lstFilter) Then
        Dim sWhere
        sWhere = Me!lstFilter.Column( 2 )
        If InStr( 1 , sWhere, "{LIST}") >  0  Then
            sWhere = Replace(sWhere, "{LIST}", Me!lstFilter)
        End If
        If Len(MakeWhere) >  0  Then MakeWhere = MakeWhere & " AND "
        MakeWhere = MakeWhere & sWhere
    End If
    
End Function

Public Function MakeOrderBy() As String

    MakeOrderBy = ""
    If Not IsNull(Me!lstSort) Then
        MakeOrderBy = Me!lstSort.Column( 2 )
    Else
        MakeOrderBy = ""
    End If
    
End Function

Public Function MakeSQL() As String
On Error GoTo err_label

    Dim sWhere As String, sOrderBy As String
    Dim sFormWhere As String, sFormSource As String, sFormOrderBy As String
    Dim sControlWhere As String, sControlOrderBy As String
    
    sWhere = ""
    sOrderBy = ""
    ' Внутри этой ф-ии проверяются пользователь и роль. Исходный код у тебя есть.
    modSYS.FormInfo "Customer", sFormSource, sFormWhere, sFormOrderBy
    sControlWhere = MakeWhere
    sControlOrderBy = MakeOrderBy
    
    If Len(sFormWhere) >  0  Then
        sWhere = "(" & sFormWhere & ")"
    End If
    If Len(sControlWhere) >  0  Then
        If Len(sWhere) >  0  Then
            sWhere = sWhere & " AND "
        End If
        sWhere = sWhere & "(" & sControlWhere & ")"
    End If
    
    If Len(sControlOrderBy) >  0  Then
        sOrderBy = sControlOrderBy
    Else
        If Len(sFormOrderBy) >  0  Then
            If Len(sOrderBy) >  0  Then
                sOrderBy = sOrderBy & ", "
            End If
            sOrderBy = sOrderBy & sFormOrderBy
        End If
    End If
    
    If Len(sWhere) >  0  Then sWhere = "WHERE " & sWhere
    If Len(sOrderBy) >  0  Then sOrderBy = "ORDER BY " & sOrderBy
    MakeSQL = "SELECT * FROM " & sFormSource & " " & sWhere & " " & sOrderBy
    
exit_label:
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label

End Function

Public Function RequeryData()
On Error GoTo err_label

    DoCmd.Hourglass True
    Me!lstSort.SetFocus
    Me!grData.Visible = False
    Me.Repaint: Me.Painting = False:

    With Me!grData.Form
        .RecordSource = MakeSQL
        Me!btnOpenForm.Enabled = .Recordset.RecordCount >  0  _
            And Not .Recordset.BOF And Not .Recordset.EOF
    End With
    DoEvents
    
    Me!grData.Visible = True
    Me!grData.SetFocus
    Me.Painting = True: DoCmd.Hourglass False

exit_label:
    DoCmd.Hourglass False
    Exit Function
err_label:
    Call modError.ErrorMessage(Err.number, Err.Description)
    Resume exit_label
    
End Function
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34676503
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толи я поумнел, толи код простой - читаю и понимаю Гы!!!
Спасибо.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34676514
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ByKiSТоли я поумнел, толи код простой - читаю и понимаю
Нет, это я такой хороший код пишу.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34676554
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит ещё месяца два назад код у тебя был ужасный! Я ничего не понимал
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34676657
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ксати, с тех пор добавилась новая фича - назначение пользователям/ролям обязательных проверочных отчетов с требуемой периодичностью. При каждом запуске системы, ежедневно, 1 раз в неделю, в месяц, в квартал...

При старте появляется неубирающее всплывающее окно со списком отчетов и кнопкой выполнить. Результаты вываливаются в Excel. После этого с системой можно работать как обычно.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34676676
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любительобязательных проверочных отчетовА это что и зачем?
Типа, чтобы констрэйнты не делать? Разрешить пользователям всякую ***** писать а потом заставить её исправлять?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34677071
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во многих случаях констрейнами не отделаешься. Часто на момент совершения сделки известна не вся информация по контрагенту. Могут быть еще случаи более завуалированного дублирования, нежели просто совпадение значений в ключевом поле. (Например перекрытие сроков работы одного и того же человека на разных должностях или в разных филиалах). Не до конца заполненые данные. Если такие косяки прорвались через проверки во время ввода, то потом их надо обязательно периодически подчищать.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34677153
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительЧасто на момент совершения сделки известна не вся информация по контрагентуА флаг какойнить чем плох? У меня флаг подтверждения - вводи всякий бред, играйся, но флаг не трогай. Захотел подтвердить, будь добр все данные занести, да так чтобы ни один констрэйнт не придрался. Ничего привыкли... А то мода была наподобие, выпишете мне счёт фактуру, а сумму мы потом обсудим и впишем.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34677699
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А шо это даёт?
Код: plaintext
Me.Repaint: Me.Painting = False:
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34677712
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перерисовка и запрещения дальнейшей отрисовки формы на экране.

Такие строчки нужны для показа бледон-желтых прямоугольников "загружаются данные" и т.п. при операциях, занимающих какое-то время. Если не ставить перерисовку и сразу после этого запрещение, то аксес сам решает, когда он изволит перерисоваться. Его мнение по этому поводу част не свопадает с моим.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34677721
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я убрал и разницы не заметил...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34677747
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это от формы и тяжести подгружаемых данных сильно зависит. Попробуй еще на заднем плане excel|word поавтоматизировать.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34685004
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое
Me.Section(0).Height ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34685013
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоесть
me.InsideHeight = me.section(0).height + me.section(1).height ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34685213
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня нет форм с заголовком/примечанием, т.е. Section всегда (0). И InsideHeight = Section(0).Height. Для нескольких секций InsideHeight = Section(0).Height + Section(1).Height + Section(2).Height
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34691629
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты там гда где смайлики вставляешь на фон акцеса - оно у тебя растягивает на весь екран?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34691638
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, плиточкой укладывается.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34703649
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока ты не ушёл в отпуск -
система аудита - очень много мусора из-за дефалтов... Как их вапче лучше делать (то есть где) на скл или в формах?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34703720
ByKiS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот - я только одну запись изменил а вон сколько всего появилось
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34704033
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Менял не запросом, точно 1 запись ?

Может что-то у тебя с первичным ключом в этой таблице. При срабатывании триггера выполняется обновление исходной таблицы для записей у которых ID = ID таблиц inserted и deleted.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34715328
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что с LinkReferences может быть?
Всё работает, а это
Код: plaintext
        .LinkReferenceFromGUID "ADOMD",  2 #,  8 #, "{22813728-8BD3-11D0-B4EF-00A0C9138CA4}"
нивкакую не хочет
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34715445
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ее вручную через меню вибиа линковать она как называецца ? Завтра на работе попробую прилинковать.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34715750
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Завтра - это уже? :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34715777
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже. Наберись терпения.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34716394
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заснул?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34717968
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алё?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34718846
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно не хочет.
Код: plaintext
.LinkReferenceFromGUID "ADOMD",  2 #,  8 #, "{22813728-8BD3-11D0-B4EF-00A0C9138CA4}"
Pначит от версии 2.0 к версии 8.0 с шагом -0.1. Сколько раз выполнится цикл, прикинь ?
Вот так
Код: plaintext
.LinkReferenceFromGUID "ADOMD",  3 #,  2 #, "{22813728-8BD3-11D0-B4EF-00A0C9138CA4}"
линкует зачумятельно.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34718867
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любительс шагом -0.1.С чем?
Программист-ЛюбительСколько раз выполнится цикл, прикинь ?Сколько?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34718881
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алгоритм линковки перебирает версии от большего номера к меньшему (более старой версии).
3.0, 2.9, 2.8, ... 2.0
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34719020
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исчо вапрос - как сделать?
На форме стартуп (твоей, где происходит подключение библиотек) он таймер есть
Код: plaintext
Dim conn As ADODB.Connection
(вместо курентпрожек.конекшн). АДО конечно нету, т.к. он отключается при выходе.
Как подключить АДО, чтобы аксес не ругался? Я пробовал он лоад подключать адо, но ему не нравиться что она в модуле формы есть, пока ещё не подключена.
Я понятно спросил?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34719146
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно всё это в отдельные ф-ии. А как ещё?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34719181
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял - в таймере сначала подключается ADODB. Уточни вопрос.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34719248
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно, но если в том же таймере использую ссылаюсь на объекты адо, то аксесс ругается. И не важно что к тому времени, как адо потребуется - билиотека уже будет подключена. Или я неправ?
Код как утебя. Но при открытии формы, сразу ругается на жёлтую строчку.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
Private Sub Form_Timer()
On Error GoTo Err_Form_Timer

    Dim ref As Reference
    Dim bOK As Boolean

    If iInitialisationStep =  1  Then
    
        With Me
            .TimerInterval =  0 
            .OnTimer = ""
            .lblCurrentProcess.Caption = _
                "Inicializuojamos ir pajungiamos sisteminës bibliotekos..."
            .Repaint
        End With
        
        For Each ref In Application.References
        
            If Not ref.IsBroken Then
                
                If ref.Name = "stdole" Or _
                   ref.Name = "Office" Or _
                   ref.Name = "MSComctlLib" Or _
                   ref.Name = "Scripting" Or _
                   ref.Name = "MSCommLib" Or _
                   ref.Name = "ADOMD" _
                Then Application.References.Remove ref
            
            End If
                
        Next ref
    
        Set lnkRef = Nothing: Set lnkRef = New LinkReferences
           
        With lnkRef
            .CheckReferences
            .LinkADODB
            .LinkReferenceFromGUID "stdole",  2 #,  1 #, "{00020430-0000-0000-C000-000000000046}"
            .LinkReferenceFromGUID "Office",  2 . 3 ,  1 #, "{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}"
            .LinkReferenceFromGUID "MSComctlLib",  2 #,  0 #, "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}"
            .LinkReferenceFromGUID "Scripting",  1 #,  0 #, "{420B2830-E718-11CF-893D-00A0C9054228}"
            .LinkReferenceFromGUID "MSCommLib",  1 #,  1 #, "{648A5603-2C6E-101B-82B6-000000000014}"
            .LinkReferenceFromGUID "ADOMD",  3 #,  2 #, "{22813728-8BD3-11D0-B4EF-00A0C9138CA4}"
            .CheckReferences
        End With
        
        bOK = True
        
        For Each ref In References
        
            If ref.IsBroken = False Then
                
                Me.lblCurrentAction.Caption = ref.Name & " " & ref.Major & "." & ref.Minor & " " & ref.FullPath
        
                If ref.Name = "Access" And ref.Major <  9  Then
                    MsgBox _
                        "Ðiame kompiuteryje instaliuota sena MS Office " & _
                        "Access versija." & _
                        vbExclamation + vbCritical + vbOKOnly, _
                        "Bibliotekø inicializacija"
                    bOK = False
                End If
            
            Else
                       
                Me.lblCurrentAction.Caption = ref.Name & " (" & ref.Guid & ")"
                MsgBox _
                    "Ðiame kompiuteryje instaliuota sena arba nepilna MS Office " & _
                    "paketo programø versija." & vbNewLine & vbNewLine & _
                    "Nepavyko inicializuoti: " & ref.Name & " (" & ref.Guid & ")", _
                    vbExclamation + vbCritical + vbOKOnly, _
                    "Bibliotekø inicializacija"
                bOK = False
            End If
            
            Me.Repaint
            
            Dim PauseTime: PauseTime = iShortPause
            Dim Start:     Start = Timer
            Do While Timer < Start + PauseTime:  DoEvents: Loop
        
        Next ref

        Me.lblCurrentProcess.Caption = ""
        Me.lblCurrentAction.Caption = ""
        
        If Not bOK Then Application.Quit
        
        Me.lblCurrentProcess.Caption = "Jungiamasi prie SQL serverio ir duomenø bazës..."
        Me.Repaint
        
On Error GoTo Err_Connection
        Me.lblCurrentAction.Caption = "Tikrinamas sujungimas su serveriu"
        Me.Repaint
        Dim conn As ADODB.Connection: Set conn = New ADODB.Connection
        conn.ConnectionString = strConnLKvitai
        conn.Open
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767416
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нахожу скриншотов с твоими деревянными справочниками. Не помнишь хде выкладывал?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767455
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справочниками чего ?
Сейчас у меня несколько форм с деревьями. Проверочные отчеты, источники данных, шаблоны и документы.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767470
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да мне бы посмотреть как с деревьми работать - типа новый нод, удалить, сделать парентам... Кнопками? Контекстным меню? Тулбаром? Драг/дроп и апдейт и лженоды с текстом "новый нод"? Или вообще для работы отдельная простая форма, а деревом только показывать? Кароче не могу придумать - и так не удобно, и так не удобно. Поделись идеями ;)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767524
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я "сачканул" сделал не так добросовестно, как следовало бы. Но все таки для той конкретной ситуации, где это дерево работает получилось на четверочку.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767536
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходный код (обрати внимание внизу на связь драг-н-дропа с T-SQL процедурами):
(Form_Resize выкинул, ты знаешь, что у меня там ужас-ужас)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
Private Sub Form_Load()

    SourceObject = ""
    nodeKey = ""
    Me!lstOption =  1 
    
    bExcel = Null
    sFileName = ""
    bFormat = Null
    bOpen = Null
    optFieldList = Null
    
    Call modCheckData.LoadTree(Me.treeCtl.Object, Me.lstOption)
    ' Key:="ROOT"
    ' Key:="CD" & rsCheckData!iCheckDataID
    ' Key:="OP" & rsNode!iSyntaxNodeID
    With Me.treeCtl.Nodes("ROOT")
        .Expanded = True
        .Selected = True
    End With
    NodeClick Me.treeCtl.Nodes("ROOT"), True

    With Me.treeCtl
        .style =  7 
        .Indentation =  300 
        .LineStyle =  1 
        .Visible = True
        .SetFocus
        .OLEDragMode =  1  ' ccOLEDragAutomatic
        .OLEDropMode =  1  ' ccOLEDropManual
    End With
    blnDragging = False

End Sub

Private Sub treeCtl_NodeClick(ByVal oNode As Object)

    NodeClick oNode, True

End Sub

Public Function SetDatasourceList()

    If SourceObject = "CheckData0" Then
        If Me.lstOption =  1  Then
            With Me.subForm.Form.sDatasourceName
                .RowSource = _
                    "SELECT sDatasourceName, sDatasourceDescription " & _
                    "FROM qrDatasourceDescription " & _
                    "ORDER BY sDatasourceName, sDatasourceDescription"
                .ColumnWidths = "2268;5670"
                .BoundColumn =  1 
            End With
        Else
            With Me.subForm.Form.sDatasourceName
                .RowSource = _
                    "SELECT sDatasourceDescription, sDatasourceName " & _
                    "FROM qrDatasourceDescription " & _
                    "ORDER BY sDatasourceDescription, sDatasourceName"
                .ColumnWidths = "5670;2268"
                .BoundColumn =  2 
            End With
        End If
    End If
    
End Function

Public Function NodeClick(n As node, Optional bVisualEffect As Boolean = True)

    DoCmd.Hourglass True
    If Not n Is Nothing Then
        nodeKey = n.Key
        Dim s As String, ss() As String
        s = n.FullPath
        ss = Split(s, "\")
        Select Case UBound(ss)
        Case  0 
            If SourceObject <> "CheckData0" Then
                SourceObject = "CheckData0"
                Me.subForm.SourceObject = "frmMETA_CheckData_subCheckData0"
                Me.subForm.Form.UniqueTable = "METAB_CheckData"
                Me.lblSub.Caption = " Проверочные отчеты"
            End If
            Me.subForm.Form.RecordSource = _
                "SELECT * " & _
                "FROM qrCheckData " & _
                "ORDER BY sCheckDataName"
            Call SetDatasourceList
        Case  1 
            If SourceObject <> "CheckData1" Then
                SourceObject = "CheckData1"
                Me.subForm.SourceObject = "frmMETA_CheckData_subCheckData1"
                Me.subForm.Form.UniqueTable = "METAB_CheckData"
                Me.lblSub.Caption = " Данные отчета"
            End If
            Me.subForm.Form.RecordSource = _
                "SELECT * " & _
                "FROM qrCheckData " & _
                "WHERE iCheckDataID=" & Mid(n.Key,  3 )
        Case Else
            If SourceObject <> "CheckData2" Then
                SourceObject = "CheckData2"
                Me.subForm.SourceObject = "frmMETA_CheckData_subCheckData2"
                Me.subForm.Form.UniqueTable = "METAB_SyntaxNode"
                Me.lblSub.Caption = " Данные узла"
            End If
            Me.subForm.Form.RecordSource = _
                "SELECT * " & _
                "FROM qrSyntaxNode " & _
                "WHERE iSyntaxNodeID=" & Mid(n.Key,  3 ) & " " & _
                "ORDER BY iSyntaxNodeParentNomer"
        End Select
    Else
        nodeKey = ""
    End If
    If Me.subForm.SourceObject <> "" Then
        Dim b As Boolean: b = modUser.IsSuperUser()
        With Me.subForm.Form
            .AllowAdditions = b
            .AllowDeletions = b
            .AllowEdits = b
        End With
    End If
    Form_Resize
    DoCmd.Hourglass False

End Function

Private Sub btnExpandAll_Click()

    DoCmd.Hourglass True
    Me.treeCtl.Visible = False
    Me.Repaint
    Me.Painting = False
    
    Dim n As node
    For Each n In Me.treeCtl.Nodes
        n.Expanded = True
    Next n

    Me.treeCtl.Visible = True
    Me.Painting = True
    DoCmd.Hourglass False

End Sub

Public Function CollapseAll()

    Dim n As node
    For Each n In Me.treeCtl.Nodes
        If n.Key = "ROOT" Then
            n.Expanded = True
        Else
            n.Expanded = False
        End If
    Next n

End Function

Public Function CollapseAllVisual()

    DoCmd.Hourglass True
    Me.treeCtl.Visible = False
    Me.Repaint
    Me.Painting = False
    
    Call CollapseAll
    
    Me.treeCtl.Visible = True
    Me.Painting = True
    DoCmd.Hourglass False

End Function

Private Sub btnCollapseAll_Click()

    Call CollapseAllVisual
    
End Sub

Private Sub btnChildOR_Click()

    Dim treeNode As node, id, idParent, sFlag, iLevel
    Set treeNode = Me.treeCtl.SelectedItem
    If Not treeNode Is Nothing Then
        Dim s As String, ss() As String
        s = treeNode.FullPath
        ss = Split(s, "\")
        Select Case UBound(ss)
        Case  0 ,  1 
            Beep
            Exit Sub
        Case Else
            iLevel =  2 
            id = CLng(Mid(treeNode.Key,  3 ))
            idParent = DLookup( _
                "iSyntaxNodeParentID", "METAB_SyntaxNode", _
                "iSyntaxNodeID=" & id)
            If Not IsNull(idParent) Then
                CurrentProject.Connection.Execute _
                    "dbo.SyntaxNode_MoveNodeToChild 'OR', " & id
            End If
        End Select
    End If
    
    If Not id >  0  Then
        Beep
        Exit Sub
    End If

End Sub

Private Sub btnChildAND_Click()

    Dim treeNode As node, id, idParent, sFlag, iLevel
    Set treeNode = Me.treeCtl.SelectedItem
    If Not treeNode Is Nothing Then
        Dim s As String, ss() As String
        s = treeNode.FullPath
        ss = Split(s, "\")
        Select Case UBound(ss)
        Case  0 ,  1 :
            Beep
            Exit Sub
        Case Else
            iLevel =  2 
            id = CLng(Mid(treeNode.Key,  3 ))
            idParent = DLookup( _
                "iSyntaxNodeParentID", "METAB_SyntaxNode", _
                "iSyntaxNodeID=" & id)
            If Not IsNull(idParent) Then
                CurrentProject.Connection.Execute _
                    "dbo.SyntaxNode_MoveNodeToChild 'AND', " & id
            End If
        End Select
    End If

End Sub

Private Sub btnCopy_Click()

    Dim treeNode As node, id, idCopy, sFlag
    Set treeNode = Me.treeCtl.SelectedItem
    If Not treeNode Is Nothing Then
        id = Null
        Dim s As String: s = treeNode.FullPath
        Dim ss() As String: ss = Split(s, "\")
        Select Case UBound(ss)
        Case  0 ,  1 
            Call modForm.GetObjectID(Me.subForm.Form, "iCheckDataID", id)
            If Not IsNull(id) Then
                CurrentProject.Connection.Execute _
                    "dbo.CheckData_CopyTree " & id
            End If
        Case Else
            'Данные текущего уровня
            id = CLng(Mid(treeNode.Key,  3 ))
            sFlag = DLookup( _
                    "sSyntaxNodeRootFlag", "METAB_SyntaxNode", _
                    "iSyntaxNodeID=" & id)
            If id >  0  Then
                idCopy = CurrentProject.Connection.Execute _
                    ("dbo.SyntaxNode_CopyNode " & id).Fields("iSyntaxNodeID")
                If idCopy >  0  Then
                    ' Key:="OP" & rsNode!iSyntaxNodeID
                    RequeryTree
                    Set treeNode = Me.treeCtl.Nodes("OP" & idCopy)
                    Call modTree.ExpandNode(Me.treeCtl.Object, treeNode, True)
                    Call Me.NodeClick(treeNode)
                End If
            End If
        End Select
    End If

End Sub

Private Sub btnDelete_Click()

    Dim treeNode As node, id, sFlag
    Set treeNode = Me.treeCtl.SelectedItem
    If Not treeNode Is Nothing Then
        id = Null
        Dim s As String: s = treeNode.FullPath
        Dim ss() As String: ss = Split(s, "\")
        Select Case UBound(ss)
        Case  0 ,  1 
            '   Удаление всего отчета
            Call modForm.GetObjectID(Me.subForm.Form, "iCheckDataID", id)
            If Not IsNull(id) Then
                On Error Resume Next
                CurrentProject.Connection.Execute _
                    "dbo.CheckData_DeleteTree " & id
                If Err.number <>  0  Then
                    '   -2147217873
                    '   DELETE statement conflicted with COLUMN REFERENCE constraint
                    '   'FK_METAB_CheckDataSchedule_METAB_CheckData'.
                    '   The conflict occurred in database 'AM',
                    '   table 'METAB_CheckDataSchedule', column 'iCheckDataID'.
                    If Err.number = - 2147217873  Then
                        MsgBox _
                            "Нельзя удалить данный проверочный отчет, " & _
                            "так как он используется в системе.", _
                            vbExclamation + vbOKOnly, _
                            "Удаления проверочного отчета"
                    End If
                    Err.Clear
                    GoTo exit_sub
                End If
                On Error GoTo  0 
            End If
        Case Else
            '   Данные текущего уровня дерева выражений
            id = CLng(Mid(treeNode.Key,  3 ))
            sFlag = DLookup( _
                    "sSyntaxNodeRootFlag", "METAB_SyntaxNode", _
                    "iSyntaxNodeID=" & id)
            If id >  0  Then
                CurrentProject.Connection.Execute _
                    "dbo.SyntaxNode_DeleteNode " & id
            End If
        End Select
        Me.treeCtl.Nodes.Remove treeNode.Key
    End If
    
exit_sub:
    Exit Sub

End Sub

Private Sub btnMoveUp_Click()

    Dim treeNode As node, id, idParent, sFlag, iLevel
    Set treeNode = Me.treeCtl.SelectedItem
    If Not treeNode Is Nothing Then
        Dim s As String, ss() As String
        s = treeNode.FullPath
        ss = Split(s, "\")
        Select Case UBound(ss)
        Case  0 ,  1 
            Beep
            Exit Sub
        Case Else
            iLevel =  2 
            id = CLng(Mid(treeNode.Key,  3 ))
            idParent = DLookup( _
                "iSyntaxNodeParentID", "METAB_SyntaxNode", _
                "iSyntaxNodeID=" & id)
            If Not IsNull(idParent) Then
                CurrentProject.Connection.Execute _
                    "dbo.SyntaxNode_MoveNodeToParent " & id
            End If
        End Select
    End If

End Sub

Public Function RequeryTree()

    Dim s As String
    s = Me.treeCtl.SelectedItem.Key
    Me.treeCtl.Nodes.Clear
    DoCmd.Hourglass True
    Me.treeCtl.Visible = False
    Me.subForm.Visible = False
    Me.Repaint
    Me.Painting = False
    
    Call modCheckData.LoadTree(Me.treeCtl.Object, Me.lstOption, False)
    CollapseAll
    Me.subForm.Form.Requery
    On Error Resume Next
    Me.treeCtl.Nodes(s).Selected = True
    Me.treeCtl.Nodes(s).EnsureVisible = True
    On Error GoTo  0 

    If SourceObject = "CheckData0" Then Call SetDatasourceList

set_focus:
    Me.subForm.Visible = True
    Me.treeCtl.Visible = True
    Me.treeCtl.SetFocus
    Me.Painting = True
    DoCmd.Hourglass False
    Exit Function
    
err_label:
    If Err.number =  35601  Then
        'Element not found
        Err.Clear
        Resume set_focus
    End If

End Function

Private Sub btnRequery_Click()

    RequeryTree
    
End Sub

Private Sub lstOption_AfterUpdate()

    RequeryTree

End Sub

Public Function CheckDataLevel()

    Dim treeNode As node, id, sFlag
    Set treeNode = Me.treeCtl.SelectedItem
    Me.treeCtl.SetFocus
    If Not treeNode Is Nothing Then
        Dim s As String, ss() As String
        s = treeNode.FullPath
        ss = Split(s, "\")
        Select Case UBound(ss)
        Case  0 ,  1 
            Call modForm.GetObjectID(Me.subForm.Form, "iCheckDataID", id)
        Case Else
            id = CLng(Mid(treeNode.Key,  3 ))
            sFlag = DLookup( _
                "sSyntaxNodeRootFlag", "METAB_SyntaxNode", _
                "iSyntaxNodeID=" & id)
            While sFlag <> "Y" And Not IsNull(id)
                id = DLookup( _
                    "iSyntaxNodeParentID", "METAB_SyntaxNode", _
                    "iSyntaxNodeID=" & id)
                sFlag = DLookup( _
                    "sSyntaxNodeRootFlag", "METAB_SyntaxNode", _
                    "iSyntaxNodeID=" & id)
            Wend
            If Not IsNull(id) Then
                id = DLookup( _
                    "iSyntaxNodeParentID", "METAB_SyntaxNode", _
                    "iSyntaxNodeID=" & id)
                Set treeNode = Me.treeCtl.Nodes("CD" & id)
            End If
        Me.treeCtl.Nodes("CD" & id).Selected = True
        Call NodeClick(treeNode)
        Me.subForm.Form.Requery
        If id >  0  Then Me.subForm.Form.Recordset.Find "iCheckDataID=" & id
        End Select
    End If
    
    CheckDataLevel = id
    Exit Function

End Function

Private Sub btnExecute_Click()
    
    Dim id: id = CheckDataLevel
    If Not id >  0  Then Beep: Exit Sub
    
    Dim rs As New ADODB.Recordset
    Set rs = Me.subForm.Form.Recordset
        
    If Not rs.EOF And Not rs.BOF Then
        Dim sCheckDataSQL_OUT As String, sCheckDataOrderBy_OUT As String, sFieldList_OUT As String
        Dim sCheckDataRunUserName_OUT As String, dtCheckDataRunDate_OUT As Date
        Dim nCheckDataRunRecordCount_OUT As Integer
        
        Dim n: n = modCheckData.ParseAndRun( _
            rs!sDatasourceName, rs!iCheckDataID, rs!bCheckDataIncludeAudit, _
            sFieldList_OUT, sCheckDataSQL_OUT, sCheckDataOrderBy_OUT, _
            sCheckDataRunUserName_OUT, dtCheckDataRunDate_OUT, _
            nCheckDataRunRecordCount_OUT)
        Select Case n
        Case - 1 
            DoCmd.Hourglass False: Beep
            MsgBox _
                "Проверочный отчет " & rs!sCheckDataName & _
                vbNewLine & vbNewLine & _
                "Не выполнен из-за неверно сгенерированных условий проверки " & _
                "или по другой причине, связанной с исполнением инструкций SQL.", _
                vbExclamation + vbOKOnly
            DoCmd.Hourglass True
        Case - 2 
            DoCmd.Hourglass False: Beep
            MsgBox _
                "Проверочный отчет " & rs!sCheckDataName & _
                vbNewLine & vbNewLine & _
                "Не задан источник данных.", vbExclamation + vbOKOnly
            DoCmd.Hourglass True
        Case - 3 
            DoCmd.Hourglass False: Beep
            MsgBox _
                "Проверочный отчет " & rs!sCheckDataName & _
                vbNewLine & vbNewLine & _
                "Не сгенерирован текст условия отбора.", _
                vbExclamation + vbOKOnly
            DoCmd.Hourglass True
        Case Is >=  0 
            If n =  0  Then
                Beep
                MsgBox _
                    "Проверка выполнена успешно. " & vbNewLine & vbNewLine & _
                    "По условиям проверки не отфильтровано ни одной записи в источника данных.", _
                    vbInformation + vbOKOnly
            Else
                Beep
                sFileName = rs!sCheckDataName
                Dim sTableFormName: sTableFormName = DLookup( _
                    "sTableFormName", "TAB_DatasourceDescription", _
                    "sDatasourceName='" & rs!sDatasourceName & "'")
                Dim s
                If Len(sTableFormName) >  0  Then
                    s = modCheckDataRun.CheckDataOption _
                    (bExcel, sFileName, bFormat, bOpen, optFieldList,  1 )
                Else
                    s = modCheckDataRun.CheckDataOption _
                    (bExcel, sFileName, bFormat, bOpen, optFieldList,  0 )
                End If
                If InStr( 1 , s, "TABLE") >  0  Then
                    Dim sOpenArgs
                    sOpenArgs = _
                        "CheckData=" & sCheckDataSQL_OUT & ";" & _
                        "FieldList=" & sFieldList_OUT
                    DoCmd.OpenForm _
                        sTableFormName, acNormal, , , acFormEdit, acWindowNormal, _
                        sOpenArgs
                End If
                If InStr( 1 , s, "EXCEL") >  0  Then
                    DoCmd.OpenForm _
                        "dlgCheckDataProgress", _
                        acNormal, , , acFormEdit, acWindowNormal
                    Dim dlg As Form_dlgCheckDataProgress
                    Set dlg = Forms("dlgCheckDataProgress")
                    dlg.lbl1.Caption = "Проверочный отчет " & vbNewLine & vbNewLine & rs!sCheckDataName
                    modCheckDataRun.ExportCheckToXLS _
                        bFormat, bOpen, optFieldList, rs!bCheckDataIncludeAudit, _
                        sFileName, rs!sDatasourceName, _
                        rs!iCheckDataID, rs!sCheckDataName, _
                        rs!sCheckDataSQL, rs!sCheckDataOrderBy, _
                        dtCheckDataRunDate_OUT, sCheckDataRunUserName_OUT, _
                        nCheckDataRunRecordCount_OUT
                    DoCmd.Close acForm, "dlgCheckDataProgress", acSaveNo
                    On Error Resume Next
                    Dim xl As Object: Set xl = CreateObject("Excel.Application")
                    xl.DisplayAlerts = True
                    xl.Workbooks.Open sFileName
                    xl.Visible = True
                    Set xl = Nothing
                    On Error GoTo  0 
                End If
            End If
        End Select
    End If
    Set rs = Nothing
    
End Sub

Private Sub btnExecuteAll_Click()

    Dim nRoot As node, id, sFlag
    Set nRoot = Me.treeCtl.Nodes("ROOT")
    NodeClick nRoot, True
    Me.treeCtl.SetFocus
    
    DoCmd.Hourglass True
    Dim rs As ADODB.Recordset
    Set rs = Me.subForm.Form.RecordsetClone
    If Not rs.EOF And Not rs.BOF Then
        rs.MoveFirst
        While Not rs.EOF
            Dim sCheckDataSQL_OUT As String, sCheckDataOrderBy_OUT As String, sFieldList_OUT As String
            Dim sCheckDataRunUserName_OUT As String, dtCheckDataRunDate_OUT As Date
            Dim nCheckDataRunRecordCount_OUT As Integer
            Dim n: n = modCheckData.ParseAndRun( _
                rs!sDatasourceName, rs!iCheckDataID, rs!bCheckDataIncludeAudit, _
                sFieldList_OUT, sCheckDataSQL_OUT, sCheckDataOrderBy_OUT, _
                sCheckDataRunUserName_OUT, dtCheckDataRunDate_OUT, _
                nCheckDataRunRecordCount_OUT)
            Select Case n
            Case - 1 
                DoCmd.Hourglass False: Beep
                MsgBox _
                    "Проверочный отчет " & rs!sCheckDataName & _
                    vbNewLine & vbNewLine & _
                    "Не выполнен из-за неверно сгенерированных условий проверки " & _
                    "или по другой причине, связанной с исполнением инструкций SQL.", _
                    vbExclamation + vbOKOnly
                DoCmd.Hourglass True
            Case - 2 
                DoCmd.Hourglass False
                Beep
                MsgBox _
                    "Проверочный отчет " & rs!sCheckDataName & _
                    vbNewLine & vbNewLine & _
                    "Не задан источник данных.", vbExclamation + vbOKOnly
                DoCmd.Hourglass True
            Case - 3 
                DoCmd.Hourglass False
                Beep
                MsgBox _
                    "Проверочный отчет " & rs!sCheckDataName & _
                    vbNewLine & vbNewLine & _
                    "Не сгенерирован текст условия отбора.", vbExclamation + vbOKOnly
                DoCmd.Hourglass True
            Case Is >=  0 
            End Select
            rs.MoveNext
        Wend
        rs.MoveLast
    End If
    Set rs = Nothing
    DoCmd.Hourglass False
    
    Exit Sub
    
End Sub

Private Sub btnCheckDataSchedule_Click()

    DoCmd.OpenForm "frmMETA_CheckDataSchedule", acNormal, , , acFormEdit, acWindowNormal

End Sub

Private Sub treeCtl_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Long, ByVal y As Long)

    Dim nodNode As node
    ' get the node we are over
    Set nodNode = Me.treeCtl.HitTest(x, y)
    If nodNode Is Nothing Then Exit Sub ' no node
    ' ensure node is actually selected, just incase we start dragging.
    nodNode.Selected = True
    
End Sub

' occurs when the user starts dragging
' this is where you assign the effect and the data.
Private Sub treeCtl_OLEStartDrag(Data As Object, AllowedEffects As Long)

'ccOLEDropEffectCopy = 1
'ccOLEDropEffectMove = 2
'ccOLEDropEffectNone = 0
'ccOLEDropEffectScroll = -2147483648 (&H80000000)

    ' Set the effect to move
    AllowedEffects =  2  'MSComctlLib.OLEDropEffectConstants.ccOLEDropEffectMove
    ' Assign the selected item's key to the DataObject
    Data.SetData Me.treeCtl.SelectedItem.Key
    ' we are dragging from this control
    blnDragging = True
    
End Sub

' occurs when the object is dragged over the control.
' this is where you check to see if the mouse is over
' a valid drop object
Private Sub treeCtl_OLEDragOver(Data As Object, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single, State As Integer)

    Dim nodNode As node
    ' set the effect
    Effect =  2  'MSComctlLib.OLEDropEffectConstants.ccOLEDropEffectMove
    ' get the node that the object is being dragged over
    Set nodNode = Me.treeCtl.HitTest(x, y)
    If nodNode Is Nothing Then
        Effect =  0  'MSComctlLib.OLEDropEffectConstants.ccOLEDropEffectNone
        Exit Sub
    End If
    If _
        nodNode.Key = "ROOT" Or Left(nodNode.Key,  2 ) = "CD" Or _
        blnDragging = False _
    Then
        ' the dragged object is not over a node, invalid drop target
        ' or the object is not from this control.
        Effect =  0  'MSComctlLib.OLEDropEffectConstants.ccOLEDropEffectNone
        Exit Sub
    End If
    
End Sub

' occurs when the user drops the object
' this is where you move the node and its children.
' this will not occur if Effect = vbDropEffectNone
Private Sub treeCtl_OLEDragDrop(Data As Object, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)

    Dim strSourceKey As String, idSource As Long
    Dim nodTarget As node, idTarget As Long
    ' get the carried data
    strSourceKey = Data.GetData( 1 )
    ' get the target node
    Set nodTarget = Me.treeCtl.HitTest(x, y)
    If _
        nodTarget Is Nothing Or _
        nodTarget.Key = "ROOT" Or _
        Left(nodTarget.Key,  2 ) = "CD" _
        Or blnDragging = False _
    Then
        Effect =  0 
        Beep
        Exit Sub
    End If
    idTarget = CLng(Mid(nodTarget.Key,  3 ))
    idSource = CLng(Mid(strSourceKey,  3 ))
    If idTarget = idSource Then
        Effect =  0 
        Beep
        Exit Sub
    End If
    ' if the target node is not a folder or the root item
    ' then get it's parent (that is a folder or the root item)
    ' move the source node to the target node
    Set Me.treeCtl.Nodes(strSourceKey).Parent = nodTarget
    CurrentProject.Connection.Execute _
        "UPDATE dbo.METAB_SyntaxNode " & _
        "SET " & _
            "iSyntaxNodeParentID=" & idTarget & ", " & _
            "iSyntaxNodeParentNomer=(" & _
                "SELECT MAX(iSyntaxNodeParentNomer) " & _
                "FROM dbo.METAB_syntaxNode " & _
                "WHERE iSyntaxNodeParentID=" & idTarget & _
            ") + 1 " & _
        "WHERE iSyntaxNodeID=" & idSource
    Me.subForm.Requery
    ' NOTE: You will also need to update the key to reflect the changes
    ' if you are using it
    ' we are not dragging from this control any more
    blnDragging = False
    ' cancel effect so that VB doesn't muck up your transfer
    Effect =  0 
    
End Sub

...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767631
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда... на слабенькую четвёрочку. Хотя, дело вкуса. Мне так себе, не очень. Какой-то я занудой стал - ничего не нравиться. :)
А как моё на твой опытный взгляд?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767636
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
'Я так делал. Можно добавить что хош. Кликнув по лженоду.
Private Sub tvwRules_DblClick()
On Error GoTo Err_tvwRules_DblClick

    Dim oTvw As Object: Set oTvw = Me.tvwRules
    Dim sNewItemName As String
    Dim oNode, oNode1 As node
    
    If Left(oTvw.SelectedItem.Key,  2 ) = "NC" Then
    
        sNewItemName = InputBox("Įveskite pavadinimą", MsgBoxTitle)

        If StrPtr(sNewItemName) =  0  Or sNewItemName = "" Then Exit Sub
            
        Dim rs As ADODB.Recordset: Set rs = New ADODB.Recordset
        
        CurrentProject.Connection.Execute _
            ("INSERT INTO dbo.TBD_Rules (iParentID, sName, bHideInAppFlag) " & _
             "VALUES (0, '" & sNewItemName & "', 0)")

        rs.Open "SELECT @@identity as ID", CurrentProject.Connection
               
        Set oNode = oTvw.Nodes.Add(Text:=sNewItemName, Key:="T" & rs!Id)
         
        rs.Close: Set rs = Nothing
        
    End If

Exit_tvwRules_DblClick:
    Exit Sub
    
Err_tvwRules_DblClick:
    Call custError(Err.Number, Me.Form.Name, "tvwRules", "tvwRules_DblClick")
    Resume Exit_tvwRules_DblClick

End Sub

'Потом его назвать как надо. Хотя, пожалуй у тебя лучше - нехрем пользователям ноды называть.
Private Sub tvwRules_AfterLabelEdit(Cancel As Integer, NewString As String)
On Error GoTo Err_tvwRules_AfterLabelEdit

    CurrentProject.Connection.Execute _
        ("UPDATE dbo.TBD_Rules SET sName = '" & NewString & "' WHERE iRuleID = '" & _
         Mid(Me.tvwRules.SelectedItem.Key,  2 ) & "'")

Exit_tvwRules_AfterLabelEdit:
    Exit Sub
    
Err_tvwRules_AfterLabelEdit:
    Call custError(Err.Number, Me.Form.Name, "tvwRules", "tvwRules_AfterLabelEdit")
    Resume Exit_tvwRules_AfterLabelEdit
    
End Sub

'Потом вставить его куда надо. При указании родителя, тригеры на скуле сами всё прописывают.
Private Sub tvwRules_OLEDragDrop(Data As Object, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
On Error GoTo Err_tvwRules_OLEDragDrop

    Dim tvw As TreeView, strKey As String, strText As String
    Dim nodNew As node, nodDragged As node
    Dim rs As ADODB.Recordset: Set rs = New ADODB.Recordset

    rs.Open _
        ("SELECT * FROM dbo.TBD_Rules"), CurrentProject.Connection, adOpenDynamic, adLockOptimistic

    Set tvw = Me.tvwRules.Object
    
    If tvw.SelectedItem Is Nothing Then
    Else
        Set nodDragged = tvw.SelectedItem
        If tvw.DropHighlight Is Nothing Then
            strKey = nodDragged.Key
            strText = nodDragged.Text
            tvw.Nodes.Remove nodDragged.Index
            rs.Find "[iRuleID]=" & Mid(strKey,  2 )
            rs![iParentID] =  0 
            rs.Update
            Set nodNew = tvw.Nodes.Add(, , strKey, strText)
            AddChildNodesTotvwRules nodNew, rs![iRuleID]
        ElseIf nodDragged.Index <> tvw.DropHighlight.Index Then
            Set nodDragged.Parent = tvw.DropHighlight
            rs.Find "[iRuleID]=" & Mid(nodDragged.Key,  2 )
            rs![iParentID] = Mid(tvw.DropHighlight.Key,  2 )
            rs.Update
        End If
            
    End If

    Set nodDragged = Nothing
    Set tvw.DropHighlight = Nothing

Exit_tvwRules_OLEDragDrop:
    Exit Sub
    
Err_tvwRules_OLEDragDrop:
    Call custError(Err.Number, Me.Form.Name, "tvwRules", "tvwRules_OLEDragDrop")
    Resume Exit_tvwRules_OLEDragDrop

End Sub
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767732
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если дерево большое, то верхний лженод уползает за край контрола. А кнопки сверху остаются прибитыми.
Либо делать контекстное меню. В целом очень хорошо смотрится. А я тулбары поленился вставить - обычными копочками обхожусь. Если есть стандартный аксесный функционал - использую его, другие элементы - если только без них никак. Но у тебя тулбары смотрятся очень хорошо.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767806
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, спасибо. Аж крылья выросли :)

Ага, нод уползёт, не подумал :(
Кнопки - не совсем то. У меня на месте твоих кнопок тулбар. Если делать кнопки - то тулбар надо в меню переносить, а это тоже как-то не очень. Всё что связано с формой - у меня вызывается кнопками на форме. В меню только система, вызов основных форм, инструменты, справка (будет :) )
Над контекстным меню долго думал - но не понравилось, то, что пока не райткликнеш - не видешь что можно сделать. Не дружелюбно получается - типо полазь, покликай - тогда узнаешь где, что и как. А до следующего раза уже и забудешь. Хочу, чтоб всё перед глазами было.
Прям не знаю...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767872
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любительобрати внимание внизу на связь драг-н-дропа с T-SQL процедурамиА шо там? На что именно внимание обратить?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34767953
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, не правильно выразился. на кнопках Вложить AND, Вложить OR, Копия, Удалить идет вызов процедур, делающих изменения в дереве. Хотя зря я про это акцентировал, вещь очевидная, ты и сам таким же образом реализуешь логику в сервере, а не на клиенте.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34768075
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По идеи наверное других вариантов и нет - только меню, тулбар, кнопки и мой вариант? Типа абламися и выбери что меньше всего не нравиться. Isn't it?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34768084
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще голосом продиктовать или встроить ИИ, чтобы система сама все думала и делала, пока ты ноги на стол сидишь.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34768124
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, можно и голосом. Но тоже не удобно, одно обучение программы чего стоит. А если серьёзно, то есть ещё способы, и очень удобные, просты я до них ещё не додумался ;)))
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34770951
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Додумался. Все команды для дерева на дополнительную кнопку "Дерево" в тулбаре повесить! И тулбар дополнительный ненадо, и на передний план не выходит. И похоже на контекстное меню, и в то же время всегда перед глазами.
ЗЫ: Конечно, ерунда, а мне понравилось. Буду так делать :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34770977
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как только убираешь кнопки, выполняющие нужные действия, с формы куда-то чуть глубже - у тупых юзверей сразу возникает трудность в том, что не могут найти.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34771013
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот потому я не хотел контекстное меню - постоянно спрашивают куда пропало (уже думал просто издеваются :)
Навесить все команды для дерева (ими то редко пользуются) на форму рядом с "полноценными" кнопками (типа проводки, новый, которые открывают другие формы) - тоже не хотел, т.к. те основные "потерялись бы" в общей куче.
А так по-мойму нормально. Дерево, и там всё что связано с деревом. Проводки - там всё для проводок. Выход.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34771099
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А шо за lstOption ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34771124
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И где фукция для прокрутки дерева при драге/дропе? просто не нужна или как-то обходишь?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34771268
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Она сама прокручивается правильно.

lstOption - задает выводить ли латинские идентификаторы таблиц/полей либо русские коменнтарии из моих дополнительных к INFORMATION_SCHEMA... таблиц. Просто для удобства. Иногда лучше так - иногда - эдак.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34771303
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительlstOptionТак это комба, которая на форме? cbo нада писать, путаешь тут панимашли :)

Программист-ЛюбительОна сама прокручивается правильно.???? Научи, у меня не прокручивается.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34771354
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А-А-А! Наврал, не крутиться! Это что-то другое крутилось. Пошел бицца в свою стеночку с узкими кирпичами (торцом).
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34771378
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фу, напугал... уж думал сам пойти бицца, стока деревьев посажено, и вдруг на те - у всех крутяться а у меня нет

Для вб вот , если вдруг будеш себе для аксеса делать, поделись потом :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34772499
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему у тебя во всех кодах переменные как variant?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34772536
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не во всех. Либо от торопливости не написал, либо из базы может NULL приехать.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34772657
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понял. а што за dlgCheckDataProgress ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34772860
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быкисесли вдругА если лень класс делать, то есть тут (вдруг ты искал и не нашёл)

ЗЫ: Какую книжку Хендерсона читаешь? Забыл спросить в том посту.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34775313
Фотография Быкис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
што за dlgCheckDataProgress так и не расскажешь ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34906444
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительОн по заголовкам ищет. Разрозненные поля: значение справа от заголовка, значение под заголовком. Находит таблички с заголовками идущими в одну строку подряд. Умеет обрабатывать листы в цикле
Например, по каждой ценной бумаге - свой лист, а на нем часть данных наверху листа - общие параметры бумаги + табличка с операциями по данной бумаге.
При импорте проверяет есть ли уже такие записи в БД. Соответсвенно генерит Insert или Update. Может выполнять, может только файл SQL выдать.
Может выдирать значения из строк типа "67,098=56". (68098.56).
В общем рабочая лошадка.

Для однородных красивых таблиц есть другой быстрый механизм через Linked Server.

Зер гуд. Однако как он поступает с мергед целс и формулами?
Вот пример принт превью моей таблицы.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34906952
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сумеет обработать первую из двух одинаковых таблиц. Найдет таблицу даже с мергед целлз. Черт, при ответе картинки не видно.

Обработает ее до конца и закончит, вторую такую же искать не станет. Чтобы стал, надо доработать немного код - зациклить после прохождения таблицы до максимального числа строк или до 10 пустых подряд.

Окрыл картинку в дркгом окошке.

Здесь, кстатит, лучше искать по 'max roleto plotis', '1,3 m', '1,8 m', ... а они не мергед.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34906975
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моя картинка.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34907247
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительЗдесь, кстатит, лучше искать по...Это один из вариантов. Это ценник, таких за 13 лет набралось 13х6х25. Было бы хорошо это перекинуть в базу. Твоё (чёрт, при ответе картинки и правда не видно :), пожалуй всё-таки для чего более-менее похожего на таблицы.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34948848
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процес заганяния имён форм и контролов в SYS_RoleForm ищё не автоматизирован?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34948988
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, пока это не самая большая или важная хотелка. Общий список хотелок держу в вордоском файле и рыгулярно пополняю. Скорость реализации << скорости пополнения.

Ну, ничего, в будущем году будем заказывать проект внешним разработчикам, у с них-то живых я не слезу! Землю будут грызть пока все как я им понаписываю не сделают!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34949051
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я от нечего делать буду делать эту хотелку... Тока подскажи как контролы-то забить? :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34949641
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть чтение контролов форм, которое используется для заполнения метаданных. Открываешь форму в невидимом режиме проектирования и вперед, по контролам.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34949693
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока ответа дождался так и сделал
Не понравилось.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956128
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос (может знаешь)
Есть данные (на скл), есть форма в адп... Видел такую штуку - нажимаешь кнопочку и эти данные оказываются в екселе (тут всё панятна), там их редактируешь (тоже умею), потом нажимаешь Ctrl+S или файл-сохранить или кнопку сохранить и эти файлы сохраняются там откуда взяты. А вот этот финт нифига не понятен.
Причём в еселе можно и новые данные вводить. И никаких екселевских шаблонов и файлов нет, всё делается через только что нипойми откуда взятый файл (и кода в нём тоже никакого нет)...
Это с какой стороны изучать?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956175
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В экселе есть внешние данные, которые могут автоматически подкачиваться каждый раз свежие из сервера или ваще из какой-нибудь таблички на сайте. А вот что отредактированое отправляется взад - это очень интересно. Изучишь - доложи.

Еще есть интересный механизм, который позволяет иметь "живые" циферки из рейтер (котировки. ставки) каждый заданный интервал времени обновляется. Но только в одну сторону - в Excel.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956206
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительА вот что отредактированое отправляется взад - это очень интересно.Были подозрения на какой-нить ado.net али xml, но в том каталоге где програма ничего не появляется при работе в екселе. Да и сам екселевский бук безо всякого кода как и говорил... Это бухалтерская програма с местного литовского рынка, файл mde (c mdw). Чем его ковырять не знаю :(
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956236
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не может она при открытии книги ее события в аксесе перехватывать и обрабатывать ? Что будет если аксесный файл закрыть, а книгу оставить ? Данные будут обновляться ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956262
Фотография Restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это что из области "хук на виндоус". Устанавливается в мде на открываемое приложение эксель.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956266
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, что-то в том направлении. Если закрыть программу, ексель сразу спрашивает сохранить ли чанджес, которые вы сделали в шеет1, и если нажать да - то сохраняет просто как екселевский файл. А если закрыть ексель, пока открыта програма, то спрашивает сообщением программы (но в екселе) обновить ли базу?
Пожалуй что-то с перехватыванием и обрабатыванием. Весьма удобно в некоторых случаях.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956316
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы был хук - реагировало бы просто на ексел с именем Sheet1... Хотя может и хуки тоже тут имеют место быть.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956332
Фотография Restavraciya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Реагирует" не на имя, а на application.hwnd (открытого экселя/книги/листа)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956365
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот они все красавчики открытые. И по какому hwnd их отлавливать? А оно отлавливает...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956426
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A почему просто не иметь в MDB программе нормальный WithEvents xlsApp as Excel.Application ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #34956447
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто интересно как это реализовано у них.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35022475
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя почта рабочая в профиле? Может icq есть?
Вопросик есть к специалисту.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35022479
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой быкУ тебя почта рабочая в профиле? Может icq есть?
Вопросик есть к специалисту.
Пиши по адресу homyakov собачка alfastrah точка ru

Здаёцца мне я на твои вопросы уже не отвечу - уровень не тот.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091865
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экран 1 общий для любого варианта ввода
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091867
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экран 2 для выбор вексель/депозит
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091874
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экран 3 выбор параметров векселя. Опции влияют друг на друга и позволяют задать тип по внутрифирменной классификации. Либо, наоборот, из правого списка выставляются опции.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091880
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экран 4 ввод оставшихся параметров. Они сильно зависят от передыдущего шага.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091883
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, сцуко, в гифе не видно выделение оттенком полей, которые надо и какие не надо задавать.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091907
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вау, круто, я тоже самое реализовывал на одной формочке :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091919
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай, мы с тобой можем здорово по векселям и пр. пообщаться!

Я думаю, прочий народ не будет против, что в этом топике такая специфика будет ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091924
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "тип", "тип дисконта" ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091952
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
против, против! тут для жалюзей и ресторанов надо!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091961
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS - это на вкладках делал?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091967
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ2 - где данные есть пока не нажато "готово"?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35091987
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делал через разделители страниц/гото пейдж.

Пока не нажата кнопка Готова данные есть на цепочке пройденных субформ + главной форме. В зависимости от опций саурсобжект ставится на ту или иную форму.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092004
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любительданные есть на цепочке пройденных субформ + главной форме.Что есть "цепочка пройденных субформ" ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092015
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительЭкран 2 для выбор вексель/депозит

выровнять Group Frame (растянуть в размер)

также как на другом экране
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092027
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В главную форма вставлены разделители страниц по числу экранов.

Первый и второй экраны - контролы на самОй главной форме.

Следующие - между разделителями страниц вставлены субформы. По логике определяется что конкретно в них загрузить на каждом шаге.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092039
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Почему не вкладки?
2. Когда пользователь создаёт нвый вексель, где храняться данные (его АйДи, к корому вешается прочий мусор), пока не нажато "готово" ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092096
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительЧто такое "тип", "тип дисконта" ?
Тип - "Тип векселя", мы пока используем один тип: "Просто"
Тип дисконта у нас не заполняется, но я делал по примеру стандартизированного отчета "Полный реестр векселей", если есть необходимость, могу уточнить у начальника отдела!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092124
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
George-III Программист-ЛюбительЧто такое "тип", "тип дисконта" ?
Тип - "Тип векселя", мы пока используем один тип: "Просто"
Тип дисконта у нас не заполняется, но я делал по примеру стандартизированного отчета "Полный реестр векселей", если есть необходимость, могу уточнить у начальника отдела!
В смысле простой вексель, бывают и другие типы, но пока не сталкивался
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092167
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фокус в том, что векселя позволяют отложить признание дохода для налогобложения, если есть условие "но не ранее чем". Срок обращения векселя отсчитывается либо от даты выпуска векселя либо от этой даты. Если не оговорено иное (указана дата в бланке) то срок обращения равен году.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092177
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой бык1. Почему не вкладки?
2. Когда пользователь создаёт нвый вексель, где храняться данные (его АйДи, к корому вешается прочий мусор), пока не нажато "готово" ?
1. Мне было нужно взад-вперед ровно на один шаг за раз.
2. Когда нажимает "готово".
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092194
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а пока не нажато, где его Айди?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092195
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительФокус в том, что векселя позволяют отложить признание дохода для налогобложения, если есть условие "но не ранее чем". Срок обращения векселя отсчитывается либо от даты выпуска векселя либо от этой даты. Если не оговорено иное (указана дата в бланке) то срок обращения равен году.
Это учтено:
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092232
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Булке: За выравнивание спасибо, сделаю.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092390
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аллё! А мне тупому хто объяснять буде? Нажали сделать новый вексель. Как узнать его ключ, к которому привязывать всё на 3 шаге?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092405
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выбрали новый вексель.

Попали на экран с опциями. Понажимали опшины и чекбоксы. Нажали далее.

Попали на экран с оставшимися данными. Те, которые не бледно-серый (не видно) задали. Нажали готово.

Все это время данные болтаются в непривязанных формах. При нажатии готово данные пишутся в несколько таблиц (5 шт). Запись обернута в транзакцию.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092432
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А значение ключей откудабрать (чтобы првильно по 5 таблицам разнести) ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092436
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЛ имеет в виду, что значения, которые потом используются в инсерте содержатся в свойстве .Value элементов управления на форме.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092442
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой быкА значение ключей откудабрать (чтобы првильно по 5 таблицам разнести) ?
Думаю ID векселя возвращается в первой SP, как return значение, а потом уже используется в остальных инсертах/апдейтах транзакции...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092466
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это меня интереует - как узнать что к чему цеплять? Просо аля @@identity или програмист "трёхзвенку" на аксесе раскрутил ? Ж)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092478
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
George-III бухой быкА значение ключей откудабрать (чтобы првильно по 5 таблицам разнести) ?
Думаю ID векселя возвращается в первой SP, как return значение, а потом уже используется в остальных инсертах/апдейтах транзакции...
Абсолютно верно - без затей и изысков.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
Public Function AddDeposit()

    ' Значения PK-Identity извлекаемые сразу после вставки
    ' Строки для формирования SQL операторов по вставке данных
    Dim sDealSQL As String
    Dim sDealProlongationSQL As String
    Dim sDealOperationSQL As String
    Dim sDealInterestSQL As String
    
    ' Инициализация значения PK-Identity, извлекаемых сразу после вставки
    Me!iDealID = Null:             sDealSQL = ""
    Me!iDealProlongationID = Null: sDealProlongationSQL = ""
    Me!iDealOperationID = Null:    sDealOperationSQL = ""
    Me!iDealInterestID = Null:     sDealInterestSQL = ""
    
    ' Рекордсет для получения PK-Identity
    Dim rsID As ADODB.Recordset, n As Integer
    ' Справочник типов инструментов
    Dim rsType As ADODB.Recordset
    Set rsType = CurrentProject.Connection.Execute( _
        "SELECT * FROM qrInstrumentType " & _
        "WHERE sInstrumentTypeCode='" & Me.sub3Instrument.Form!sInstrumentTypeCode & "'" _
    )
    If rsType.EOF Then
        Beep
        MsgBox _
            "В справочнике инструментов не найден " & _
            "депозит выбранного типа " & _
            "'" & Me.sub3Instrument.Form!sInstrumentTypeCode & "'. " & _
            vbExclamation + vbOKOnly, Me.lblStep.Caption
        Me.bOK = False
        Exit Function
    End If
    
    ' Объекты ADODB для организации транзакции
    Dim cnn As ADODB.Connection, sServerName As String, sDatabaseName As String
        
    DoCmd.Hourglass True
    Application.Echo False
    DoCmd.OpenForm "dlgDealWizardInsert", acNormal, , , acFormEdit, acWindowNormal
    Forms!dlgDealWizardInsert.SetFocus
    Forms!dlgDealWizardInsert.Repaint
    Application.Echo True
    Forms!dlgDealWizardInsert.Repaint: Sleep  700 : DoEvents
    
    On Error GoTo Err_Transaction
    Call modSQL.GetConnectionInfo(sServerName, sDatabaseName)
    Call modSQL.OpenConnection(sServerName, sDatabaseName, cnn)
    cnn.BeginTrans
    
    With Me.sub3Instrument.Form
        
        '
        ' TODO: !!!Проверить на NULL sDealSeriesCode для НЕ серификатов
        '
        sDealSQL = _
            "INSERT INTO dbo.TAB_Deal (" & _
                "sInstrumentTypeCode, " & _
                "iAssetCustomerID, iInvestmentCustomerID, " & _
                "sDealSeriesCode, mnDealPrincipalAmount, sCurrencyCode, dbDealParameter, " & _
                "dbDealInterestRate, dtDealFromDate, dtDealToDate " & _
            ") VALUES (" & _
                modSQL.AddString(!sInstrumentTypeCode) & _
                modSQL.AddLong(!iAssetCustomerID) & _
                modSQL.AddLong(!iInvestmentCustomerID) & _
                modSQL.AddString(!sDepositSertificateNomer) & _
                modSQL.AddDecimal(!mnDealPrincipalAmount) & _
                modSQL.AddString(!sCurrencyCode) & _
                modSQL.AddDecimal(!dbDepositParameter) & _
                modSQL.AddDecimal(!dbDealInterestRate) & _
                modSQL.AddDate(!dtDealFromDate) & _
                modSQL.AddDate(!dtDealToDate, True) & _
            ")"
            
        On Error Resume Next
        n =  0 : cnn.Execute sDealSQL, n
        Set rsID = cnn.Execute("SELECT IDENT_CURRENT('dbo.TAB_Deal'), SCOPE_IDENTITY()")
        If n <>  1  Then
            modError.ErrorMessage  509 , "Запись в таблицу сделок не была добавлена."
            GoTo Err_Transaction
        End If
        On Error GoTo Err_Transaction
        If rsID.Fields( 0 ) <> rsID.Fields( 1 ) Then
            modError.ErrorMessage  509 , _
                "При добавлении записи о сделке в базу данных " & _
                "неправильно определился уникальный код сделки."
            GoTo Err_Transaction
        End If
        Me!iDealID = rsID.Fields( 0 )
        rsID.Close: Set rsID = Nothing
    
        If Nz(rsType!sInstrumentTypeInterestMultyPaymentFlag, "N") = "N" Then
            ' Простые депозиты с единственным процентным периодом
            sDealProlongationSQL = _
                "INSERT INTO dbo.TAB_DealProlongation (" & _
                    "iDealID, " & _
                    "sDealProlongationContractCode, sDealProlongationContractDate, " & _
                    "dtDealProlongationFromDate, dtDealProlongationToDate, dbDealProlongationInterestRate " & _
                ") VALUES (" & _
                    modSQL.AddLong(Me!iDealID) & _
                    modSQL.AddString(!sDealOperationContractCode) & _
                    modSQL.AddDate(!dtDealOperationContractDate) & _
                    modSQL.AddDate(!dtDealFromDate) & _
                    modSQL.AddDate(!dtDealToDate) & _
                    modSQL.AddDecimal(!dbDealInterestRate, True) & _
                ")"
            On Error Resume Next
            n =  0 : cnn.Execute sDealProlongationSQL, n
            Set rsID = cnn.Execute("SELECT IDENT_CURRENT('dbo.TAB_DealProlongation'), SCOPE_IDENTITY()")
            If n <>  1  Then
                modError.ErrorMessage  509 , "Запись в таблицу сделок не была добавлена."
                GoTo Err_Transaction
            End If
            On Error GoTo Err_Transaction
            If rsID.Fields( 0 ) <> rsID.Fields( 1 ) Then
                modError.ErrorMessage  509 , _
                    "При добавлении записи о сделке в базу данных " & _
                    "неправильно определился уникальный код сделки."
                GoTo Err_Transaction
            End If
            Me!iDealProlongationID = rsID.Fields( 0 )
            rsID.Close: Set rsID = Nothing
            
            sDealOperationSQL = _
                "INSERT INTO dbo.TAB_DealOperation (" & _
                    "iDealID, sDealOperationTypeCode, iCustomerID, " & _
                    "sDealOperationContractCode, dtDealOperationContractDate, " & _
                    "dtDealOperationValueDate, dtDealOperationFactDate, " & _
                    "mnDealOperationPrincipalAmount, mnDealOperationInterestAmount, " & _
                    "mnDealOperationPrincipalFact, mnDealOperationInterestFact" & _
                ") VALUES (" & _
                    modSQL.AddLong(Me!iDealID) & _
                    modSQL.AddString("PI") & _
                    modSQL.AddLong(!iAssetCustomerID) & _
                    modSQL.AddString(!sDealOperationContractCode) & _
                    modSQL.AddDate(!dtDealOperationContractDate) & _
                    modSQL.AddDate(!dtDealOperationValueDate) & _
                    modSQL.AddDate(!dtDealOperationFactDate) & _
                    modSQL.AddDecimal((- 1 ) * !mnDealPrincipalAmount) & _
                    modSQL.AddDecimal( 0 ) & _
                    modSQL.AddDecimal((- 1 ) * !mnDealPrincipalAmount) & _
                    modSQL.AddDecimal( 0 , True) & _
                ")"
            On Error Resume Next
            n =  0 : cnn.Execute sDealOperationSQL, n
            Set rsID = cnn.Execute("SELECT IDENT_CURRENT('dbo.TAB_DealOperation'), SCOPE_IDENTITY()")
            If n <>  1  Then
                modError.ErrorMessage  509 , _
                    "Запись об операции покупки не была добавлена " & _
                    "в таблицу операций по сделкам."
                GoTo Err_Transaction
            End If
            On Error GoTo Err_Transaction
            If rsID.Fields( 0 ) <> rsID.Fields( 1 ) Then
                modError.ErrorMessage  509 , _
                    "При добавлении записи об операции покупки в базу данных " & _
                    "неправильно определился уникальный код операции ."
                GoTo Err_Transaction
            End If
            Me!iDealOperationID = rsID.Fields( 0 )
            
            sDealInterestSQL = _
                "INSERT INTO dbo.TAB_DealInterest (" & _
                    "iDealID, iDealOperationID, " & _
                    "mnDealPrincipalAmountCalc, dbDealInterestRateCalc, " & _
                    "dtDealInterestFromCalc, dtDealInterestToCalc, mnDealInterestAmountCalc, " & _
                    "sMethodCode" & _
                ") VALUES (" & _
                    modSQL.AddLong(Me!iDealID) & _
                    modSQL.AddLong(Me!iDealOperationID) & _
                    modSQL.AddDecimal(!mnDealPrincipalAmountCalc) & _
                    modSQL.AddDecimal(!dbDealInterestRate) & _
                    modSQL.AddDate(!dtDealFromDate) & _
                    modSQL.AddDate(!dtDealToDate) & _
                    modSQL.AddDecimal(!mnDealInterestAmountCalc) & _
                    modSQL.AddString("D", True) & _
                ")"
            On Error Resume Next
            n =  0 : cnn.Execute sDealInterestSQL, n
            Set rsID = cnn.Execute("SELECT IDENT_CURRENT('dbo.TAB_DealInterest'), SCOPE_IDENTITY()")
            If n <>  1  Then
                modError.ErrorMessage  509 , _
                    "Не была добавлена запись о начислении процентов по векселю " & _
                    "в таблицу процентных периодов."
                GoTo Err_Transaction
            End If
            On Error GoTo Err_Transaction
            If rsID.Fields( 0 ) <> rsID.Fields( 1 ) Then
                modError.ErrorMessage  509 , _
                    "При добавлении записи о начислении процентов в базу данных " & _
                    "неправильно определился уникальный код процентного периода."
                GoTo Err_Transaction
            End If
            Me!iDealOperationID = rsID.Fields( 0 )
            rsID.Close: Set rsID = Nothing
        Else
            ' Сложные депозиты с нескольким процентными периодами
            '
            ' TODO: Insert Code
            '
        End If
    End With
    
    cnn.CommitTrans: cnn.Close: Set cnn = Nothing
    DoCmd.Close acForm, "dlgDealWizardInsert", acSaveNo
    Me.bOK = True
    AddDeposit = True
    Exit Function
    
Err_Transaction:
    On Error Resume Next
    rsID.Close: Set rsID = Nothing
    cnn.RollbackTrans: cnn.Close: Set cnn = Nothing
    DoCmd.Close acForm, "dlgDealWizardInsert", acSaveNo
    On Error GoTo  0 
    Me.bOK = False
    AddDeposit = False
    Exit Function

End Function
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092485
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понял. а зачем тут транзакция?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092560
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не было несогласованных данных. Финансовый инструмент (депозит, вексель) разложен по нескольким таблмицам, данные в них должны соответствовать друг другу.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092585
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понял. лентяй ты!
сделал бы пару классов для векселей...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092608
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой быкпонял. лентяй ты!
сделал бы пару классов для векселей...
А у меня мечта научится с классами работать... Реализовал наследование и вперед, как темплейт используешь, не надо все формочки редактирования переделывать... Эх наследование - ето круть, но только что-то на изучение нового все время не хватает времени :(
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092654
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой быкпонял. лентяй ты!
сделал бы пару классов для векселей...классы нафик.

одну хранимку
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092694
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если одной хранимкой - то тогда действительно транзакци нужна...
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092745
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
George-IIIА у меня мечта научится с классами работать...
Не на VBA.

Имей в виду, что по мере того, как классы начинают оттягивать на себя бизнес-логику, она уходит из серверной части.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092754
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 бухой быкпонял. лентяй ты!
сделал бы пару классов для векселей...классы нафик.

одну хранимку
Да. Как только VBA устаканится и немного отстоится, перетащу.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092773
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затеем дискуссию о том что такое бизнесс-логика ? ;)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092803
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дык само собо! Языком почесать это ж в кайф! Вот моя бизнес-логика для векселей:
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35092838
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь давай осюда выделим один объект этой самой бизнесс-логики и один экземпляр это объекта. А потом будем спорить являецо ли это выделение бизнеслогикой !
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35093515
Фотография George-III
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель George-IIIА у меня мечта научится с классами работать...
Не на VBA.

Имей в виду, что по мере того, как классы начинают оттягивать на себя бизнес-логику, она уходит из серверной части.
Да, я знаю про это, но я планирую слезать с Access+VBA, на Java и бесплатные среды разработки для неё!
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35093724
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лана, подолжу мысль сам. По-твойму класс для векселей не нужен, т.к. он оттенят бизнес-логику с сервера на клиент . Можно предположить, что бизнесс логикой (по твоей картинке) является (млин пропала при ответе, и когда уже это сделают...) проверка значений атрибутов векселя, изменения данных, и прчие процессы. На сервере есть и объекты БЛ и экземпляры этих объектов.
Проверка вводимых значений атрибутов векселя - у тебя происходит в самой форме и в вба. Но так как ты утверждаешь, что вся логика у тя на сервере - следовательно проверка ввода данных не является БЛ (в отличие от их хранения и последующей обработки). На клиенте, получается БЛ отчасти дублируется и создаются (но не хранятся) экземпляры объектов БЛ.
Итак, часть приложения, состоящая из той части БЛ, которая регламентирует ввод данных и создание экземпляра объекта БЛ - не является БЛ как таковой.
Внимаине вопрос - учитывая "итак" какую БЛ оттянет класс векселя на клиент ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35093820
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой быкПроверка вводимых значений атрибутов векселя - у тебя происходит в самой форме и в вба. Сообразно тому, как все эти атрибуты заданы в таблицах данных на сервере. Эти данные используются как кодом VBA на клиенте так и ф-иями и процедурами на сервере. Если бывает "event driven arcitecture", то это можно обозвать "(meta)data driven arcitecture"

Мы плавно возвращаемся к противостоянию настройка метаданных vs "чистое прямое" программирование
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35094428
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни к чему мы не возвращаемся :)
Мы пытаемси выяснить являеццо ли "(meta)data driven arcitecture" реализацией БЛ на клиенте... Я так и не понял.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35094480
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой быкЯ так и не понял.(Шёпотом, озираясь:) Я и сам не знаю
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35094502
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда
бухой бык Внимаине вопрос - учитывая "итак" какую БЛ оттянет класс векселя на клиент ?

на следующем занятии будем разбирать что такое классы
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35094551
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать двояко.

Базовый класс абстрактный вексель
Ему наследуют классы процентный вексесль и дисконтный вексель

Базовый класс абстрактные условия платежа по векселю
Ему наследуют классы в точную дату и по предъявлении
Классу по предъявлении наследуют не ранее, не позднее, не ранее и не позднее

Класс вексель должен либо множественно наследовать классам абстрактный вексель и абстрактные условия платежа по векселю, либо включать экземпляры этих двух классов.

В этом случае бизнес логика будет прошита в коде клиента.

Второй способ. Я постарался расщепить все эти понятия на мельчайшие кирпичики, из которых по данным в таблицах получаются результаты (управленческий учет, налоговый учет, проведение операций, проводки). При этом происходит сборка из кирпичиков на сервере T-SQL или на клиенте VBA по правилам, котоые определяются информацией в самих кирпичиках.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35094616
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так значит, класс векселя всёж таки будет служить только для создания нового экземпляра? И не будет иметь икаких методов? По твоим же словам это не есть БЛ. :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35099974
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл твою почту, напомни.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35100073
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напомнил - см. свой ящик.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35107394
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты остатки (например малых касс) хранишь расчитанные или расчитываешь каждый раз?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35107407
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В предыдущем проекте из банковской системы каждый день приезжали все остатки по всем счетам. В основной банковской системе не было истории по датам (только текущий день), я сделал сохранение истории, ее просмотр и динамики изменения на любом уровне иерархии агрегатного суммирования (до самого верхнего тотал по балансу).

Сейчас буду хранить срезы с не очень частой переодичностью (на начало каждого квартала) и перерасчитывать их при изменении данных в предыдущих периодах). Малых касс у меня нет. Есть инвестиции - депозиты, векселя, ценные бумаги.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35107420
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мда... и апять дилема - хранить или считать
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35107445
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить за какие-то "редкие, опорные" точки, считать для любого другого момента.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35107454
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель"редкие, опорные"типо сверки-ревизии? или на начало периода?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35107478
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классическая, навязшая проблема "проведение документа задним числом в закрытых периодах"
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #35107497
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх... Надо быстрей дипломную писать, потом докторскую получать, потом... потом книжки писать. А то смотрю без меня никак не решите свои класические проблемы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Отдельный топик для Быкиса и П-Л по совету Вади
    #37945233
Фотография Cheerful Calf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель,

у тебя не осталось чего нибудь для листбокса (ну или грида) не встроенного а своего с функционалом ala filter и order by?

покажи скрин, если есть, такое ;)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #37945887
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Листбоксы почти не использую.

Комбобоксы юзаю как "управляющие" контролы, задающие отдельный куски WHERE для грида, в котором и показываются данные. Любые афтерапдейты в комбобоксах вызывают пересборку источника данных грида и, соответственно, перезапрос данных с сервера.

Любой грид с данными умеет сортироваться, фильтроваться по набору управляющих контролов, работает мгновенный поиск.

Это собсно и есть в виде набора классов вба. Данные по настройке всех опций попадают в классы при загрузке прикладной формы из таблиц метаданных. Заполняются метаданые - т.е. конфигурируются прикладные формы в специальном приложении конфигураторе.

Вот что есть. Вытащить что-то проблематично - классы вба опираются на таблицы метаданных.

Легче стало ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #37945963
Фотография Cheerful Calf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительЛюбой грид с данными умеет сортироваться, фильтроваться по набору управляющих контролов, работает мгновенный поиск.Вот мне бы скрин с управляющими контролами для сортировки, фильтровки, поиску (кстати, чем поиск отличается от фильтровки?)

Программист-ЛюбительЛегче стало ? Скрин увижу, скомунижжю, станет :DDD

А уж классы или не классы, но функционал, я какнибудь накручу (тем более, что у меня не adp)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #37945980
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай в личную почту. khomyakov гав yahoo точка com
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #37945985
Фотография Cheerful Calf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Technical details of permanent failure:
Google tried to deliver your message, but it was rejected by the recipient domain. We recommend contacting the other email provider for further information about the cause of this error. The error that the other server returned was: 554 554 delivery error: dd This user doesn't have a yahoo.com account (khomyakov гав yahoo точка com) [-5] - mta1285.mail.bf1.yahoo.com (state 17).
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #37946031
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй:

familiya без пробелов 1965 гав inbox точка ru
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #37946040
Фотография Cheerful Calf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эхх... придётся мне светиться ))
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #37946058
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Послал тестовое сообщение.
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #37946904
Фотография Cheerful Calf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что там у нас? :)
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #38250867
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель , чего такое "blnDragging" ?
Вот в этом коде:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=435055&msg=4603481

Второй день бьюсь на этим баллоном. Где он объявляется и для чего нужен ?
...
Рейтинг: 0 / 0
Отдельный топик для Быкиса и П-Л по совету Вади
    #38251006
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это буулеан. У меня был код для перетаскивания узлов, но плоховато работал, я отключил эту фичу.
...
Рейтинг: 0 / 0
323 сообщений из 323, показаны все 13 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отдельный топик для Быкиса и П-Л по совету Вади
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]