Очередное восстановление последовательности документов




Принцип обмена данными из 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='\

99 Comments

  1. Altair777

    Новая моя программуленка. Т.е. она старая, просто не пулбиковалась.

    Сильно не ругайте, лучше посоветуйте что нужно улучшить 🙂

    Reply ↓
  2. notka

    У меня вот что пишет:

    ДатаС=Что.ПолучитьДокумент().ТекущийДокумент().ДатаДок+1;

    {C:DOCUMENTS AND SETTINGSPC_10РАБОЧИЙ СТОЛВОССТАНОВЛЕНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ.ERT(238)}: Значение не представляет агрегатный объект (ДатаДок)

    Reply ↓
  3. Altair777

    (2) Последовательности есть в конфигурации? Хоть одна?

    А граница у нее есть? Выставлена документом? Этот документ не удалили?

    Reply ↓
  4. poppy

    (3)

    > Последовательности есть в конфигурации? Хоть одна?

    Зачем это спрашивать у пользователя? Может проверить программно?

    Кстати, ошибка будет другая:

    Имя=Посл.ПолучитьЗначение(Посл.ТекущаяСтрока());

    {С:REPAIR.ERT(236)}: Индекс не входит в границы списка значений.

    Что=Последовательность.ПолучитьАтрибут(Имя);

    {С:REPAIR.ERT(237)}: Неверное имя атрибута

    > А граница у нее есть? Выставлена документом? Этот документ не удалили?

    Для чего нужна эта обработка? Заявлено, чтобы ответы были «ДА» независимо от начальных условий. После работы обработки, но не до начала… 😉

    Reply ↓
  5. notka

    Я прошу прощения. Смотрела в конфигурации, где нет ни одного документа из последовательности. Проверила на другой все работает.

    Reply ↓
  6. Altair777

    (4) ты права, сделаю проверку для блондинок 🙂

    Только не обижайтесь, милые дамы 🙂

    Лучше расскажите, чем вы там занимаетесь. Мы, мужчины, очень любим блондиночек. А я — ужос какой любопытный 🙂

    Reply ↓
  7. Altair777

    (6) хм… проверка нужна еще и в том случае, когда последовательности есть, но не все они имеют документы.

    Reply ↓
  8. Abadonna

    (6)>Мы, мужчины, очень любим блондиночек.

    За всех не расписывайся! Я люблю зеленоглазых шатенок

    Reply ↓
  9. Altair777

    (5) Обновил версию. Спасибо!

    Reply ↓
  10. notka

    Вот за что я люблю мужчин-программистов, так это за их снисхождение к нам… блондиночкам, шатеночкам…

    Reply ↓
  11. Altair777

    (9) прости, Аркадий! Я дико извиняюсь 🙂

    Вообще, внешность не главное. Главное — чтоб человек хороший был.

    Reply ↓
  12. Altair777

    (10) и к брюнеточкам тоже 🙂

    Reply ↓
  13. Abadonna

    (11)>Вообще, внешность не главное.

    ИЗВИНЯЙСЯ второй раз:))))))))))

    — Карлсон, поверь, не в пирогах счастье!

    — Ты что, с ума сошел? А в чем же еще?

    😉

    Reply ↓
  14. Altair777

    фик! не извинюсь! 🙂

    счастье — в начинке 😉

    Reply ↓
  15. poppy

    Как-то не очень правильно считает время выполнения:

    Общее время обработки 3615 сек.

    Общее время проведения 90014 сек.

    Reply ↓
  16. Altair777

    (15) ого! спасибо, я посмотрю

    но у меня все было правильно 🙂

    Reply ↓
  17. kalleka

    Надо попробовать. Только вот, что метки присутствуют настораживает

    Reply ↓
  18. kalleka

    ReconnectNative() сильно увеличивает скорость?

    Reply ↓
  19. Altair777

    (18) для 2000 SQL в десятки раз 🙂

    Reply ↓
  20. Altair777

    + (19) для 2005, как я понимаю — нет

    В нем была исправлена ошибка

    Reply ↓
  21. magus

    (16)

    Запусти обработку на пару суток. Сразу увидишь неправиьлность.

    Reply ↓
  22. kalleka

    у нас 2000)) в 10 раз по сравнению со стандартной?

    Reply ↓
  23. Altair777

    (21) спасибо, я понял в чем суть

    Reply ↓
  24. Altair777

    (22) был такой случай, это касается не этой обработки, а вообще метода.

    Нужно было провести примерно 20 документов по 3’000-8’000 строк.

    Первый провелся за 15 минут, 10 за 3 часа, 15 не провелся вообще (оборвали)

    Началось в пятницу вечером, не закончилось в понедельниу утром.

    Цифры примерные, просто для оценки количественной характеристики.

    Reply ↓
  25. kalleka

    (25) Ну у нас вообще большой документооборот, в основном по 5-30 строк доки. Немного допишу твою, добавлю лог в частности и проверим. Спасибо в общем — мне вот влом что то выкладывать

    Reply ↓
  26. kalleka

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

    Reply ↓
  27. ПАО

    Ребята, а можете написать обработку для проверки все ли кассы отправили закрытие смены в общую базу, их 21 шт. отправляют (обмен авто по фтп серверу) чтобы можно было с утра нажать кнопочку и увидеть если не пришел хотя бы 1 отчет). ТиС 7.7..помогите..вы же «монстры»*))

    Reply ↓
  28. kalleka

    А (27) может написать обработку «Автоматическое доведение вашей конфы до божественной» ))) Чтобы запустил и все отлично стало, при чем у всех сразу

    Reply ↓
  29. Altair777

    (27) мы все можем…. но иногда нам лень 🙂

    Reply ↓
  30. Altair777

    Обновил, но не проверил. Надеюсь, хуже не стало 🙂

    На домашнем компе, оказывается, не установлен телепат.

    Ацкие муки 🙁

    Reply ↓
  31. Hunta

    Спасибо! Прям что то как то быстро отработала, в отличии от стандартной =)

    Большой и жирный плюс!!! «+»

    Reply ↓
  32. Altair777

    (31) Спасибо за комментарий! Я очень рад, что пригодилось.

    Лично я стандартным восстановлением последевательности последний раз пользовался еще в прошлом веке. 🙂

    Воспоминания очень неприятные.

    Reply ↓
  33. CheBurator

    Извините за нескромный вопрос: а зачем таймаут между документами в 10 сек, понятно что в рабочее время.. но и врабочее время есть моменты относительного «бездействия» системы — и зачем в это время ждать по 10 сек?

    Reply ↓
  34. Altair777

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

    Ситуация — работают 5-10 менеджеров, а нужно срочно восстанавливать последовательность (бухи требуют).

    Если не делать паузы — ожидание захвата таблиц.

    Reply ↓
  35. CheBurator

    (34)

    1. а если попробовать ромиксовый патч 100% загрузки проца?

    2. делать 10 сек паузу там, где модно обойтись вообще без пауз — бяка, подход «в лоб»…

    Reply ↓
  36. Altair777

    (35) а если не под терминалами?

    Reply ↓
  37. CheBurator

    (36) тогда — вешаться… 😉

    Reply ↓
  38. Altair777

    (37) отож 🙂

    Поэтому, если нет другого варианта (установленный патч)- тогда паузы.

    Пользователь сам может выбрать.

    Reply ↓
  39. hogik

    (35-38)

    😉 Интересный разговор получился у вас.

    Паузы между транзакциям не имеют никакого отношения к «ромиксовый патч 100% загрузки проца». А обмен мнениями по поводу терминального режима какое имеет отношение к паузам между транзакциями и «100% загрузки процессора»?

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

    Reply ↓
  40. Altair777

    (39) не мог же я спорить с самим Че 🙂

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

    А вообще, я согласен — паузы нужны в «дневном режиме».

    Поэтому они и есть 🙂

    Reply ↓
  41. Altair777

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

    Reply ↓
  42. hogik

    (40)

    😉 Совсем меня запутали.

    Да, больший «выигрыш патч Ромикса дает» в терминальном режиме чем в сетевом. Хотя загрузка сети на 100% при опросе блокировок тоже не положительно влияет на производительность системы. Да и не совсем безразлично «будет ли процессор загружен на 100% на клиентской машине». Например на клиентской машине выполняется задача с «пакетным» проведением документов, а пользователь работает в текстовом редакторе. Вроде в последних версиях Windows-а уже можно запускать две задачи…

    Reply ↓
  43. hogik

    41)

    «Кстати, мне кажется, пауз больше нет ни в одной аналогичной разработке на ИС.»

    Про ИС не скажу, а у меня во всех разработка такого рода есть окно диалога с количеством секунд ожидания между…

    Reply ↓
  44. Altair777

    (42) под словом «клиентская» я понимал что это не сервер.

    «Обычные» пользователи не запускают такие обработки, они накладные колбасят.

    Их запускают Администраторы БД, а сами идут пить пиво 🙂

    Поэтому многозадачность Windows в данном случае не востребованна.

    (43) У меня тоже много фич есть, но я удовольствие растягиваю 🙂

    Reply ↓
  45. kalleka

    Кстати еще одно пожелание. Иногда бывает необходимо, чтобы если док не проводится он не прерывал обработку, а продолжил ее, ведя при этом лог. Смысл в следующем: Приходишь с утра, заглядываешь в лог — смотришь доки, которые не провелись, исправляешь косяки и запускаешь восстановление последовательности

    Reply ↓
  46. Altair777

    (45) ноу проблем

    но я себе тогда не делал

    Ситуация — партионный учет, не провелся док с 500 или 1000 позиций.

    А остальные провелись. Как будто 🙂

    Reply ↓
  47. kalleka

    (46) у нас тоже партионный учет, но за пару дней может быть 2-3, а то и больше косячных документов — отделу закупок большие права дали, по перепроведению документов и их изменению, а там такая система взаимосвязанная с заявками. реализациями и прочее. Сам я себе уже добавил и лог и чтобы проводилось дальше. Мне кажется лог по крайней мере нужен — хотя бы инфа когда началось, когда кончилось, ну статистика по скорости. какие доки не провелись.. а то прихожу на работу последний в отделе — а там раз и сервак скульный перегрузили и не понятно без лога чем закончилось дело)))

    Reply ↓
  48. Altair777

    (47) Лог у меня есть

    в первоначальном варианте записывалось в текстовый файл.

    После каждого дока он записывался, как раз на случай не предвиденных ситуаций.

    Reply ↓
  49. CheBurator

    — да я тоже не против пауз, напрягает только полная «тупизна» такой организации пауз…

    — решение по восстановлению последовательности с паузами в рабочем режиме вроде есть на дисках ИТС (давно туда не заглядывал)

    — (47) зарубите на! вся

    Reply ↓
  50. poppy

    (47) kalleka, тебе сюда http://infostart.ru/projects/887/

    Reply ↓
  51. Altair777

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

    Reply ↓
  52. artbear

    (51) А почему бы этого не делать? Пользователи должны знать о различных вариантах и использовать лучшее.

    Reply ↓
  53. alexk-is

    (52) Я, например, думал, что для этого создан рубрикатор. Иначе у пользователя может создаться «неверное» (неполное) представление. Обработок подобной направленности на ИС не 2, а в десятки раз больше…

    Reply ↓
  54. kalleka

    (52) Мне в этой обработке понравился ReconnectNative(), к тому же я скомпоновал с нашей предыдущей обработкой и все вроде устраивает пока

    (49) Насчет ограничения Юзверей согласен. Но здесь работаю месяц всего, пока не время наводить свои порядки

    Reply ↓
  55. kalleka

    Блин, не понятно зачем в 182 строке ТекДок.Провести(,1) передан параметр 1? Для чего? У нас один документ использует этот параметр и он криво провелся. За 3 дня таких доков 100 наверное — из за кривого проведения вылезли минусы в остатках

    Reply ↓
  56. Altair777

    (55) Я извиняюсь, уже убрал и перезалил

    Reply ↓
  57. Altair777

    (55) Отослал сообщение о найденной проблеме всем плюсовавшим.

    Почти всем 🙂

    Reply ↓
  58. avgur777

    При установке галочки «Предварительно ПН — в начало дня» выдает сообщение об ошибке создания объекта «Документ.ПриходнаяНакладная»…и это правильно, потому что в Торговле 7.7 такого документа НЕТ! А есть «Документ.ПоступлениеТМЦ»….

    Reply ↓
  59. Altair777

    (58) Я об этом уже думал, что бы сделать поле для выбора вида Приходного документа.

    > потому что в Торговле 7.7 такого документа НЕТ

    Не следует путать платформу и конфигурацию 🙂

    Вот, например, Комплекс: ПриходнаяНакладная, Т_ПриходнаяНакладная

    Reply ↓
  60. avgur777

    Что вижу, то и пою….В описании написано «Внешний отчет, обработка для 1С: Торговля и склад 7.7 »

    ЗЫ: В Комплексной 7.7 тоже нет объекта «Документ.ПриходнаяНакладная»… или мы используем разные конфигурации??

    Reply ↓
  61. Altair777

    (60) Конфигураций много 🙂

    Уже изменил, скоро выложу.

    Reply ↓
  62. Altair777

    Обновил. Еще куча новых идей появилась 🙂

    Reply ↓
  63. kalleka

    Лог добавил? лучше если с настройкой «подробности» лога

    Reply ↓
  64. Altair777

    (63) еще нет. Работа….. 🙁

    Reply ↓
  65. gator

    Не знаю, может у меня чего в ТиС не так, или руки там итп, но штатная у меня работает быстрее вдвое…

    усомнился…

    сделал копию базы, хотел устроить «соревнования» при прочих равных — некогда…

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

    На вскидку получилось так:

    по данным обработки среднее время проведения под 20 секунд…

    это ~3 дока в минуту…

    штатная нt считает среднее время, но по 7-10 обычных доков в минуту делает…

    (инвентаризационные итп большие доки не берем)

    Идеи reconnect, с таймером — понравились,

    проводить последовательность онлайн, в рабочее время…

    (в штатную засуну?)

    делал через «Предупреждение» — да, глючит, тут много вокруг этого понаписано по объект таймер итп…

    Reply ↓
  66. Abadonna

    >проводить последовательность онлайн, в рабочее время…

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

    Reply ↓
  67. Altair777

    (65) соревнования надо проводить в нерабочее время, по очереди

    (66) а ты попробуй 🙂

    Reply ↓
  68. dav405

    Мне бы очень понравилось, если бы

    1) сообщения о проведенных доках можно было бы выводить пакетами по сколько-нибудь штук,либо вовсе не выводить

    2) Если бы время шло все-таки в секундах.миллисекундах

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

    добавим в глобальный модуль

    Функция RunAny(Параметр,ИмяФайла) Экспорт

    ОткрытьФорму(«Отчет#», Параметр, ИмяФайла);

    Return 1;

    КонецФункции

    И вызываем из штатного шедулера vbs скрипт

    set v7 = CreateObject(«V77.Application»)

    result = v7.Initialize(v7.RMTrade, «/DПутб /NСпецЮзер /PЕгоПароль»,»NO_SPLASH_SHOW»)

    if result then

    LogFile.WriteLine » Ok connected «+FormatDateTime(Time)

    V7.EvalExpr(«RunAny(«»СтрокаПараметра»»,»»\ПутьКОбработке
    epair.ert»»)»)

    ……

    Reply ↓
  69. Altair777

    Версия обновлена до 1.4 от 09.06.2009 — добавлена возможность сортировки нескольких видов документов, предварительно помещаемых в начало дня.

    Reply ↓
  70. Altair777

    По просьбам из комментариев

    1.5 от 18.09.2009

    Добавлено: возможность выборочного протоколирования результатов файл.

    Добавлено: возможность перепроведения всех документов, а не только из последовательности.

    Удалено (!): использование метода ReconnectNative()

    Reply ↓
  71. post84d

    Обработка -супер. Достоинство в том что при про проведении не засоряется Журнал регистрации, до этого я пользовался другой , там постоянно (при проведении каждого документа переносилась ТА), таким образом два -три дня в ЖР шум в 500-600 ненужных записей. Спасибо!!!!!

    Reply ↓
  72. Altair777

    (71) Не за что 🙂

    P.S. А плюсовать лучше не комментрии, а саму разработку 😉

    Reply ↓
  73. iov

    (0)вот честно здря реконнект убрал. Обработка жирный плюс… но мог бы оставить желающие и знающие бы использовали.

    Reply ↓
  74. Altair777

    (73) Были нюансы… Но предыдущую версию я оставил.

    Спасибо!

    Кстати, забыл упомянуть о седьмой фичи 😀

    Reply ↓
  75. iov

    (74) а можно подробнее с нюансами? Потому как планирую назад вставить реконнект (только с возможностью установить переодичность в документах).

    Reply ↓
  76. Altair777

    (75) http://www.1cpp.ru/docum/html/ODBC.html#reconnectnative-reconnectnative

    Описание: специальный метод для решения проблемы с MSSQL 2000 (Bug #: 472280) Выполняет отключение и подключение родного соединения программы с сервером. При этом не должно быть открытых форм списков, форм объектов, прочих объектов языка на основе курсора, подготовленных или перебираемых объектов ODBCRecordset (через родное соединение, разумеется). Не допускается вызывать этот метод в транзакции явной или неявной.

    Насколько я помню, когда затачивал под ReconnectNative() пришлось отказаться от объявления Перем ДокиДляПроведения в модуле процедуры.

    Сравните, как это делается в 4 версии. Там док для проведения каждый раз создается независимо из последовательности.

    Но если очень надо, могу попробовать побороть.

    Кстати, а почему бы Вам не поставить более свежий скуль?

    Reply ↓
  77. iov

    (76) Более свежий скуль для 7.7 даже с патчами не хочет стабильно работать у меня… Частые вылеты + непонятные блокировки и зависающие сессии. Очень сильно переписанная конфа. Просто нет возможности отловить все баги. Вообщем остается надежда на реконнект.

    Тем более я как поборол эту бяку (открытые курсоры)… писал все в список значений (Это для того чтобы в одном месте была процедура) сохранял в Значениевстроку а после выполнения метода восстанавливал.

    А если требовалось в обработке то просто это значениеВСтроку и после метода реконнект(). А по поводу скуля поновее есть ли пример (версия с какими патчами) корректно работает? Чем черт не шутит вдруг правда встанет (уже год переписываю все на прямые запросы и иные ускорители исправил кучу косяков, может помогло). а так респект за обработку очень нужная вещь. Если найду гдето был запрос на версию sql с чем работаем и активация реконнект по этому методу сильно облегчит жизнь..

    Reply ↓
  78. iov

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

    например так

    вид документа |обработка(путь)|Модально|

    «Реализация» | каталогобработокОбработкаИзмененияКомментария.ert |1|

    Reply ↓
  79. Altair777

    (77) > писал все в список значений (Это для того чтобы в одном месте была процедура) сохранял в Значениевстроку а после выполнения метода восстанавливал.

    А зачем список значений? Хватило бы и переменной модуля обработки, в которой содержится ЗначениеВСтрокуВнутр последнего документа.

    Кстати, через список значений у меня тоже есть в Функция ПНвНачало().

    Это была отдельная грустная история.

    В этой разработке объединенены несколько. И раньше была отдельная обработка, которая Приходные накладные перебрасывала в начало дня.

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

    Док=СоздатьОбъект(«Документ.Приходная»);
    Док.ВыбратьДокументы();
    Пока Док.ПолучитьДокумент() = 1 Цикл
    // Тут было изменение времени документа
    КонецЦикла;

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

    Кстати, этот «левый» переход сделал его приходящий корефан, который считал и, наверно, до сих пор себя считает крутым программистом 🙂

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

    На мой вопрос:

    — А вы проверяли?

    Был дан ответ:

    — Да

    — А на скольки компьютерах 1С запускали?

    — На одном

    — А почему только на одном?!

    …. ответа не последовало…. кажется. Давно это было…

    Вот так и получилось, что все преимущества файловой версии потерялись, а недостатки скульной приобрелись.

    Reply ↓
  80. Altair777

    +(80) Код должен был выглядеть так:

    Док=СоздатьОбъект(«Документ.Приходная»);

    Док.ВыбратьДокументы();

    Пока Док.ПолучитьДокумент() = 1 Цикл

    // Тут было изменение времени документа

    КонецЦикла;

    Reply ↓
  81. iov

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

    А насчет файловой версии есть плюсы есть минусы… Мне как-то скуль больше ипанирует в плане функционала а файловая в том что без использования реконнект проводит шустрее…

    Ну а по поводу перевода на скуль. профи знает что делается это не за раз. А порой приходится и переписывать много.

    Reply ↓
  82. Altair777

    (82) > профи знает что делается это не за раз

    В том-то и дело 🙂

    Эксперименты надо проводить не на «живой» базе и не на живых людях.

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

    А этот «Кулибин» с сисадмином (тоже приходящим) где-то на другом конце города….

    Reply ↓
  83. iov

    (83) Я вот также прихожу в фирмы и говорю что быстро но без гарантий стоит столько + гарантии в3-10 раз дороже.(+ исправление неявных проблем). И договариваюсь при свидетелях. Обычно после раздумий отказываются завут «спеца» дешево и сердито а потом вновь меня починить то что он наделал. (ну или стыдно и не зовут). Причем я заранее описываю типичные ошибки которые «спец» совершит. Обидно с одной стороны потом слышать что не послушали — потом все сломалось и позвали СПЕЦИАЛИСТА и выясняется что случилось именно так как говорил..

    И главная проблема всех что ПОЧТИ НИКТО не пишет документации (Особенно я максимум видео стправку накатаю как и что и куда.) А после моих автоматизаций все работает если не менять ничего ибо каменты к коду пишу только к передаваемым параметрам и основным функциям и прцедурам. которые хоть и универсальны но не терпят ошибок при обращении с ними. И как-то приспичило привлечь франчей… Так те обплевали мои некоторые наработки «типа не стандартно 1С» переписали через 2 недели все просто порвало.. и доказать что это их вина было очень тяжело… нет документациии, описание изменений и тд… И они сертифицированные специ а я? Самоучка с опытом в 10 лет и ни одной притензии от клиентов. все как часы + 24 часа поддержка.

    P.S. Тема уж больно знакомая. Недавно фирма педдержки (софт- железо) сервак уронили бездействием а потом прислали спецов которые русского языка не понимают и слова домен и рейд их в панику вгоняют… похерили инфу и еще счет выставили.. вот как после этого к таким относится?

    Reply ↓
  84. Altair777

    (84) Просто крик души какой-то получился 🙂

    Reply ↓
  85. iov

    (85) Просто надоели торгаши… они нихрена не создают кроме инфляции.

    А создавать что-то, хоть и ввиде программ или сервисов- это хоть что-то… Я уважаю людей которые работают на созидание… А не тупо купи-продай это же система пожирающая сама себя… Мне обидно за будующее, точнее за его отсутствие… Просто сегодня все хотят отчетов а когда задал вопрос о том что надо ручками поработать» вбить данные правильные по своим клиентам» попытались свалить на меня со словами «ты же можешь»… Блин я могу и стрелять и пилить и петь, но это для души а остальное надо как-то оценивать а не требовать.

    Reply ↓
  86. platinum

    Подскажи, вот у меня есть задача перенести все документы поступления начало дня и выровнять последовательность. Я на третьей закладке указал диапазон дат,поставил галку «предварительно документы в начало», выбрал документы «Поступление ТМЦ» и «Возврат от покупателя» в табл.части и обработка работала всю ночь,но выбранные документы так и не перенесла в начало дня. Может я не совсем понял предназначение данной обработки и она этого не делает или что-то мешает ей перенести эти доки в нач. дня.

    Reply ↓
  87. Altair777

    (87) Проведенные переносит, а не проведенные — нет

    Reply ↓
  88. platinum

    (88) сори сам разобрался, не обратил на дату «Не обрабатывать начиная со времени». По-умолчанию стоит ну уж очень позднее время, оказалось,что документы по реализации были на 06:00 ч., а некоторые по-поступлению чуть позже,но не позднее 8:00. Поставил время 02:00 и новое время от 0:30 и все норм.

    Reply ↓
  89. Altair777

    (89) Я рад 🙂

    Reply ↓
  90. platinum

    В некоторых случаях для ускорения процесса предварительного перемещения документов можно было сделать другой алгоритм, например:

    1. сделать два списка: в одном будут документы поступления, в другом документы списания.

    2.Делаем выборку по всем документам в базе за указанный период

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

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

    Reply ↓
  91. Altair777

    (91)

    1) А если не 2 вида документов, а 15? То 15 списков? 🙂

    3) Так и делается

    Лишние документы не перепроводятся!

    Reply ↓
  92. platinum

    Я сейчас говорю про обработку для предварительного переноса, у тебя сделано, как я понял, так, ты перемещаешь все выбранные для предварительного переноса документы,которые находятся позже времени «Не обрабатывать начиная со времени», не смотря, если в день этого документа документы списания.

    А про списки почему 15? Не важно сколько там будет видов документов, чаще всего требуется именно, чтобы поступление шло раньше списания и мы можем все документы разделить на два списка.

    Reply ↓
  93. Altair777

    (93) И я о ней говорю.

    1) Ситуация, когда нет документов списания на порядок реже, чем наоборот.

    2) Обычно менеджеры когда начинают списывать товар? в 9 утра. Склады могут и в 8. Для этого и служит параметр на форме «Не обрабатывать начиная с времени, ЧЧ:ММ».

    И как универсальная обработка может знать, какой документ списывает товар?

    Как по Вашему, док «Наряд-Заказ Гидравлика» списывает или приходует? Или и то, и то? 😉

    Reply ↓
  94. platinum

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

    Reply ↓
  95. Altair777

    (95) Ясненько 🙂

    За целый год собрались одним махом все сделать?

    Впервые эта оббработка работала в фарм.фирме с документами по 3-8 тыс. строк. Как приходными, так и расходными.

    Перенос за один день шел порядка 10-15 минут. Если базу держать в актуальном состоянии, то будет попроще.

    Кстати, общий совет… На надо переносить сразу за весь период, лучше частями, по месяцу или кварталу. И просматривайте логи.

    Reply ↓
  96. platinum

    Дело в том, что пришел к клиенту, у которого последовательность не восстанавливалась уже с 2007 года, у них такой там бардак, и они еще удивляются, что как-то криво строятся отчеты. Если делать по-частям, то я совсем заколебусь все года разбирать. Ладно посмотрю, что получится, если будет куча косяков,то сверну базу,откорректируют остатки и пусть в обязанности какого-нибудь сотрудника, хотя раз в неделю запускать эту обработку.

    Reply ↓
  97. Altair777

    (97) Желаю Вам удачи в этом 🙂

    Очень интересно узнать, чем это все закончилось.

    Reply ↓
  98. Altair777

    Обновил 🙂

    Версия 1.6 от 22.10.2009

    Исправлено: обработка ситуации для режима «Перепроводить ВСЕ документы» в случае, когда граница последовательности стоит не на документе.

    Reply ↓
  99. quick

    Спасибо! То что надо!

    Reply ↓

Leave a Comment

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