Сбой при импорте услуг из 1C в Террасофт

И снова здравствуйте.

Уже пару дней сражаюсь с проблемой импорта услуг (они же - номенклатуры в 1С) между базами. Совершенно тривиальная синхронизация - Я переношу услуги по их названию, и в интеграции указано тупо:

1С - НаименованиеПолное из справочника Номенклатуры
Террасофт - Услуга (OfferingName) из набора данных Услуги

Спотыкается при попытке отфильтровать (то есть, использовать ApplyDatasetFilter) на поле OfferingNameS1CF (S1CF он добавляет в процессе). Я так понимаю, это баг Террасофта? Есть ли лечение?

Запрос Select1C выдаёт правильные результаты и я могу добавлять их данные программно, но очевидно, что это усложнит поддержку в дальнейшем и хочется всё сделать красиво.

Нравится

5 комментариев

Максим, у Вас что поле OfferingName ключевое? Это "плохая" практика :) Проще всего избавиться от этого поля как ключевого - есть ведь UID1C и Object1C.
А вообще сталкивался с таким 2 раза: первый раз помогло следующее:
открыть маппинг этого поля и нажать "ОК", затем открыть настройку самой сущности и также нажать "ОК".
Второй раз это не помогло - создал фильтр вручную в sq (благо он всегда и точно всегда создается с таким именем).

> Максим, у Вас что поле OfferingName ключевое?

Да, поле ключевое.

> Это "плохая" практика :) Проще всего избавиться от этого поля как ключевого - есть ведь UID1C и Object1C.

Интересно. То есть, лучше добавить несколько десятков дубликатов, но с "правильными" UID1C и Object1C, чем привязаться к названию услуги? Я не понимаю, в чём минус такой практики, тут хотелось бы поподробнее.

Насчёт sq фильтра, я видимо не в курсе, как работает фильтр, можно чуть подробнее?

Максим, UID1C - это глобальный идентификатор записи в 1с. Т.е. названия могут и совпадать, а вот UID1C всегда будет разным. Так что во всех сущностях, где есть UID1C (справочник и документы) нет смысла использовать другие ключевые поля кроме UID1C и Object1C.

Жаль, что вопросы про фильтр и плохую практику остались без ответа.

Оно и так понятно, что ID и есть ID, но нередко бывают ситуации, когда данные в двух системах уже есть, и закрепление по такому ID выдаст кучу копий. Я об этом писал выше. Соответствие по ID - это хорошо, но у меня случай, когда такое соответствие не годится.

Тогда создайте фильтр в ручную: для этого в Террасофт администраторе в SelectQuery продуктов (sq_Offering) добавьте строковый параметр с именем OfferingNameS1CF, и фильтр сравнения OfferingNameS1CF как tbl_Offering.Name = Parameter:OfferingNameS1CF
Перезайдите в Террасофт и проверьте работу.

Показать все комментарии