Кассовая книга для фирм с обособленными подразделениями (1С: бух. 7.7)




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

39 Comments

  1. СергейКа

    Ниасилиал… Слишком многа букафф в кратком описании. Увы…

    Reply
  2. bearcat

    (1) Сергейка, а вы как в известной юмореске: пацаны с первого чтения не понимают, вот и принимают в третьем чтении …

    🙂

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

    если глбуху это будет нужно, то добавить в допвозможности этот файл , сделать 50.1.1, 50.1.2 и вперед

    Reply
  3. СергейКа

    (2) Суть не в том, что много описания разработки, а в то что аннотации СЛИШКОМ много.

    Пусть всё это описание будет, но… В самом теле выпуска… В кратком описании достаточно 2-3-х предложений, что бы заинтересовать, дать понять нужно ли это пользователю.

    ИМХО сейчас — просто не читабельно.

    Reply
  4. bearcat

    (2) Сергейка, спасибо за совет. Это моя первая выгрузка, я не щнала еще как нужно, хотела как можно больше объяснить, чтобы всем было понятно

    Получилось как говорил Черномырдин… Хотела как лучше…

    Посоветуйте, а где ж тогда все это нужно было написать? Отдельным вложенным файлом? Типа инструкции ?

    Reply
  5. Арчибальд

    Инструкцию + ert-шник упакуй и клади. А в описание — несколько рекламных (но правдивых!) фраз + ссылка «Подробности в описании».

    И люди к Вам потянутся! :))

    Reply
  6. victuan

    А я вот плюсую за одно только описание (саму обработку не качал) 😉

    Reply
  7. Bux2

    Именно описание и понравилось, как и (6). Жаль, что не для 8.1. Хорошая идея с доп. листом, где сведен общий итог по кассе.

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

    В филиалах ведутся отдельные кассовые книги. (Такие действия не противоречат п. 3 ст. 5 Федерального закона от 21.11.1996 N 129-ФЗ «О бухгалтерском учете», в котором указано, что учреждения, руководствуясь законодательством РФ о бухгалтерском учете, нормативными актами органов, регулирующих бухгалтерский учет, самостоятельно формируют свою учетную политику исходя из своей структуры, отрасли и других особенностей своей деятельности)».

    Reply
  8. alf2005q

    Вот это настоящая разработка!!!

    Reply
  9. efimenkovlad

    (7) А остатки и движения по 50-му счету как учитываются?

    Reply
  10. Bux2

    (9) Полность самостоятельные ОСП — отдельный лимит кассы, р/с, кассовая книга. Главбух холдинга по ним только сводный баланс делала.

    То есть, в базе головной организации не отражались хоз. операции филиалов, в т.ч. по кассе.

    Reply
  11. Ish_2

    (10) Спасибо за науку.

    Reply
  12. bearcat

    (10)

    Выделение на отдельный баланс — это организация бухгалтерского учета операций филиала обособленно от операций головной организации. Выделение на отдельный баланс особого юридического статуса выделение не предоставляет.Создание «отдельных» касс удаленных подразделений, «отдельных» кассовых книг, «отдельных» томов или «разделов» единой кассовой книги — организации пытаются обосновывать собственной учетной политикой.

    Однако, приказы, Регламенты и учетная политика организации не могут каким-либо способом изменять установленные законодательством правовые нормы и придавать им иной смысл (например, дополнить положение п.23. Порядка, о том что «каждое предприятие ведет только одну кассовую книгу, которая должна быть пронумерована, прошнурована и опечатана сургучной или мастичной печатью, а количество листов в кассовой книге заверяется подписями руководителя и главного бухгалтера предприятия…»

    Соответственно никакого отдельного лимита кассы. Лимит кассы устанавливается В ЦЕЛОМ ДЛЯ ОРГАНИЗАЦИИ , а уже приказом руководителя лмит «разбивается» для каждого подразделения.

    Использование организацией отдельных кассовых книг в своих обособленных структурных подразделениях является основанием для применения норм ст. 15.1. КоАП РФ

    Reply
  13. bearcat

    посмотрите ссылку

    http://www.pro-uchet.ru/exp/faq/225.html

    Reply
  14. bearcat
  15. bearcat

    и вот еще

    http://agencybarrister.ucoz.ru/publ/1-1-0-2

    (9) НЕЛЬЗЯ ВЕСТИ НЕСКОЛЬКО КАССОВЫХ КНИГ В ОДНОЙ ОРГАНИЗАЦИИ, ЭТО НАРУШЕНИЕ, ХОТЬ ВЫ ЭТО И ПРОПИШЕТЕ В ВУЧЕТНОЙ ПОЛИТИКЕ

    И ТО, ЧТО ВАШ ГЛАВНЫЙ БУХГАЛТЕР ТАК ДЕЛАЛА, ЭТО НЕ ПОКАЗАТЕЛЬ ДЛЯ ОСТАЛЬНЫХ ГЛАВНЫХ БУХГАЛТЕРОВ

    (7) А остатки и движения по 50-му счету как учитываются?

    К СЧЕТУ 50 ОТКРЫВАЮТСЯ СУБСЧЕТА 50.1.1 — ГОЛОВНАЯ КАССА, 50.1.2 — ЧАСТЬ ОБОСОБЛЕННОГО ПОДРАЗДЕЛЕНИЯ

    соответственно сумма остаток 50.1.1 и 50.1.2 дает остатко по 50.1 в целом по организации и этот остаток не должен превышать лимит , согласоанный с обслуживающим банком

    Reply
  16. efimenkovlad

    ЦЕНТРАЛЬНЫЙ БАНК РОССИЙСКОЙ ФЕДЕРАЦИИ

    ДЕПАРТАМЕНТ НАЛИЧНОГО ДЕНЕЖНОГО ОБРАЩЕНИЯ

    ПИСЬМО

    от 11 декабря 2008 г. N 29-1-1-11/7735

    О ПОРЯДКЕ ВЕДЕНИЯ КАССОВЫХ ОПЕРАЦИЙ

    ОБОСОБЛЕННЫМИ СТРУКТУРНЫМИ ПОДРАЗДЕЛЕНИЯМИ ОРГАНИЗАЦИИ

    Департамент наличного денежного обращения Банка России сообщает следующее.

    При организации кассовой работы предприятия, объединения, организации и учреждения (далее — организация) руководствуются «Порядком ведения кассовых операций в Российской Федерации», утвержденным решением Совета директоров Банка России от 22 сентября 1993 года N 40, в соответствии с которым каждая организация ведет одну кассовую книгу, в которой учитываются все поступления и выдачи наличных денег организации.

    Обособленные структурные подразделения организации, расположенные вне места ее нахождения (далее — обособленное подразделение), ведут в двух экземплярах отчет кассира, содержащий все реквизиты кассовой книги. Первый экземпляр отчета кассира остается в обособленном подразделении. Второй экземпляр отчета кассира вместе с прилагаемыми к нему кассовыми и подтверждающими документами передается в организацию. При этом передача отчета кассира в организацию может осуществляться в электронном виде в соответствии с требованиями законодательства Российской Федерации. В этом случае передача отчета кассира на бумажном носителе с прилагаемыми кассовыми и подтверждающими документами осуществляется в соответствии с утвержденными в организации правилами документооборота.

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

    Заместитель директора

    Ю.М.ЛОБОДА

    Reply
  17. Bux2

    (16) Спасибо. Не знала об этом письме ЦБ.

    Reply
  18. Bux2

    (15) Елена, повторюсь, мне очень понравилось описание, жаль, что не для 8.1. Отличная идея с доп. листом, где сведен общий итог по кассе.

    МОЙ КОММЕНТАРИЙ НИ В КОЕМ СЛУЧАЕ НЕ РУКОВОДСТВО К ДЕЙСТВИЮ. Прошу прощения, если ввела кого-то в заблуждение. Написала его опрометчиво, опираясь на предыдущий положительный опыт, без учета письма ЦБ от 11.12.08.

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

    Reply
  19. Bux2

    (15)Маленькие уточнения.

    > «Использование организацией отдельных кассовых книг в своих обособленных структурных подразделениях является основанием для применения норм ст. 15.1. КоАП РФ»

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

    > «Соответственно никакого отдельного лимита кассы. Лимит кассы устанавливается В ЦЕЛОМ ДЛЯ ОРГАНИЗАЦИИ , а уже приказом руководителя лмит «разбивается» для каждого подразделения.»

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

    — При открытии операционных касс Кассир головного офиса помимо кассовой книги организации должен вести книгу учета принятых и выданных кассиром денежных средств (форма N КО-5) — ?.

    > «То, что ваш главный бухгалтер так делала, это не показатель для остальных главных бухгалтеров». Это я так делала 🙂 , давно, когда еще не было письма ЦБ от 11.12.08. Вы мне льстите, конечно же, комментарий — не указание. Но, если человек работает главбухом, он не примет на веру какой-то комментарий. Изучит весь материал, примет решение. И возьмет на себя ответственность за это решение. Когда-то в нашей ситуации этот способ казался единственно верным и действенным.

    Повторюсь — была не права в 7 и 10. Спасибо.

    Reply
  20. Bux2

    (11) Ни в коем случае не используйте комментарии 7 и 10, как руководство к действию при ведении кассовых операций в обособленных структурных подразделениях. Высказывания ошибочны.

    Reply
  21. Ish_2

    (20) Спасибо за науку — 2.

    Reply
  22. gutentag

    Подерживаю плюсом этот проект за развитие и освещение проблемы кассовых операций в организациях с обособлеными подразделениями

    Reply
  23. Bux2

    (15), (16), (22)

    Вернусь к этой важной теме.

    В качестве справочно-правовой системы у меня установлен Консульт+, банк КонсультантБухгалтер:ВерсияПроф. А указанное Письмо ЦБ от 11 декабря 2008 г. N 29-1-1-11/7735 находилось в большем пообъему банке – ВерсияПроф. Поэтому я его проморгала.

    Благодаря Елене и Владиславу я подала заявку в Консультант+ с просьбой разместить это важное письмо в меньшем по объему банке. Сегодня пришел ответ:

    07.08.2009 РИЦ ___

    ДЕПАРТАМЕНТ ПЕРСПЕКТИВНЫХ РАЗРАБОТОК В СФЕРЕ НАПОЛНЕНИЯ СИСТЕМ АВТОРСКИМИ МАТЕРИАЛАМИ

    Заказ передан в ОЗД в файле 396vl0807_4144.txt

    1. Вид документа: ПИСЬМО

    2. Принявший орган: ЦБ РФ

    3. Дата принятия: 11.12.2 008

    4. Номер документа: 29-1-1-11/7735

    5. Название (содержание) документа: О порядке ведения кассовых операций обособленными структурными подразделениями организации

    6. Дополнительная информация о документе:

    7. Иные особенности заказа: Документ находиться в банке ВерсияПроф. Клиенты просят разместить в КонсультантБухгалтер:ВерсияПроф

    8. Сведения о заказчике: ООО «NNN» (фио)

    12.08.2009

    г. N, РИЦ___,

    000 «КонсультантПлюс -Инфософт»

    Департамент перспективных разработок в сфере наполнения систем авторскими материалами рассмотрел направленный Вами запрос от 07.08.2009.

    Документ, о котором Вы упоминаете в запросе, а именно Письмо ФНС России от 19.01.2009 N ШС-22-2/280 «О направлении письма Центрального банка Российской Федерации от 11.12.2008 N 29-1-1-11/7735» (вместе с «Письмом» ЦБ РФ от 11.12.2008 N 29-1-1-11/7735 «О порядке ведения кассовых операций обособленными структурными подразделениями организации») (номер в ИБ 85178) включено в систему «КонсультантБухгалтер:ВерсияПроф» в очередное пополнение.

    С уважением, руководитель Департамента перспективных разработок фио

    Коллеги, всем спасибо. Хорошее дело сделали.

    Reply
  24. jeniazzz

    Интересно решение данной проблемы. У нас сделано чуть по-другому, что б не плодить субсчета на 50 сч. Добавлено субконто в 50.1 сч. — Места хранения.

    В ПКО,РКО- добавлен выбор этого субконто.

    Но, все равно меняем нумерацю в бух. По доп листы не знала Важная информация! Нужно будет предложить глав буху.

    Reply
  25. mihenius

    Аналогично (24) … Править ПланСчетов есть моветон.

    Максимум, что нужно добавить еще 1 субконто.

    У нас добавлено Подразделение, а не МестоХранения

    Reply
  26. Elnek

    (15) аналогично!! очень нужна такая же обработка для 8.1

    может кто видел?

    именно такая, так как это лучший вариант!!!

    Reply
  27. slava_kutuzov

    Как заставить работать отчет, выдает такую ошибку. У меня 1С «Бухгалтерский учет ред. 4.5 (7.70.509)»

    Ит.ВыполнитьЗапрос(НачЗапроса, КонДата, «» + ?(ПустоеЗначение(ВыбКасса) = 0,ВыбКасса.Счет,»50.1″) + «,50.11»,,,, «День», «СВ»);

    {E:1С БАЗЫВОЕНТОРГOAOUTEXTFORMSКАССОВАЯКНИГА.ERT(101)}: Поле агрегатного объекта не обнаружено (Счет)

    Reply
  28. dawnds8

    Интересно решение данной проблемы. У нас сделано чуть по-другому, что б не плодить субсчета на 50 сч. Добавлено субконто в 50.1 сч. — Места хранения.

    В ПКО,РКО- добавлен выбор этого субконто.

    Но, все равно меняем нумерацю в бух. По доп листы не знала Важная информация! Нужно будет предложить глав буху.

    Reply
  29. b-dm

    Обработка интересная , описание ещё более увлекательное, но нельзя ли

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

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

    Reply
  30. berta

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

    Reply
  31. derevce

    Та же самая ошибка((((

    Ит.ВыполнитьЗапрос(НачЗапроса, КонДата, «» + ?(ПустоеЗначение(ВыбКасса) = 0,ВыбКасса.Счет,»50.1″) + «,50.11»,,,, «День», «СВ»);

    {D:BASE 1CФИНОВАЯ_2012_ТЕСТEXTFORMSKASSOVAYAKNIGA.ERT(101)}: Поле агрегатного объекта не обнаружено (Счет)

    Что можно попробовать сделать?

    Reply
  32. Soikalv

    Все хорошо, вот только в 2012 году порядок ведения кассовых операций — новый. И обработку придется доделывать и переделывать снова.

    Reply
  33. bearcat

    (32) Конечно Вы правы. К сожалению я не программист, обработку сдалал по моему техзаданию в 2008 году наш программист. Для того, чтобы эта обработка работала, он что-то менял в конф 1С 7.7.

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

    Reply
  34. Soikalv

    Не убирайте. Я сейчас передам ее для переделки нашему программисту. Потому что переделать, то,что у Вас есть — это минимум изменений и работы. Когда сделаем — могу выложить то, что получится. Каким образом это можно будет сделать?

    Reply
  35. Soikalv

    Скачала. Выдает ту же самую ошибку — «Ит.ВыполнитьЗапрос(НачЗапроса, КонДата, «» + ?(ПустоеЗначение(ВыбКасса) = 0,ВыбКасса.Счет,»50.1″) + «,50.11»,,,, «День», «СВ»); » Что с ней делать?

    Reply
  36. zoeh

    Ха решение не доработано, откуда бы в конфигурации взяться справочнику Касса?

    Это надо его добавлять + в формы РКО и ПКО реквизит.

    Reply
  37. Зеленоград

    Скачал, т.к. надо быстро сделать возможность сдавать кассовые книги по ОП. Или это устарело и неприменимо?

    Reply
  38. Зеленоград

    50.1 становится группой, а он в конфах конца 2014 (ОСН >= 543, УСН >= 232) используется в разных документах и отчётах. В ОСН 20 включений, в УСН — 16.

    Reply
  39. svetllanakovaleva

    Скачала файл, скопировала в системную папку, все файлы ert программа видит, а файл кассовая книга.ert не видит. (УСН 237)

    Reply

Leave a Comment

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