Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ)




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

    Спасибо. Поработаю с обработкой, непременно напишу о результатах

    Reply
  2. EM-S

    В рознице 2.0 8.2 не запускается. Пишет переменная не определена ЭтотОбъект. Почему?

    Reply
  3. ekaruk

    (2) EM-S, В обновленной версии возникала ошибка при запуске в режиме совместимости.

    Поправила.

    Можете скачать еще раз или заменить в старой «ЭтотОбъект» на «ЭтаФорма»

    Reply
  4. EM-S

    А можете проверить эту обработку в Рознице 2.0?: Не формируется запрос на выбор всех контрагентов.

    При нажатии «Объекты -> JSON» выдает «Преобразование не удалось»

    Reply
  5. ekaruk

    (4) EM-S, Версии 2.0 не нашла.

    Запустила на демобазе «Розница, редакция 2.1 (2.1.4.9)» на полной поддержке.

    Платформа «1С:Предприятие 8.3 (8.3.5.1119)»

    Абсолютно корректно формируется запрос, выгружаются все контрагенты и загружаются обратно.

    Выложите куда-нибудь на файлообменник свою копию, попробую проверить.

    Или можете свою обновить до актуальной. Данные от этого не изменятся.

    Reply
  6. avz_1C

    Сильно!

    Reply
  7. gortol

    ВыгрузкаЗагрузкаJSON_1.2.1.epf -> к сожалению не вызвать конструктор запросов — ошибка: неизвестное имя формы: externaldataprocessor.querywizard.form

    то есть выбрать скажем все значения справочника уже не могу(((

    платформа 8.3.5.1146, конфа Бух3.0

    Reply
  8. ekaruk

    (7) gortol, Попробовала на 8.3.5.1248. У меня тоже проявилось в серверном варианте в толстом клиенте.

    Пока не могу понять причину. Возможно, ошибка платформы, позже поправят.

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

    В крайнем случае тест запроса можно вручную написать или сформировать в конфигураторе и скопировать.

    Reply
  9. valya977

    Спасибо обработка сработала на ура! Бухгалтерия предприятия, редакция 3.0 (3.0.31.14)

    Reply
  10. Kozhanov

    Все работает, спасибо!

    Reply
  11. pizzeed

    Доброго времени суток.

    Существует ли возможность подбора не вручную позиций справочников Номенклатура и Контрагенты?

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

    Использовал ВыгрузкаЗагрузкаJSON_1.2.1.epf

    Выгружаю из УТ (10.3.27.2), 1С:Предприятие 8.2 (8.2.19.90), планирую загрузить в Комплексная автоматизация, редакция 1.1 (1.1.55.1), 1С:Предприятие 8.3 (8.3.5.1068)

    Reply
  12. ekaruk

    (11) pizzeed, Вы можете выбрать произвольным запросом данные по любому условию.

    Такая возможность есть только в управляемой форме. Соответственно нужно запустить конфигурацию в управляемом режиме. Насколько я помню, УТ 10.3 вполне запускается в тонком клиенте.

    Reply
  13. zerik

    Отличная обработка, спасибо.

    Мужу респект =) я его спалил по комметриям в модуле =)

    Reply
  14. olga1512

    Спасибо большое!!! все работает — вы молодец!!!!!

    Reply
  15. masik85

    Очень здорово придумано!! Браво! Пробовала на переносе ЗУП 8.2- УПП 8.3(обычное приложение), что было в базе все нашлось и расставилось, чего не было- появились UIN и <Объект не найден> сначала испугалась, что создались объекты, но…пронесло :)) Спасибо .

    Скачала 8.2+ ,кнопки Добавить запросом и выгрузить в файл- нет.

    Reply
  16. ekaruk

    (15) masik85, В отличии от типовой выгрузки, переносятся только те объекты, которые вы добавили в список.

    Если в объектах есть ссылки на отсутствующие во второй базе элементы, то они будут отображаться как «объект не найден»

    Reply
  17. masik85

    Скачала 8.2+ ,кнопки Добавить запросом и выгрузить в файл- нет.

    Reply
  18. ekaruk

    (17) masik85, Этот функционал только на управляемой форме.

    Нужно запустить конфигурацию в управляемом режиме либо включить обработку в состав конфигурации и использовать управляемую форму как основную..

    Reply
  19. masik85

    (18) понятно..спасибо

    Reply
  20. dreamworker666

    При попытке переноса 1 контрагента через управляемую форму данные выгружаются успешно из ут 11.1.7.49 но при загрузке в ут 11,1,9,70 выдает вот такое сообщение и элемент не создается

    {Справочник.Контрагенты.Форма.ФормаЭлемента.Форма(93)}: Ошибка при вызове метода контекста (ОткрытьФорму)

    ОткрытьФорму(«Справочник.Партнеры.» + ИмяФормыДляОткрытия, Новый Структура(«Ключ», Объект.Партнер), );

    по причине:

    Объект не найден

    Reply
  21. ekaruk

    (20) dreamworker666, Это ошибка при открытии формы, а не при создании элемента. Насколько я понимаю, элемент справочника перенесся корректно и вы пытаетесь его просмотреть.

    Такая ошибка возможна, если у вас установлена опция «Использовать партнеров как контрагентов» и вы перенесли только элемент справочника «Контрагенты». и пытаетесь его открыть. Для работы УТ11 обязателен перенос связанных элементов справочника «Партнеры» и «Контрагенты» одновременно. Один без другого не имеет смысла.

    Reply
  22. V.Nikonov

    Механизма рекурсии не будет? Т.е. для списка номенклатуры автоматически подключать ЕдиницыИзмерения…

    Reply
  23. ekaruk

    (22) V.Nikonov, Сейчас нету. Только то, что отобрано.

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

    Вопрос в том, что переносить.

    Если переносить все подряд, то можно из-за одного элемента перенести пол-базы. Не факт, что пользователю это действительно нужно. Можно случайно перетереть корректные данные текущей базы данными другой базы, которые пользователь не выбирал.

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

    Я подумаю.

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

    Reply
  24. ekaruk

    (24) eeeio, Спасибо.

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

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

    Позже объединю с обоими вариантами.

    Все равно скорее всего отдельно буду добавлять вариант под 8.3.6. На ней гораздо быстрее будет работать на встроенном JSON.

    Reply
  25. eeeio

    (25) там также добавил сохранение текста и параметров запроса внутри сеанса работы с обработкой (т.е. после ее закрытия они не сохраняются)

    Reply
  26. iret

    Здравствуйте! А можно дополнить эту обработку еще переносом регламентированных отчетов (статистики)?

    Reply
  27. ekaruk

    (27) iret, Не совсем поняла, что имеется в виду.

    Насколько я понимаю, в большинстве конфигураций регламентированные отчеты это просто справочник.

    Вы можете перенести его записи аналогично любому другому справочнику.

    Reply
  28. MaxS

    Решил перенести все дополнительные обработки (из соответствующего справочника) из УТ 11.1.9.70 в УТ 11.1.2.6. 56 элементов. Выгруженный файл получился 20Мб. Загружается уже часов 20 в файловой базе на процессоре i7-3770 с HDD 10k rpm.

    Вручную можно было бы перенести за час. 🙁

    Reply
  29. Гость

    Клиент — сервер. Платформа 8.3.5.1383, Конфигурация Бух 3.0, сервер на линухе, Ваша обработка будет работать?

    Reply
  30. ekaruk

    (30) Гость, Да, должна работать.

    Ограничений по режиму работы нет.

    Reply
  31. laf

    Спасибо. Очень нужно было. Проверю.

    Reply
  32. IlyasDesign

    А планируется возможность переносить регистры сведений?

    Reply
  33. AlexO

    (25) а чем вариант УФ 8.2 отличается от УФ 8.3? Таксей? Или функционалом?

    Reply
  34. ekaruk

    (33) IlyasDesign, Была такая мысль для независимых регистров.

    Пока не могу решить, что делать в случаях:

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

    2. Как их удобно отбирать пользователю (сейчас пользователь просто выбирает ссылку). Как должен выглядеть выбор записей из разных регистров не знаю.

    Зависимые регистры, на мой взгляд, логичнее переносить документами и формировать заново от регистратора.

    Reply
  35. ekaruk

    (34) AlexO, Нет конструктора запросов и немного синтаксисом.

    Грубо говоря, вариант для 8.2 это вариант для 8.3 из которого выкинуто все неподдерживаемое.

    Reply
  36. AlexO

    (36) Получается, можно скачать последний вариант, и убрать неподдерживаемые функции? Мне, например, работа в 8.3 очень не нравится ))

    (25)

    На ней гораздо быстрее будет работать на встроенном JSON.

    Т.е. у 8.3.6 быстрее с текстом чем у 8.3.5, вы хотите сказать? Встроенного JSON у 1С нет.

    Reply
  37. ekaruk

    (37) AlexO, Вариант для 8.2 это и есть последний с выкинутыми функциями. Можно скачать и выкинуть самостоятельно.

    У 1С с 8.3.6 есть встроенная в платформу работа с JSON.

    На текущий момент я ее не использую, т.е. никакой разницы в скорости нет.

    Переделаю обработку на использование встроенного JSON уже в 8.3.7, когда появится полноценная сериализация объектов.

    Reply
  38. AlexO

    (38)

    У 1С с 8.3.6 есть встроенная в платформу работа с JSON.

    Я вот не вижу разницы — что JSON у 1С, что работа с текстовым файлом, хотя, может быть, это только на мой непосвященный в тонкости реализации JSON в 8.3.6, взгляд.

    Поэтому, ваш вариант даже предпочтительней — он понятно, что делает, и можно подстроить/отследить ход процесса.

    когда появится полноценная сериализация объектов.

    А чем не устраивает существующая с 8.1 сериализация?

    Reply
  39. ekaruk

    (39) AlexO, Работа со строкой очень медленная на больших объемах.

    Встроенный в платформу разбор лучше.

    Reply
  40. AlexO

    (40)

    Встроенный в платформу разбор лучше.

    Наверняка, если бы он был существенно лучше, вы бы использовали его ))

    Reply
  41. lap_soft

    Спасибо за хорошую обработку очень пригодилась.

    по необходимости была добавлена выборка объектов из журнала регистрации.

    код моей обработки

    &НаСервере
    Процедура ВыбратьОбъектыИзЖРНаСервере(ДатаНачала,ДатаОкончания)
    отбор = новый структура(«ДатаНачала,ДатаОкончания»,ДатаНачала,ДатаОкончания);
    массивСобытий =  новый массив;
    массивСобытий.Добавить(«_$Data$_.New»);
    массивСобытий.Добавить(«_$Data$_.Post»);
    массивСобытий.Добавить(«_$Data$_.Unpost»);
    массивСобытий.Добавить(«_$Data$_.Update»);
    Отбор.Вставить(«Событие»,массивСобытий);
    
    Список1 = новый таблицаЗначений;
    ВыгрузитьЖурналРегистрации(Список1, отбор, «Данные»);
    
    Список1.Свернуть(«Данные»,»»);
    зн1=Список1.Количество();
    пока зн1>0 Цикл
    зн1=зн1-1;
    зн=Список1[зн1];
    Если не ЗначениеЗаполнено(зн.Данные) Тогда
    Список1.Удалить(зн1);
    КонецЕсли;
    КонецЦикла;
    Список1.Колонки.Найти(«Данные»).Имя=»СсылкаНаОбъект»;
    объект.ПереносимыеОбъекты.Загрузить(Список1);
    
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ВыбратьОбъектыИзЖР(Команда)
    
    Если 0=1 Тогда // тут нельзя полдня выбрать 🙁
    
    ПеременнаяТипаСтандартныйПериод = Новый СтандартныйПериод;
    
    
    Диалог = Новый ДиалогРедактированияСтандартногоПериода();
    Диалог.Период = ПеременнаяТипаСтандартныйПериод;
    Диалог.Период.Вариант=ВариантСтандартногоПериода.ПроизвольныйПериод;
    Если Диалог.Редактировать() Тогда
    ПеременнаяТипаСтандартныйПериод = Диалог.Период;
    ВыбратьОбъектыИзЖРНаСервере(ПеременнаяТипаСтандартныйПериод.ДатаНачала,ПеременнаяТипаСтандартныйПериод.ДатаОкончания);
    КонецЕсли;
    
    иначеесли 1=1 тогда
    ДатаНачала=ТекущаяДата();
    ВвестиДату(ДатаНачала,»ВВедите Дату Начала»,ЧастиДаты.ДатаВремя);
    
    ДатаОкончания=ТекущаяДата();
    ВвестиДату(ДатаОкончания,»ВВедите Дату Окончания»,ЧастиДаты.ДатаВремя);
    Если ЗначениеЗаполнено(ДатаНачала) Тогда
    ВыбратьОбъектыИзЖРНаСервере(ДатаНачала,ДатаОкончания);
    КонецЕсли;
    
    КонецЕсли;
    
    
    КонецПроцедуры
    

    Показать

    я думаю что в обработку можно добавить дополнительные отборы (пользователь, тип приложения, виды объектов).

    Ещё хотелось бы в будущем увидеть возможность переноса документов вместе с движениями.

    Reply
  42. AlexO

    (42) lap_soft, код можно (и нужно) оформлять как «код».

    А хотите чем-то поделиться — так выложите прямо здесь модифицированную обработку с комментариями )

    Reply
  43. ekaruk

    (42) lap_soft, Насколько я понимаю, смысл в том, чтобы выбрать все измененные за какой-о период. В принципе мысль интересная.

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

    Reply
  44. Dach

    JSON рулит! Екатерина, Вы — большой молодец. А теоретически, можно переписать обычный xml-обмен по правилам на JSON? В каком направлении копать?

    Reply
  45. ekaruk

    (46) Dach, Можно, но логичнее это делать начиная с 8.3.7.

    В этом релизе появится сериализация объектов в JSON через XDTO, полностью аналогичная имеющейся сериализации в XML.

    Соответсвенно, можно использовать тот же подход, что сейчас в обычном обмене по правилам.

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

    Reply
  46. dj_serega

    Спасибо за обработку под 8.3.

    Будем жать 8.3.7 и новой версии под новые возможности.

    Предложения:

    1. После нажатия «Объекты -> JSON» переходить на страницу «Текст JSON».

    — Просто удобно 🙂

    2. После чтения через «JSON -> Объекты» сообщения об успешной записи объекта выводить через параметр «Выводить уведомления».

    — Объектов может быть много 🙂

    А так обработка крутая! 🙂 Спасибо.

    Reply
  47. macey

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

    Reply
  48. ekaruk

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

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

    Reply
  49. AlexO

    (47)

    сериализация объектов в JSON через XDTO

    Двойная сериализация? Что за «объекты XML», «Объекты JSON»?

    Сериализация одна и единственная — объекты 1С — в текстовое представление (по формату XDTO или JSON — не важно, все они XML).

    но логичнее это делать начиная с 8.3.7.

    Кошмар просто с релизами у 1С.

    Reply
  50. alex.msk

    Спасибо, не пришлось изобретать велосипед)

    Reply
  51. macey

    (50) Спасибо! Просто убрал табличную часть из Поля, прекрасно загрузилось так. Когда в документе присутствовали табличные части, программа писала Недопустимое значение.

    Reply
  52. mKonstantin

    Не знаю как выбрать справочник полностью. Подскажите пожалуйста. Нужно перенести справочники Номенклатуры и Контрагентов полностью.

    P.s. В БП 8.2 при запуске обработки не конструтора запросов. Есть только поля для выбора элементов. В 8.3 УНФ есть возможность формировать запросы. Нужно из БП в УНФ.

    Reply
  53. ekaruk

    (54) mKonstantin, Конструктор запросов только в управляемом режиме.

    Запустите БП 2 в управляемом режиме и выберите все данные запросом

    ВЫБРАТЬ

    Контрагенты.Ссылка

    ИЗ

    Справочник.Контрагенты КАК Контрагенты

    Reply
  54. baracuda

    В чем преимущество перед конвертацией данных?

    Reply
  55. ekaruk

    (56) baracuda, Настраивать не нужно.

    Для работы с конвертацией нужен программист, который умеет ей пользоваться.

    Рядовой бухгалтер не настроит. Хотя, конечно, конвертация более универсальна.

    Эта обработка не требует никаких настроек.

    Открыл в первой базе — выгрузил.

    Открыл во второй — загрузил.

    Наиболее удобно для близких по структуре конфигураций, у которых схожий набор полей.

    Reply
  56. Veronika12

    Я бухгалтер в небольшой организации, программиста у нас нет — поэтому часто пользуюсь обработками, опубликованные на данном сайте. Сейчас возникла необходимость перенести данные в новую базу (разные релизы). Приобрела вашу обработку, но при использовании данной обработки возникли вопросы, хотя в общем обработка неплохая. Перенесла, справочники. Но вот при переносе банковских и кассовых документов выходит сообщение: Значение не является значением объектного типа (ВалютаВзаиморасчетов). Подскажите, пжл, что мне делать, т.к. документов очень много. И еще вопрос, подскажите как пользоваться консолью. Пытаюсь, но выходит сообщение — недопустимое значение.

    Reply
  57. ekaruk

    (58) Veronika12, Обработка не зависит от данных.

    Однако, возможно, в конфигурации ошибка в каком-то обработчике, для которого нужны предварительно перенесенные связанные данные.

    Уточните, на каком именно этапе ошибка.

    Нужен полный текст, чтобы было видно, в каком именно модуле.

    Напишите в личку. Возможно, смогу что-то подсказать.

    Reply
  58. JoeLan

    Попробовал выгрузить из УТ10.3 контрагента. При загрузке в 11.1 выдал ошибку — «Справочник не многоуровневый».

    (В 10.3 Контрагенты — Иерархический справочник). Как быть?

    Reply
  59. ekaruk

    (60) JoeLan, Там скорее всего проблема не в иерархии.

    В УТ11 одновременно существуют Контрагенты и Партнеры. Они взаимосвязаны. Нельзя просто перенести контрагентов без партнеров.

    Reply
  60. visim

    Выгружал из ЗУП 2.5 в ЗУП 3.0 ФизЛиц… В пустой базе ЗУП 3.0 не создаются элементы справочника, хотя и пишет, что созданы..справочник пустой…

    Пару ошибок — пол и вид образования не совпадали названия объектов, исправил.. но так же пусто

    Reply
  61. ekaruk

    (62) visim, Если обработка выдала сообщение, что элемент записан, значит он записан.

    Как именно проверяли, есть ли элементы?

    Если просто через форму списка, то скорее всего какие-то фильтры включены при просмотре.

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

    .

    Reply
  62. Sanario

    А обработка переносит только 1 вид документов или можно определенные документы за период?

    Reply
  63. ekaruk

    (64) Sanario, Любое количество и любые виды документов одновременно. Все, что добавите. Удобнее всего отбирать запросом.

    Reply
  64. CheBurator

    Поясните чайнику в обменах и их технологиях — чем JSON принципиально отличается от XML (иксемель именно как данные, а не те монстры, которые рожает КД)..? Или пните — где почитать для начального понимания кратко и по делу..?

    Спасибо.

    Reply
  65. ekaruk

    (66) CheBurator, Грубо говоря, JSON это сжатый XML. Принципиальной разницы в структурировании данных нет. Он просто компактнее.

    Почитать тут можно https://ru.wikipedia.org/wiki/JSON

    Reply
  66. CheBurator

    (67) угу, спсб.

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

    Reply
  67. bb1962

    (61) «Нельзя просто перенести контрагентов без партнеров»

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

    Надо, чтобы пользователь понимал, что волшебной кнопки не существует.

    Даже при переносе между идентичными конфигурациями есть существенные ограничения в силу

    «связанности» объектов, а для различным конфигураций и вовсе непригодно.

    Кроме различий в структуре базы данных, есть еще различия в алгоритмах (методиках).

    Об этом вообще почему-то никто не думает.

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

    Reply
  68. miv

    из 1С Бухгалт ПРОФ 8.3 в Документооборот 8 ПРОФ, редакция 2.0 (2.0.8.7) не загружаются объекты

    Reply
  69. ekaruk

    (70) miv, Какие именно объекты не загружаются?

    Reply
  70. ekaruk

    (69) bb1962, Есть универсальные механизмы, типа конвертации данных, которые могут все. Но для их использования нужен квалифицированный программист. Также есть большой круг задач, кля которых настолько универсальные вещи не нужны. Достаточно более простых обработок, доступных обычным пользователям. Просто не нужно их путать.

    Reply
  71. ZLENKO

    (69) bb1962, «Ну и как Вы собираетесь решать эту проблему при «универсальном, не требующем никаких настроек» переносе?»

    Вы путаете инструмент для разработчика и готовое решение для пользователя. Разработка полезная. Ждем версию для 8.3.7 🙂

    Reply
  72. miv

    из 1С Бухгалт ПРОФ 8.3 в Документооборот 8 ПРОФ, редакция 2.0 (2.0.8.7) не загружаются объекты

    При загрузке Контрагентов (в ДО Корреспондентов выводятся сообщения

    1) не найден тип данных. СправочникСсылка.Корреспонденты

    2) не найден тип данных. ПеречислениеСсылка. ЮридическоеФизическоеЛицо )

    Reply
  73. ekaruk

    (74) miv, Сообщения вида «не найден тип данных» это не ошибка. Это просто предупреждение о том, что типы данных не совпадают и эти конкретные значения загружены не будут. Думаю, проблама в том, что Вы пытаетесь загрузить данные справочника «Контрагенты» в справочник «Корреспонденты». Это разные несвязанные справочники, поэтому такое перенос не получится.

    Проверьте названия справочников и их структуру. Если структура близка и отличаются наименования, то можете попробовать нажать в выгруженном файле Ctrl+H и заменить «СправочникСсылка.Корреспонденты» на «СправочникСсылка.Контрагенты»

    Reply
  74. bb1962

    (72) (73) ZLENKO, Я ничего не путаю, а вот вы запутались и не понимаете, что с помощью «инструмента для разработчика» создается «готовое решение для пользователя», которое является полноценным решением в отличие от того, что здесь представлено. Вся прелесть этого решения в том, что платить за него не надо, но скупой, как известно, платит дважды.

    Reply
  75. ZLENKO

    (76) bb1962, «что с помощью «инструмента для разработчика» создается «готовое решение для пользователя»»

    Странный ход мысли. Других вариантов нет ?

    Reply
  76. dj_serega

    Уважаемая Евгения.

    Для ускорения выгрузки в предлагаю конкатенацию строк JSON’а попробовать реализовать через:

    ТекстПостроитель = Новый ЗаписьXML;
    ТекстПостроитель.УстановитьСтроку();
    ТекстПостроитель.ЗаписатьБезОбработки(БазоваяСтрокаПС);

    Источник идеи

    Спасибо.

    Reply
  77. bdsmka

    Огромное спс за обработку — очень помогла…

    Жаль в обычном приложении на больших объемах виснет. Нет запроса.

    На УФ все прекрасно

    Reply
  78. ekaruk

    (78) dj_serega, Думаю, тут в оптимизации скорости сложения строк особого смысла нет. Основное время это получение объектов, из сериализация в источнике и разбор строки и десериализция в приемнике.

    Хотя сама идея интересная.

    Reply
  79. ekaruk

    (79) bdsmka, К сожалению, на больших объемах очень долго выполняется десериализация строки текста.

    Лучше переносить данные частями.

    Reply
  80. dj_serega

    (80) Решил перебросить 4 документа по 4 тч и 20к строк в каждом. Итого

    4 * 4 * 20к = 320к строк. В среднем по 5 колонок. Итого 1.600к ячеек. Уже минут 30 выгружает :)))

    Видимо нужно «тушить» и xml’кой грузить… Ых 🙂

    Reply
  81. ekaruk

    (82) dj_serega, Для этой обработки многова-то.

    Тут все-таки универсальность в ущерб скорости.

    Хотя все равно должна перенести.

    Reply
  82. dj_serega

    (83) Сохранил результат в блокнот. Итого: 83,3 МБ (87 391 300 байт) :-))

    Поставил на загрузку. Сейчас 16:26

    Закончилась загрузка: 08.09.2015 16:53:06

    {Форма.Форма.Форма(23)}: Ошибка при вызове метода контекста (JSONВОбъекты)

    ОбъектОбработка.JSONВОбъекты();

    по причине:

    Превышен максимальный расход памяти сервера за один вызов

    В БД приемнике установлен лимит 🙁 В источнике его нет поэтому выгрузилось без ошибки.

    з.ы.: Из 4х документов 2 загрузилось.

    з.з.ы.: остальные загрузились без ошибки: 08.09.2015 17:08:27 (минут за 10).

    Reply
  83. jura376

    Работает СУПЕР. Есть конечно проблемы с большим объемом данных, но имеет право на существование однозначно.

    Reply
  84. mrTony2030

    Очень надо перенести регистры сведений, стандартная XML обработка не подходит. Как-то можно эту приспособить? Подскажите, умные люди.

    Reply
  85. ekaruk

    (86) mrTony2030, Эта обработка переносит только объектные сущности (справочники, документы, счета, ПВХ).

    Возможности перенести ею регистры сейчас нет.

    Reply
  86. mrTony2030

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

    Reply
  87. Bury

    Я так понимаю, что с 7.7 бух в УТП с помощью этой обработки не перенести?

    работает только с 8.х?

    Reply
  88. ekaruk

    (89) Bury, Не перенести. Работает, начиная с 8.2.

    Reply
  89. Гость

    Спасибо за обработку срабатывает на ура, но вопрос у меня такой, как можно сделать так чтобы при переносе справочника физ.лиц он хватал поле «Подробнее», и также адрес с вкладки «Конт.информация» не переносятся.

    Reply
  90. ekaruk

    (91) Voice, Зависит от конфигурации.

    Если «Подробнее» это реквизит элемента справочника, то перенесется. Если что-то стороннее (подчиненный справочник, регистр), то нет.

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

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

    Reply
  91. AKV77

    Спасибо, очень помогла.

    Reply
  92. rasswet

    вот это специалист! респект!

    Reply
  93. puzakov

    Я бы крайне не советовал пользоваться подобными обработками в промышленных ИБ. Лучше всего пользоваться конвертацией данных, так хоть выгрузку/загрузку отладить можно. Да, дольше, но надёжнее. При использовании подобных «быстрых» выгрузок/загрузок вероятность возникновения ошибок в данных повышается многократно, а ошибки эти диагностировать будет сложно, результаты могут быть весьма плачевными.

    Reply
  94. ekaruk

    (95) puzakov, В идеале я бы вообще не советовала пользоваться никакими левыми обработками, кроме включенных в состав конфигурации. Ибо никто не знает, насколько корректно их автор написал.

    Думаю, что использовать написанные бухгалтером в КД правила не менее, а может и более опасно.

    А программиста, готового бесплатно и оперативно разрабатывать правила всем подряд Вы вряд ли найдете.

    Если знаете такого, то поделись контактами.

    Reply
  95. puzakov

    (96) при использовании вашей обработки велик риск машинально влепить ошибку в данные. Я сам для себя когда-то подобные «быстрые выгрузки» изобретал. Их использование совершенно не оправдало себя. И вот, спустя несколько лет, перенеся туеву хучу данных между самыми различными конфигурациями, лучше чем КД я так для себя ничего и не нашел.

    Reply
  96. AlexO

    (66)(68) CheBurator, типа, утверждается, что XML, будет быстрее читаться/писаться, а JSON, тем более — еще быстрей.

    Но что-то вся проблема упирается в то, что в 1С до сих пор просто не оптимизированы функции чтения/записи из/в обычного текстового файла.

    Но зато постоянно предлагаются видимость «быстрой альтернативы»…

    Reply
  97. psa247

    Выбрал все доки запросом из бухии 2.0, при нажатии «выполнить запрос»

    {Форма.ВыборИзЗапроса.Форма(90)}: Ошибка при вызове метода контекста (Выполнить)

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

    по причине:

    {(7589, 60)}: Неоднозначное поле «ИнвентаризацияТоваровНаСкладе.Ссылка»

    ПО ОприходованиеТоваров.ИнвентаризацияТоваровНаСкладе = <<?>>ИнвентаризацияТоваровНаСкладе.Ссылка

    Reply
  98. ekaruk

    (121) psa247, Может, проблема в запросе?

    В консоли запросов он корректно выполняется?

    Reply
  99. sir
    Reply

Leave a Comment

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