Обмен с 1С  

  RSS

akimov_aleks
(@akimov_aleks)
Сержант
Присоединился: 1 год назад
Сообщения: 10
11.01.2018 19:55  

Всем привет.

Итак начнем совместно с разработчиками осуществлять  обмен с 1с 

для обмена настроим программу в режиме сервер версия 3 , укажем все папочки для обмена и галочки согласно инструкции дом/офис

у нас появиться папочка Delta_v3/нашь ID 

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

структура для создания категории  

<newGroup>
<name>катекория</name>
<id_parent>-1</id_parent>
<goodsType>0</goodsType>
<units>
</units>
<digits>0</digits>
<maxDiscount>100.0</maxDiscount>
<needComment>False</needComment>
<taxType>1</taxType>
<nonFiscal>False</nonFiscal>
</newGroup>

структура для создания товара

<newGood>
<name>товар</name>
<barcode>2052670013023</barcode>
<groupId>1</groupId>
<price>50.0</price>
<price1>0.0</price1>
<price2>0.0</price2>
<price3>0.0</price3>
<priceC>0.0</priceC>
<ext1>
</ext1>
<ext2>
</ext2>
<ext3>
</ext3>
<ext4>
</ext4>
<ext5>
</ext5>
<stock>0.0</stock>
<minStock>0.0</minStock>
<comment>
</comment>
</newGood>

теперь просим вас доработать протокол Delta_v3
на проверку полей <name>товар</name> и <barcode>2052670013023</barcode> если они есть в базе на сервере то надо обновить только цену.


Нравится Никита
Цитата
Юрий
(@freezer)
Ведущий разработчик Admin
Присоединился: 6 лет назад
Сообщения: 212
11.01.2018 21:37  

@akimov_aleks Вы, боюсь, перепутали все возможные варианты обмена в программе. 

Итак начнем совместно с разработчиками осуществлять  обмен с 1с 

Весь процесс обмена с 1С описан в базе знаний, в статье.  По данной схеме с 1С работает уже несколько десятков организаций, использующих свои обработки для 1С. 

для обмена настроим программу в режиме сервер версия 3 , укажем все папочки для обмена и галочки согласно инструкции дом/офис

у нас появиться папочка Delta_v3/нашь ID

Протокол версии 3 работы в локальной сети никаким образом не относится к обмену с дом\офис. То, что папка Delta имеет префикс v3 - всего лишь совпадение. Это совершенно разные вещи. 

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

структура для создания категории  

Действительно, файлы управления из дом\офис используют формат XML, но мы не публикуем документацию по данной схеме обмена и она не должна использовать для других целей. Например, в одной из последних бета-версий мы вносили изменения в данный протокол обмена (v3-это уже не первое изменение и для этого и создаются разные папки), который сделает описанную структуру несовместимой. А вот по обмену с 1С внезапные изменения не планируются и постоянно дополняется документация, если вносятся какие-то изменения. 

теперь просим вас доработать протокол Delta_v3
на проверку полей <name>товар</name> и <barcode>2052670013023</barcode> если они есть в базе на сервере то надо обновить только цену.

Повторюсь - обмен с 1С не подразумевает использование протокола обмена с Дом\офис. Дом\офис знает идентификаторы товаров и отправляет их, чтобы изменения вносились именно в тот товар, который Вы редактируете. 

Обмен с 1С подразумевает, что 1С выгружает ВЕСЬ каталог товаров с внутренним идентификатором UID, который и отвечает за уникальность и позволяет 1С принимать изменения от GBS.Market, когда выгружаются данные о продажах. 

Если у Вас есть программист, который обслуживает 1С, пусть он напишет здесь или нам на [email protected], мы расскажем что и как работает, чтобы он смог подготовить для Вас обработку. 


ОтветитьЦитата
akimov_aleks
(@akimov_aleks)
Сержант
Присоединился: 1 год назад
Сообщения: 10
11.01.2018 22:07  

Юрий спасибо за разъяснения. 56 раз перечитал <a href=" удаленная ссылка " target="true">обмен  и начел понимать суть. для меня все это время не было понятно good_id и good_uid 

теперь все становиться яснее . я это время все пытался оперировать наименованием а оказалось все проще good_id и good_uid это два основны что нужно для обмена. просто в 1с в номенклатуре завести good_uid — УИД товара и все.  я мучился с начало в excel потом обработка а можно и правильнее как написано в статье.  если у кого есть наработки по обмену выкладывайте хоть и корявые как у меня но другим будет проще. 

Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт

Услуги = Объект[ИмяТабличнойЧасти];

// форма= ЭтотОбъект.ПолучитьФорму("Форма",Объект);

Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.ПолноеИмяФайла = ""; Фильтр = "Текст, *.*|*.*";
ДиалогОткрытия.Фильтр = Фильтр;
ДиалогОткрытия.МножественныйВыбор = Истина;
ДиалогОткрытия.Заголовок = "Выберите файлы";
Если ДиалогОткрытия.Выбрать() Тогда
МассивВыбранныхФайлов = ДиалогОткрытия.ВыбранныеФайлы;
Для Каждого ИмяВыбранногоФайла Из МассивВыбранныхФайлов Цикл
Сообщить("фаилпо лучен");
КонецЦикла;
Иначе Предупреждение("Нет выбранных файлов!");
КонецЕсли;
//подключаемся к эксель
Попытка
Excel = Новый COMОбъект(" удаленная ссылка ");
удаленная ссылка (ИмяВыбранногоФайла);
Состояние("Обработка файла Microsoft удаленная ссылка ");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

Попытка
//Открываем необходимый лист
удаленная ссылка (1).Select(); // лист 1, по умолчанию
Исключение
//Закрываем Excel
удаленная ссылка ();
Excel = 0;
Сообщить("Файл "+Строка(ИмяВыбранногоФайла)+" не соответствует необходимому формату! Первый лист не найден!");
ОтменитьТранзакцию();
Возврат;
КонецПопытки;

//Получим количество строк и колонок.
//В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
Версия = Лев( удаленная ссылка ,Найти( удаленная ссылка ,".")-1);
Если Версия = "8" тогда
ФайлСтрок = удаленная ссылка ;
ФайлКолонок = Макс( удаленная ссылка , 13);
Иначе
ФайлСтрок = удаленная ссылка (1,1).SpecialCells(11).Row;
ФайлКолонок = удаленная ссылка (1,1).SpecialCells(11).Column;
Конецесли;


Для НС = 1 по ФайлСтрок Цикл
НоменкК = удаленная ссылка (НС, 1).Text;
НоменкП = удаленная ссылка (НС, 2).Text;
Цена = удаленная ссылка (НС, 3).Text;
Кол = удаленная ссылка (НС, 4).Text;
Раб = удаленная ссылка (НС, 5).Text;
Сумма = удаленная ссылка (НС, 6).Text;
вид = удаленная ссылка (НС, 7).Text;

// делаем проверку на услуга или товар

Если вид = "Услуги" Тогда
строка= Объект.Услуги.Добавить();
строка.Номенклатура =Справочники.Номенклатура.НайтиПоНаименованию(НоменкК);
строка.Содержание = НоменкП;
строка.Цена = Цена;
строка.Количество = Строка(Кол);
строка.Работник =Справочники.ФизическиеЛица.НайтиПоНаименованию(Раб);
строка.Сумма = Строка(Сумма);
Иначе
Если НоменкК <> "Товар на листке" Тогда
строка= Объект.Товары.Добавить();
строка.Номенклатура =Справочники.Номенклатура.НайтиПоНаименованию(НоменкК);
строка.Цена = Цена;
строка.Количество = Строка(Кол);
строка.Работник =Справочники.ФизическиеЛица.НайтиПоНаименованию(Раб);
строка.Сумма = Строка(Сумма);
строка.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
КонецЕсли;
КонецЕсли;

КонецЦикла;

КонецПроцедуры



ОтветитьЦитата
Юрий
(@freezer)
Ведущий разработчик Admin
Присоединился: 6 лет назад
Сообщения: 212
11.01.2018 23:20  

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

оказалось все проще good_id и good_uid это два основны что нужно для обмена. просто в 1с в номенклатуре завести good_uid — УИД товара и все.

Да, все проще, чем Вы думали) К сожалению, по 1С я не силен, но насколько понимаю, УИД есть у каждой записи в любой таблице (товары, группы, клиенты) в 1С. Вообще любая база использует свои идентификаторы - мы используем целочисленные значения: 0,1,2...1500 и т.п. в 1С используется GUID ( https://ru.wikipedia.org/wiki/GUID), который в некоторых случаях разумнее использовать. Но в любом случае каждая запись в таблице имеет свой уникальный идентификатор и именно по нему происходит распознавание той или ной записи. 

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


ОтветитьЦитата
akimov_aleks
(@akimov_aleks)
Сержант
Присоединился: 1 год назад
Сообщения: 10
12.01.2018 22:44  

Накидал примерчик для обмена. про тестировал все работает обмен идет  как сделаю полную обработку выложу для всех.

 


Функция ШтрихКодВыбрать (Наименование);
Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
| Штрихкоды.Штрихкод
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец.Наименование = &Наименование";

Запрос.УстановитьПараметр("Наименование",Наименование);
Результат = Запрос.Выполнить().Выбрать();

Если Результат.Следующий() Тогда
ШТ =Результат.Штрихкод;
КонецЕсли;

Возврат ШТ;


КонецФункции

 

Процедура ШтрихкодНажатие(Элемент)
Запись=Новый ЗаписьXML;
Запись.ОткрытьФайл("c:\1\catalog.xml");
Запись.ЗаписатьОбъявлениеXML();
СправНом = Справочники.Номенклатура.Выбрать();
Штриш = РегистрыСведений.Штрихкоды.Выбрать();

Запись.ЗаписатьНачалоЭлемента("goods");
// начало записи

Пока СправНом.Следующий() Цикл
// получения всякой Х
наимен = СправНом.Наименование;
штр = ШтрихКодВыбрать(наимен);
цен = ЦенаРоз(наимен);
// получения всякой Х


Запись.ЗаписатьНачалоЭлемента("good");

Запись.ЗаписатьНачалоЭлемента("uid");
Запись.ЗаписатьТекст(СправНом.Код);
Запись.ЗаписатьКонецЭлемента();

Запись.ЗаписатьНачалоЭлемента("name");
Запись.ЗаписатьТекст(СправНом.Наименование);
Запись.ЗаписатьКонецЭлемента();


Запись.ЗаписатьНачалоЭлемента("barcode");
Запись.ЗаписатьТекст(Строка(штр));
Запись.ЗаписатьКонецЭлемента();

Запись.ЗаписатьНачалоЭлемента("group_uid");
Запись.ЗаписатьТекст(СправНом.Родитель.Код);
Запись.ЗаписатьКонецЭлемента();

Запись.ЗаписатьНачалоЭлемента("group_name");
Запись.ЗаписатьТекст(СправНом.Родитель.Наименование);
Запись.ЗаписатьКонецЭлемента();

Запись.ЗаписатьНачалоЭлемента("stock");
Запись.ЗаписатьТекст("100");
Запись.ЗаписатьКонецЭлемента();

Запись.ЗаписатьНачалоЭлемента("price");
Запись.ЗаписатьТекст(Строка(цен));
Запись.ЗаписатьКонецЭлемента();

Запись.ЗаписатьКонецЭлемента();
КонецЦикла;

Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();


КонецПроцедуры


Функция ЦенаРоз(Наименование);
Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатуры.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
| ЦеныНоменклатуры.Номенклатура.Наименование = &Наименование
| И ЦеныНоменклатуры.ТипЦен.Наименование = &Розничная";
Запрос.УстановитьПараметр("Наименование",Наименование);
Запрос.УстановитьПараметр("Розничная","Розничная");

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

Если Результат.Следующий() Тогда
ЦенаР =Результат.Цена;
Сообщить(ЦенаР);
КонецЕсли;
Сообщить("ЦенаР");
Возврат ЦенаР;

 



КонецФункции



ОтветитьЦитата
akimov_aleks
(@akimov_aleks)
Сержант
Присоединился: 1 год назад
Сообщения: 10
12.01.2018 23:03  

Разработчики в инструкции  Ветка продажи (sales) я не нашел описания категории есть ли возможность ее добавить. 

а то в 1с у меня есть и товар и услуги .

 


ОтветитьЦитата
Юрий
(@freezer)
Ведущий разработчик Admin
Присоединился: 6 лет назад
Сообщения: 212
12.01.2018 23:32  
От: akimov_aleks

Разработчики в инструкции  Ветка продажи (sales) я не нашел описания категории есть ли возможность ее добавить. 

а то в 1с у меня есть и товар и услуги .

В ветке sales для каждой проданной позиции указан good_uid, который был выгружен из 1С. Именно по этому значению Вы в 1С сможете понять что это за товар.  Наверно Вы заметил, что в sales нет названий товаров и других параметров, т.к. все они определяются именно по good_uid. 


ОтветитьЦитата
akimov_aleks
(@akimov_aleks)
Сержант
Присоединился: 1 год назад
Сообщения: 10
13.01.2018 07:49  

Юрий я понял про good_uid но тогда в 1с надо писать дополнительную проверку принадлежность к категории. веть там есть как товар так и услуги. спасибо за ответ


ОтветитьЦитата
Юрий
(@freezer)
Ведущий разработчик Admin
Присоединился: 6 лет назад
Сообщения: 212
13.01.2018 15:22  
От: akimov_aleks

Юрий я понял про good_uid но тогда в 1с надо писать дополнительную проверку принадлежность к категории. веть там есть как товар так и услуги. спасибо за ответ

Например, внутри нашей программы происходит аналогично - мы фиксируем в журнале продаж только ИД товара, без указания категории. Ведь например, категорию можно сменить после продажи, также как и другие параметры товара (но фиксируется ИД товара, цена продажи, кол-во и скидка). Естественно, уже на стороне 1С необходимо проверять, что это за товар и уже выполнять определенные действия (списывать остаток для товаров и не списывать для услуг).

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


ОтветитьЦитата
Поделиться:
Служба поддержки
Группа Вконтакте
Заказать обратный звонок
Написать на электронную почту
  
Работает

Пожалуйста, Вход или Зарегистрироваться