Акт списания материалов Бух 7.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='\

74 Comments

  1. z_serg_v

    Про рейтинг не забывайте

    Reply ↓
  2. sergeP

    Спасибо. пригодится многим!

    Reply ↓
  3. SunShinne

    Спасибо, мои уже три месяца просят, все нехотелось этим заниматься, отпало

    Reply ↓
  4. Starik

    Открываем, нажимаем заполнить и

    ТЗ.СубСчет10= Строка(ДокОснование.Материал.Субсчет10);

    {C:PROGRAM FILES1CV77БАЗЫБУХГАЛТЕРИЯ1SBDEMOEXTFORMSАКТСПИСАНИЯ.ERT(115)}: Поле агрегатного объекта не обнаружено (Субсчет10)

    Это все потому, что в док. Требование накладная в табл. часть могут попасть не только материалы, но и продукция и полуфабрикаты…

    Reply ↓
  5. z_serg_v

    08.09.06 Исправил ошибку, теперь работает

    по продукции и полуфабрикатам.

    Поправил описание.

    Reply ↓
  6. бухгалтер

    спасибо большое , то что надо и именно сейчас

    Reply ↓
  7. константин

    Спасибо, выручили…

    Reply ↓
  8. lan

    Очень удобно …Спасибо Автору.

    Reply ↓
  9. stepan_shock

    не корректно работает, в ОСВ по счету есть ТМЦ, он ничего не рисует

    Reply ↓
  10. z_serg_v

    Он работает по документам Требование-накладная

    Reply ↓
  11. Конечно очень здорово и акт прикольный в печатной форме,только вот заполнить таблицу не можем.

    Reply ↓
  12. СНА

    СПАСИБО!!!

    Reply ↓
  13. LiOn

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

    Reply ↓
  14. RuslanF

    Может чего-то не понимаю как заполнить таблицу

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

    Reply ↓
  15. z_serg_v

    Смотрите описание

    Reply ↓
  16. DudaeFF

    а где это самое описание?????

    Reply ↓
  17. DudaeFF

    и еще, при формировании списка на списание он формируется из всего что есть например на эту дату а не из того что есть в выбранной требовании-накладной… Так и должно быть или это можно как то побороть?

    Reply ↓
  18. z_serg_v

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

    Отчет формируется по всем требованиям накладной за выбранный период.

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

    Можно сделать выбор треб-накл, но это уже другой отчет. У нас этого не требовалось.

    У меня Акт списания сделан документом, но принцип работы тоже за период.

    Reply ↓
  19. maritaka

    Очень нужная вещь. Вот только бы заставить ее работать.

    Что нужно сделать чтобы таблица начала заполняться?

    Reply ↓
  20. z_serg_v

    Сделал выбор документа для списания.

    Повторяю: Отчет работает по документам «Перемещение материалов » в производство

    Reply ↓
  21. AlMir

    Спасибо!!!!!!!!!!!!!!!!!!!!!

    Reply ↓
  22. winan

    Благодарю!!!

    Reply ↓
  23. yulka

    как скачать акт списания материалов?

    Reply ↓
  24. z_serg_v

    Должен быть для всех свободен. Если нет могу на мыло сбросить

    Reply ↓
  25. nev-zhanna

    Акт на списание довавился в документ передача в производство, но не заполняется

    Reply ↓
  26. z_serg_v

    Это внешний отчет. Никуда он не добавляется. Через МЕНЮ ФАЙЛ ОТКРЫТЬ открывается

    Reply ↓
  27. nahinalka

    Нужная вещь. Только бы заставить работать…

    Reply ↓
  28. vlad50

    Отлично! Спасибо! )

    Reply ↓
  29. blacky

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

    Reply ↓
  30. Zzimma

    а можно просто распечатать?

    Reply ↓
  31. sip

    Супер! и надо доработать! сделайте пожалуйста чтобы его можно было выбрать в открытом требовании-накладной (кнопкой внизу). Т.е. сразу заполнил требование-накладную и распечатал акт.

    Reply ↓
  32. sip

    Здорово! напишите пожалуйста пароль на AktSpis2. Нужно подправить длину строки наименование акта. Спасибо!

    Reply ↓
  33. Зарина

    Хороший отчет, но только для типовой конфигурации. А для УСН? И можно ли узнать пароль, попробую в УСН. Спасибо.

    Reply ↓
  34. kudag1

    Нечитаемый формат. —

    Reply ↓
  35. Holla

    аналогично с KUDAG1… формат не читается… без 1С форму нельзя просматривать?

    Reply ↓
  36. assgs

    Я сломала голову ,как мне списать за два года то что болталась на счетах не прилагая усилий ,и тут такой подарок!Умница,спасибо

    Reply ↓
  37. fomenkom

    В УСН выдает ошибки! Документ не заполняется

    Reply ↓
  38. Angel77

    Все супер!!! только можно несколько ньюансиков:

    1. грамматическая ошибка: в графе итого прописью стоит «ИОГО»;

    2. было бы неплохо добавить текстовую графу «утвержденная» например приказом от и №, которая в отчете прописывалась бы после слов комиссия в первом абзаце.

    мы конечно ручками дописываем и исправляем, но ведь совершенное должно быть еще совершеннее;)) еще раз спасибо.

    Reply ↓
  39. adya

    Молодец! Супер…но ошибки надо исправить, но все-равно спасибо

    Reply ↓
  40. AV-56

    Не открылось?

    Reply ↓
  41. geo 55

    Благодарю за решение проблемы, а то наша ИФНС при выездной проверке зацепилась за эти акты и выкинула из расходов все материалы.

    Reply ↓
  42. 4ish

    А можно узнать пароль на ert?

    Reply ↓
  43. Иванкова

    объясните пожалуйста куда сохранить и как открыть или где взять инструкцию?

    Reply ↓
  44. olgec

    В усн И В бУХГАЛТЕРИИ ГОВОРИТЬ ЧТО НЕПРАВИЛЬНЫЙ ФОРМАТ ФАЙЛА

    Reply ↓
  45. cheri

    Огромная благодарность за акт списания материалов!!!

    Reply ↓
  46. olgec

    Напишите пожалуста актик для упрощенки!!!!!!!!!!!!!!!

    Reply ↓
  47. sonata

    Скачала данные обработки.

    Требует пароля.

    Это как?

    Reply ↓
  48. vasilykushnir

    (47) А так… Наверное надо в личку автору обработок что-то написать….

    Reply ↓
  49. Altair777

    (48) Если архив закрыт паролем, это надо в шапке указать

    имхо 🙂

    Reply ↓
  50. Арчибальд

    А я так и не понял, зачем к форме М-11 плодить еще документы, не предусмотренные нормативкой. Похоже, огромный процент бухгалтеров мается от безделья. В развитие направления могу предложить:

    1. Указывать приказ о назначении комиссии.

    2. Определять должности членов комиссии на дату составления акта, а не на дату печати, как в обработке. Т.е. анализировать приказы о кадровых изменениях.

    3. Сопровождать актом каждую строку формы м_11 (это, правда, уже кто-то предложил).

    4. При перемещении ТМЦ между складами для источника составлять акт списания, а для приемника — акт оприходования.

    5. Расширить обработку, чтобы работала с документами «ОтпускМатериаловНаСторону», «ПродажаВРозницу», «РасходнаяНакладная».

    Reply ↓
  51. sonata

    (49) Не поняла…что и где указать…

    Подскажите, пожалуйста…

    Наш администратор сказал, что файл запаролен.

    Reply ↓
  52. sonata

    (48) автору написала в личку, но он пока не отвечает…

    По-идее, он должен в личку прислать пароль?

    Reply ↓
  53. Altair777

    (51) автор должен был предупредить, что архив запаролен и указать способы получения пароля

    (52) Дата последнего входа: 16.01.2009 14:16:12

    Reply ↓
  54. Арчибальд

    (51)Запускаете 1С-ину (любую). Файл-открыть. На форме давите листок с вопросительным знаком.

    Вчитываетесь в текст, медитируете (мантра: ап что может думать такой папаша).

    Запускаете Конфигуратор. Опять Файл-открыть. Получаете окно-доступ ограничен, введите пароль.

    Вспоминаете о папаше (см выше), думаете как он (ап выпить рюмку водки и т.д. по Бабелю). Набираете пароль. 🙂

    Reply ↓
  55. sonata

    (54) С чувством юмора, у вас все хорошо.

    Мне просто очень срочно надо, а владелец не отвечает.

    Возможно, он не в сети.

    Или забыл про форум.

    Может кто-нибудь помочь с паролем?

    Reply ↓
  56. 125118

    спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Reply ↓
  57. stgy

    А по форме 230 сделать слабо?

    Reply ↓
  58. ketr

    блин, хотел столбец добавить, а обработка запаролена(((

    есть может у кого ломалка? Поделюсь обработкой декодирования модуля для 8.1

    Reply ↓
  59. fortuna_77

    Спасибо,всё работает,мне этого не хватало для полного счастья.

    Reply ↓
  60. Nellim

    Спасибо за разработку, экономия времени

    Reply ↓
  61. AB3012

    очень полезная штука

    Reply ↓
  62. vlad50

    Очень полезная разработка! Спасибо!

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

    А так — всё нормально! Сенкс! )

    Reply ↓
  63. forurchik

    отличная обработка. Давно искал .

    Reply ↓
  64. Oleg51

    Большое спасибо. Удобная и нужная обработка.

    Reply ↓
  65. v-oksana

    Спасибо. Нужная вещь.

    Reply ↓
  66. OleGazz

    отличная вещь, большое спасибо

    Reply ↓
  67. ann999

    а для УСН подходит?

    Reply ↓
  68. Мать Тереза

    Пользуюсь давненько- очень удобно, не надо лазить и искать что надо списывать, всем известно что во многих фирмах материалы списывают «оптом», а потом уже дают на подпись.

    Reply ↓
  69. Bomba1911

    Спасибо,всё работает,мне этого не хватало для полного счастья.

    Reply ↓
  70. vovkakursk

    Спасибо. Очень нужная вещь!

    Reply ↓
  71. vaiteri

    Для подтверждения списания достаточно формы М-11. Форма утвеждена Госкомстатом. Дополнительная форма «акта на списание» не является обязательной.. 🙂

    М-11 есть во всех 7.7-8.х конфигурациях.

    Reply ↓
  72. Мать Тереза

    А я так и не понял, зачем к форме М-11 плодить еще документы, не предусмотренные нормативкой. Похоже, огромный процент бухгалтеров мается от безделья. В развитие направления могу предложить:

    1. Указывать приказ о назначении комиссии.

    2. Определять должности членов комиссии на дату составления акта, а не на дату печати, как в обработке. Т.е. анализировать приказы о кадровых изменениях.

    3. Сопровождать актом каждую строку формы м_11 (это, правда, уже кто-то предложил).

    4. При перемещении ТМЦ между складами для источника составлять акт списания, а для приемника — акт оприходования.

    5. Расширить обработку, чтобы работала с документами «ОтпускМатериаловНаСторону», «ПродажаВРозницу», «РасходнаяНакладная».

    Сп(50) Арчибальд, угу, по поводу- маюцца бездельем — в небольших фирмах вести полный учет все равно надо ,и никто никому ничго не выдает и в ведомость не записывает ,все только на бумаге…А тут подрок-опа и за месяц весь 10 счет оптом списал.

    Reply ↓
  73. 1c8.2

    (10) Подскажите,пожалуйста, как будет выглядеть строка с данными, если в ТребованиеНакладная в строке Комментарий есть данные? Мне нужно вытащить эти данные из Комментарий в дополнительную колонку

    Спасибо!

    Reply ↓
  74. gigagr

    Присоединяюсь к Alyadelf, мне то же надо вытащить данные из строки Комментарий. Как-то можно это включить в обработку? У нас всегда в ТребованиеНакладная в строке Комментарий указывался объект, вот теперь это понадобилось буху

    Reply ↓

Leave a Comment

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