Секретный релиз платформы v77.27.7




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

98 Comments

  1. Ёпрст

    Поделился всё таки тайным знанием..

    Reply ↓
  2. Ёпрст

    Метода опробована хоть?

    Reply ↓
  3. vasilykushnir

    Опробована, опробована.

    Рабочая база на 2000 скуле, копия дома и на работе на 2005 — уже больше года никак руки не дойдут перевести и рабочую на 2005-й.

    Reply ↓
  4. waol

    с 64-битной Windows 7 — работать будет ?

    Reply ↓
  5. wolfsoft

    Мне вроде нафиг не надо, но за такое «плюс» надо поставить просто за сам факт существования 😀

    Reply ↓
  6. spock
    Reply ↓
  7. spock
    waol пишет:с 64-битной Windows 7 — работать будет ?

    Вот проверить и убедиться мне негде, но должно работать.

    Reply ↓
  8. orefkov

    (6)

    Хлеба и зрелищ!

    Давай про режим совместимости описывай.

    Reply ↓
  9. pupkinSana

    Интересно, а режим совместимости значительно влияет на тормоза?

    Reply ↓
  10. spock
    Reply ↓
  11. Cthulhu

    (10) «В следующей версии просто ничего слаться не будет.» — под «следующей» имеется ввиду то, что тут выложено, или то, что ещё будет? если второе — то уж заодно и «когда приблизительно?»

    Reply ↓
  12. Cthulhu

    ЗЫ: и если уж «Вот и все проблемы с запуском на 2005/2008 свелись к узкому горлышку, мимо которого ничто не проскочет.» + «Так как разнообразие запросов, генерируемых 1с, мало, то проблема решилась небольшим регулярным выражением.» — то в этом же «узком горлышке» мо стоило бы подрихтовать заодно уж и вот эту — «ВыбратьПодчиненныеДокументы() проблема началась с sql2005. точнее проблема не в sql а в плохом запросе который генериться из 1с когда НЕ ЗАДАН интервал подчиненных документов старшая дата береться равной 30.12.9999 ( а надо 31 или вообще не ставить это условие)» (с) — беду??..

    Reply ↓
  13. spock

    (11)на выходных доделаю.

    (12)так не вижу этой проблемы на 2008. Я не могу ее повторить.

    Reply ↓
  14. Cthulhu

    (13): спасибо, буду заглядывать с нетерпением.

    (в 2005-м вроде есть проблема — там же в принципе несложно должно быть конец интервала если он 30.12.9999 — тупо вырезать, нэ? думаю что тем, кто на 2005-х крутит или — как я — собирается — будет очень нужно)

    ЗЗЫ: а, да, забыл по первых словах увлекшись громадьем и важностью решения — респектище + спасибище тебе!

    Reply ↓
  15. CheBurator

    (15) хоть бы запостил что конкретно фигпя/// а то автору тебя отлавливать надо.. на мисту бжать.. там читать…

    Reply ↓
  16. gordon_free_man

    Еще раз повторюсь при замене BkEnd.dll библиотеке из архива 1с ПИШЕТ ОШИБКУ! Файл я прикрепил….. Не работает этот секретный вариант:)

    Reply ↓
  17. spock

    (17)у кого как… В твоем случае он не работает — ищи другие варианты.

    Reply ↓
  18. cathode

    Что касается ошибки точки входа — Вы абсолютно уверены, что взяли BkEnd.dll от 27-го релиза? И что установка была произведена в точности так, как описывает автор разработки?

    Ошибка порядка сортировки при загрузке с помощью стандартной BkEnd.dll решается очень просто: смещение 0x0018a79d, отдизассемблируйте и посмотрите внимательно на байтик. Если Ваш профессионализм составляет хотя бы сотую долю Вашего самолюбия, Вы разберетесь, что с этим байтиком делать.

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

    Reply ↓
  19. valery_ok

    спасибо автору.

    у меня все работает на w2k8 R2 и sql w2k8 R2, но 1с не увидела ключа (буду разбираться, видимо в 64х битном режиме что-то) и при загрузке данных ругается на кодовую страницу, хотя с подключенной базой с sql2000 все нормально.

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

    Reply ↓
  20. spock

    (22)убей OrdNoChk.prm каталогах программы и ИБ. Он больше не нужен, и даже больше — мешает.

    Reply ↓
  21. spock

    +23 отпишу изменения в (0)

    Reply ↓
  22. sml

    у меня w7 x64 + ms_sql_2005sp3 базы перенес как файлы (отцепил, скопировал и прицепил к новому серваку)

    при запуске Предприятия ругается на несоответствие таблиц (prm-ки в каталоге нет)

    что посоветуете?

    Reply ↓
  23. spock

    (25)»несоответствие таблиц» — это md+dds не соответствуют физической структуре БД или что? Если есть проблемы, то ошибку лучше поточнее озвучивать вплоть до цитаты.

    «prm-ки в каталоге нет» — посмотреть нужно в двух каталогах — КаталогИБ() и КаталогПрограммы().

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

    Reply ↓
  24. sml

    Несоответствие таблиц — это про кодовые таблицы. Пришлось вернуть prm-ку в БИН-каталог. А чтобы не ругалась система на версию ODBC, пришлось заменить 3 файла драйвера в системном каталоге (от w2003servR2).

    Да, если кто пользует Openconf, то его пришлось установить только из тотоалкомандира, запущенного с правами Админа (старт батника с правами Админа не позволяет зарегить библиотеки).

    Reply ↓
  25. sml

    Скачал последнюю версию (у меня до этого была от 7марта) без prm-ки нормально подключился, но вылез другой глюк:

    Invalid column name ‘getdate’

    на запросе:

    select

    case

    when exists(

    select Отгрузка.iddoc

    from $Документ.Рейс as Рейс (nolock)

    inner join $Документ.ОтгрузкаТМЦ as Отгрузка (nolock) on $Отгрузка.Док_Рейс = Рейс.iddoc and Рейс.iddoc = :ТекРейс

    inner join _1sjourn as ЖурОтгрузки (nolock) on ЖурОтгрузки.iddoc = Отгрузка.iddoc

    left join $Справочник.РеестрДокументовДОП as Реестр (nolock) on $Реестр.Документ = Отгрузка.iddoc

    left join $Справочник.Контрагенты as Контрагенты (nolock) on Контрагенты.id = $Рейс.Покупатель

    where

    isnull($Реестр.ДокументыПолученыБух, 0) = 0

    and datediff(day, cast(left(ЖурОтгрузки.date_time_iddoc, 8) as datetime), dateadd(day, datediff(day, 0, getdate()), 0)) > 5

    and $Контрагенты.ВидКонтрагента <> $Перечисление.ВидыКонтрагентов.ЧастноеЛицо

    and $Рейс.НалОпт <> 1

    group by Отгрузка.iddoc

    ) then 1

    else 0

    end as [флДокументарнаяЗадолженность$Число]

    Команда идет: ВыполнитьСкалярный

    Reply ↓
  26. spock

    (28)ага, весь день сегодня хотел спросить на какой версии оно так вылезло — а оно вонокак.

    Так это не глюк, а новые задачи для разработчика этого sql-скрипта 🙂

    Решение исправляет проблемы платформы, а свои скрипты каждый правит сам под себя.

    ps: Лучше выкладывать уже распарсенные sql-скрипты.

    Reply ↓
  27. sml

    Если я правильно понимаю, Ваш патченый bkend предназначен только для конфигураций, где не используются прямые запросы, например с использованием 1cpp?

    Reply ↓
  28. spock
    …Ваш патченый bkend…

    — не патченный.

    …где не используются прямые запросы…

    — такого не задумывалось, если есть такое странное поведение, то оно должно быть исправлено.

    Запрос после Отладка(1) совпадает с тем, что поймано профайлером?

    Reply ↓
  29. ЗАК

    Отличная вещь, спасибо. На Win2008R2 x64 + SQL2008R2 заработало как по маслу

    Reply ↓
  30. zk96

    (29)

    У меня тоже GetDate() не сработал

    Было

    ТекстЗапроса=»

    |SELECT GETDATE()

    |»;

    Сделал

    ТекстЗапроса=»

    |SELECT current_timestamp

    |»;

    Теперь запрос работает, но почему GETDATE() непринимается? SMS его прекрасно воспинимает.

    Дальше-болше. Понятно, что некотрые запросы прийдется переписать, но не понимаю почему так.

    Ведь скуль2005 и 2008 прекрасно воспринимают табличные хинты типа NOLOCK SERIALIZABLE и тп без WITH.

    Может я что-то не так настроил? Что значит реструкторизация? Может я не понял как ее произвести.

    SPOCK, напиши пожалуста об этом попродробней.

    Reply ↓
  31. 1yh1
    zk96 пишет:

    У меня тоже GetDate() не сработал

    А может удобнее объявить свою функцию GetDate()?

    Возвращающую current_timestamp.

    Мне интересно: есть ли какие-то преимущества в использовании формата SQL 2005/8?

    В скорости работы 1C, мож в блокировках, исчезновении дэдлоков?

    Из недостатков, я так понял: нельзя делать реорганизацию, надо переписывать некоторые прямые SQL запросы

    Автору, конечно: +. Вещь нужная, другой вариант решения этой проблемы, написание, как Ethersoft, ODBC-драйвера с парсером.

    Reply ↓
  32. zk96

    (34) Что значит «объявить свою функцию GetDate()» ? Это функция скуля, разве можно ее переписать?

    Reply ↓
  33. 1yh1

    (35)

    будет dbo.GetDate(), всё-равно менять, так что лучше current_timestamp

    Reply ↓
  34. lordxxl

    У меня при обмене РБД говорит что «порядок сортировки, установленный для базы данных, отличается от системного» хотя в языковых настройках везде русский, файлик отмены проверки в каталоге иб(OrdNoChk.prm)не помогает. Кто-нибудь сталкивался?

    система: Server 2008

    sql: MS SQL 2008

    Reply ↓
  35. lordxxl

    PS: в настройках БД стоит порядок сортировки Cyrillic_General_CI_AS

    Reply ↓
  36. spock

    у кого была засада с GetDate() попробуйте новый вариант.

    (33)Про «Дальше-болше.» давай подробнее. Пример запроса, на котором проблема проявляется.

    «Что значит реструкторизация?» — это когда метаданные изменились и нажали ctrl+s.

    Небольшой курс выяснения проблем: на чем-то валится? Значит ловим запрос профайлером и публикуем здесь — проблема решается.

    (35)Ничего не нужно делать дополнительно, если есть проблема — она должна быть решена в этой библиотеке, кроме запросов, выполняемых через 1с++. Свои sql-запросы проще модифицировать.

    (37)какая версия решения? Файлик OrdNoChk.prm нужно удалить вообще из каталогов ИБ и BIN. Он будет мешать, я этот момент отражал в описании.

    Reply ↓
  37. lordxxl

    (39) OrdNoChk.prm везде удалил. Не помогло — по прежнему говорит что проядок сортировки отличается от системного

    Ура всё заработало+) я просто использовал старый релиз!

    Reply ↓
  38. sml

    (39) Спасибо, spock, теперь ошибка пропала. Буду смотреть дальше на своей копии. Если что вылезет, выложу 2 варианта запроса из профайлера: 1) с твоей dll и 2) с патченой

    Reply ↓
  39. 1yh1
    State 42000, native 1018, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ‘HOLDLOCK’. If this is intended as a part of a table hint, A WITH keyword and parenthesis are now required. See SQL Server Books Online for proper syntax.
    

    После

    exec _1sp__1SJOURN_TLockX

    Если try except нету, то:

    Невосстановимая ошибка базы данных!

    и вылет, причина, я думаю, проста в Stored Procedures нет with

    Reply ↓
  40. spock

    (42)да, проблема в хранимой процедуре. Нужно вызвать реструктуризацию, чтобы пересоздать ХП. Измени что-нибудь в метаданных (чтобы появились две звездочки) и сохрани конфу. ХП будут пересозданы с учетом нового синтаксиса.

    Reply ↓
  41. shraik

    Не срабатывает определение нарушения последовательности

    релиз 27

    конфигурация Торговля 7.7

    сервер SQL2005(9.00.3080.00)

    база sql с такими параметрами

    compat: SQL Server 2005(90)

    collation: Cyrillic_General_CI_AS

    создавалась сначала пустышка в студио, затем заливалась через конфигуратор.

    как я понял в глобальнике не отрабатывает «глПроверкаАктуальностиОтчета»

    вот это условие всегда возвращает «1»

    Если ВыбПоследовательность.Проверить(ПозицияОтчета)=0 Тогда

    вот. всё что знал сказал.

    Куда копать ?

    P.S.

    хотя вроде ловит если изменения произошли не в предпоследнем документе.

    текст SQL запроса сравнил, он получается одинаковый

    Reply ↓
  42. dumsik

    (43) Мне кажется от родного режима sql2005/2008 больше проблем чем пользы. Может было проше решить только специфичные проблемы связки 1с и sql2005/2008 а все базы держать в режиме совместимости (80). Под специфичными проблемами я понимаю (невозможность открытия базы в монопольном режиме, проблемы с odbc, проблемы с определением версии SQL).

    Reply ↓
  43. spock

    (45)теперь есть возможность выбора — демократия.

    Reply ↓
  44. Dolly_EV

    Несомненный +!

    Помню, года 1.5 назад через танцы с бубном и интернеты птица по имени server2008R2+SQL2008+7.7 у меня взлетела, да..

    Так что плюс несомненный и огромный респект, за систематизацию всех проблемных моментов «в одном флаконе»!

    …Но вот только кроме «использования современного ПО» никаких плюсов я для этой «птицы» тогда не увидел, поэтому вопрос в (34) остается открытым: «преимущества в использовании формата SQL 2005/8?»

    Reply ↓
  45. dumsik

    (46) а как поведет себя прокси dll если я укажу в sql 2005 у базы режим совместимости 80 ?

    Reply ↓
  46. spock

    (48)так же, как и в режиме совместимости выше.

    Reply ↓
  47. leshik

    Вот такую ошибку выдает при попытке сохранить проведенный документ в монопольном режиме:

    RGHost

    Reply ↓
  48. spock

    (50)реструктуризацию вызывал? Если да, то давай текст запроса, пойманный профайлером.

    Reply ↓
  49. leshik

    хм… с текстом запроса все сложнее — там експресс 🙁

    Reply ↓
  50. dumsik

    (49) во если бы прокси dll понимала что база в режиме 80 и запросы не правила тогда.

    Reply ↓
  51. leshik

    Вот на этом запросе сваливается:

    exec _1sp__1SJOURN_TLockX

    В монопольном режиме отрабатывает нормально

    Reply ↓
  52. spock

    (54)не было реструктуризации?

    Reply ↓
  53. leshik

    (55) скорее всего нет — сделать надо?

    Reply ↓
  54. leshik

    Была загрузка базы УРБД из DBF формата в SQL. Вот что было.

    Reply ↓
  55. spock

    (56)так-то да.

    (57)реструктуризация и обмен не одно и тоже.

    Reply ↓
  56. kudenzov

    Огромное спасибо за Вашу работу!

    Завтра начнем тестирование

    P/S Блокировку входа при вводе пароля бы еще выключить в 1Cv7.LCK , сейчас патчим bkend

    Reply ↓
  57. kudenzov

    клиент XP, slq 2008, режим совместимости 2008

    При загрузке базы из zip (выгруженного из DBF):

    Incorrect syntax near ‘INDEX’. If this is intended as a part of a table hint, A WITH keyword and parenthesis are now required. See SQL Server Books Online for proper syntax.

    ENTRY(INDEX=ACCDTID)

    INSERT INTO _1SACCSEL
    SELECT ACCID,DOCID,DATE_TIME_DOCID,NUMBER,CORNO,MAX(DT),MAX(KT) FROM
    (
    SELECT ACCID=TMP.MAINID,ENTRY.DOCID,ENTRY.DATE_TIME_DOCID,ENTRY.NUMBER,ENTRY.CORNO,DT=’*’,KT=’ ‘
    FROM #TMPACCSTBL TMP,_1SENTRY ENTRY(INDEX=ACCDTID)
    WHERE ENTRY.ACCDTID=TMP.SUBID and ENTRY.DATE_TIME_DOCID>’20040701     0     0   ‘ AND ENTRY.DATE_TIME_DOCID<‘20040801     0     0   ‘
    UNION ALL
    SELECT ACCID=TMP.MAINID,ENTRY.DOCID,ENTRY.DATE_TIME_DOCID,ENTRY.NUMBER,ENTRY.CORNO,DT=’ ‘,KT=’*’
    FROM #TMPACCSTBL TMP,_1SENTRY ENTRY(INDEX=ACCKTID
    WHERE ENTRY.ACCKTID=TMP.SUBID and ENTRY.DATE_TIME_DOCID>’20040701     0     0   ‘ AND ENTRY.DATE_TIME_DOCID<‘20040801     0     0   ‘
    ) AS ACCSEL
    GROUP BY ACCID,DOCID,DATE_TIME_DOCID,NUMBER,CORNO

    Показать

    Reply ↓
  58. spock

    (60)так, сломал…

    Reply ↓
  59. dungeonkeeper

    Пытались перетащить базу на sql 2008 сервер, но вылетает ошибка



    Создал пустую базу (в режиме 2008 (100)), назначил пользователя владельцем, в конфигураторе прописал настройки …

    в общем все вроде правильно.

    Кстати, предварительно пытался перетащить туже базу только без данных (пустую конфигурацию). Все проходило без проблем.

    Сам я в sql особо не копенгаген.

    Может подскажите где грабли?

    Еще вспомнил…

    До этого корячился в преславутой BkEnd.dll

    И подменой ODBC через реестр.

    Как теперь откатить подмену?

    делал вот по этой инструкции:

    1. Папку 1Cv7_SQLDriver скопировать в корень диска C

    2. Импортировать в реестр файл 1C_SQL_ODBC.reg

    3. с помощью команды sdbinst.exe [путь к файлу] 1sfix.sdb установить исправление.

    4. 1с должна запуститься

    Может ошибка с этим связана?

    Reply ↓
  60. spock

    (62)вчера вечером выложил исправленный вариант — этого не должно быть уже.

    Reply ↓
  61. kudenzov

    (63) Подтверждаю, zip грузится

    Reply ↓
  62. dungeonkeeper

    ВоПщем удалил 1Cv7_SQLDriver, так же отменил исправление «sdbinst.exe [путь к файлу] 1sfix.sdb»

    Все загрузилось, сейчас тестируем.

    Пыс.Пыс.

    Я только не понял , что за рекомендации:

    «вызывать реструктуризацию, если база данных до этого использовалась с родной BkEnd.dll (в хранимых процедурах есть код, который не проходит по ограничениям SQL2005/2008);»

    Как это сделать?

    Reply ↓
  63. spock

    (65)внести любые изменения в метаданные (отсортировать, поставить-снять галку, например) и сохранить.

    Reply ↓
  64. dumsik

    Хотелось бы поделиться некоторыми мыслями касательно данной прокси dll. Несомненно, автор данного решения молодец, он предложил нам еще один очень хороший способ запуска 1с 7.7 на современном ПО. Но представим следующею ситуацию: После месячного или более тестирования я скрестя пальцы внедрил эту технологию на рабочих базах и все вроде хорошо работает и в друг 1с падает на очередном запросе который не корректно парсится прокси dll. Я честно пишу spock’у но ответа нет (долго нет), а база не работает… Поэтому ребята хорошо подумайте перед внедрением этой технологии, уж сильно глубоко капнул spock в переделке 1c под sql 2005/2008.

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

    Reply ↓
  65. spock

    (67)так, а что мне ответить еще? Дублировать функционал я не собираюсь пока — я об этом сразу сказал, добавить нечего. Про проблемный запрос ничего не видел 😐

    Reply ↓
  66. spock

    +68 Кстати, хорошее замечание, что нужно хорошо подумать перед внедрением.

    Reply ↓
  67. dumsik

    (68) Не было пока проблемного запроса, я просто описал возможную ситуацию. Основная мысль в том, что рано или поздно у Вас не будет желания/времени на поддержку этого решения, и тогда такая ситуация вполне возможна. Я в комментарии (53) писал, что оптимальным с моей точки зрения было анализировать режим совместимости базы и строить логику работы dll исходя из этого, т.к. если база в режиме совместимости 80 запросы бы не изменялись dll и вероятность падения 1с снизилась бы на порядок, тем более у многих в конфах куча прямых запросов которые переписывать (в случае их несовместимости с sql2005/2008) не очень хочется.

    Reply ↓
  68. spock

    (70)вот когда не будет желания, то сразу выложу исходники.

    если база в режиме совместимости 80 запросы бы не изменялись dll

    ну тогда как поступаем с таким, например, DUMP TRANSACTION %s WITH TRUNCATE_ONLY на sql2008r2?

    куча прямых запросов которые переписывать … не очень хочется.

    так-то я сам в этом не заинтересован.

    Reply ↓
  69. dungeonkeeper
    dumsik пишет:

    Хотелось бы …

    У вас такая ситуация уже возникла или это только фантазии?

    Мы сейчас находимся на стадии внедрения этого «Секретного релиза».

    Пока тестируем. Есть проблемы, но пока не могу сказать с чем это связано. То ли это косяки SQL, толи 1С.

    При выполнении регламентных работ почему-то на SQL версии встают кривые проводки. Хотя то же самое на dbf отрабатывает правильно.

    У нас конфигурация написаная с самого начала (с Глобального модуля) под наше предприятие. Размер MD файла около 30mb. База за год вырастает до 5 Гб. Все бы хорошо, но размер одной из dbf таблиц подкатывает к 2Гб, а это, как вы знаете каюк!

    По этому кровь из носу надо перетаскивать всю базу на SQL. Выбора у нас нет.

    Переходить на 8, тоже не представляется возможным. Слишком долго и затратно.

    Reply ↓
  70. dumsik

    (71)

    spock пишет:

    ну тогда как поступаем с таким, например, DUMP TRANSACTION %s WITH TRUNCATE_ONLY на sql2008r2?

    А разве режим совместимости -80 не подразумевает что такие запросы будут работать корректно ?

    Reply ↓
  71. spock

    (73)а разве подразумевает?

    Reply ↓
  72. dumsik

    (74) да согласен DUMP TRANSACTION %s WITH TRUNCATE_ONLY на sql2008r2 не поддерживается (http://msdn.microsoft.com/en-us/library/ms144262.aspx). Но что мешает отслеживать только такие проблемные запросы? Поправь меня если ошибаюсь но ведь если база в режиме 80 то ошибки как в посте (62) на sql2008r2 не будет ?

    Reply ↓
  73. Dolly_EV

    (72)

    dungeonkeeper пишет:

    По этому кровь из носу надо перетаскивать всю базу на SQL. Выбора у нас нет.

    Выбор у вас есть! Вот эта штука http://infostart.ru/public/15211/ два года назад спасла меня в аналогичной ситуации (не было возможности поднять SQL в 7-ми филиалах за 2 дня)

    Reply ↓
  74. dungeonkeeper
    Dolly_EV пишет:

    (72)

    Можете объяснить как-то по подробнее, только наверное не здесь.

    Reply ↓
  75. chuck

    Ну что, поделюсь то же своим мнением.

    Сервак Win2003 x64 (замен драйверов нет), SQL 2005

    Перевел базу в режим совместимости 2005(90). В конфигураторе закрузка базы проходит, в режим предприятия тоже, но до тех пор пока не пытаешься открыть любой журнал документов или сформировать отчет!

    Ошибка:

    SQL State 42000

    Native 1018

    Incorrect syntax near ‘INDEX’ …. a table hint, a WITH keyword

    Пытался внести изменения в конфу(для так наз реструктуризации, добавил новый реквизит у справочника — достаточно???) — результат ТОТ ЖЕ!

    Reply ↓
  76. spock

    (78)ты качал 10.03.11. После этого новый вариант не скачивал?

    Reply ↓
  77. mybracho

    (1) Ёпрст, ты как гуру, рекомендуешь Солюшн ?

    Reply ↓
  78. DarkAn
    Reply ↓
  79. DarkAn

    (450)+

    До этого база была на win 2003, SQL 2005 помню что тоже шаманил для запуска, но там все работало. По определенным причинам пришлось срочно на новом сервере запустить все под новой операционкой. И тут встал стопор. Сегодня более менее как-то перекантовавлись (8 человек запустил), но к понедельнику надо чтоб работало 20+ пользователей в DBF — не камильфо в таком количестве.

    Срочно прошу о помощи. ХЗ еще какие ошибки повалят следом 🙁

    Reply ↓
  80. fatenkov

    —

    уважаемый, в публикации http://infostart.ru/public/82018/

    по кнопке скачать, сразу скачивается solution5.

    Reply ↓
  81. mad_maksim

    Самописная конфигурация, отчет с диаграммой выдает такую ошибку:

    Диаграмма.КоличествоТочек(КолвоТочек);

    {Отчет.СтатистикаРаботы.Форма.Модуль(69)}: Значение не представляет агрегатный объект (КоличествоТочек)

    Win2008R2+SQL2005

    Reply ↓
  82. yuraos

    (578) mad_maksim,

    это шо после установок примочек из данной работы появилось?

    если нет — то ето малость не по теме 😉 …

    Reply ↓
  83. mad_maksim

    (579) yuraos, Да, после установки. Причем даже в файловом варинте воспроизводится

    Reply ↓
  84. spock

    (580) mad_maksim, сделай пожта тестовый пример, который я запущу и увижу эту проблему.

    Reply ↓
  85. andrewks

    (578)(581) сдаётся мне, что проблема с v7chart.dll, а не из-за «секретного» релиза.

    возможно, что не зарегена эта длл-ка, или она работает некорректно. например, v7plus.dll на win7 x64 начинает нормально грузиться только после простановке в свойствах ярлыка 1С совместимости с WinXP

    Reply ↓
  86. mad_maksim

    (581) Прошу прощения за беспокойство, вопрос решился советом из следующего поста (запуск в режиме совместимости)

    Спасибо за разработку!

    Reply ↓
  87. mad_maksim

    (582) andrewks, Спасибо за совет, режим совместимости помог.

    Reply ↓
  88. MadDAD

    (581) во первых огромное спасибо за это решение!

    Во вторых есть такая хотелка:

    Установлен MS SQL Server 2008 R2.

    Если база находится в режиме совместимости c 2000 SQL, то все работает отлично.

    проблема начинается при переключении базы в режим совместимости 2008 (100)

    При выполнении из 1С такого запроса (из внешней компоненты. Компонента чужая, доработать возможности нет)

    ‘ DECLARE @tmp int

    SELECT @tmp=1 from _1SBKTTL (tablockx, holdlock) where 0=1′

    SQLExecDirect() перехватывается Вашей библиотекой как задумано. Текст запроса передается в BkEndUtls.ProccessQueryText(), но никак не изменятся. Т.е. как я понимаю должен добавиться «WITH» перед хинтами блокировки.

    Если можно это поправить — было бы просто чудесно.

    Reply ↓
  89. spock

    (599) MadDAD, а точно это нужно?

    Я изначально писал код как раз из расчета, что все подряд буду исправлять. Но, все-таки, мне кажется, что не нужно подменять запросы приходящие не из самой 1с.

    Reply ↓
  90. MadDAD

    (600) думаю нужно. Потому что получается функционал однобокий 🙂 Сама платформа может работать в родном режиме 2008 а компоненты не могут… Я понимаю, что по хорошему — нужно компоненту переделывать но тут вопрос легальности.

    Вариант конечно — прикрутить еще одну компоненту — которая будет частично дублировать функционал Вашей библиотеки в части перехвата запросов и их трансляции, но у Вас это уже реализовано.

    Reply ↓
  91. stepman3

    ну вот.

    лТекст =

    |Create Procedure dbo.» + лХранПроцедура + »

    |@mode int = 100,

    |@ostastext bit = 1,

    |@mode1 int = 0,

    |@idtovar char(9),

    |@data_ta DateTime,

    |@where1 varchar(300) = null,

    |@ostatok int OUTPUT,

    |@osttext varchar(300) OUTPUT

    |

    |AS

    |BEGIN

    |

    |SET NOCOUNT ON

    |

    |declare @ost1 int

    |declare @rez1 int

    ….

    «;

    DataBase = СоздатьОбъект(«ODBCDatabase»);

    DataBase.Attach1C();

    RecordSet = СоздатьОбъект(«ODBCRecordSet»);

    RecordSet.SetDatabase(DataBase);

    RecordSet.Выполнить(лТекст);

    p.s: файлик bkend0.dll патчен

    Исправление ошибки 100% загрузки процессора при ожидании блокировки в

    1С:Предприятие 7.7, от romix

    Reply ↓
  92. CheBurator
    Reply ↓
  93. varelchik

    (782) А что мешает переписать на прямой запрос с использованием ВТ?

    Reply ↓
  94. Berckk

    (782) CheBurator, а обслуживание базы то базы давно делалось (реиндекс, статистика)?

    Reply ↓
  95. CheBurator

    (783) не владею прямыми запросами. запрос прочту — примерно пойму что на выходе, но самому написать слабо, тольо самые простые плоские выборки

    Reply ↓
  96. CheBurator

    (784) по-моему — никогда, то есть с год примерно…

    и на измерениях регистров не везде стоят нужные флажки.

    но править проблематично — пойдетна точки пересчет регистров а там машинки очень слабые

    Reply ↓
  97. SatanClaws
    Reply ↓
  98. SatanClaws

    (902) Почти неделю взрывал себе мозг, пересобирал платформу и производит прочие непотребства.

    Стоило написать сюда, как тут же нашел причину.

    Короче, сегодня обратил внимание, что период расчета итогов стоит «5 дней».

    Перевел на «месяц» — документы стали проводиться.

    Для проверки — перевел периодичность назад на «5 дней» — та же фигня и бездейственный ступор 1Ски.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *