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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2024-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 не будет опубликован. Обязательные поля помечены *