Добрый день!

Подскажите, пожалуйста как экспортировать в 1С контрагента в конкретную группу. Например, есть такая иерархия в 1С: 1 уровень: Клиенты, Поставщики, Банки ..., 2 уровень: Киев, Донецк, Харьков.

Ранее обсуждался вопрос по продуктам, но для Контрагентов не нашел таблицу групп.

Заранее благодарен.

Нравится

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

Вы правы - данный вопрос обсуждался:http://www.community.terrasoft.ua/forum/topic/7083

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

Здравствуйте, Николай.

Версия 1С УПП 8.2.

Пример структуры
str

Контрагенты - иерархический справочник, связь с группой устанавливается через поле Группа контрагентов: данные - поле Родитель, Тип значения: СправочникСсылка.Контрагенты.

sprav

Кроме того, у данного справочника в наборе данных есть параметр ЭтоГруппа, т.е. это один справочник, где записи разделяются на элементы и группы и для элементов указывается родитель.

data

Пример таблицы для аналогичного справочника Физические лица.
Поля: _IDRRef - id записи
_IDParentRRef - родительский id
_Folder - 1 - элемент, 0 - группа

Вы можете заполнять поле "Родитель" в скрипте.

function OnBeforeRecordExport(Param, Dataset, Select1C) {
      Select1C.Родитель = Param.Obj1C.Справочники.Контрагенты.НайтиПоКоду(Dataset("Group1CCode"));
}

Предварительно в карточку контрагента добавить поле "Код группы в 1С" (Group1CCode)
или второй вариант:
хранить код в поле "Описание" статической группы раздела Контрагенты

и в sq_Account добавить колонку подзапроса, которая бы вытягивала этот код

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

В случае, если группы у Вас являются сущностями справочника Контрагенты с признаком ЭтоГруппа, тогда заполнить поле группа можно скриптом интеграции на событие BeforePost справочника Контрагенты.

var Group = 'ДОНЕЦК'; //группа, в которую необходимо экспортировать 
Select1C.Родитель = Param.Obj1C.Справочники.Контрагенты.НайтиПоНаименованию(Dataset.ValAsStr(Group)).Ref;

Спасибо за коментарии

И группы и элементы групп находятся в одной таблице и каждая запись имеет свой _IDRRef. Различие между группой и элементом в поле _Folder - 1 - элемент, 0 - группа. В какой группе находится тот или иной элемент определяется значением _IDParentRRef, где указывается _IDRRef группы. (пример таблицы в файле).

Т.е. задача фактически в зависимости от типа контрагента присваивать ему тот или иной _IDParentRRef в таблице. По умолчанию при экспорте он равен 0 и записи попадают в корень.

Если это сделать в виде Update хранимой процедуры, которая будет присваивать этот _IDParentRRef и вызывать её из скрипта интеграции?

Спасибо всем за помощь.

Не совсем понятна постановка задачи. Как тип контрагента определяет принадлежность контрагента к той или иной группе?
Изначально стояла задача: как экспортировать в 1С контрагента в конкретную группу.

Соответственно Вам необходимо:
По наименованию группы (взятому из таблицы AccountInGroup в Terrasoft для конкретной записи контрагента) найти ее в таблице
Убедится что найденная запись - группа (_Folder = 0)
Присвоить значение найденной группы - записи контакта (в поле Группа контрагентов).

В данной схеме есть один нюанс - Соотношение контрагентов и групп в Terrasoft определено как один ко многим(контрагент может состоять в нескольких группах). На сколько я понимаю из Вашего описания - в 1С 1:1 (тоесть контрагент может принадлежать только одной группе)
Каким образом Вы собираетесь определять какую именно группу вписывать в 1С?

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

Добрый день.
Вопрос по интеграции(синхронизации) Terrasoft CRM 3.4 с 1С 8.2
Выбираю объект синхронизации "Банки".
При настройке соответствий полей все синхронизируется нормально если не указывать соответствие "Город-город". Если же его указать и поставить галку "очищать таблицу перед импортом", то в TS справочник "Банки" получается пустым. Если же просто добавить "Город-Город", то в справочнике "Банки" поле "город" остается пустым.
Где искать проблему?

Нравится

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

"Alexander.K" написал:поставить галку "очищать таблицу перед импортом"

Где Вы ставите эту галочку? Если в настройке объекта "Банки" то таблица Банки должна очищаться перед импортом и наполнятся во время.

В настройке соответствия полей "Город-город" вы указывали еще какие-то параметры?

Здравствуйте, Александр.

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

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

Да, ставлю в настройке объекта "Банки" - "Очищать таблицу перед импортом".
В поле "создавать группы ТС" нельзя поставить галку. Хотя в 1С данные по группам разбиты, например; гр. архангельская обл, а в этой группе уже банк1, банк 2 и т.д.
В настройке соответствия полей ставлю только еще номер позиции, остальное по умолчанию.
Некоторые скриншоты в прикрепленных файлах.

Результат1 - импорт произошел со связкой "Город-Город"
Результат2 - импорт без "Город-Город"

Александр,

Город - это не текстовое поле, а справочник. таким образом, чтобы синхронизация происходила корректно, Вам необходимо добавить подчиненную синхронизацию:

03

И в ней сопоставить поле название с соответствующим полем 1С. А в элементе Город корневой синхронизации указать "Элемент синхронизации, настройки которого необходимо использовать при импорте поля"

Пример есть тут: http://www.community.terrasoft.ua/forum/topic/6898

Если настроить соответствие полей как "Город(1с)- описание(ТС)", то в поле описание названия городов появляются. М/б тогда ненужно делать подчинение? может в чем то другом проблема?

Специалист 1с говорит, что поле "город" в 1с это текстовое поле, а не справочник.
Получается, что они должны бы синхронизироваться как "город-город"

Александр,

поле Город является справочником в Terrasoft, поэтому для корректного переноса значения необходимо предварительно синхронизировать поле 1С с заголовком справочника городов, и только потом - синхронизировать поле в карточке контрагента.

Добрый день.
Сделал подчиненную синхронизацию. но результата не добился.

рис1

рис2

рис3

рис4

Подскажите, что в настройках указано неверно ?

Здравствуйте, Александр!

Вам необходимо:

1. Убрать поле родителя в настройках объекта синхронизации Город:

123

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

2. В настройке соответствия полей убрать правило синхронизации как у Банки:

234

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

Например, если нам нужно заполнить поле Город, которе является справочником, то в родительской синхронизации (в данном случае - Банки) мы для поля Город указываем правило синхронизации как у Город.

Для всех прочих это поле должно быть пустым.

Добрый день, Анна.
Все поправил как вы сказали (рис 1-4).
Но в справочнике банки поле города, так и не заполняется. синхронизация происходит следующим образом: импортируется сначала первая запись справочника банки. Затем начинается импорт городов на ~ 17000 записей. затем записывает в справочник банки следующий банк и опять импорт городов ~17000 записей.
Но в справочник банки, записи городов не появляются.
Результат:

спр Банки

спр Города

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

Может быть еще где то необходимо настроить?

Здравствуйте, Александр!

Для устранения проблемы в появлением уникальных идентификаторов вместо названий городов в таблице банки необходимо выполнить следующее:

1. Откройте элемент синхронизации Банки, настройки поля Город.
2. В настройках поля Город укажите правило импорта как у Город (подчиненная синхронизация).

В случае, если у Вас возникнут дополнительные вопросы по синхронизации, просим сообщить в техническую поддержку дополнительно: support@terrasoft.ru

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

Внезапно банальная задача не решилась "в лоб".

Задача стоит таким образом - создаем счет в ТС, экспортируем его в 1С, потом надо счету в ТС присвоить номер, который ему прикрутила 1С.

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

Решил сделать еще проще - в скрипте интеграции в функции OnBeforeRecordImport тупо прописал:

var InNumber = Select1C[QueryLink].НомерДок;
//Log.Write(1, InNumber);
Dataset('InvoiceNumber') = InNumber;

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

В итоге появилось несколько вопросов - если синхронизация записей осуществляется по полям Code1C, Date1C, Object1C - то что происходит при экспорте в 1С с полями Code1C и Date1C? По идее, ведь в них и при экспорте должны сразу загоняться значения из 1С, иначе повторный экспорт не увидит связи между записями?

Нравится

1 комментарий

Уже стало приметой - стоит после того, как что-то не получается, решиться таки напрячь саппорт, как через 15 минут все решаешь сам :-)

Все решилось просто:

function OnAfterRecordExport(Param, Dataset, Select1C) {
var InCode = Dataset('Code1C');
Dataset.Edit();
Dataset('InvoiceNumber') = InCode;
Dataset.Post();

}

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

Добрый день.

Возник вопрос, как при экспорте товара указать, что бы он был в определенной группе в 1С?

Нравится

4 комментария

Необходимо создать подчиненную запись при синхронизации, и установить соответствие [Продукт в группе].[Название] (Террасофт) - [Номенклатура].[Номенклатурная группа] (1C)

Анна, а можно скриншот, пожалуйста?
У меня почему-то так не получилось.

Здравствуйте, Алена!

Вам необходимо добавить подчиненную запись при интеграции продуктов (номенклатуры) и указать для нее в объекте интеграции Номернклатурные группы.

111

222

О, спасибо большое!

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

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

Прошу помочь в этом вопросе и отозваться тех, кто заинтересован в сотрудничестве. Спасибо.

Нравится

3 комментария

Добрый день!
Наша компания с радостью поможет Вам настроить интеграцию Terrasoft и 1С. На данный момент накоплен богатый опыт интеграции как с 1С7, так и с 1С8. Как мы можем связаться с Вами, чтобы уточнить необходимую информацию?

Полина Бичан,
CRM-консультант
Компании "КомплИТ"
E-mail polina-b@komplit.by

Денис, добрый день.
Пожалуйста, уточните версию 1С.
Скажите, пробовали самостоятельно настраивать интеграцию и есть конкретные вопросы или нужна реализация "с нуля"?

Денис, доброе утро!

С радостью можем Вам помочь с интеграцией Terrasoft и 1С

<Бизнес Технологии>
Виталий Липовецкий
+38067 106-35-25
lipovetskii@gmail.com
Skype: vitaliy_lipovetskiy

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

Встала проблема получения значений периодичсеких реквизитов.
После всяческого шаманства со стандартной утилитой пришел к выводу что стандартными инструементами этого добиться нельзя.
Пока родилось только одно решение проблемы:
В 1С при создании объекта для работы со справочником можно зафиксировать дату установки периодических реквизитов, после чего далее можно с реквизитами работать как с обычными.
Например:
спр=СоздатьОбъект("Справочник.Валюты");
спр.ИспользоватьДату('01.01.2002');
Идея возникла такая - так как практически всегда при синхронизации интересуют только текущие даты, можно скопировать скрипт, содержащий утилиты для работы с 1С (в моем случае scr_Dataflow1CUtils_V77) и поправить в нем процедуру создания объекта для работы в 1С, добавив метод "ИспользоватьДату", с текущей датой. Назвать такой варинат скрипта как нибудь типа scr_Dataflow1CUtils_V77_Periodic и в скрипте синхронизации обращаться не к scr_Dataflow1CUtils, а тоже к его копии с другим именем, которая будет вызывать изменнный scr_Dataflow1CUtils_V77_Periodic.
В таком случае весь стандартный функционал утилиты для интеграции должен дальше работать нормально.
Решение конечно неуклюжее, но лучше пока ничего не придумалось.

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

Нравится

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

Подумал, что можно проще:
Вставил скрипт в синхроизацию:
function OnBeforeImport(Param, Dataset, Query, Attributes) {
var CurrentObject = Param.Object1C;
CurrentObject.UseDate('06.06.11',1);
}

по идее тут должен примениться метод .ИсползоватьДату (UseDate анг. синоном) к текущему справочнику ПТО
в котором есть периодический реквизит Контрагент, являющийся ссылкой на справочник Контрагенты. Судя по мануалам 1с, далее с объектом должна идти работа как с обычными реквизитами.
Однако Select1C.Контрагент.Наименование выдает NULL...

Должен работать примерно такой код:
var Spr= Param.Object1C.CreateObject([Имя справочника]);
Spr.getAttrib([Аттрибут]).Получить([Дата]));

только вначале нужно его найти
по наименованию
Spr.FindByDescr([Наименование],0)
по аттрибуту
Spr.FindByAttribute([Имя Аттрибута],[Аттрибут],1)
или по коду
Spr.FindByCode([Код],0)=1;

и ИМХО лучше использовать русские аналоги комманд

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

function OnBeforeImport(Param, Dataset, Query, Attributes) {
   var Account = Select1C[QueryLink].Контрагент.Получить();
   var AccountName = Account.Наименование;
   Account = System.EmptyValue;
}

Функция "Получить()" принимает параметр типа Дата, с помощью нее можно получить значение периодического реквизита на определенную дату. Если параметр не указан возвращается значение на текущую дату (последнее значение).

Пример импорта курса валют из периодического реквизита "Курс"

Настраивается импорт справочника Валюты, после чего дописываем в скрипте следущее:

function OnAfterRecordImport(Param, Dataset, Select1C) {
debugger; 
    var Dictionary = GetNewDictionary();
    Dictionary('CurrencyID') = Param.RecordTSID;
    scr_DataflowUtils.DeleteRecords('tbl_CurrencyRate', Dictionary);
    var Periodic = Param.Obj1C.CreateObject('Periodic');
    Periodic.ИспользоватьОбъект("Курс", Select1C[QueryLink]);
    Periodic.ОбратныйПорядок(0);
    Periodic.ВыбратьЗначения();
    var Rate;
    var For = Select1C[QueryLink].Кратность;
    var StartDate = null;
    var DueDate;
    while (Periodic.ПолучитьЗначение()) {
        Rate = Periodic.Значение;
        DueDate = new Date(Periodic.ДатаЗнач);
        DueDate.setDate(DueDate.getDate() -1);
        AddCurrencyRate(StartDate, DueDate, 
            Rate, For, Param.RecordTSID);
        StartDate = new Date(Periodic.ДатаЗнач);
    }
    AddCurrencyRate(StartDate, new Date(System.Now()), Rate, 
        For, Param.RecordTSID);
    Periodic = System.EmptyValue;
}

О, спасибо, буду пробовать.

"Кривонос Максим" написал:function OnBeforeImport(Param, Dataset, Query, Attributes) {
var Account = Select1C[QueryLink].Контрагент.Получить();
}

Вот эта конструкция вываливается с ошибкой при любом раскладе.

PS: А ведь Select1C не присутствует в параметрах OnBeforeImport... Не потому ли ошибка?

Действительно опечатка...
Функция OnBeforeImport срабатывает лишь один раз в самом начале импорта еще до выполнения запроса в 1С.
Нам же нужно это значение для каждой записи 1С, поэтому необходимо писать обработчик в функции

OnBeforeRecordImport(Param, Dataset, Select1C)

Да, все заработало. Последний вопрос в догонку - ставлю строку:
Dataset('Name') = Account.Наименование;
все ок наименование присваивается, но каждый раз одному и тому же контрагенту, то есть записи не добавляются. Как после заполния значений переходить к новому датасету?

Все, разобрался. В настройках интеграции свел два поля Object1C и Code1C, сделал код ключевым, остальные поля через скрипт (Наименование, и прочее). Все заработало как надо, дубли не плодятся. Спасибо!

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

Здравствуйте!
Встала такая проблема - синхронизируется большой справочник номенклатуры с 1С (TS3.3.2, 1С7.7), порядка 38 тысяч наименований. При этом изменять данные в справочнике могут как и из ТС, так и в 1С. При этом, насколько мне известно, в 1С не ведется поле, фиксирующее момент последнего изменения записи, то есть получается каждый раз из 1С надо импортировать весь справочник целиком, так как мы не знаем, какие записи подверглись изменениям, что занимает очень продолжительное время. Есть ли какие-нибудь варианты по оптимизации процесса?

Нравится

2 комментария

Единственный пришедший в голову вариант - добавлять реквизит в нужные данные в 1С - "Дата изменения", прикручивать обработчик и вести собственно нужный лог в этой дате, что позволит создать фильтр при импорте из 1С и фильтровать только изменившиеся записи.

Если бы вы работали в 1С 8 можно было бы использовать "План обмена", но так как вы работаете с версией 1С 7.7 то возможно предложенный вами вариант, самый рациональный. На сколько мне известно в 1С 7.7 есть некоторая трудность при передаче фильтра даты и времени, получиться только по дате, возможно это будет приемлемо, если данных за день не так много.

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

Добрый день! Есть вопрос, который адресован в первую очередь к продажникам. Есть клиент, которого принципиально волнует вопрос интеграции Terrasoft с 1C? Причем для него важно именно легкость и простота работы сотрудников в двух системах одновременно. На демо-версии, к сожалению, такой возможности не продемонстрировать. Может быть есть какой-либо материал-презентация, нарезка скриншотоа и т.п? На Community не удается ничего найти.

Нравится

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

Надежда, здравствуйте.

Рекомендую два варианта:
Простой - собрать с нашего сайта все рекомендательные письма, где указана интеграция с 1С.
Второй - у нас есть настроенная демо-версия с интеграцией, но в ней нужно разобраться. Можете запросить демо у партнерского отдела. Должна быть установлена 1С 8.

Удачи

Андрей, спасибо за ответ!
К сожалению, у нас в компании используется 1С7.
Рекомендательные письма клиента не устраивают, хочет посмотреть визуально.
Возможны ли другие варианты?

Ну тогда надо ставить 8 либо договориться с МРК из Террасофт, что бы показали удаленно демку

Спасибо, Андрей.:smile:

Надежда, если нарезки скриншотов будет достаточно, высылаю Вам на почту. Если же нужно демонстрировать, рекомендую установить 8 и заняться изучением и настройкой!

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

Добрый день.
Вопрос по импорту из 1С.

Импортирую табличную часть приходной накладной из 1С в Terrasoft стандартными средствами.
Настройки импорта на скриншоте.
В процессе хочу скопировать Наименование товара из табличной части поступления товаров в тестовое поле своей террасофтовской детали "Товары в накладной". Без предварительного импорта записи товара в справочник. Думаю, что корректнее всего это делать в событии OnBeforeRecordImport элемента импорта OfferingsInOfferingMovement.

function OnBeforeRecordImport(Param, Dataset, Select1C) {
        var tmp1 = Select1C.Товар;
        var tmp2 = Select1C.Товар.Наименование;
}

Получить доступ к наименованию товара так, как показано в коде, как и ожидалось, не получилось.

Вопрос. Как в скрипте во время импорта в событии OnBeforeRecordImport получить значение наименования товара из табличной части документа?

1С7.7. Terrasoft 3.3.2.43.

Нравится

2 комментария

Во первых, Вам нужно выяснить название реквизита(колонки) табличной части в 1С, где хранится информация о товаре.
(Например, в моей конфигурации реквизит с товаром называется "ТМЦ")
Во вторых, добавить этот реквизит в настройке соответствия полей. При этом "Имя поля в TS" оставить пустым, но галочка "Не импортировать" НЕ должна стоять!

После чего написать код в скрипте:

function OnBeforeRecordImport(Param, Dataset, Select1C) {
	Dataset('CustomOffering') = Select1C.ТМЦ.Наименование;
}

Спасибо, как то сразу не подумал, что если не поставить реквизит в список, то он не попадет в запрос =)

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

Заметил такую вещь, что при копировании записи (например, счета или договора) копируются также поля синхронизации с 1С (UID1C, Object1C, Code1C). Из-за этого рушится система синхронизации с 1С для таких записей с одинаковыми полями.
Начал копать в этом направлении:
1. Копирование записи реализуется функционалом wnd_BaseGridArea:

CopyGridAreaData(Self, BaseGridArea);

2. Эта функция в скрипте scr_BaseGridAreaUtils

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

Нравится

3 комментария

Попробуйте в соответствующем Dataset снять "галочку" копировать для этих полей.

А там галочки и так не стоят не стоят (((

Копирование полей при копировании записей производится в ядре системы. Для того, чтобы указать, какие колонки следует/не следует копировать, в наборе данных для соответствующих колонок нужно изменить значение параметра «Копирование поля». Если галочка не стоит, то и поле не будет копироваться.
В Вашем случае, при интеграции с 1С, указанные поля добавляются в таблицу, но по умолчанию не добавляются в набор данных. Добавили ли Вы их в набор данных? Если да, то убрали ли галочки напротив параметра «Копирование поля»? Если таких полей в наборе данных нет, то добавьте их и снимите галочки копирования.
Если же у Вас в наборе данных присутствуют указанные поля, для них сняты галочки копирования, но копирование все равно происходит, то Вам следует сделать скриншоты параметров этих полей набора данных, указать версию бинарных файлов и используемый Вами продукт, ОС, тип БД, экспортировать сервисы таблицы, запроса на выборку и набора данных и прислать все эти данные для более детального рассмотрения проблемы. В последнем случае ситуация нетипична.

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