Кассовая книга в УТ 10.3.6




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

43 Comments

  1. ballastik

    Народ, подкиньте плиз регистр «НомераЛистовКассовойКниги», а то взять не у кого 🙁

    Reply
  2. begemot

    (1) Выложил описание регистра

    Reply
  3. DreamWalker

    Блин пишет ошибку

    {ВнешнийОтчет.КассоваяКнига(553)}: Значение не является значением объектного типа (Метаданные)

    Если ВыборкаДокументов.Документ.ДокументОснование.Метаданные().Имя = «ОтчетОРозничныхПродажах» Тогда

    Что делать??

    Reply
  4. begemot

    (3) Исправлено

    Reply
  5. DreamWalker

    Как тока зальешь новую версию, отпишись пожалуйста!

    Reply
  6. begemot

    Добавлен раздельный учет по кассам. Исправлены ошибки, недоработки…

    Reply
  7. TadyBear

    Ошибка в валютных кассах!!!!!!!!!!

    Reply
  8. begemot

    (7) какая ошибка?

    Reply
  9. TadyBear

    Обороты по документам и проводкам совпадают!

    Reply
  10. TadyBear

    Обороты по документам и проводкам не совпадают!

    Reply
  11. mer45

    спс

    Reply
  12. kitt

    а слабо было адаптировать какой нибудь типовой универсальный регистр сведений, типа ЗначенияСвойсвОбъектов? А так — плюс.

    Reply
  13. ivan_luzinov

    а это не нарушение вытаскивать из бухии?

    Reply
  14. begemot

    (13) Чтобы 1С патенотовали исходные модули типовых конфигураций, я не слышал… Думаю, что если у Вас лицензионная УТ, то проблем не будет… Но я не франчайзи и утверждать не могу… Может кто знающий подскажет…

    Reply
  15. forsagforsag

    Бывает настроение — ну совсем не стоит делать именно это, и тут срочно нужно что-то типа этой книги — хлоп — спасибо огромное!

    Reply
  16. DreamWalker

    Обновляй процедуру, пока на первой стадии тестирования — работает зачётно!! Спасибо!

    Reply
  17. marusy73

    почему в кассовой книге не выводится обложка 😥

    Reply
  18. a_k_o

    При формировании выдает ошибку:

    {ВнешнийОтчет.КассоваяКнига(1152)}: Поле объекта не обнаружено (НомераЛистовКассовойКниги)

    ТекНомера = РегистрыСведений.НомераЛистовКассовойКниги.СрезПоследних(ДатаЛиста,Новый Структура(«Организация»,Организация));

    пардон, не добавил регистр номеров страниц из БП.

    Reply
  19. drimer

    Спасибо пригодилась, не доступен переключатель: «последний в месяце» если дата отчёта не приходится на последний день месяца.

    Reply
  20. cool.vlad4

    (14) Тоже об этом не слышал. По моему это правило хорошего тона — использовать то, что уже протестировано в типовой. Это же не плагиат — это

    «Адаптированный отчет из БП»

    . Обработочка, конечно, же полезна бухам, когда-то такую же делал. Так, что плюсуйте, если понравится.

    Reply
  21. cool.vlad4

    + (20) Правда я делал с возможностью настройки номеровлистов…

    Reply
  22. trad72

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

    {ВнешнийОтчет.КассоваяКнига.МодульОбъекта(100)}: Поле объекта не обнаружено (НомераЛистовКассовойКниги)

    Номера=РегистрыСведений.НомераЛистовКассовойКниги.СрезПоследних(ДатаНач-86400,Новый Структура(«Организация»,Организация));

    Reply
  23. wikki

    Спасибо. ОЧЕНЬ помогло

    Reply
  24. lemonadze
    trad72 пишет:

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

    Да! Автор добавь кнопку «Сделать чтобы всё работало!» )

    Reply
  25. begemot

    (22, 24) Не понимаю, что у Вас вызвало затруднения. Описание к публикации:

    «Отчет «Кассовая книга» для печати из УТ. (Адаптированный отчет из БП 1.6.)

    Для работы отчета необходимо скопировать в конфигурацию регистр сведений «НомераЛистовКассовойКниги» из конф. БП.«

    По буквам: Нужно открыть конфигурацию Бухгалтерия Предприятия, найти в дереве метаданных Регистр сведений «НомераЛистовКассовойКниги». Скопировать его в буфер (Ctrl+C). Открыть конфигурацию Управление торговлей, открыть ветку метаданных «Регистры сведений», вставить из буфера (Ctrl+V). Обновить конфигурацию БД. Отчет заработает…

    Reply
  26. Alex-2

    у меня все работает, спасибо за отчет!

    Reply
  27. logoped

    Спасибо за отчетик,

    Переходим с 77 на 8.2 и возникло много разных доработок. Ведь 77 юзают уже лет 5.

    Регистр добавил и заработало все сходу.

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

    Reply
  28. TankerM

    Используем больше года, полет нормальный.

    Reply
  29. jsmith

    Отличная штука

    Reply
  30. Coollerok

    у меня все работает, спасибо за отчет!

    Reply
  31. Energen

    Спасибо автору, использовал этот отчет слегка изменив его под собственные нужды. Бухгалтеры остались довольны!

    Reply
  32. doronin70

    Взял этот отчет для УПП 1.3.20. Исправил только одну букву в вызове общего модуля.

    Было:

    Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизации(Организация, КонецДня(ДатаЛиста),);

    Стало:

    Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Организация, КонецДня(ДатаЛиста),);

    И все работает! Спасибо.

    Reply
  33. sayae

    Была необходимость по некоторым операциям исправить бухгалтерские счета учета. Добавил в справочник статьи движения ДС.

    Reply
  34. Strannik99

    Доброго дня Всем !!!

    Подскажите под 8.2 работет ?(проверить не могу, маней не хватает)

    При добавление регистра сведений «НомераЛистовКассовойКниги» в конфигурацию, конфигурация слетает с поддержики или нет ?

    Reply
  35. begemot

    (34)

    Подскажите под 8.2 работет?

    Да, работает…

    При добавление регистра сведений «НомераЛистовКассовойКниги» в конфигурацию, конфигурация слетает с поддержики или нет ?

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

    Reply
  36. Strannik99

    (35)

    Спасибо за науку

    Reply
  37. fortochka13

    to begemot

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

    направление движения хотя бы укажите.

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

    Кассовая книга есть в УТ 11, но её нету базовой:-(((

    Заранее спасибо.

    В любом случае +

    Reply
  38. begemot

    (37) Читайте пост 25

    Reply
  39. Strannik99

    Народ !!

    Помогите победить проблему с этим отчётом.

    Отчёт не работает с пользователями у которых нет полных прав. вываливается такая ошибка {ВнешнийОтчет.КассоваяКнига(100)}: Ошибка при вызове метода контекста (СрезПоследних): Нарушение прав доступа!

    Номера=РегистрыСведений.НомераЛистовКассовойКниги.СрезПоследних(ДатаНач-86400,Новый Структура(«Организация»,Организация));

    по причине:

    Нарушение прав доступа!,

    В конфигураторе регистр сведений -> Дополнительно — > права, галочки для пользователя выставил, результат тот же

    Конфигурация УТ 10.3

    Reply
  40. Strannik99

    (39)

    РЕШЕНО !

    Добавил права на изменение, просмотр , редактирование, на скопированный с БП регистр в роли пользователя «Кассир»,после копирования были права только на чтение.

    Получается что без изменений к типовой конфе не обойтись

    Reply
  41. AlexShap

    спасибо. Жаль счета надо допилывать. А так все отлично.

    Reply
  42. likan

    Странно, но у меня падает 1С при формировании ((

    Такое же бывает при формировании некоторых отчетов…

    Reply
  43. asg1975

    Понятно давнишняя обработка, но вот фотки никогда не помешают

    Reply

Leave a Comment

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