Сравнение товарных остатков УТ с БП




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

    Кто же поставит плюс?

    Reply
  2. Pashkaa

    Исправь GUI на GUID в описании, ну или UUIN как написано в хелпе самой 1С.

    У меня своя такая самописанная 🙂 только функционал чуть шире.

    Можно по каждой позиции номенклатуры получить расшифровку движений. Отчет выводится типа как акт сверки где построчно документы из УТ и БП. Можно тут же увидеть откуда взялись разницы в учете. Документы в расшифровке можно открывать, при этом документы из БП тянутся по OLE и выводятся в форму где две ТЧ одна с реквизитами другая с данными ТЧ.

    Вообщем твоя обработка найдет своего пользователя, ну и развивать есть куда 😉

    Reply
  3. aspirator23

    2- Исправил. Когда писал, сам внутренне чувствовал, что как-то по другому это звучит. Спасибо за идею — допишу в обработку движения товара. Это вещь полезная.

    Reply
  4. AlexandrCh

    Мы выгружаем номенклатуру по коду, а уже потом обмениваемся УТ — БП без выгрузки номенклатуры (обмен номенклатуры по коду).

    Загрузил обратотку в УТ и вышла следующая ошибка:

    {ВнешняяОбработка.СверкаТорговляБухгалтерия(80)}: Поле объекта не обнаружено (Наименование)

    СтрТз.Номенклатура=НРег(СокрЛП(Выборка.Товар.Наименование));

    Выбирал поиск и по данным обмена и по наименованию.

    У всей номенклатуры есть наименования, в чем может быть проблемма?

    Reply
  5. aspirator23

    4-Обработка с открытым кодом, поэтому можно посмотреть отладчиком и настроить под особенности Вашей программы.

    По сути вопроса. Ошибка возникает в момент выборки в бухгалтерии.

    Выборка происходит по тем счетам где склады «находятся» на субконто3. Это все номенклатурные счета: 07,08.04,10,21,41,43. Причем Номенклатура у них на субконто 1.

    Предположения ошибки:

    1.существуют движения на каких-то счетах с пустыми значениями номенклатуры.

    2.Возможно у Вас есть остатки на счетах например забалансовый счет 004, где расположение субконто другое (там Субконто1 — это партия) это и приводит к ошибке.

    Можно либо поправить обработку — такие счета обрабатывать иначе или пришлите кусок своей базы «с ошибкой»- сам поправлю обработку под вас и вышлю.

    Reply
  6. AlexandrCh

    5 — У нас есть остатки по 004.

    Также:

    — Мы выгружаем номенклатуру через прочий обмен по коду справочника (не UUIN) — в УТ и БП коды номенклатуры UUIN не совпадают, но совпадают коды справочника номенклатура.

    — Название номенклаты у нас совпадает по некоторым позициям, но у них разные артикулы в УТ, коды справочника и полное наименование — так проще сверять позиции в БП (по коду).

    — Насколько я понял если поиск в обработке выбрать По данным обмена, то она должна искать по коду справочника, как это у нас настроено в обмене.

    — Можно было бы исключить счет 004 (для быстрого решения вопроса), т.к. обороты там не большие и все равно для них правил еще нет.

    Спасибо за оперативность на первый вопрос, поставил плюс.

    Сами доработать пока не можем, буду ждать ответ.

    Reply
  7. aspirator23

    6- Спасибо. Я напишу для Вас исключения в обработке забалансовых счетов и пришлю. Есть ли еще счета с остатками, где расположение номенклатуры иное чем: Субконто1-Номенклатура,Субконто2-Партии,Субконто3-Склады? Их нужно тоже исключить.

    При обменах для поиска нового объекта используются поля указанные в правилах обмена. Для номенклатуры в типовых обменах — это название, родитель и флаг группы.

    Когда объект найден дальнейшая привязка осуществляется по внутреннему коду. Эта связка хранится в регистре сведений в обоих базах(УТ,БП). Отчет используется для поиска «По данным обмена» именно этот регистр.

    Кстати оригинальная обработка, работает еще дополнительно по артикулам. У нас артикулы уникальны — поэтому связка по ним нормально работает. Для инфостарта я убрал поиск по артикулам — так как он обычно мало применяется.

    Артикул у нас хранится в УТ в своем «родном» поле, а БП в поле Комментарий.

    Reply
  8. AlexandrCh

    7- Остатки есть еще на 001 счете — арендованные автомобили (1- к/а, 2-осн.ср-ва).

    — Если речь идет о Регистре сведений Соответствие объектов для обмена, то у нас в нем номенклатыры нет, т.к. мы её выгружаем отдельно Прочим обменом с БП 1.6 по кодам справочника, а в настройках обмена стоит соответсвие по коду справочника. У нас раньше была связка УТ и Бух.7.7 по коду и в БП сделали также, т.к. прочитали, что бывают косяки с дублированием номенклатуры УТ — БП не стали испытывать судьбу и сделали как раньше — коды справочника одинаковые. Проще было реализовать, т.к. остатки были и в УТ и в БП.

    — Артикул (каталожный номер) у нас хранится в доп.поле, созданном в БП — ID называется (подгружаем артикул через табличный документ из УТ по коду справочника). Но артикул указан не у всех позиций, например: услуги, материалы, ОС — не указан, товары — указан. В этом наверно м.б. проблемма, но мы уже давно хотели для всей номенклатуры ввести артикулы. Сегодня натолкнулся на ссылку настройка при редактировании номенклатуры в УТ — в ней можно поставить крыжик на уникальность артикулов — у Вас уникальные? А то постоянно сталкиваемся с дублями.

    Reply
  9. aspirator23

    8 — Да именно этот регистр.

    У нас артикулы уникальные.

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

    Reply
  10. AlexandrCh

    7- p.s. Для инфо: Номенклатура еще участвует в забалансовых счетах в БП: ГТД, МЦ.04.

    Reply
  11. aspirator23

    гтд и мц не страшно. Они не обрабатываются, потому что у них нет складов.

    Reply
  12. AlexandrCh

    Адрес в личку отправил.

    Reply
  13. AlexandrCh

    (9) Код у справочника номенклатура уникальный (по умолчанию).

    Reply
  14. aspirator23

    13-отправил обработку на адрес

    Reply
  15. kvp

    у меня выходит та же ошибка (4), есть остатки на 004 сч., нельзя ли доработанную обработку получить?

    Reply
  16. aspirator23

    (15) давай адрес пришлю. А вообще чуть подождите получите без этой ошибки. Посмотрел внимательно на свой запрос понял, что в одно месте он совсем невеселый. У нас этот «номер проходил» — не было других остатков. А вот при массовом тестированию вылезло недоразумение.

    Reply
  17. bearcat

    Еще не провериила, но ставлю + авансом, т.к. очень трудоемнкий процесс проверять остатки по распечаткам. Надеюсь, что обработка будет работать

    Reply
  18. aspirator23

    (15) исправил. Отчет учитывает остатки товаров на всех счетах бухгалтерии: как балансовых так и забалансовых.

    Reply
  19. aspirator23

    (17)-Спасибо.

    Reply
  20. kvp

    Спасибо, работает, буду смотреть.

    Reply
  21. mawr41

    при нажатии кнопки «Сформировать» выскакивает данная ошибка:{ВнешняяОбработка.СверкаТорговляБухгалтерия(197)}: Ошибка при вызове метода контекста (Выполнить): {(9, 26)}: Поле не найдено «ЗакупкиОбороты.НДСОборот»

    ЕСТЬNULL(ЗакупкиОбороты.<<?>>НДСОборот, 0) КАК НДСЗакуп

    РезЗапроса=Запрос.Выполнить();

    по причине:

    {(9, 26)}: Поле не найдено «ЗакупкиОбороты.НДСОборот»

    ЕСТЬNULL(ЗакупкиОбороты.<<?>>НДСОборот, 0) КАК НДСЗакуп

    Конфа УТ 10.2.6.4 1.6.17.4-БП

    Reply
  22. aspirator23

    (21) По ошибке похоже, что возникает из-за старого релиза УТ. Там скорее всего нет этого поля. Если нужно, пришли конфигурацию(cf), поправлю под эту старую и вышлю. Укажи почту куда отправить.

    Reply
  23. mawr41

    хорошо вышлю, на какое мыло?

    Reply
  24. aspirator23

    Почту написал в личное. А обновить свой УТ не хотите?

    Reply
  25. mawr41

    Да у нас в этой конфе столько донаписано, что дороже выйдет обновить. Там много добавлено, что уже есть в новой конфе, так что пока придется работать на этой

    Reply
  26. aspirator23

    Понимаю. Тогда присылай.

    Reply
  27. aspirator23

    Последнее обновление от 09.11.2009 учитывает остатки на балансовых и забалансовых счетах бухгалтерии.

    Reply
  28. Katik

    а строчки в таблице и должны задваиваться, если в УТ и БУХ у одного товара разные коды? Поиск ставлю по данным обмена. Конфы обе самые последние. Сначала ошибка лезла из-за остатка на 004 счете, я ее сама поправила, теперь вот по каждому товару,который есть в обеих конфах с разными кодами вылазиет 2 строки:(

    Reply
  29. Katik

    aspirator23 13.01.2010 16:07:47

    Последнее обновление от 09.11.2009 учитывает остатки на балансовых и забалансовых счетах бухгалтерии. — — — — — НЕ УЧИТЫВАЕТ! 👿 👿 👿 ❗ ❗ ❗ ❗ ❗

    Reply
  30. aspirator23

    Поиск может выполняться:

    — по данным обмена, если обе базы синхронизированы(между УТ и БП организован штатный обмен)

    -по наименованию

    -по коду

    Имена могут задваиваться если это разные объекты(названия одинаковые а карточки разные). Второй возможный вариант задвоения — есть дубли в регистре Соответствие объектов обмена. Хотя этот регистр заполняет программа, но пользователь непреднамеренно очень просто может создать такие ситуации. Регистр нужно проверить и выровнять.

    Попробуйте поиск сделать по наименованиям. Тогда товары свернутся по наименованиям.

    Reply
  31. Katik

    Базы синхронизированы, попробую почистить регистр «Соответствие объектов для обмена», обменов с УТ настроено несколько, проверю по данным обмена тогда. А по наименованию действительно свернулись.

    Reply
  32. aspirator23

    Поиск может выполняться:

    — по данным обмена, если обе базы синхронизированы(между УТ и БП организован штатный обмен)

    -по наименованию

    -по коду

    Имена могут задваиваться если это разные объекты(названия одинаковые а карточки разные). В вашем случае это скорее всего так (разные коды -одинаковые названия). Второй возможный вариант задвоения — есть дубли в регистре Соответствие объектов обмена. Хотя этот регистр заполняет программа, но пользователь непреднамеренно очень просто может создать такие ситуации. Регистр нужно проверить и выровнять.

    Попробуйте поиск сделать по наименованиям. Тогда товары свернутся по наименованиям.

    Reply
  33. aspirator23

    Катя с регистром аккуратнее: по нему настроены обмены.

    Reply
  34. Katik

    Я знаю, там просто остатки от старого обмена остались. Почистила, задвоенность ушла. А еще можно такой вопросик, можно ли добавить вывод иерархии в этот отчет? Чтобы прямо дерево групп, как в типовых отчетах 8-ки. Я не прошу сделать, просто интересно, есть ли такая возможность. Очень большое количество номенклатуры (2000 позиций), тяжело ориентироваться в отчете. Если в принципе возможно, то очень буду благодарна за небольшую консультацию, как это сделать. Так сказать, куда смотреть. Заранее большое спасибо!

    Reply
  35. aspirator23

    (34) Иерархию сделать несложно. В понедельник планирую второй подобный отчет выложить. Там сверка контрагентов, но механизмы все те самые, за исключением только того что вывод на табличный документ. В нем как раз иерархия и применяется. Код довольно простой так что можете применить в этом отчете — в нашей организации иерархии товаров практически нет, поэтому такой просьбы пока не поступало.

    Reply
  36. AlexandrCh

    Если склады в УТ и БП не совпадают (в УТ в табличной части указываются) обработка правильно будет работать? А то не выдает ничего — или все идет, или …?

    Reply
  37. aspirator23

    (36) По складам накладывается фильтр. В торговле с этим проблем нет, а вот в бухгалтерии происходит поиск по имени склада. Если склад не находится, выводится сообщение:» В бухгалтерии не найден склад «такой-то». Остатки по нему не будут сформированы!»

    Т.е. остатки по такому складу из бухгалтерии в отчет не попадут.

    Reply
  38. Katik

    А что с подобным отчетом (это я про иерархию)? Обещал же в понедельник выложить 😉

    Reply
  39. aspirator23

    (38) Катя, каюсь обещал. Сам отчет написан, но пока его тестирую на своей базе. У пользователей возникли некоторые разумные просьбы по усовершенствованию. Обкатаю их и потом положу сюда.

    Reply
  40. Ёпрст

    Как то мало 15 символов для имени пользователя в настройках…… ❗

    Reply
  41. aspirator23

    (40) Добавлю. Сколько будет не мало?

    (38) Добавил

    Reply
  42. VladimirSpirin

    однозначно +

    Reply
  43. salve

    а с УТ — БП 2.0 будет работать?

    Reply
  44. aspirator23

    (43) В «связке» с БП 2.0 работает.

    Reply
  45. bearcat

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

    обработку цеплять в 1С БУХ или 1С УТ ?

    и куда во внешние обработки или во внешние отчеты?

    настройки какие-нить нужно делать?

    прошу прощения за вопросы, но отчет нужен, правда, вот уточняю сразу как и что

    Reply
  46. aspirator23

    (45) Обработку подключаешь в УТ во внешние обработки. Запускаешь ее. Нажимаешь кнопку Склады/Настройки подключения. Указываешь склады по которым нужно анализировать остатки. Открываешь там-же закладку Подключение. Тут все просто-

    указываешь базу бухгалтерии с которой нужно сравнить остатки:

    -формат базы

    -путь или сервер с именем базы

    -пользователь или Windows авторизация

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

    Если нажать справку там тоже я это все кратно описал.

    На картинках(скриншотах) к описанию обработке тоже можно посмотреть пример этих настроек.

    Reply
  47. bearcat

    (46)

    обработку подключила в УТ, запустила, выбрала склад — это все просто

    а вот базу бухгалтерии указала , но что-то не получается.

    как я это делаю:

    1. посмотрела путь , который виден в окошке при запуске 1С бухг

    2. в обработке нашла папку по тому пути

    но!!!

    путь указан до папки точно не помню, типа

    Server1Cdataopt\r

    а когда я при выборе базы в обработке щелкаю по папке opt, то она раскрывается и в енй еще куча файлов.

    я пробовала выбрать все по очереди

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

    касательно пользователя

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

    прошу отнестись с пониманием, что я никакой не программист и не сисадмин, а очень нужна эта обработка, но если я сама ее не прицеплю, то никто мне ее не прицепит

    Подскажите , если вас не очень затруднит, что я не так делаю в каком шаге ? И мож быть что-нить я должна узнать у сисадмина типа имени пользователя или как настроена выгрузка из УТ в БП ?

    Да, у нас есть типа сисадмин, но я знаю, что он мне не помогает совсем, потому сама ищу обрабоки вот на ИНФОСТАРТЕ. Обычно все они добавляются одинаково, это я умею. А вот когда нужно объединять конфигурации или как в этой путь настраивать, то вот не получилось. Мне только первый раз понять как это делать, я запомню.

    Reply
  48. aspirator23

    (46) Если база в файловом формате, то нужно найти папку где она хранится. Найти там файл 1Cv8.1CD и щелкнуть по нему. В строку с База данных подставится путь к каталогу с этим файлом например:

    \ServerBasesBuh81Buh_Vimpel где Buh_Vimpel и есть та база где лежит файл 1Cv8.1CD

    Пользователя нужно указать того, который есть в этой бухгалтерской базе и указать его пароль. Можно использовать существующего пользователя. Этот Пользователь должен быть рабочим т.е. с помощью него можно войти в базу бухгалтерии. Он должен иметь либо полные права, либо «Дополнительное право внешнего соединения».

    Reply
  49. bearcat

    (48) спасибо, скопировала вашу инструкуию, завтра на работе попробую

    Reply
  50. Love29

    А у меня данные в колонках по БП не выходят. 😥 Пустые колонки. В чем может быть дело? я в 8 новичок. Посмотрела в отладчике — в запросе выборка нулевая получается. С чем это может быть связано?

    Reply
  51. aspirator23

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

    Если типовая бухгалтерия, то других причин не должно быть. Если нетиповая, то нужно посмотреть чтобы на счетах товарных остатков(41,10….) субконто были в таком порядке:

    Номенклатура, Партии, Склады.

    Ну и конечно дата отчета. Существуют ли остатки в бухгалтерии на дату формирования отчета?

    Reply
  52. Love29

    Склады совпадают и по коду и по наименованию. А субконто всего 2 — номенклатура и склады. На дату отчета сформирован документ «Инвентаризация».

    Reply
  53. aspirator23

    (52) «А субконто всего 2 — номенклатура и склады» — именно «здесь собака порылась».

    попробуй:

    61 и 66 строки в модуле обработки закомментировать.

    71 строку записать так:

    » | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, , &МассивВидовСубконто, Субконто2 В (&МассивБухСкладов)) КАК ХозрасчетныйОстатки »

    Флаг Партии анализировать не включай.

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

    Извини, если не заработает. К сожалению пишу с листа — не на чем проверить.

    Reply
  54. Love29

    Выдает: {ВнешняяОбработка.СверкаТорговляБухгалтерия(84)}: Ошибка при вызове метода контекста (Выполнить): Произошла исключительная ситуация: {(7, 42)}: Не задано значение параметра «ДатаОтчета»

    РегистрБухгалтерии.Хозрасчетный.Остатки(<<?>>&ДатаОтчета, , &МассивВидовСубконто, Субконто3 В (&МассивБухСкладов)) КАК ХозрасчетныйОстатки

    Выборка=Запрос.Выполнить().Выбрать();

    по причине:

    Произошла исключительная ситуация: {(7, 42)}: Не задано значение параметра «ДатаОтчета»

    РегистрБухгалтерии.Хозрасчетный.Остатки(<<?>>&ДатаОтчета, , &МассивВидовСубконто, Субконто3 В (&МассивБухСкладов)) КАК ХозрасчетныйОстатки

    Reply
  55. aspirator23

    (54) Скорее всего эту строку удалил или закомментировал: Запрос.УстановитьПараметр(«ДатаОтчета»,ДатаОтчета); Восстанови ее.

    Нужно закомментировать

    61 строку

    МассивВидовСубконто.Добавить(БдБух.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии);

    66 строку

    | ХозрасчетныйОстатки.Субконто2.Дата КАК ДатаДок,

    75 и запятую из 74 строки

    ,

    | ХозрасчетныйОстатки.Субконто2.Дата

    Если не получится, можешь прислать свою бухгалтерию посмотрю и настрою отчет для тебя.

    Reply
  56. Love29

    Теперь пишет: Не удалось подключиться к базе данных бухгалтерии

    Хотя настройки выставляю те же. что и раньше

    Reply
  57. aspirator23

    (56) подключение мы не трогали. Запрос, который мы правим, происходит после подключения. Это даже разные процедуры. Закрой — открой программу.

    Reply
  58. Love29

    Я понимаю, что подключение это совсем другое дело. Значит с эти разобрались, теперь подключение хромает. Ладно, посижу подумаю. Хотя вроде путь и пользователя верные указываю.

    Reply
  59. aspirator23

    (58) последняя строчка в 55 комментарии в силе.

    Reply
  60. aspirator23

    (58) Бухгалтерия на платформе 8.1?

    Reply
  61. Love29

    Да, бухгалтерия на платформе 8.1.

    Reply
  62. Love29

    Последнюю строчку в комментарии 55 сделала в силе и вот выдал:

    {ВнешняяОбработка.СверкаТорговляБухгалтерия(84)}: Ошибка при вызове метода контекста (Выполнить): Произошла исключительная ситуация: {(7, 42)}: Не задано значение параметра «ДатаОтчета»

    РегистрБухгалтерии.Хозрасчетный.Остатки(<<?>>&ДатаОтчета, , &МассивВидовСубконто, Субконто3 В (&МассивБухСкладов)) КАК ХозрасчетныйОстатки

    Выборка=Запрос.Выполнить().Выбрать();

    по причине:

    Произошла исключительная ситуация: {(7, 42)}: Не задано значение параметра «ДатаОтчета»

    РегистрБухгалтерии.Хозрасчетный.Остатки(<<?>>&ДатаОтчета, , &

    Reply
  63. aspirator23

    (62) В (59) Я имел ввиду вот эту «Если не получится, можешь прислать свою бухгалтерию посмотрю и настрою отчет для тебя». 😀

    Эта ошибка

    Произошла исключительная ситуация: {(7, 42)}: Не задано значение параметра «ДатаОтчета»

    РегистрБухгалтерии.Хозрасчетный.Остатки(<<?>>&ДатаОтчета, , &

    явно указывает что нет этой строки перед выполнением запроса:

    Запрос.УстановитьПараметр(«ДатаОтчета»,ДатаОтчета);

    Reply
  64. aspirator23

    Попробуй так:

    МассивВидовСубконто=БдБух.NewObject(«Массив»); МассивВидовСубконто.Добавить(БдБух.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура); //МассивВидовСубконто.Добавить(БдБух.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии); МассивВидовСубконто.Добавить(БдБух.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);

    Запрос=БдБух.NewObject(«Запрос»);

    Запрос.Текст=»ВЫБРАТЬ

    | ХозрасчетныйОстатки.Субконто1 КАК Товар,

    | СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстаток,

    | СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток

    |ИЗ

    | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, , &МассивВидовСубконто, Субконто2 В (&МассивБухСкладов)) КАК ХозрасчетныйОстатки

    |

    |СГРУППИРОВАТЬ ПО

    | ХозрасчетныйОстатки.Субконто1″;

    Запрос.УстановитьПараметр(«МассивВидовСубконто»,МассивВидовСубконто);

    Запрос.УстановитьПараметр(«МассивБухСкладов»,МассивБухСкладов);

    Запрос.УстановитьПараметр(«ДатаОтчета»,ДатаОтчета);

    Reply
  65. Love29

    Базу выслать не могу. А строчка : Запрос.УстановитьПараметр(«ДатаОтчета»,ДатаОтчета);

    присутствует. А ошибка выскакивает все равно.

    Reply
  66. aspirator23

    Попробуй так (59-79 строки):

    МассивВидовСубконто=БдБух.NewObject(«Массив»); МассивВидовСубконто.Добавить(БдБух.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура); //МассивВидовСубконто.Добавить(БдБух.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Партии); МассивВидовСубконто.Добавить(БдБух.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);

    Запрос=БдБух.NewObject(«Запрос»);

    Запрос.Текст=»ВЫБРАТЬ

    | ХозрасчетныйОстатки.Субконто1 КАК Товар,

    | СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстаток,

    | СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток

    |ИЗ

    | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, , &МассивВидовСубконто, Субконто2 В (&МассивБухСкладов)) КАК ХозрасчетныйОстатки

    |

    |СГРУППИРОВАТЬ ПО

    | ХозрасчетныйОстатки.Субконто1″;

    Запрос.УстановитьПараметр(«МассивВидовСубконто»,МассивВидовСубконто);

    Запрос.УстановитьПараметр(«МассивБухСкладов»,МассивБухСкладов);

    Запрос.УстановитьПараметр(«ДатаОтчета»,ДатаОтчета);

    Reply
  67. Love29

    Я понимаю, что вслепую сложно. Но я сама попробую поразбираться. С нуля не могу пока такой отчет написать так хоть в готовом поразбираюсь как работает. Спасибо за помощь. 🙂

    Reply
  68. aspirator23

    Люба, не расстраивайся. Отчет не сложный, очень похож на 77. Пятница, конец недели. Утром, на свежую голову он скорее всего «сдастся».

    Reply
  69. Love29

    Спасибо!!! 😉

    Reply
  70. Love29

    Получилось!

    Строку: Запрос.УстановитьПараметр(«ДатаОтчета»,ДатаОтчета);

    вставила после Запрос=БдБух.NewObject(«Запрос»);

    Reply
  71. aspirator23

    (70) Мы за тебя болели.

    Reply
  72. Proletaeva

    Громадное спасибо от бедного бухгалтера.!!!! :{}

    Reply
  73. aspirator23

    (72) Спасибо

    Reply
  74. MikleVV

    Спасибо за открытый код.

    Небольшое изменение — и прекрасно работает с 8.2

    Reply
  75. MikleVV

    Вот только при ближайшем рассмотрении выяснилось, что очень странно работает…

    К примеру сумму из БП не берет, а из УТ — берет

    и чтодосадно: Если отрицательный остаток возникает в УТ, то обнуляет его, что приводит к неверному балансу между складами.

    К примеру было товара А 1 штука на складе. Пролади его 2 штуки, и в УТ и в БП показываются отрицательные остатки на складе. Обработка выдает 0 для УТ и -1 в БП.

    Потом поступило 2 единицы тогоже товара. УТ и БП выдают отстаток 1, а обработка выдает — в УТ 2, в БП 1 и индицирует несуществующее несоотвествие.

    Это что, последствие того, что я на 8.2 работать пытаюсь (УТ 8.1.12.95, БП 1.6.26.3) или оно у всех так?

    Reply
  76. MikleVV

    Почему не работает? См. (74) — тьам изменение в одной строчке надо сделать.

    Правда по стоимости не сравнивает, но по количеству вполне работает.

    Я пользую в 8.2 с 2010-го года

    Если посильнее поменять, то наверное и по стоимости будет сравнивать, но мне достаточно и так.

    Ниже файлик с обработкой

    Reply
  77. Nikola178

    (85) MikleVV,

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

    {ВнешняяОбработка.СверкаТорговляБухгалтерия.МодульОбъекта(19)}: (COMОбъект)

    V82=Новый COMОбъект(«V82.ComConnector»);

    по причине:

    Класс не зарегистрирован

    УТ 10.3 (10.3.13.2), БУХ 2.0 (2.0.34.7)

    Может кто подскажет в чем проблема может быть?? ;(

    Reply
  78. aspirator23

    (86) Эта ошибка возникает когда происходит подключение к бухгалтерии.

    Выложено две обработки: одна для платформы 8.1, вторая для 8.2.

    1.Бухгалтерия на какой платформе? Скорее всего 8.2, если нет, тогда возьми обработку для 8.1.

    2. Если бухгалтерия на 8.2, тогда на компьютере где запускаешь обработку сделай следующее:

    -Для Windows XP(32-разряда). В левом углу Пуск-Выполнить. В поле вставь такую строку:

    C:WindowsSystem32
    egsvr32.exe «C:Program Files1cv828.2.15.301incomcntr.dll»

    8.2.15.301 — укажи ту платформу которая у вас используется

    -Для Windows 7(32-разряда)

    C:WindowsSystem32
    egsvr32.exe «C:Program Files1cv828.2.15.301incomcntr.dll»

    8.2.15.301 — укажи ту платформу которая у вас используется

    -Для Windows 7(64-разряда)

    C:WindowsSystem32
    egsvr32.exe «C:Program Files (x86)1cv828.2.15.301incomcntr.dll»

    8.2.15.301 — укажи ту платформу которая у вас используется

    Когда вставишь строку, выполни ее. Произойдет регистрация библиотеки с сообщением.

    Для Windows 7 — это может не сработать. Напиши, пришлю специальный батник.

    Reply
  79. Nikola178

    (87)

    большое спасибо, зарегистрировал. Но теперь другая напасть, вроде и путь к базе бухгалтерии выбрал правильный, и пользователя для входа указал, но как только нажимаю кнопку «сформировать», пишет что «Не удалось подключиться к базе данных бухгалтерии» 🙁 путь проверял, и перепрописывал по всякому, да и пользователя тоже, но все равно не подключается;(

    Reply
  80. MikleVV

    (87)

    Скачал обработку под 8.2 (не без трудностей — ктож знал что она только через «посмотреть и скачть все файлы» работает 🙂

    Так не идет 🙁

    Та, чуть перелделанная мной что я поместил (86) идет прекрасно, а Ваша нет 🙁 При нажатии на «Сформировать» пишет «Недопустимая строка с указанием класса» чем все и заказнчивается 🙁

    1С 8.2.15.279

    УТ 10.3.17.4

    БП 2.0.34.7

    Reply
  81. aspirator23

    (89) что в 87 пробовал?

    Reply
  82. MikleVV

    (90) — в 87 написано: «Выложено две обработки: одна для платформы 8.1, вторая для 8.2»

    Вот вторую для 8.2 и пробовал 🙁

    Reply
  83. aspirator23

    (92) Регистрацию comcntr пробовал? Операционная система какая?

    Reply
  84. aspirator23

    (92) Проверил — работает. На всякий случай обновил обработку.

    Reply
  85. aspirator23

    (88) Тут проще, проверь внимательно настройки подключения:

    Логин,

    пароль,

    тип авторизации,

    путь к базе, если файловая,

    настройки для клиент-серверной, если не файловая.

    Reply
  86. MikleVV

    (93) — регистьрацию не пробовал — не видел необходимости — ведь предыдущая версия успешно работает.

    Рперационка Windows XP(32-разряда).

    Зарегистрировал — поведение не изменилось

    Файл СверкаУТиБП_82.epf

    Ошибка: «Недопустимая строка с указанием класса»

    Подробно:

    {ВнешняяОбработка.СверкаТорговляБухгалтерия.МодульОбъекта(19)}: Ошибка при вызове конструктора (COMОбъект)

    V81=Новый COMОбъект(«V81.ComConnector»);

    по причине:

    Недопустимая строка с указанием класса

    (в общем дейсвительно, ну при чем тут V81 ???)

    Скорее всего вами был помещен не тот файл.

    Попытаюсь скачать вновь выложенную обработку. ТОлько тут трудности: требует денюжек.

    Пойду глде-нибудь ахинею в форуме напишу чтоб дала скачать…

    Reply
  87. Nikola178

    (95)

    конечно я попроверял и путь, и логин и пароль…и руками прописывал, и с использованием CTrl+C что б не ошибиться 🙁 но все равно почему то ругается: «Не удалось подключиться к базе данных бухгалтерии». Даже и не знаю, что делать:( Подскажите плиз, не может быть это связано например с тем, что УТ платформа 8.2.11.235 конфигурация (10.3.13.2), а БУХ платформа 8.2.14.537 конфигурация (2.0.34.7) ???

    Reply
  88. aspirator23

    (100) разные платформы — обычно сообщение о классе сообщение.

    Логин, пароль, путь бухгалтерии вводишь?

    Reply
  89. aspirator23

    (100) Наверняка насчет твоих платформ не скажу. Но сам сталкивался с такой проблемой. Если на компьютере стоит две платформы, то Com-соединение срабатывает только то которое зарегистрировано последним. Попробуй на том компьютере где платформу бухгалтерию(8.2.14) устанавливали последней.

    Reply
  90. Stepan_1c

    (100) длина логина и пароля ограничена + необходимо использовать «V82.ComConnector» а не «V81.ComConnector», который написан, поэтому и не получается скорее всего. Я вбил в ручную в коде в итоге. Еще были ошибки преобазования к числу из за кривого заполнения пользователями данных, поставил «попытки» и на исключение возвращаю суммы нулевые. А так полезная обработка=)

    Reply
  91. Motor24

    Скачал. УТ 10.3 (10.3.23.3), БП 8.2 (2.0.53.10). Торговля файловая, бухгалтерия на SQL 2008.

    При открытии в БП указываю параметры складов/баз для подключения, нажимаю «Сформировать» и получаю ошибку:

    {ВнешняяОбработка.СверкаТорговляБухгалтерия.МодульОбъекта(60)}: Поле объекта не обнаружено (ВидыСубконтоХозрасчетные)

    МассивВидовСубконто.Добавить(БдБух.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура);

    При открытии в УТ, после нажатия кнопки формирования через пару секунд получаю пустое поле. Пробовал с различными параметрами отбора — безрезультатно.

    Reply
  92. aspirator23

    (145) Motor24, ошибка в том, что запускаешь в Бухгалтерии. Запускать нужно в УТ.

    Reply
  93. Motor24

    (146)

    При открытии в УТ, после нажатия кнопки формирования через пару секунд получаю пустое поле. Пробовал с различными параметрами отбора — безрезультатно.

    Поэтому и попробовал в БП. В УТ выходит белое поле. Может быть из-за того, что УТ файловая, а БП на скуле?

    UP. Приношу извинения — косяк крылся в самих базах, а именно — в разных складах. Указал в отборах нужные, обработка заработала. Спасибо!

    Reply
  94. Jaivan

    Добрый день!

    В описании указано, что работает с БП 3.0, при подключении из УТ 10.3 выдает ошибку:

    {ВнешняяОбработка.СверкаТорговляБухгалтерия.МодульОбъекта(19)}: Ошибка при вызове конструктора (COMОбъект)

    V82=Новый COMОбъект(«V82.ComConnector»);

    по причине:

    -2147221005(0x800401F3): Недопустимая строка с указанием класса

    comcntr.dll зарегистрирована

    Reply
  95. aspirator23

    (154) Jaivan, подключение заработало?

    Reply
  96. Jaivan

    (157)

    подключение работает но не отрабатывается запрос (по крайнем мере создается ком объект, со стороны БП подключение тоже вижу):

    Запрос.Текст=»ВЫБРАТЬ
    | ХозрасчетныйОстатки.Субконто2.Дата КАК ДатаДок,
    | ХозрасчетныйОстатки.Субконто1 КАК Товар,
    | СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстаток,
    | СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, , &МассивВидовСубконто, Субконто3 В (&МассивБухСкладов)) КАК ХозрасчетныйОстатки
    |
    |СГРУППИРОВАТЬ ПО
    | ХозрасчетныйОстатки.Субконто1,
    | ХозрасчетныйОстатки.Субконто2.Дата»;
    

    Показать

    проверял через консоль запросов в БП 3.0:

    {ВнешняяОбработка.КонсольЗапросов_836.МодульОбъекта(55)}: Ошибка при вызове метода контекста (ВыполнитьПакет): {(7, 2)}: Ошибка обработки представления «РегистрБухгалтерии.Хозрасчетный.Остатки:Поле не найдено (Субконто3)»

    <<?>>РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, , &МассивВидовСубконто, Субконто3 В (&МассивБухСкладов)) КАК ХозрасчетныйОстатки

    Reply
  97. aspirator23

    (160) Jaivan, похоже учет по складам не ведется. Посмотри комментарии 55-66 и 106-120.

    Там описаны такие ситуации и как их можно решить.

    Reply
  98. Jaivan

    Добрый день! Из за отсутствия учета в БП товаров по партиям и складам изменил запрос:

     Запрос=БдБух.NewObject(«Запрос»);
    Запрос.Текст=»ВЫБРАТЬ
    | ХозрасчетныйОстатки.Субконто1 КАК Товар,
    | СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК СуммаОстаток,
    | СУММА(ХозрасчетныйОстатки.КоличествоОстаток) КАК КоличествоОстаток
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, &СчетУчета, &МассивВидовСубконто) КАК ХозрасчетныйОстатки
    |
    |СГРУППИРОВАТЬ ПО
    | ХозрасчетныйОстатки.Субконто1″;
    

    Показать

    также пытаюсь сделать отбор по 41.10 счету (Товары на складах):

    Запрос.УстановитьПараметр(«СчетУчета»,БдБух.ПланыСчетов.Хозрасчетный.ТоварыНаСкладах);

    получаю ошибку:

    {ВнешняяОбработка.СверкаТорговляБухгалтерия.МодульОбъекта(89)}: Ошибка при вызове метода контекста (Выполнить)

    Выборка=Запрос.Выполнить().Выбрать();

    по причине:

    Произошла исключительная ситуация (1C:Enterprise 8.3.8.2054): {(6, 55)}: Неверные параметры «РегистрБухгалтерии.Хозрасчетный.Остатки, 1»

    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОтчета, <<?>>&СчетУчета, &МассивВидовСубконто) КАК ХозрасчетныйОстатки

    в обработке вижу закомментированный код:

    //МассивСчетовИсключений.Добавить(БдБух.ПланыСчетов.Хозрасчетный.ТоварыНаСкладе); 

    т.е. значение также пробовали передавать, получилось? возможно не вижу очевидную ошибку…

    Reply
  99. aspirator23

    (162) Jaivan, счета — это заготовки, на случай, если потребуется. Но они не потребовались… 🙂

    Reply

Leave a Comment

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