[ОТВЕТИТЬ]
15.09.2010 17:45
duxovniy
 
Уже 4 дня и ночи не могу понять, как и куда вставить данные, чтобы получить нужный XML для приема почтовика СМ. Вроде все не так сложно. Но в практике не получается:
1. Получил схему например: классификатор поставщиков. RFSACARDCLASS.XSD (в версии SUPERMAG 1.027.2 даже есть редактор этих схем)
2. В экселе источник ставлю эту карту и сопоставляю с нужными мне данными.
3. Вроверка карты на экспорт ругается: (Невозможно сохранить отношения сопоставленного элемента с другими элементами)
- тоже самое выходит при использование (урезанной xml редактором СМ) RFSACARDCLASS.XSD
- то что в этих XSD есть обязательные поля тоже соображаю
Помогите, кто пользовался этими схемами? как ...?
16.09.2010 07:29
OlegON
 
Не совсем понятен вопрос.
XML почтовика достаточно древний и косяков в нем море, если рулить им другими программами. Это так. Я тоже спотыкался, когда его кому-то скармливал. Об этом вопрос был? Или что есть упор выкинуть из него по максимуму? Тоже плохая идея. Проще фильтровать на принимающей стороне. Делал давно, но всегда схемы редактировал в FAR :) Попробуй последовательным выкидыванием выявить элемент, на который начинает ругаться.
17.09.2010 02:47
duxovniy
 
с почтовым модулем у меня свои счеты. как только добьюсь нужных результатов опишу. но импортировал данные в базу через обыкновенный access (ODBS) при нормальной настройки таблиц под см можно просто copy-paste. если кому интересно могу описать подробно.
и прошу нашего многоуважаемого Админа пожалуйста, откройте мне чуть-чуть доступ к скачивание маленьких но очень полезных утилит из форума.

OlegON: Прошу не флудить и еще раз перечитать условия, при которых появляется доступ. Вручную не выдаю. А наказание за выпрашивание файлов сурово :)
13.07.2011 15:43
CrazyWolf
 
В связи с проставлением большого количества скидок возникает вопрос, как правильно модифицировать схемы для почтового модуля. Сначала я пробовал грузить только в таблицу скидок по схеме
Код:
<?xml version="1.0" encoding="windows-1251"?>
<xs:schema id="SQCD" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<!--Скидки номенклатуры-->
<xs:element name="SQCD" msdata:IsDataSet="true" msdata:CaseSensitive="true" msdata:Locale="ru">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="SMDISCQUANTITY" msdata:Locale="ru">
<xs:complexType>
<xs:sequence>
<xs:element name="ARTICLE" type="xs:string" />
<xs:element name="PRICEID" type="xs:decimal" />
<xs:element name="QUANTITY" type="xs:decimal" />
<xs:element name="PERCENT" type="xs:decimal" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="SMCDISCQUANT_PK" msdata:PrimaryKey="true">
<xs:selector xpath=".//SMDISCQUANTITY" />
<xs:field xpath="ARTICLE" />
<xs:field xpath="PRICEID" />
<xs:field xpath="QUANTITY" />
</xs:unique>
</xs:element>
</xs:schema>
Получил отлуп в виде
Код:
<ERROR>Несоответствие первичных ключей таблицы SMDISCQUANTITY в базе данных и xml-схеме почтового объекта SQCD.</ERROR>
Затем попытался использовать модифицированную схему CD выкинув из нее ненужные таблицы связки (оставив только SMDISCQUANTITY) т описание первичных ключей. Осталась та же ошибка. Как правильно можно сделать?
13.07.2011 15:46
Mtirt
 
Давайте сначала определимся что есть сейчас и чего хочется добиться...
Причем просто исходя от объектов, забудем про почтовый модуль.
13.07.2011 15:50
CrazyWolf
 
Цитата:
Mtirt Давайте сначала определимся что есть сейчас и чего хочется добиться...
Причем просто исходя от объектов, забудем про почтовый модуль.
Хочется добится автоматического заполнения таблицы SMDISCQUANTITY (количественные ссылки) извне.
В данный момент СМ+ 1.27.4 работает в связке с самописной конфигурацией 1с которая и будет генерировать данные для скидок.
13.07.2011 15:52
Mtirt
 
Так и заполняйте её напрямую из 1с.
Почтовик то вам здесь зачем нужен?
13.07.2011 15:55
CrazyWolf
 
Цитата:
Mtirt Так и заполняйте её напрямую из 1с.
Почтовик то вам здесь зачем нужен?
В смысле инсертить прямо в таблицу?
Вроде как (я недавн имею дело с СМ+) мне сказали что делать что - либо с базой кроме селектов не есть хорошо?
13.07.2011 15:58
Mtirt
 
Тогда придется заполнять всё, что есть в схеме про скидки...
13.07.2011 16:01
CrazyWolf
 
Цитата:
Mtirt Тогда придется заполнять всё, что есть в схеме про скидки...
Спасибо за ответы, если не затруднит еще вопрос.
Получается что урезать имеющиеся и создавать свои собсвенне схемы не получится? Т.е. изменить как в данном случае одну конкретную таблицу невозможно?
13.07.2011 16:03
Mtirt
 
Урезать существующие иногда получается. Только делать это надо грамотно...
Создавать свои собственные - вот это, я думаю может быть проблематично.
13.07.2011 16:15
CrazyWolf
 
Цитата:
Mtirt Урезать существующие иногда получается. Только делать это надо грамотно...
Создавать свои собственные - вот это, я думаю может быть проблематично.
А при урезании как правильно описывать ключи? Т.е. к примеру, берем схему CD оставляем в ней только
Код:
<xs:element name="SMCARD" msdata:Locale="ru">
причем поля я оставлял только те которые выгружал в XML сам СМ+,
потом оставляем
Код:
<xs:element name="SMDISCQUANTITY" msdata:Locale="ru">
Далее идут секции ключевых полей. Я выкидываю из них все те, которые не относятся к SMCARD и SMDISCQUANTITY. В результате получаю ошибку о несоответствии первичных ключей. Можно ли как-нибудь получить более подробную информацию, что именно чему не соответствует?
Пробовал включать журнализацию - там ничего толкового не пишется :(
13.07.2011 16:33
Mtirt
 
Между прочим PriceID тоже ключевое поле для SMDISCQUANTITY.
Там составной первичный ключ по артикулу и виду цены...
Если ты его выкинул, то запись точно не добавится...
13.07.2011 18:03
CrazyWolf
 
PRICEID из SMDISCQUANTITY в стандартной схеме CD упоминается только в составе. Это описание я оставляю. Других ссылок на него нет, тем не менее CD нормально грузится.
Код:
<xs:unique name="SMDISCQUANTITY_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
<xs:selector xpath=".//SMDISCQUANTITY" />
<xs:field xpath="ARTICLE" />
<xs:field xpath="PRICEID" />
<xs:field xpath="QUANTITY" />
</xs:unique>
14.07.2011 07:22
Mtirt
 
Можешь приложить какую-нибудь небольшую xml-ку, чтобы я посмотрела?
Мне очень сложно понять, чего ты хочешь и зачем...
14.07.2011 07:37
CrazyWolf
 
Да вопрос с ключами, в общем, решился с помощью ТП, но несколько странным образом.
Получается следующее если мы стандартную схему CD урезаем до
Код:
<?xml version="1.0" encoding="windows-1251"?>
<xs:schema id="CD" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <!--Карточка складского учета-->
  <xs:element name="CD" msdata:IsDataSet="true" msdata:CaseSensitive="true" msdata:Locale="ru">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="SMCARD" msdata:Locale="ru">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ARTICLE" type="xs:string" />
              <xs:element name="GLOBALARTICLE" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="SMDISCQUANTITY" msdata:Locale="ru">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ARTICLE" type="xs:string" />
              <xs:element name="PRICEID" type="xs:decimal" />
              <xs:element name="QUANTITY" type="xs:decimal" />
              <xs:element name="PERCENT" type="xs:decimal" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//SMCARD" />
      <xs:field xpath="ARTICLE" />
    </xs:unique>
    <xs:unique name="SMDISCQUANTITY_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
      <xs:selector xpath=".//SMDISCQUANTITY" />
      <xs:field xpath="ARTICLE" />
      <xs:field xpath="PRICEID" />
      <xs:field xpath="QUANTITY" />
    </xs:unique>
  </xs:element>
</xs:schema>
все прекрасно грузиться, прописываются количественные скидки, остальные данные не затираются. Но при попытке переименовать схему, скажем в DS, получаем снова ошибку про несоответствие ключей.
При попытке переименовать схему скажем в CDD почтовик рапортует, что все в порядке, однако скидки не грузятся
14.07.2011 07:47
OlegON
 
У меня такое подозрение, что там просто конвертация табличек, поэтому для того, чтобы нормально этим оперировать, надо как следует знать структуру, в том числе ключи и NOT NULL столбцы без значений по умолчанию. А после того, как становится понятной структура, уже снимается необходимость делать внесения записей через почтовик, можно заморачиваться только если внешняя система уже заточена под XML именно этого формата. Я в свое время поизучал эту тему и признал ее невыгодной для себя по соотношению времени и результата. Единственное исключение составляют документы, изменяющие статус. Поскольку действующих версий Супермага достаточно много, писать что-то универсальное, с загрузкой уже проведенных документов, накладно. Тут действительно стоит загружать через почтовик. А карточки однозначно надо грузить напрямую, получая бонус в виде возможности самостоятельно обрабатывать ошибки внесения записей. Уверенности в том, что почтовик обработает абсолютно все XML корректно нет, разгребать помои в его логе не очень удобно, в общем, только для доков, меняющих статус... Это мое мнение.
14.07.2011 07:51
Mtirt
 
Тут вопрос то вообще не в карточках, а в скидках по ним.
Правда, насколько я понимаю, их еще потом по магазинам рассылать надо будет...
14.07.2011 08:14
Mtirt
 
Цитата:
CrazyWolf Но при попытке переименовать схему, скажем в DS, получаем снова ошибку про несоответствие ключей.
При попытке переименовать схему скажем в CDD почтовик рапортует, что все в порядке, однако скидки не грузятся
А зачем тебе нужно её переименовывать?
14.07.2011 08:15
OlegON
 
Цитата:
Mtirt Тут вопрос то вообще не в карточках, а в скидках по ним.
Я заметил. И за учетом многообразия того, что можно внести руками, выделил только то, что действительно нежелательно. Скидки бы тоже руками в ЦО вносил, наверное.
14.07.2011 08:18
Mtirt
 
Цитата:
OlegON Я заметил. И за учетом многообразия того, что можно внести руками, выделил только то, что действительно нежелательно. Скидки бы тоже руками в ЦО вносил, наверное.
Там интерфейс реально неудобный. Надо вносить данные по каждому товару, по каждому виду цен. Если карточек много - это очень муторное занятие :(
14.07.2011 08:42
CrazyWolf
 
Цитата:
Mtirt А зачем тебе нужно её переименовывать?
Ну я думаю некошерно стандартную схему убивать.
14.07.2011 08:49
Mtirt
 
А она тебе для чего нужна то? Стандартная?
У меня есть подозрения, что Супермаг по имени схемы определяет, какие объекты надо выгружать :(
14.07.2011 09:00
CrazyWolf
 
Ну, по идее, так оно и есть, схема определяет структуру объекта для загрузки/выгрузки (как оно в реальность знают только разработчики). Судя по всему СМ+ парсер ориентируется на двухбуквенные коды справочников и документов.
14.07.2011 09:36
OlegON
 
Цитата:
Mtirt Там интерфейс реально неудобный. Надо вносить данные по каждому товару, по каждому виду цен. Если карточек много - это очень муторное занятие :(
А, нет, нет, я "руками" называю то, что я руками делаю, то есть, через скрипты.
А по поводу двубуквенного кода, то вы не промахнулись, посмотрите табличку SSDOCTYPES. Кроме этих кодов никаких других не пропихнете, да и тут не все вам подойдут.
14.07.2011 09:47
Mtirt
 
Передаются то не только документы, но и справочники...
Так что таблица скорее ssobjecttypes.
27.07.2011 10:58
CrazyWolf
 
Приветствую:)
Еще такая проблема возникла. Необходимо модифицировать автозаказы после создания, алгоритм получения нового количества действует во внешнем приложении, после чего формирует пакет почтовику с новыми цифрами заказа. Пакет успешно отбривается почтовиком с руганью на BORNIN. Пытался подставлять его как
Код:
RAWTOHEX(bornin)
но значения явно разные, такое ощущение что почтовик ждет некое стринговое представление BORNINa, да и при выгрузке пакета он выглядит иначе
Код:
пример из XML - DWV0jFjCSq6XrGTwq8bT+A==
из RAWTOHEX  - 0D65748C58C24AAE97AC64F0ABC6D3F8
Как правильно получать нужный BORIN?
27.07.2011 12:59
vdm
 
Ругается почтовик или триггер SMDocumentsBornIn ?

Сделай так
Код:
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.Base64_ENCODE(Core.GetDbId))
Можно просто
Код:
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.Base64_ENCODE('0'))
тогда будет грузиться в любую БД (если в последних версиях код SMDocumentsBornIn не меняли).
27.07.2011 13:13
CrazyWolf
 
vdm
Да ругался именно на триггер, спасиба за рецепт!!
использовал
Код:
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.Base64_ENCODE(Core.GetDbId))
27.07.2011 15:27
CrazyWolf
 
Еще такой вопрос по почтовому модулю возникает. Частенько при приеме пакета возникает ошибка
Код:
В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL.
Сталкивался ли кто-нибудь с ней, и, если да, то как лечили?


Опции темы


Часовой пояс GMT +3, время: 15:12.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.