<?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='\
Я не могу понять почему я подключаю к своей бухгалтерии обработка не работает. А если все делаю в демо версии то все отлично.
что пишет? ошибки какие показывает? можете прислать скрин?
подскажи пожалуйста, как ее добавить чтоб выглядело, как на втором изображении. Как-то добавлял внешние Регламентированны отчеты через «Операции -> Справочники», но здесь нет Инвентаризации, что делать …? плиз
(3) dreamland,
Сервис -> Дополнительные отчеты и обработки -> Дополнительные внешние печатные формы. Создаем новую, загружаем в неё этот файл, далее в табличной форме «Принадлежность печатной форме» выбираем документ «Инвентаризация рассчетов с контрагентами», в колонке «Представление кнопки» пишем название кнопки, нажимаем ОК, всё.
(4) Elvina, огромное спасибо, ваша справка выручила.
Справка формируется верно.
Справка формируется верно.
практически, за исключением: сформировав справку в колонке «Документ, подтверждающий задолженность» номер и дата берутся из базы, т.е. системные номера и даты сформированные при создании документов в базе 1С, а положено указывать «Входящий номер», и «Входящая дата» реального документа (распечатанного и завизированного бумажно в канцелярии).
P.S. (2) эти реквизиты находятся в документе «Поступление товаров и услуг» на вкладке «Дополнительно». Думаю, что предложенный вариант был бы к стати 🙂
Спасибо. работает замечательно. И самое главное — побыстрее многих себе подобных.
Отлично работает! Спасибо! Очень выручила, странно почему нет в типовых конфигурациях?
Очень интересно. Как раз то что нужно. Сейчас скачаю и попробую
Огромное спасибо. Очень выручили!! Все работает.
Тоже понадобилось, скачал, вроде работает, бухам отдам поиграться.
спасибо, очень пригодилась
Всё работает! успешно пользуемся, спасибо! немного подправили табличную форму.
Всё работает! успешно пользуемся, спасибо! немного подправили табличную форму.
Всегда пожалуйста, я рад за Вас 🙂
Справка, конечно, работает. Но табличный документ заполняется не по правилам. В документ у вас попадает договор.
хм… а у нас не попадает договор, только документ, подтверждающий задолженность…
Скажи, а на ред 2.0 она будет работать?
Да, работает. У меня установлена 1с БП 2.0.30.8, и все прекрасно работает без проблем, за исключением
Цитата
[IS-QUOTE]
mayak15 пишет: Справка формируется верно.
практически, за исключением: сформировав справку в колонке «Документ, подтверждающий задолженность» номер и дата берутся из базы, т.е. системные номера и даты сформированные при создании документов в базе 1С, а положено указывать «Входящий номер», и «Входящая дата» реального документа (распечатанного и завизированного бумажно в канцелярии).[/IS-QUOTE]
коментарий от 08.10.11 7:38
P.S.: см. мой
Возник ещё один вопрос, когда показал форму бухгалтерам. По нумерации.
Они нумеруют по контрагентам, а в вашей форме нумерация идёт по документам. И слегка непонятно как правильно. В консультанте по этому поводу ни слова. На что вы ориентировались при нумерациии почему?
Внимание! Отвечаю на все вопросы.
Печатная форма написана под требования одной организации, для них она подходит по всем параметрам.
Как выяснилось, однозначные требования сформировать сложно.
Печатная форма достаточно простая в разработке и для корректировки (в режиме Конфигуратор), поэтому все «допиливания» считаю нужным реализовывать «на местах». Прошу воспринимать публикацию как «макет» для дальнейшей разработки, а не как готовый продукт (хотя, возможно, в некоторых случаях макет удовлетворяет всем требованиям).
Форма бесплатная, выложена исключительно для того чтобы «поделиться», а не для накручивания рейтинга и очков.
Если появятся какие-то конкретные требования по стандартам (а я их пока не увидел в обсуждении), то попробую реализовать, если найду время.
И еще: печатная форма написана под БП ред. 1.6 (под платформу 8.1.15.14). Для 2.0 сам ни разу не запускал и не тестировал, поэтому никакой информации по этому вопросу дать не могу.
С Уважением, Павел.
Спасибо за ответы
Отличная обработка всё работает, единственное иногда не выводится название контрагента, но исправляется легко, там где присваивается значение имя контрагента, надо это значение сделать в СокрЛП и всё.
Подскажите, пожалуйста, в данной печатной форме учитываются акты сверки? т.е в форму справки выводится что задолженность подтверждена актом сверки если такой акт сверки по данному контрагенту присутствует в базе? Заранее спасибо.
Я подключила справку, в кнопку печать форма попадает. При попытке распечать выдается ошибка:
Не удалось сформировать внешнюю печатную форму!
Значение не является значением объектного типа (Выгрузить)
Я что-то неверно сделала??
спасибо!
Печатная форма не формируется в редакции 1.6.,и 2.0.
Как тогда разрешить данную ситуацию?
на платформе 8.1 пишет не помжет быть прочитана текущей версией программы.
Что-то я не то делаю?
(26) YuliaYVS,
так не должно быть… могу посоветовать пройти отладчиком, надеюсь это Вам поможет
(29) YuliaYVS,
сейчас перепроверил: платформа 8.1.15.14, все открывается и формируется…
может быть, у Вас есть какие-то изменения в конфигурации?
(28) hmv59,
какую ситуацию?
у Вас та же проблема, что и у Юлии? Попробуйте описать подробнее, пожалуйста
Конфигурация сильно переписана под нашу организацию. Возможно в этом проблема. Попробую отладчиком. Спасибо за совет.
В режиме отладчика не получается выяснить причину. На точке останова он не останавливается… Дополнительные сообщения, введенные до проверки выдает до строки кода «МассивСчетов = ДокДанные.СчетаРасчетов.Выгрузить();». Возможно неправильно делаю трассировку…
Я изменила в реквизите СсылкаНаОбъект тип Строка на ДокументСсылка.ИнвентаризацияРасчетовСконтрагентами печатная форма открывается. Теперь в редакции 1.6 в колонках документ заполняются данные за что, а в редакции 8.2 данные о поступлении… Осталось добить, чтобы за что было на своем месте и вместо данных о поступлении была счет-фактура…
(34) YuliaYVS,
Таким образом отладить не получится, потому что исполняемый код находится во временном файле, а не в экземпляре, который Вы открываете конфигуратором, а сама обработка хранится в БД.
Можно схитрить, например, таким образом:
Создаем внешнюю обработку, копируем в нее макет, реквизиты и код модуля из объекта печатной формы, затем создаем основную форму, добавляем поле ввода, указываем для него Данные: реквизит «СсылкаНаОбъект», далее добавляем кнопочку, и при нажатии кнопочки вызываем функцию печать(), результат функции выводим в табличный документ на экран.
Запускаем отладку, устанавливаем точку останова, далее в режиме Предприятие открываем Вашу внешнюю обработку, выбираем документ в поле ввода, нажимаем кнопочку, ищем ошибку.
Спасибо, идея хорошая пригодится и в будущем тоже. Пока устраивает изменение типа Строка на ДокументСсылка.ИнвентаризацияРасчетовСконтрагентами. Надо только доделать чтобы «За что» и «дата начала» заполнялась. Там еще и счет-фактуру бы видеть хотелось.
если подключить к 1 с бухглтерии 8.2 будт работать?
(38) Лен75,
читаем из (22):
С Уважением, Павел.
Для 1 с бух 8.2 не подошел:
{Справочник.ВнешниеОбработки.Форма.ФормаЭлемента(189)}: Ошибка при вызове метода контекста (Создать): Ошибка подключения внешних метаданных: Ошибка загрузки документа.
Внешняя обработка не может быть прочитана текущей версией программы.
Напишите, пожалуйста, такую справку инв-17 для 1 с бухгалтерии 8.2…..
(40) Лен75,
Описание ошибки указывает на то, что Вы не конвертировали печатную форму под 8.2.
Делается как обычно для всех внешних обработок:
Запускаем конфигуратор, отрываем в конфигураторе скачанную печатную форму, отвечаем «Да», затем уже проводим действия по регистрации печатной формы в БД.
От себя еще добавлю, что после конвертации надо будет как-то внимательно проверить корректность выводимых данных.
И да, сделайте для начала резервную копию печатной формы, чтобы не ришлось в случае чего по новой скачивать с инфостарта.
С Уважением, Павел.
Плюсую, но есть пожелание
1. автовысота строки наименования контрагента
2. Ввод даты начала сбора данных запросом (по умолчанию — пусть начало года от даты документа) — иначе на больших базах ООООЧЕНЬ долго считает.
затем уже проводим действия по регистрации печатной формы в БД….С этого момента можно поподробнее, если нетрудно пошаговую инструкцию…..я бухгалтер, а не программист…..как провести регистрацию печатной формы….
Все получилось….нажала объединить….а потом в программе:
Сервис -> Дополнительные отчеты и обработки -> Дополнительные внешние печатные формы. Создаем новую, загружаем в неё этот файл, далее в табличной форме «Принадлежность печатной форме» выбираем документ «Инвентаризация рассчетов с контрагентами», в колонке «Представление кнопки» пишем название кнопки, нажимаем ОК
Спасибо большое!!!
на УПП не работает, но все равно спасибо, пригодилась как макет который можно доработать
(44) Лен75,
(45) Fish’ka,
был рад чем-то помочь 🙂
вопрос на засыпку 🙂
в печатной форме в колонках сумма задолженности данные должны браться откуда, из колонки «Подтверждено» документа или «Подтверждено» + «Не подтверждено».
Спасибо заранее за ответ.
очень надеюсь что будет работать под 8.2 после конвертации
Как понимаю данный отчёт не работает в УПП, сделан только под бухгалтерию, можно его более универсальным сделать.
(49) luchyk007, для УПП есть такой отчет, если еще не нашли то вот ссылкаhttp://infostart.ru/public/93330/