Как выгрузить контрагентов из 1с
Дали задачу реализовать обмен между 1с и битриксом в реальном времени + выгружать контрагентов из 1с и создавать пользователей в битрикс. В стандартной поставке битрикс отдает данные 1с, когда пользователь оформляет заказ, в 1с создается контрагент с данными из профиля покупателя.
Моя задача была для каждого контрагента создавать пользователя в битрикс и передавать данные из 1с, такие как ИНН, Адрес, Телефон. Подумав, я решил что буду загружать контрагентов вместе с заказами.
Значит первая задача дописать на стороне 1с выгрузку xml, с возможность выгружать только изменения.
1) Чтобы получать изменения по контрагентам добавим в Общие -> Планы обмена -> ОБМЕН С САЙТОМ ЗАКАЗАМИ правой кнопкой состав -> добавить Справочники.Контрагенты для отслеживания изменений узла.
2) В 1с идем в Обработки -> ОбменССайтом открываем модуль объекта и находим функцию ВыгрузитьЗаказыВФайл, ниже выкладываю измененный код с комментариями:
Функция ВыгрузитьЗаказыВФайл(СтруктураИзменений, СтруктураПараметровСайта, Знач КаталогДляВыгрузки = "",
//Меняем переменную КоличествоВыгруженныхЗаказов на КоличествоОбработанныхДокументовНаВыгрузке
КоличествоОбработанныхДокументовНаВыгрузке = 0)
Успешно = Истина;
КоличествоВыгруженныхЗаказов = 0;
МассивИзменений = Новый Массив;
//Добавляем переменную МассивИзмененийКонтрагенты
МассивИзмененийКонтрагенты = Новый Массив;
//Формируем переменные ОбъектCMLСтрока и ОбъектCML.
ОбъектCMLСтрока = "";
ДатаФормирования = ТекущаяДата();
ОбъектCML = ПолучитьОбъектДляЗаписиXML("", ДатаФормирования);
Если ВыгружатьТолькоИзменения Тогда
//Создаем переключатель
Свитч = 0;
МассивИзменений = СтруктураИзменений.Заказы;
//Формируем МассивИзмененийКонтрагенты
МассивИзмененийКонтрагенты = СтруктураИзменений.Контрагенты;
// из этого массива нужно удалить все только что загруженные заказы
Для Каждого Эл Из мМассивЗагруженныхДокументов Цикл
ИндексЭлемента = МассивИзменений.Найти(Эл);
Если ИндексЭлемента <> Неопределено Тогда
МассивИзменений.Удалить(ИндексЭлемента);
КонецЕсли;
//Если выгружаем только изменения, а их нет, то возвращаем функцию
Если Свитч = 0 Тогда
Возврат Истина;
КонецЕсли;
//Если выгружаем все заказы и всех контрагентов без изменений
Иначе
ТаблицаДокументов = СформироватьCMLСРанееЗагруженнымиЗаказами(ОбъектCML, МассивИзменений);
КоличествоВыгруженныхЗаказов = ТаблицаДокументов.Количество();
ТаблицаДокументовКонтрагенты = СформироватьCMLСКонтрагентами(ОбъектCML, МассивИзмененийКонтрагенты);
КоличествоВыгруженныхКонтрагентов = ТаблицаДокументовКонтрагенты.Количество();
КонецЕсли;
//Закрываем тэг в xml
ОбъектCML.ЗаписатьКонецЭлемента();
//Пишем данные xml в ОбъектCMLСтрока
ОбъектCMLСтрока = ОбъектCML.Закрыть();
//Смотрим есть ли выгруженные заказы или контрагенты
Если КоличествоВыгруженныхЗаказов = 0 И КоличествоВыгруженныхКонтрагентов = 0 Тогда
СообщитьПользователю("Не выгружен ни один заказ или контрагент.", Истина);
Возврат Успешно;
//Считаем количество ОбработанныхДокументов
КоличествоОбработанныхДокументовНаВыгрузке = КоличествоВыгруженныхЗаказов + КоличествоВыгруженныхКонтрагентов;
Если ПустаяСтрока(КаталогДляВыгрузки) Тогда
Возврат Ложь;
КонецЕсли;
ИмяФайлаОбмена = "1cbitrix-" + Строка(Новый УникальныйИдентификатор) + ".xml";
ПолноеИмяФайлаОбмена = КаталогДляВыгрузки + "" + ИмяФайлаОбмена;
ФайлCMLНаДиске = Новый ТекстовыйДокумент;
ФайлCMLНаДиске.УстановитьТекст(ОбъектCMLСтрока);
Функция СформироватьCMLСРанееЗагруженнымиЗаказами(ОбъектCML, МассивИзменений)
ОтобразитьСостояние("Поиск открытых заказов, загруженных с " + HTTPОбменСервер + ". ");
ТаблицаДокументов = ПроцедурыОбменаССайтом.ПолучитьЗаказыСОплатойИОтгрузкойПоКатегориям(МассивИзменений, мМассивЗагруженныхДокументов);
Если ТаблицаДокументов.Количество() = 0 Тогда
Возврат ТаблицаДокументов;
КонецЕсли;
// ДатаФормирования = ТекущаяДата();
// ОбъектCML = ПолучитьОбъектДляЗаписиXML("", ДатаФормирования);
Для Каждого СтрокаТД Из ТаблицаДокументов Цикл
ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "Номер по 1С", Док.Номер);
ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "Дата по 1С", ФорматДатыДляCML(Док.Дата));
ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "ПометкаУдаления", Док.ПометкаУдаления);
ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "Проведен", Док.Проведен);
Если СтрокаТД.Оплачен ИЛИ СтрокаТД.Отгружен Тогда
Если СтрокаТД.Оплачен Тогда
ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "Номер оплаты по 1С", СтрокаТД.НомерОплаты);
ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "Дата оплаты по 1С", ФорматДатыДляCML(СтрокаТД.ДатаОплаты, Истина, Истина));
КонецЕсли;
Если СтрокаТД.Отгружен Тогда
ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "Номер отгрузки по 1С", СтрокаТД.НомерОтгрузки);
ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "Дата отгрузки по 1С", ФорматДатыДляCML(СтрокаТД.ДатаОтгрузки, Истина, Истина));
КонецЕсли;
Функция СформироватьCMLСКонтрагентами(ОбъектCML, МассивИзмененийКонтрагенты)
ОтобразитьСостояние("Поиск контрагентов для выгрузки. ");
//Процедура ПолучитьКонтрагентов описана ниже
ТаблицаДокументовКонтрагенты = ПроцедурыОбменаССайтом.ПолучитьКонтрагентов(МассивИзмененийКонтрагенты);
Если ТаблицаДокументовКонтрагенты.Количество() = 0 Тогда
Возврат ТаблицаДокументовКонтрагенты;
КонецЕсли;
// Если МассивИзменений.Количество() = 0 Тогда
// КонецЕсли;
Для Каждого СтрокаТД Из ТаблицаДокументовКонтрагенты Цикл
ЗаписатьТекстовойУзел(ОбъектCML, "Код", СтрокаТД.Код);
ЗаписатьТекстовойУзел(ОбъектCML, "Наименование", СтрокаТД.Наименование);
ЗаписатьТекстовойУзел(ОбъектCML, "ИНН", СтрокаТД.ИНН);
ЗаписатьТекстовойУзел(ОбъектCML, "ЮрФизЛицо", СтрокаТД.ЮрФизЛицоСсылка);
ЗаписатьТекстовойУзел(ОбъектCML, "Адрес", СтрокаТД.ФактАдрес);
ЗаписатьТекстовойУзел(ОбъектCML, "Телефон", СтрокаТД.Телефон);
ЗаписатьТекстовойУзел(ОбъектCML, "Емэил", СтрокаТД.Емэил);
// ДобавитьНовоеЗначениеРеквизита(ОбъектCML, "Наименование", СтрокаТД.Наименование);
ОбъектCML.ЗаписатьКонецЭлемента();
5) Идем в Общие -> Общие модули -> Процедуры обмена с сайтом, там создаем новую функцию ПолучитьКонтрагентов, по сути это наша запрос к базе для получения всех контрагентов или на основе массива изменений контрагентов
Запрос = Новый Запрос;
Запрос.Текст ;
//Я выбираю контрагентов только из раздела покупатели 1с, они имееют код 00015
Запрос.УстановитьПараметр("СсылкаНаРодитель", Справочники.Контрагенты.НайтиПоКоду("00015"));
Запрос.УстановитьПараметр("ВидФактАдрес", Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("2"));
Запрос.УстановитьПараметр("ТипТелефон", Перечисления.ТипыКонтактнойИнформации.Телефон);
Запрос.УстановитьПараметр("ВидЕмэил", Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("000000013"));
//Если в запросе присутствует массив изменений, то добавляем его в запрос
Если МассивИзмененийКонтрагенты.Количество() > 0 Тогда
Запрос.УстановитьПараметр("МассивДокументовСсылок", МассивИзмененийКонтрагенты);
Запрос.Текст = Запрос.Текст + " И Контрагенты.Ссылка В (&МассивДокументовСсылок)";
По 1с, у нас все, надеюсь ничего не забыл написать. Тут самое сложное будет написать правильный запрос, остальное в общем-то описано.
6) Переходим к битриксу. На сайте идем в папку /bitrix/admin и копируем файл 1c_exchange.php, например в корень не забыв переименовать в site_1c_exchange.php например. Тут стоит обратить внимание на такой момент, что доступ к файлу надо ограничить только для группы пользователей, данные пользователя которой вы вводите в 1с.
Далее компонент sale.export.1c копируем в собственное пространство имен, например site. В файле site_1c_exchange.php для компонента sale.export.1c укажем новое пространство имен.
7) Редактируем компонент sale.export.1c находим строки где битрикс парсит xml в массив и дописываем наш код. В XML_ID пользователя битрикса будет храниться код контрагента из 1с. Тут же возник вопрос, как быть с профилем покупателя пользователя, например при обновлении данных профиля в 1с, все изменения должны быть переданы в битрикс. Решил создать пользовательское поле в битриксе для пользователя, так его и назвал UF_USER_PROPS_ID и запретить редактирование, также создал еще одно поле UF_TEMP_PASSWORD, где писался сгенерированный после импорта в битрикс пользователя пароль, это было необходимо заказчику. Ниже код для самого компонента, который нужно дописать :
// Найти эти строчки в компоненте
$objXML = new CDataXML();
$objXML->LoadString($sResult);
$arResult = $objXML->GetArray();
// ЗДЕСЬ НАЧИНАЕТСЯ ИМПОРТ КОНТРАГЕНТОВ
//Создадим переменный для подсчета
$myContragentCount = 0;
$myContragentSuccessAdd = 0;
$myContragentSuccessUpdate = 0;
$myImportLog= '';
if(!$user->Update($arUser['ID'], $arFields))
$myImportLog .= 'Ошибка обновления пользователя: ' . $user->LAST_ERROR . "\n";
else
$myContragentSuccessUpdate++;
// Обновляем данные профиля пользователя (ИНН, Адрес . )
$db_propVals = CSaleOrderUserPropsValue::GetList(($b="SORT"), ($o="ASC"), Array("USER_PROPS_ID"=>$arUser['UF_USER_PROPS_ID']));
while ($arPropVals = $db_propVals->Fetch())
$myContragentCount++;
>
$myImportLog .= "\nСоздано пользователей в битриксе: " . $myContragentSuccessAdd;
$myImportLog .= "\nОбновлено пользователей в битриксе: " . $myContragentSuccessUpdate;
$myImportLog .= "\nВыгруженно контрагентов всего: " . $myContragentCount;
//в корне сайта нужно создать файл bitrix_1c_import_log.txt, туда будет писаться лог
file_put_contents( $_SERVER['DOCUMENT_ROOT'] . '/bitrix_1c_import_log.txt', $myImportLog);
Таким образом я подружил контрагентов из 1с и пользователей битрикс. Можно применять настройки выгружать полностью или только изменения.
Необходимо выгрузить контрагентов из 1С в Excel, причем необходимо, что бы выгрузилось с информацией (с телефонами и адресами), через Вывести список - не то, что нужно.
1) Если ли такая обработка, что красиво в список выводилось?
2) Возможно ли выгружать контрагентов по папкам (то есть определенную группу)?
(3)Накидал немного. Выбираешь тип и вид контактной информации и отбор если нужен. Жмешь кнопку выборка и таблица заполняется если все устраивает, копируешь в эксель и раскрашиваешь как надо. Если отпишешься что значит "красиво", то доделаем с выводом в файл:) выдает пока первые 10 :)
1. Нет готовой, надо писать. Но, если Вы точно изложили, она простая и пишется быстро, надо только знать характеристики Вашей конфигурации и раскрыть Ваше понимание красивого списка.
2. Да, можно сделать различные виды отборов для вывода в список, в т.ч.отбор по группе.
(5) artems, странный ответ на вопрос- для этого не нужно ничего особенного, хватит штатного. (5) artems,
Необходимо выгрузить контрагентов из 1С в Excel, причем необходимо, что бы выгрузилось с информацией (с телефонами и адресами), через Вывести список - не то, что нужно.
1) Если ли такая обработка, что красиво в список выводилось?
2) Возможно ли выгружать контрагентов по папкам (то есть определенную группу)?
С помощью штатного универсального отчета можно сформировать любой список со своими колонками и отборами, а оттуда уже перенести все в Excel. Делов на 10 минут.
Отчеты - Прочие - Универсальный отчет.
И не надо мучаться писать какие то обработки.
(8) Brovin, если допустить, что автор не в курсе того, что есть такой отчет то, возможно, именно этого ему и достаточно будет. С другой стороны, в любой конфигурации один универсальный отчет и много-много других. О чем это свидетельствует? О том самом - об "универсальности" универсального отчета.
Автор, откликнитесь, всем интересно знать, универсальный отчет Вас действительно не устраивает или Вы просто его еще не открыли для себя до сегодняшнего дня?
(12) объясни мне пож-та как ты выведешь к примеру не Юр. адрес, а физический или добавленный тобой адрес доставки?:) Вопрос снят. видимо автора все устраивает :)
(14) Artemka20121, может быть не правильно выразился: не "поинтересней", а "то, что надо". Там именно то, что мне необходимо было в данный момент)
Доброго дня!
Тоже столкнулся с такой проблемой. Специалист в отпуске, а коллегам надо раздать список клиентов с телефонами.
Прикрепленные в данной теме файлы - не помогают, не открываются.
Версия 1С в прикр. файле.
Отчёт Контрагенты +Адреса, Телефоны, Факс, EMail.erf - отчёт выгружает данные по Контрагентам. Поля: Наименование, Полное наименование, Код, ИНН, КПП, Поставщик, Покупатель, Вид контрагента, Юридический адрес, Фактический адрес, Адрес доставки, Телефоны, Электронная почта, Группа (Папка), Комментарий (Рисунок № 2)
Отчёт по Договорам Контрагентов.erf - отчёт выгружает данные по Договорам контрагентов. Поля: Наименование, Наименование для печати, Валюта, Организация, Номер, Дата, Контрагент, Код Контрагента, Партнер, Наименование для печати, НДС, Дата начала действия, Допустимая сумма дебиторской задолженности, Статья движения денежных средств, Комментарий, Дата окончания, Вид агентского договора. (Рисунок № 3)
Отчёт Банковские счета.erf - отчёт выгружает данные по Банковским счетам контрагентов. Поля: Наименование, Код, Номер счета, БИК банка, Банк, Банк для расчетов, Валюта денежных средств, Вид счета, Дата закрытия, Дата открытия, Месяц прописью, Номер и дата разрешения. Пометка на удаление, Сумма без копеек, Текс корреспондента, Текс назначения, Корреспондентский счет, Город, Адрес, Телефон, Контрагент, Код контрагента. (Рисунок № 4)
Обработки для УТ 11.4 или ЕРП 2
Загрузка Контрагентов Партнеров Из Эксель (версия 6).epf - обработка, загружает справочник Контрагентов, Партнеров, справочник Договоры контрагентов, справочник Банковские счета (Рисунок № 1)
Поля, по которым происходит синхронизация при загрузке:
Поиск Контрагента и Партнера, происходит сначала по "Коду" из старой 1С, который записывается в Комментарий, а если НЕ находит, то ищёт по "Наименованию".
Повторная загрузка элемента Справочника, не создаст двойников, так как перед загрузкой идёт поиск в новой базе 1С, этого элемента Справочника и если НЕ находит, то создаёт.
Все поля, которые загружаются в Справочники указаны на Рисунке № 1.
Тестировалось на платформах:
Платформа: 1С:Предприятие 8.3 (8.3.10.2580)
Платформа: 1С:Предприятие 8.3 (8.3.12.1412)
Тестировалось на релизах:
Отчёты по выгрузке
Управление производственным предприятием, редакция 1.3 (1.3.127.1)
Бухгалтерия предприятия (базовая), редакция 2.0 (2.0.57.8)
1С Управление торговлей, редакция 10.3 (10.3.6.8) Обычное приложение (Толстый клиент)
1С Управление торговлей, редакция 10.3 (10.3.7.8) Обычное приложение (Толстый клиент)
1С Управление торговлей, редакция 10.3 (10.3.34.2) Обычное приложение (Толстый клиент)
1С Управление торговлей, редакция 10.3 (10.3.36.1) Обычное приложение (Толстый клиент)
1С Управление торговлей, редакция 10.3 (10.3.45.2) Обычное приложение (Толстый клиент)
1С Управление торговлей, редакция 10.3 (10.3.52.1) Обычное приложение (Толстый клиент)
Может быть и на других Конфигурациях 1С будут работать эти Отчёты по Выгрузке -> пишите в Службу поддержки я отвечу
Обработка по загрузке:
1С:ERP Управление предприятием 2 (2.4.6.230)
1С Управление торговлей, редакция 11.2 (11.2.3.124) Управляемое приложение (Тонкий клиент)
1С Управление торговлей, редакция 11.3 (11.3.4.93) Управляемое приложение (Тонкий клиент)
1С Управление торговлей, редакция 11.4 (11.4.2.139) Управляемое приложение (Тонкий клиент)
1С Управление торговлей, редакция 11.4 (11.4.3.172) Управляемое приложение (Тонкий клиент)
1С Управление торговлей, редакция 11.4 (11.4.5.86) Управляемое приложение (Тонкий клиент)
1С Управление торговлей, редакция 11.4 (11.4.8.73) Управляемое приложение (Тонкий клиент)
1С Управление торговлей, редакция 11.4 (11.4.11.100)
Может быть и на других Конфигурациях 1С будут работать моя обработка по загрузке -> пишите в Службу поддержки я отвечу.
Данная обработка работает на:
Операционная система: Microsoft Windows 95, 98, ХР, NT, 2000, 7, 8, 10
Программный код полностью открыт и после получения можно его редактировать
Обновления предвидятся, если любой из пользователей данного ПО выдвинет новые предложения по улучшению данного ПО или найдёт ошибки. Обновления будут разосланы всем покупателям этого ПО.
Техническая поддержка предоставляется покупателю с момента фактического получения им прав на использование ПО.
Бесплатная техническая поддержка на срок: 30 календарных дней, после покупки данного ПО
Дальнейшая платная техническая поддержка: 500 рублей за обращения, сроком на 1 год.
Гарантия возврата денег
ООО "Инфостарт" гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.
Программа настолько проверена в работе, что мы с полной уверенностью можем дать такую гарантию. Мы хотим, чтобы все наши покупатели оставались довольны покупкой.
Для начала начнем с изменения формы, перейдем в НСИ и администрирование – Контрагенты(партнеры):
Далее нажимаем кнопку Ещё – Изменить форму:
В открывшемся окне раскрываем Список:
Ставим курсор на и нажимаем Добавить поля:
В открывшемся окне выбираем параметры, которые мы хотим дополнительно вывести в список, в нашем случае мы выведем телефон и электронную почту:
В списке это будет отображаться так:
После того, как мы нажали ОК, мы видим, что в списке контрагентов(партнеров) добавились новые колонки:
Далее по необходимости мы можем выгрузить данный список, для этого нажимаем Ещё – Вывести список:
Выбираем в каком формате выводить, в нашем случае будет табличный документ. Также, устанавливаем галки на нужных колонках:
Нажимаем ОК.
У нас вывелся список всех контрагентов с нужной нам информацией:
Теперь сохраним наш файл, нажимаем на три точки в верхнем правом углу, далее выбираем Файл – Сохранить как:
Для обмена электронными документами существует сервис 1С-ЭДО, используя который вам не понадобиться выгружать документы для отправки из базы, так как функционал обмена встроен в базу 1С.
Обращаем ваше внимание, многие поставщики программ для электронного документооборота предоставляют специальные обработки для выгрузки данных из 1С. Для получения обратитесь в техподдержку вашего ЭДО.
Вы можете воспользоваться данной инструкцией для выгрузки электронного документа, но результат загрузки в сторонние сервисы нами не гарантируется.
Для того, чтобы выгрузить документ в электронном формате для электронного документооборота, зайдите в нужный документ, кнопка Еще – ЭДО – Выгрузить документ в файл.
В открывшемся окне выбираете вариант На диск - Выполнить
Выбираете куда на диск сохраниться файл в формате XML. Если вы сохраняете на ваш облачный диск W, то выбирайте папку Общее, в которую вы сами можете добавлять папки и данные.
Файл сохранен и заархивирован.
Важно! Таким образом при выгрузке реализаций с НДС будет выгружен документ в формате xml, вне зависимости от активности переключателя УПД в нижней части формы документа Реализация.
Если вы будете выгружать описанным способом электронный документ из документа Счет-фактура, то выгружен будет не УПД в формате xml, а счет-фактура в формате xml.
Читайте также: