|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
А если в файлике ошибки? Как алярмы бить, куда варнинги слать? И определять "точку" ахтунга? Ну штоп потом, после правки, опять с нее начать... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:02 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LIneЗелёный свисток в воздух: -А потом не получится, что еще дельту из дельто-файлов вылущивать надо? Чёй-та не нравится мне енто ни фига... Костыль к гипсу, который сполз с головы. Как вариант вводить поле с датой изменения в 1с обговаривали. Тогда я храню датувремя последнего импорта и в след раз беру из файла только с момента последнего импорта... но пока отказались. Т.к. нашли решение поизящней(чужое правда, ну если 1сник сумеет переработать, то не суть). Почему-то он не хочет обращаться к журналу. Там же есть (я почитал насколько смог) журнал изменений. Сказал, что это очень долгий и нудный запрос получится. Ну фик знает. Поживем увидим. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:04 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdog, а без ХП тебе GTT как собаке 5 нога. Нахрена сначала что-то закидывать на сервер, чтобы потом оттуда же и читать тоже самое, и вновь писать на сервер? про транзакции http://www.ibase.ru/ibx/#tran_use про возможности и синтаксис ХП Firebird_2_5_Language_Reference_RUS И вообще без чтения документации и статей ничего хорошего у вас не выйдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:04 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LIneА если в файлике ошибки? Как алярмы бить, куда варнинги слать? И определять "точку" ахтунга? Ну штоп потом, после правки, опять с нее начать... Если в файлике ошибка. Кричим бухам АХТУНГ. Вот вам бухи ручной импорт (выбираете базу. Выставляете дату с ... по... Жмете импорт) По СОМ соединению со сверкой всех платежек за данный период. Вот вам бухи сисадмин - спросите с него почему файл битый мож вирус, а мож при бэкапе ночном че произошло? Вот вам бухи 1Сник спросите с него почему файл неправильно сформирован. Ну вы тут разбирайтесь, а я пошел кофе пить ибо моя прога 150тыщ раз эти файлы читала, читает и читать будет... Был бы правильный формат (и косо посмотреть на 1Сника) и не битый файл(и косо глянуть на сисадмина). Утрированно конечно, но как-то так. Чето за*бало за все отвечать и все предвидеть. Мнеб свой фронт работ осилить ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:09 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdog, мне все равно не нравиться. Слишком много не определённостей, от меня (так сказать) не зависящих. Нешта бы 1Цшик лил дельты в отдельную Таблю. Ни какой тебе пакетной обработки (со всем прелестями сего действа). Тихо-мирно, степ бай степ, по строчно. Отработал строку, пометил "фтопку ее". Перешел к следующей. Чем тебе не "персональный журнал изменений" для прикрытия точки G? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:13 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Симонов Денисdgdog, а без ХП тебе GTT как собаке 5 нога. Нахрена сначала что-то закидывать на сервер, чтобы потом оттуда же и читать тоже самое, и вновь писать на сервер? про транзакции http://www.ibase.ru/ibx/#tran_use про возможности и синтаксис ХП Firebird_2_5_Language_Reference_RUS И вообще без чтения документации и статей ничего хорошего у вас не выйдет. "а без ХП тебе GTT как собаке 5 нога. " Тут недопонимаю. Надо мне из двух таблей ГТТ и рабочей выбрать дубли и грохнуть их в ГТТ. Условия могут быть разные. Логика формирования условий как бы есть в приложении-импорта. Собрать такую логику в ХП мне сложно. Сформировать Delete с конкретными условиями в Query как два пальца. Да чуть дольше в выполнении. (сборка и т.п. но логика дольше обрабатывается) Но на клиент же данные не полетят. Отсылаю Delete *** на сервер. И сервер сам уже там шуршит между таблицами. Не прав, стукните. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:16 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogКричим бухам АХТУНГ. Вот вам бухи ручной импорт... Вот вам бухи сисадмин... - Сам бушь по комнатам за ними бегать и объяснять куда им бежать? А комп она мошь ва-аще вырубила из 220, ушла в декрет и тп. - Тогда чё? - Пипец, ты приплыл как кур в ощип... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:17 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogСформировать Delete с конкретными условиями в Query как два пальца. Да чуть дольше в выполнении. (сборка и т.п. но логика дольше обрабатывается) Но на клиент же данные не полетят. Отсылаю Delete *** на сервер. а теперь посчитай сколько раз ты такие сформированные delete на сервер отошлёшь. Ну не хочешь ХП, может тебе и MERGE подойдёт. Хотя с такой боязнью SQL тебе и его не осилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:28 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LInedgdogКричим бухам АХТУНГ. Вот вам бухи ручной импорт... Вот вам бухи сисадмин... - Сам бушь по комнатам за ними бегать и объяснять куда им бежать? А комп она мошь ва-аще вырубила из 220, ушла в декрет и тп. - Тогда чё? - Пипец, ты приплыл как кур в ощип... А варианты? Заменить собой 1сника, сисадмина и бухгалтера? У меня есть формат даннх экспорта, который дал 1сник (сам отступил, сам отвечает, и пофиг что при обнновлении что-то там слетело, мое какое дело?... я что СкайНет должен запустить, чтоб все проблемы предвидела и если че отправляла терминаторов на разборки) Вот архивы прошлых экспортов из 1С все норм - а тут вата понеслась. Есть Сисадимин. Он дал папки. Объем диска согласовали. Хранение БэкАпов этих папок на нем. Ну пусть следит за вирусами, бэдблоками и т.п. Есть бухгалтер который ведет свою тему. Ушла в декрет,в отпуск, в морг оставь напарницу, введи в курс дела. Нет!? К директору и там разбирайтесь кто кнопку не нажал и почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:28 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogА варианты? Я уже не раз сказал про Таблю-Дельт. dgdogУ меня есть формат даннх экспорта, который дал 1сник А ты за чем и зачем их брал, эти файлики? ;-) Пусть 1Цшник ведёт Таблю-Дельт именно в этом формате. :-) Какая в попу ему разница - в файло или таблю? В таблю всяко проще и, заметь, всем(!) спокойнее. Чем гемор екпорт_ымпорт через промежуточный формат с временным хранением. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:40 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LIne...Пусть 1Цшник ведёт Таблю-Дельт именно в этом формате. :-) Про таблю-Дельт я тут не очень понимаю. Это то что он отдал в экспорт? И с какого места дальше пойдет экспорт? Это предусмотренно в варианте с его выгрузкой по "плану выгрузок". Там потому два "Плана выгрузок" и используется, что контролят друг друга... Но мне с этой табли вообще не легче при падении экспортного файла по ошибке. Я САМ до этой табли не доберусь и никому ничего не докажу. 1сник быстрей её подправит)))) Но скорее всего я чего-то не догоняю про Таблю-Дельт ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:46 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LIne...А ты за чем и зачем их брал, эти файлики? ;-) Потому что программер на 1с такой же программер (ну пусть по Вашему кодер;) ) как и я. Ну удобней ему так, в таком формате. Не обломлюсь. ЕСли меня окончательно не устроит, думаю найдем общее решение. Серединку- на половинку. Времени у него перед отпуском нет. Все лучше чем он скажет "НЕТ - это не возможно" и буду COMмами по базам скакать. ПС Да сегодня запустил по 20 баз одновременно)))) Ну то, что я бухгалтерию отправил чай пить это фигня. Но я еще и отожрал порядочную часть лицензий 1С )))) Народ нервно соображал, что происходит. Сидел молчал в тряпочку. Больше так делать не буду. Но да, ваши ребята советы и те статьи которые успел почитать, про Query, Транзакции... разгрузил ЦП. Не прям вооооообще, но разгрузил. Спасибо. Уперся теперь во время подключения COM. В количество лицензий 1С. И то что COM соединение еще живет 15-20 минут после того как я его бросил (если были проводки), но в последнем, скорее всего надо делать какой-то выход, а не просто бросать соединение и делать новое. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:56 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
открой для себя race condition https://ru.wikipedia.org/wiki/Состояние_гонки и про понятие "атомарности операций" почитай dgdogСижу (сервисом) на серваке: Курю бамбук и отъедаю ресурсы... бах. В каталоге XXX появляется файл "тоЧеНадо.xml". Стартую утилиту импорта с параметрами "d:\\xxx\тоЧеНадо.xml" и потащил его в GTT. при этом параллельно чтению файла утилитой импорта одновременно 1С пишет в файл, а твоя утилита его читает, хотя он еще до конца недописан. результат плохо предсказуем, с какой ноги сегодня сервер встал - так и будет меняться поведение. dgdogУдачно унес? Ок. Переношу исходный файл в архив. Грохаю файл(сигнал 1с = я тебя понял, этот импорт получен. Следующий импорт с этого места) 1. 1С пишет данные, медленно и печально, написало для примера 800 строк 2. В этот момент просыпается утилита импорта и начинает это всё импортировать. Это тоже не мгновенно происходит. 3. Пока она импортирует, 1С записывает еще сотню строк. 4. Но утилита импорта считала файл, пока в нём было ещё только 800 строк и строки 800-900 не видит 5. Утилита заканчивает импорт 800 строк и удаляет файл с 900 строками 6. 1С видит, что файл обновлен, и строки начиная с 901-й пишет в новый файл 7. Итого - строки 800-900 никуда не попали и были выкинуты Еще почитай про https://en.wikipedia.org/wiki/Multiple_buffering Когда ты играешь музыку у звуковой карты есть несколько буфферов. Один из них она гонит на динамики и никто болше не имеет права его трогать. В другой буффер плеер распаковывает звук из муз-файла и никто этот буфер больше не трогает. Когда звуковая карта доедает старый буфер - ей подсовывают следующий уже готовый, а отыгранный буфер ставят в очередь на заполнение новыми данными. Но никогда писатель (mp3 плеер) и читатель (звуковая карта) не суются в один буфер. Или один из них или другой не имеет а это права. То же самое с видеокадрами в игрушках-стрелялках, один буффер показываем, другой буффер строим, когда гтово делаем атомарный flip-flop Ещё почитай про мнгопоточность - MPI, Erlang, Actor Model Общее правило - любой пакет данных (переменная, работающая функция, файл и т.д.) принадлежит только ОДНОМУ рабочему. Когда одни рабочий передает пакет другому - он теряет если не доступ к пакету, то возможность его изменять как минимум. В твоем примере - пока есть шанс, что 1С может писать в файл, импортер не имеет права его трогать. А чтобы у импортера появилось право читать файл - 1С должно тот файл финализировать и переключиться на другой новый файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 15:56 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogПро таблю-Дельт я тут не очень понимаю. В эту таблю (а не "файл экспорта") записываются изменения вносимые бушками. По кнобке, автоматом али "по плану выгрузок" - сути не меняет. Главное что бы ты мог до нее добраться своей софтинкой. Это решает твою засаду из начального посыла - приходиться самому рыскать в поисках дельт. Твоя софтинка периодически лезет в нее, читает все (или часть) New-записей, обрабатываем и помечает их как отработанные. Ни какого гемора с промежуточным "носителем", парсингом, откатами данных, обработки ошибок. Практически тот же "журнал". :-) Но, так сказать, для ДСП. Ее, таблю-дельт, можно/нужно и зачищать (периодически) от старья безбоязненно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:12 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Arioch... 1. 1С пишет данные, медленно и печально, написало для примера 800 строк 2. В этот момент просыпается утилита импорта и начинает это всё импортировать. Это тоже не мгновенно происходит. 3. Пока она импортирует, 1С записывает еще сотню строк. 4. Но утилита импорта считала файл, пока в нём было ещё только 800 строк и строки 800-900 не видит 5. Утилита заканчивает импорт 800 строк и удаляет файл с 900 строками 6. 1С видит, что файл обновлен, и строки начиная с 901-й пишет в новый файл 7. Итого - строки 800-900 никуда не попали и были выкинуты Да об этом сегодня задумался на пару минут, между дел. Решение вижу: 1. Увидел файл. Пробую получить монопольный доступ. Переименовываю. 1с его потеряла, пусть пишет следующий, а я с этим разберусь пока. 2. Увидел файл. Пробую утащить его в темпПапку. 1С пусть куда хочет пишет 3. если первые два метода не сработают. Ну ок. Увидел файл. Считал датувремя последнего изменения. Хватаю файл - импортирую. Перед удалением файла проверяю датувремя последнего изменения. Даты не сошлись ПЕРЕИМПОРТИРОВАТЬ. Ошибка при загрузке импорта (не хватает ноды или типа того) = переимпортировать по таймеру через 2 минуты. Сошлись? Удалить файл Жду варианты файлов которые даст 1Сник. Потом буду серьезно думать и искать возможные грабли. Xml - одно, текстовый файл другое, DBF вообще третье. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:12 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdog1. Увидел файл. Пробую получить монопольный доступ. предположим, не получилось, что тогда ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:14 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdog, хрень. Пусть 1С сначала импортирует файл во временный каталог и как закончит переносит его в основной, который твой сервис уже будет смотреть и пытаться брать его с экслюзивным доступом. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:15 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogВсе лучше чем он скажет "НЕТ - это не возможно" и буду COMмами по базам скакать. А фигле ему грить "Нет", если он согласился на файл экспорта? Тебе не надо будет скакать по 20 базам одновременно, а только в Таблю-Дельт залесть. И лицензию слопаешь только одну. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:19 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Di_LInedgdogПро таблю-Дельт я тут не очень понимаю. В эту таблю (а не "файл экспорта") записываются изменения вносимые бушками. По кнобке, автоматом али "по плану выгрузок" - сути не меняет. Главное что бы ты мог до нее добраться своей софтинкой. Это решает твою засаду из начального посыла - приходиться самому рыскать в поисках дельт. Твоя софтинка периодически лезет в нее, читает все (или часть) New-записей, обрабатываем и помечает их как отработанные. Ни какого гемора с промежуточным "носителем", парсингом, откатами данных, обработки ошибок. Практически тот же "журнал". :-) Но, так сказать, для ДСП. Ее, таблю-дельт, можно/нужно и зачищать (периодически) от старья безбоязненно. Ну вкурил наконец-то. Это то что мне 1Сник предлагал: А ты мне как в интернет магазине ответный XML формируешь что прошло, что импортировал. Но пока от этого отказались, очень уж занимательна теория выгрузки "двумя планами выгрузки" 1С лишнего не даст, сама контролирует это. Лишняя движуха с дельтами и дельтой дельт))) избыточна. Пойдет косяк с конкретной базой (будет конечно когда-то) импорт в ручном режиме исправит от точки, до точки (он какбы и формирует дельты, сверяет чего есть, чего нет за период и добавляет, исправляет - работает зараза медленно. Но работает) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:22 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Ariochdgdog1. Увидел файл. Пробую получить монопольный доступ. предположим, не получилось, что тогда ? Таймер. Офф-Он. Через пят минут захожу в каталог "о файл лежит! Берем. Переименовываем". Не получилось?! Таймер. Офф-Он. За пару суток нет импорта из этой БД. Бухи прибегут. Ищем, каталог, ищем файл, разбираемся. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:25 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Симонов Денисdgdog, хрень. Пусть 1С сначала импортирует файл во временный каталог и как закончит переносит его в основной, который твой сервис уже будет смотреть и пытаться брать его с экслюзивным доступом. Логично. С 1с не знаком. В ней это сложно интересно реализовать? Попрошу 1сника ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:27 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdogЭто то что мне 1Сник предлагал: А ты мне как в интернет магазине ответный XML формируешь что прошло, что импортировал. - Не-а... :-) Ни кто ни кому ни чего не шлет. /Если только не по конкретному адресу. :-)))/ Его дело, 1Цшника, записать в эту таблицу и забыть/забить. Всё, он передал как в твою зону ответственности. Твое дело - считать их нее данные и перелопатить. С тебя тошь взятки гладки: - Какие данные получил, то и перелопатил. А пральные они или нет - это в 1Цшнику. Бо нефех всякую кАку пихать. Чёткое разделение зон ответственности и ни каких лишних телодвижений. А то взяли моду - слать друг другу XML-ки, туда-сюда... Главное - высоко содержательные: - Ну ты чё? - Я ничё, а ты чё? :-)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 16:38 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
dgdog, ты бы заканчивал с флудом, а то зрители уже уставать начали :) "А дальше что? Дальше ваши рыжие кудри примелькаются, и вас просто начнут бить."(с) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 18:08 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Там, где замешана 1С (и 1С основная программа для работы конторы) - лучше все делать в ней, одни только периодические реквизиты чего стоят - в том смысле на 1С это удобно, а реализовать это в мелких утилитах муторно - не стоит оно того... Но если уж надо продолжать поддержку, то обговори с админом и эсником такой вариант: результаты выборок с баз необходимо слать по эл. почте (автоматизировать отправку по мэйлу для 1С это тоже не проблема), почтовик на основе темы письма выкладывает прикрепленный файл в определенную папку ну и далее как желаешь Плюсы сам наверное видишь - выгрузки не теряются (конечно если почтовый ящик не почистят), можно отслеживать "забывающих" высылать выгрузки и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2016, 18:19 |
|
Delphi, FireBird создать таблицу в памяти клиента
|
|||
---|---|---|---|
#18+
Поигрался немного с ГТТ. Возник вопрос стоит ли делать индексы изначально на ГТТ? На малом объеме данных не ощутил разницы. Предполагается ипользовать ХП, Delete, Select и Merge к этой табличке. Сейчас в ГТТ (при каждой копии) летит 20-50 записей. Но хочется избежать граблей через год-два-три если объемы возрастут. Хотелось бы ответ от практиков. И еще, а Как ведет себя триггер gen_id(ГТТ_id,1)? Используете ID поле в ГТТ? (так-то нафиг не нужно, но опять могу лажануть и чего-то не продумать) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2016, 08:40 |
|
|
start [/forum/topic.php?fid=40&msg=39281311&tid=1561790]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 401ms |
0 / 0 |