Восстановил из *.bak-файла базу данных. Развернул на другой машине - все работает, кроме разделов Контакты и Контрагенты. При попытке сохранить dataset вылетает обшибка 'list index out of bounds (0)'

Продукт Terrasoft Sales, версия 3.4.0.53
База данных бекапилась на MS SQL 2005. Восстанавливали и на 2005 и на 2008 - результат одинаковый.
Все остальное работает. Ошибка выскакивает в момент сохранения в скрипте:

function SaveChanges(BaseDBEdit, Window) {
        var AddNewRecordOnPage = (BaseDBEdit.Dataset.State == dstInsert);
        Window.Attributes('IsAppend') = (BaseDBEdit.Dataset.State == dstInsert);
        Window.Attributes('RecordID') = BaseDBEdit.RecordID;
        var PostResult = BaseDBEdit.Dataset.Post();
        Window.Attributes('AddNewRecordOnPage') =
                (AddNewRecordOnPage && PostResult > 0);
        var Result = ((PostResult == 1) || (BaseDBEdit.RecordAlreadySaved));
        return Result;
}

на строке var PostResult = BaseDBEdit.Dataset.Post();выкидывает сразу в исключение
catch (e) {
                System.MessageDialog(e.message, mdtError, mdbOK, 0);
                Result = false;
        }

        return Result;

функции SaveChangesWithCheck(Window, BaseDBEdit, DoNotSendNotify).
Каким образом это можно исправить?

Нравится

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

Проблему решил сам, хватило лишь выполнить запрос

sp_change_users_login 'auto_fix', 'fkeys'

возможно кому-то поможет

Либо может еще отработать скрипт:
sp_change_users_login 'Update_one', 'fkeys', 'fkeys'

Арсений Белецкий
Техническая поддержка Terrasoft

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

Добрый день. Имеются контрагенты, импортированные из 1С 8.2. Так же имеется Excel- файл с этими же контрагентами, но написаны они немного по- другому, например в террасофте контрагент "ООО Ромашка", а в эксель- файле он записан как "ромашка", соотв. при импорте контрагентов из таблицы экселя в готовый список террасофта они просто добавляются к изначальным, мастер поиска дублей не видит их, как можно осуществить соединение данных?

Нравится

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

Варианты есть разные
1. Написать необходимый код для импорта данных, где будут учтены эти и любые другие нюансы;
2. Можно для проверки уникальности при импорте использовать например номер телефона или emai контрагента, а не название
Остальные требуют предварительной обработки данных
3. В TS вносим в карточки контрагента как новое поле (или, например, в поле Код) требуемое наименование "ромашка" и прочее, и при настройке импорта используем это поле как первичный ключ (уникальный)
4. В excel файл добавляем к каждой записи некий уникальный код, аналогичный код должен использоваться в записях TS. Дальше этот код используем как первичный ключ. Как вариант в excel вручную/макросом каким вписываем для каждой записи название контрагента из TS, и опять же ключ по этому названию

Здравствуйте, Роман!

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

Прошу прощения, плохо смотрел, сообщение отредактировано, удалите его, пожалуйста

Здравствуйте, Роман!

В данном случае следует произвести выгрузку в Excel в том числе и поля Код.

Проверка уникальности - деталь, на которую добавляются значения при настройке синхронизации с MS Excel:

111

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

Подскажите, пожалуйста, как сделать фильтры по аналогии с "показывать для контакта" на вкладке "задачи" окна wnd_MsOutlookSynchronization

Нравится

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

Добрый день!

Добавить легко, но не в этом ведь дело. Предполагаю, что Вы хотите, чтобы этот фильтр еще и работал.

Это сделать нельзя, поскольку синхронизация возможна только с соединенной конфигурацией для текущего пользователя.

Добрый день!

Спасибо за отклик.

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

Нужно добавить фильтры "тип задачи", "статус задачи" и "дата создания". Эти фильтры влияют лишь на список задач, которые будут импортироваться в аутлук, на сам процесс экспорта они вроде бы не влияют. Интересует, где именно происходит фильтрация.

Имелась в виду часть, отвечающая за выбор групп в Outlook. Если Вы подразумеваете фильтры по данным в Terrasoft, то это, в принципе, реализуемо. Все что надо - получить необходимый dataset, и наложить на него ApplyDatasetFilter (звучит легче, чем это есть на самом деле). Удачи :smile:

В том-то и беда, что фильтровать нужно mds_MSOutlookTaskTS, а mds как-то по хитрому фильтруется. к тому же, не могу пока отследить, где именно происходить фильтрация по контактам.

Добрый день! Да, в таком случае это будет посложнее, но Вы можете попробовать это сделать следующим образом (приблизительный алгоритм):

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

function SetIsFiltered(Dataset, IsFiltered) {
	if (IsFiltered) {
		Dataset.IsFiltered = false;
		Dataset.IsFiltered = true;
	} else {
		Dataset.IsFiltered = false;	
	}
}

У датасета есть свойство OnDatasetFilterRecord, на которое следует обратить внимание:

http://www.community.terrasoft.ru/system/files/1_71.png

Пример его использования можно посмотреть в скрипте wnd_MethodListScript

function dlDataOnDatasetFilterRecord(Dataset, DoAccept) {
	var FunctionName = Dataset.ValAsStr('FunctionName').toUpperCase();
	var FilterValue = edtFilterValue.Value.toUpperCase();
	DoAccept.Value = (FunctionName.indexOf(FilterValue) != -1);
}

Спасибо за ответы! Удалось разобраться самостоятельно. Если вкратце,то нужно было изменить следующие сервисы и функции:

a) Два фильтра сравнения в sq_Task: TaskTypeID и TaskStatusID
b) Фильтры на окне – обработчик событий OnChange в скрипте scr_MsOutlookSynchronization
c) FilteredItemDataset(IsChecked) в том же скрипте
d) function FilterDatasetByGroup(GroupDataset, MemoryDataset, IsContactSync, IsTaskSync, FilteredDate, OwnerID, TaskTypeID, TaskStatusID) в скрипте scr_MSOutlookSynchronizationUtils
e) function SetItemMemoryDataset(Dataset, MemoryDataset, IsContact, FilteredDate, OwnerID, TaskTypeID, TaskStatusID) в том же скрипте

То есть из обработчиков фильтров на окне через атрибуты объекта передаются значения фильтров в функцию SetItemMemoryDataset, а там уже фильтруется датасет задач и заполняется mds.

Ну и чудненько :smile:

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

Добрый день. Хотел импортировать номенклатуру из 1С, но при любых условиях выдает ошибку в процессе импорта на 2265 позиции :(
Скриншоты:

Что я делаю не так и как тут быть?

Нравится

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

Роман,

Наиболее вероятная причина проблемы - Вами не вносится значение в обязательное для заполнения поле название продукта. Впрочем, в этом случае сбой случился бы на первой же записи.

Для диагностики требуется больше информации:
Попробуйте установить и активировать отладчик скриптов и предоставьте скриншот окна отладчика, на котором виден стек вызова и строка, на которой случился сбой.

Подробная информация об установке отладчика по ссылке: http://www.community.terrasoft.ru/blogs/7804

Добрый день, Анна, вот скриншот:

[URL=http://s1.ipicture.ru/Gallery/Viewfull/10764020.html][IMG]http://s1.ipi…]

Возможно не видно, желтым выделена скобка "{"

Роман, отладчик останавливается на finally, когда сбой произошел в обной из функций блока try.

В данном конкрентом случае, вероятнее всего, на WriteHistory.

Попробуйте загрузить в конфигурацию сервисы (в приложении), очистить кэш и перезапустить Terrasoft.

при очередной попытке импорта возникла ещё одна ошибка:

[URL=http://s1.ipicture.ru/Gallery/Viewfull/10765736.html][IMG]http://s1.ipi…]

Так же при другой попытке появилась ещё одна ошибка:

[URL=http://s1.ipicture.ru/Gallery/Viewfull/10766322.html][IMG]http://s1.ipi…]

Роман, уточните, пожалуйста, производилась ли Вами очистка кэша приложения после загрузки сервисов?

Да, производилась.

Роман,

Попробуйте выполнить следующее:

1. Установить галочку "создавать группы" в окне настроек интеграции;
2. Произвести импорт частями (например, отфильтровать по коду).

Вероятных причин сбоя несколько:

1. Сбой происходит на конкретной записи (в ней содержится текст в неизвестной кодировке, пустое название либо другие невалидные данные). В этом случае сбой происходит всегда на одной и той же записи, например, 2265.

2. Сбой происходит на определенном количестве записей. В этом случае сбой происходит на записях с разным номером, однако их количество приблизительно одинаково.

Для устранения проблемы необходимо диагностировать, на каком этапе происходит сбой.

Вот что происходит с отмеченным "создавать группы":

Сначала, как и раньше:

[URL=http://s1.ipicture.ru/Gallery/Viewfull/10781014.html][IMG]http://s1.ipi…]

И добавляется:

[URL=http://s1.ipicture.ru/Gallery/Viewfull/10780966.html][IMG]http://s1.ipi…]

При этом импорт не доходит и до 1, аналогично при импорте кодов

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

ds_DataflowHistory
sq_ataflowHistory
tbl_DataflowHistory

Анна, думаю вторым сервисом вы имели ввиду "sq_DataflowHistory", выгрузил, архив во вложении.

Здравствуйте, Роман!

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

При необходимости моэно добавить защиту от сбоев подобного характера, добавив в скрипт импорта номенклатуры программный код следующего вида:

 if (IsEmptyValue(Select1C.Наименование)){
 	Dataset('OfferingName') = 'Пустое название';
 }

Большое спасибо прекрасной техподдержке и вам лично! Вы спасли меня уже 2й раз:wink:

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

Добрый день, при импорте адресов контрагентов из 1с 8.2 в адреса контрагентов террасофта попадают не нужные данные, это номера телефонов и адреса почтовых ящиков, хотелось бы узнать как можно это отфильтровать, скриншот настроек террасофта прилагается:
Скриншот

Нравится

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

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

Здравствуйте, Роман!

Для того, чтобы корректно выбирались адреса, следует задать фильтры для того элемента, в котором импортируется адрес:

111

В данном конкретном случае значение фильтра необходимо подставить в соответствии с синтаксисом языка 1С: Значение(Перечисление.ТипыКонтактнойИнформации.Адрес)

Обратите внимание, в коробочной версии утилиты нет возмодности фильтрации. Для использования данной функциональности следует произвести установку утилиты интеграции с 1С из Каталога расширений.

Спасибо за ответ, Анна. В документации к утилите, на которую вы дали ссылку указано, что она уже встроена в террасофт с версии 322, а мы используем 3.4.0.61.

Роман, утилита, которая поставляется в каталоге расширений, постоянно обновляется и дорабатывается, и отличается от той, что поставляется в коробочной версии.

Спасибо, всё получилось, не закрывайте, пожалуйста, тему, буду тестировать и возможно возникнут вопросы

При попытке синхронизации выдает ошибку вида:

	HistoryDataset('TypeID') = TypeID;
	HistoryDataset.Post();
	HistoryDataset.Close();
}

Где выделено желтым:
HistoryDataset.Post();

Как победить?

Роман,

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

Если только для одной, тогда предоставьте, пожалуйста, скриншоты настроек интеграции.

И еще: сбой при импорте или при экспорте?

Спасибо за ответ, мне удалось исправить ошибку самостоятельно.
Пока, что есть возможность проверить только синхронизацию контрагентов и регистра сведений с настроенным соответствием адресов.
Например сейчас мне надо импортировать в адреса контрагентов террасофта адреса контрагентов из 1с, которые находятся в Регистре сведений->Контактная информция->представление. Мои настройки:

[URL=http://s1.ipicture.ru/Gallery/Viewfull/10527987.html][IMG]http://s1.ipi…]

Импорт проходит удачно, но адреса в контрагентах не поялвяются, нет никаких ошибок, что это может быть?

"Роман Асланов" написал:

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

Пока, что есть возможность проверить только синхронизацию контрагентов и регистра сведений с настроенным соответствием адресов.

Например сейчас мне надо импортировать в адреса контрагентов террасофта адреса контрагентов из 1с, которые находятся в Регистре сведений->Контактная информция->представление. Мои настройки:

Импорт проходит удачно, но адреса в контрагентах не поялвяются, нет никаких ошибок, что это может быть?


Так же хочется добавить, что при создании фильтра, например "Тип" содержит "Адрес", появляется ошибка при импорте, фильтр:

[URL=http://s2.ipicture.ru/Gallery/Viewfull/10562694.html][IMG]http://s2.ipi…]

Ошибка:

[URL=http://s2.ipicture.ru/Gallery/Viewfull/10562670.html][IMG]http://s2.ipi…]

В логе по этой ошибке написано:
"[12.05.14 09.39.07.606] (E) 'EditWindowUSI' значение атрибута не определено"|

Для устранения сбоя при фильтрации по типу Адрес попробуйте в фильтре вместо "содержит" установить "равно". Кроме того, фильтру нужно задать значение: "Значение(Перечисление.ТипыКонтактнойИнформации.Адрес)", а не просто "Адрес"

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

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

[URL=http://s2.ipicture.ru/Gallery/Viewfull/10566127.html][IMG]http://s2.ipi…]

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

Это можно проверить в конфигураторе 1С:

Для этого следует зайти в Перечисления - Типы контактой информации - Значения:

111

В случае, если значение не отличается, для точной диагностики нужен будет сеанс удаленной отладки.

Конфигурация дорабатывалась, но значение перечисления стоит "Адрес".

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

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

В скрипте ТС подключаюсь по https. "Соединение не установлено" т к сертификат не принят. В браузере это побороть можно - просто ввожу в список сертификатов мой и никаких окошек с предупреждениями нет больше, заходит без ращговоров. Как это сделать в ТС?

Нравится

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

Здравствуйте.
Подключение клиентского приложения Террасофт по TSP\IP с использованием SSL не реализовывалось. Есть возможность подключения с использованием сертификатов через web-сервисы (настройка описана в руководстве администратора, также рекомендации есть по ссылке: http://www.community.terrasoft.ru/blogs/5138).
С уважением, Terrasoft Support Team.

Анна, быть может вы имеете в виду обращение по https к стороннему веб-методу? Если да - то какой объект вы используете для его вызова?

Для объектов типа MSXML2.XMLHTTP - сертификат необходимо установить в IE. Если используется самоподписанный сертификат, то можно подавить ошибки с предупреждением, Google говорит - для этого перед вызовом веб-метода добавить строку

xmlHttpRequest.setOption(2) = 13056

Из ТС в биллинг отправляется инормация. Делается так:

function createRequestObject() {  
    var request = null;
 
    try {
	    request=new ActiveXObject('Msxml2.XMLHTTP.6.0');
    } catch (e){
    }
 
    if(!request) try {  
        request=new ActiveXObject('Microsoft.XMLHTTP');
    } catch (e){
    }
 
    if(!request) try {
        request=new XMLHttpRequest();
    } catch (e){
    }  
    return request;
}

Пока делали в тестовом режиме, админ биллинга проверку сертификатов отключил, все работало.
В IE сертификат ставила как доверенный и в IE сразу идет запрос логин/пароля без проверки. Этого мало, в ТС запрашивает.
Попробую setOption(2), отпишусь.
Спс)

//var objXMLDocument; 
request = new ActiveXObject( "Msxml2.ServerXMLHTTP.6.0"); 
//objXMLDocument = new ActiveXObject("Msxml2.DOMDocument.6.0"); 
request.open ('POST', url, true, LogInAbb, password); 
request.send (data);
while (request.readyState != 4)
{
    request.waitForResponse(1000); 
}
if(request.readyState == 4)
{
   if (request.status == 200) 
   { ... 
   }else if(request.status == 500) 
   { 
          System.MessageDialog('Проверьте корректность введенных данных.', mdtWarning, mdbOK, 0);	 
          return 0; 
   }else 
   { 
       var showmessage = 'Ошибка подключения. Проверьте настройки подключения.'; 
       return 0; 
   }

В результате: request.status = 401

Что не так?

Если запускаю клиент ТС на Windows Server 2008 32 - работает
Если на Windows Server 2008 64 или Windows 7 - ошибка 401

Воспользуйтесь отладчиком типа Fiddler и сравните результат в случае использования на обеих ОС.

Воспользуйтесь отладчиком типа Fiddler и сравните результат в случае использования на обеих ОС.

"Гакало Игорь Александрович" написал:

Воспользуйтесь отладчиком типа Fiddler и сравните результат в случае использования на обеих ОС.


А как именно им воспользоваться? Я ввожу строку подключения на своем серваке и на сервере клиента. У меня удачно подключается, у клиента ошибка 401. А как более точно посмотреть, в чем причина ошибки, не подскажете?

Анна, хорошее описание по работе с Fiddler можно найти здесь:
http://www.cyberguru.ru/dotnet/asp-net/http-fails-page2.html
http://softive.ru/2009/03/05/fiddler/

Спс Сергею из Террасофта :twisted:

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

Добрый день!

Есть следующая задача: проэкспортировать счета в 1С. В счетах есть поле справочника [Контрагент] и поле справочника [Договор]. Договора подчинены справочнику Контрагенты. Если просто добавить соответствие полей из клиентской части, то договора не экспортируются, т.е. надо прописать соответствие в скрипте. Насколько я поняла нужно выбрать контрагента текущего счета и по коду в пределах подчинения найти договор. Но с языком 1С я не знакома, каким образом это можно сделать?

Нравится

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

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

Уточнните, пожалуйста:

1. Какая версия 1С Вами используется;
2. Какие сущности из 1С Вы пытаетесь экспортировать и с какими разделами 1С синхронизировать.

Данная информация необходима технической поддержке для того, чтобы смоделировать ситуацию и протестировать программный код, который будет предоставлен в качестве примера.

Версия 1С 7.7.
Экспорт Счетов в документы "Реализация", которые содержат поля Контрагент (из справочника), Договор (из подчиненного справочника контрагентов). Справочники Контрагентов и Договоров синхронизированы.

Александра,

предоставьте, пожалуйста, скриншоты окон настроек интеграции.

Для скриншотов окна настроек полей также необходимо вытянуть колонку Ключевое.

Скриншоты настроек

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

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

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

Навскидку могу предложить следующий пример:

	var ContactName = Select1C[QueryLink].ДоговорКонтрагента.Наименование;
	var CustomerID = Dataset('CustomerID');
	var ContractDataset = Services.GetSingleItemByUSI('ds_Contact');
	ApplyDatasetFilter(ContractDataset, 'Name', ContactName, true);
	ApplyDatasetFilter(ContractDataset, 'CustomerID', CustomerID, true);
	ContractDataset.Open();
	if(!IsEmptyValue(ContractDataset('ID'))){
		Dataset('ContractID') = ContractDataset('ID');
	}
	ContractDataset.Close();

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

111

В договорах есть код,который уникален в пределах владельца (Контрагента).
При синхронизации договоров используются следующие ключевые поля: Код, Наименование, Контрагент. При импорте счетов договора появляются, в функции OnBeforeRecordImport прописан код, аналогичный тому, который указан выше.

В договорах есть код,который уникален в пределах владельца (Контрагента).
При синхронизации договоров используются следующие ключевые поля: Код, Наименование, Контрагент. При импорте счетов договора появляются, в функции OnBeforeRecordImport прописан код, аналогичный тому, который указан выше.

Александра,

есть ли у Вас возможность предоставить структурированную и детальную информацию о том, как именно настроена интеграция?

1. Скриншот конфигуратора 1С, где есть развернутый список полей;

2. Программный код на OnBeforeRecordImport, который реализован в Вашей организации;

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

Сначала создается счет в TS и на его основании договор.
Происходит экспорт договоров.
Затем экспорт счетов.

Также необходимо импортировать уже существующие счета из 1С, с этим проблем нет.
function OnBeforeRecordImport(Param, Dataset, Select1C) {
var ContractName = Select1C.QueryLink.Договор.Наименование;
var ContractCode1C = Select1C.QueryLink.Договор.Код;
var AccountCode1C = Select1C.QueryLink.Контрагент.Код;
var CustomerID = GetDatasetFieldValueFromDatasetByUSI('ds_Account', 'Code1C', AccountCode1C, 'ID');
var ContractDataset = Services.GetSingleItemByUSI('ds_Contract');
ContractDataset.Close();
ApplyDatasetFilter(ContractDataset, 'Title', ContractName, true);
ApplyDatasetFilter(ContractDataset, 'CustomerID', CustomerID, true);
ApplyDatasetFilter(ContractDataset, 'Code1C', ContractCode1C, true);
ContractDataset.Open();
if(!IsEmptyValue(ContractDataset('ID'))){
Dataset('ContractID') = ContractDataset('ID');
}
ContractDataset.Close();
EnableDatasetFilters(ContractDataset, false, 'Title');
EnableDatasetFilters(ContractDataset, false, 'CustomerID');
EnableDatasetFilters(ContractDataset, false, 'Code1C');

}

Также прикрепила скриншоты конфигуратора 1с для договоров и счетов (заявок).

Александра,

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

Скрип сервиса синхронизации счетов.

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

В таком случае Вам необходимо на OnBeforeRecordExport добавить следующий парограмный код:

var ContractDataset = Services.GetSingleItemByUSI('ds_Contract');
ApplyDatasetFilter(ContractDataset, 'ID', Dataset('ContractID'), true);
ContractDataset.Open();
var Code1C = ContractDataset('Code1C');
ContractDataset.Close();
var Unit1C = Param.Obj1C.Справочники.ДоговорыКонтрагентов.НайтиПоКоду(Code1C));
if(scr_Dataflow1CUtils_V81.LinkIsAssigned(Unit1C)) {
Select1C.ДоговорКонтрагента = Unit1C.Ref;
}

Здравствуйте!

После строки var Unit1C = Param.Obj1C.Справочники.ДоговорыКонтрагентов.НайтиПоКоду(Code1C) экспорт прекращается. Т.к. код договора уникален в пределах контрагента (владельца), попробовала написать var Unit1C = Param.Obj1C.Справочники.ДоговорыКонтрагентов.НайтиПоКоду(Code1C, 1), но все равно происходит сбой.

Возникла ее одна проблема. При экспорте договоров появляются одинаковые записи, которые различаются только по коду. Хотя поле код является ключевым. При этом изменяется поле код в TS.

При поиске в 1С записи, уникальной в пределах владельца
Следует применить метод «ИспользоватьВладельца»

Пример:

НР = СоздатьОбъект("Справочник.НормыРасходов");
НР.ИспользоватьВладельца(Продукция);
НР.НайтиПоКоду(«00000000000001», 1); 

Написала следующий код:

var НР = Param.Obj1C.CreateObject('Справочник.Договоры');
НР.ИспользоватьВладельца('Контрагент');
var ContractDataset = Services.GetSingleItemByUSI('ds_Contract');
ContractDataset.Close();
ApplyDatasetFilter(ContractDataset, 'ID', Dataset.Values('ContractID'), true);
ContractDataset.Open();
var Code1C = ContractDataset.Values('Code1C');
ContractDataset.Close();
var Unit1C = Param.Obj1C.НР.НайтиПоКоду(Code1C,1);
if(scr_Dataflow1CUtils_V77.LinkIsAssigned(Unit1C)) {
Select1C.Договор = Unit1C.Ref;
}

Но по коду все еще не находит.

Нашла ошибку, изменила следующую строку var Unit1C =НР.НайтиПоКоду(Code1C,1);.
Теперь вопрос в том, почему по коду не возвращает значение 1С ((scr_Dataflow1CUtils_V77.LinkIsAssigned(Unit1C)).

Александра, необходимо удаленное подключение для диагностики и проверки настроек. Детали письмом.

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

Добрый день!

Вопрос по импорту из 1С.

Сначала импортирую продукты, в них нет цен, прайс-листы для продуктов не создаются.
Затем отдельно импортирую прайс-листы, при этом цену основного прайс-листа заношу в цену продукта.
Но в поле [Цена] датасета продуктов попадает цена другого прайс-листа (видно в гриде продуктов), а при открытии карточки продукта в поле [Цена] находится цена основного.

Расскажите подробней как работает механизм с созданием прайс-листов и как определяется по какому прайс-листу считается цена продукта.

Нравится

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

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

Структура таблиц следующая:

1. Список прайс-листов хранится в справочнике tbl_PriceCategory.
2. Названия продуктов хранятся в таблице tbl_Offering.
3. Цены продуктов хранятся в таблице tbl_OfferingPrice, которая по идентификаторам связана с двуми вышеперечисленными.

В карточку продукта они подтягиваются динамически из tbl_OfferingPrice.

Для корректного импорта необходимо:

1. Проимпортировать данные в tbl_Offering;
2. Проимпортировать данные в tbl_PriceCategory;
3. Проимпортировать tbl_OfferingPrice, указав соответствие значений полей OfferingID и PriceCategoryID соответствующим справочникам.

При импорте последней таблицы также обратите внимание на следующие моменты:

1. Обязательно заполнить поле PriceKindID значением из перечисления enm_OfferingPriceKind;
2. В таблице tbl_ProceCategory хотя бы один прайс-лист должен быть отмечен как базовый (поле IsBase);

Спасибо.
А из какого прайс-листа заносится цена в продукт?

Из того прайс-листа, который выбран базовым либо из того, который указан в карточке продукта

Спасибо!

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

Добрый день!

Подскажите, пожалуйста как экспортировать в 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С?

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

Подскажите, пожалуйста, в стандартной интеграции при экспорте счетов в 1С существует ли возможность ввода на основании этого счета других документов, например Актов (автоматическое создание актов во время перекидки счетов)?

Нравится

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

Здравствуйте Иван,
Автоматическое создание актов не предусмотрено.
Все зависит от конфигурации 1С и поставленных модулей
Пример создания Документа при экспорте счета:

function OnAfterRecordImport(Param, Dataset, Select1C) {
         var DocObj = GetScriptObjectByVersion(Param).GetObject(Param.Obj1C, 'Документ.Акт1…');
         DocObj.CreateDocument();
         DocObj.Number = 1234;
         DocObj.Счет = Select1C;
         DocObj.Write();
}
Показать все комментарии