Добрый день.
Как загрузить прайс лист с товаром и ценами в TS?

Нравится

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

Здравствуйте, Дмитрий.

Вы можете воспользоваться рекомендациями в теме: http://www.community.terrasoft.ru/forum/topic/6894

Касательно процесса импорта в целом Вы можете почитать в руководстве администратора на с.215:
http://www.training.terrasoft.ua/system/files/TS_AG_3.4.0.pdf

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

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

Стоит задача импортировать данные из Excel, из одного файла в разделы - Задача, Контрагент, Контакт. (Импорт проводится регулярно)

После того, как прошел импорт, менеджер через Задачу выполняет следующие действия: Контекстное меню задачи - Позвонить - Контрагент. В открывшимся окне Звонка при нажатии на кнопку Позвонить поле Контрагент удаляется.

Техподдержка ответила, что это происходит из-за того, что после импорта не заполняется деталь [Средства связи].

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

В обоих действиях на средствах связи был номер телефона. И в карточку звонка он подтягивается.

Если же открыть контрагента, сделать какие-либо изменения (например, добавить пробел в названии, убрать пробел), сохранить запись. То в таком случае звонок из задачи осуществляется нормально.

В чем проблема не понятно.

Нравится

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

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

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

Средства связи

Если не заполнена деталь Средства связи, при попытки позвонить выдает сообщение "Для выбранного элемента не выбраны средства связи". А тут затирает Контрагента

уточните версию продукта (например 3.4.1.100), я постараюсь воспроизвести ситуацию.

Террасофт 3.3.2.127

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

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

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

Возник вот вопрос - есть простенькая табличка в Excel формата:
Наименование Ед.изм. Цена

Просто перечисление номенклатуры.

Сделал такие настройки импорта:

фотохостинг

 выложить фото

Но цена не импортируется. Я так понимаю, нужна еще какая-то связь по цене, подскажите?

Нравится

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

Уточните, пожалуйста: не импортируется только поле "Цена", а все остальное импортируется, или не импортируется вообще ничего при таких настройках?

Также, если я не ошибаюсь, при настройке импорта справочных полей, нужно сначала добавить колонку для связки со справочником "Ед.изм. - Единицы измерения.Название", а после добавить "Ед.изм. - Продукт.Ед.измерения", то есть, другими словами, запись сначала должна быть добавлена в справочник, а потом уже подставлена в справочное поле

Ну д, только цена и не импортируется.

"Кошкаров Андрей" написал:Также, если я не ошибаюсь, при настройке импорта справочных полей, нужно сначала добавить колонку для связки со справочником "Ед.изм. - Единицы измерения.Название", а после добавить "Ед.изм. - Продукт.Ед.измерения",

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

В версии 3.3.2. значение поля [Цена] берется из детали [Прайс-лист]. Поэтому, для того чтобы в карточке продукта отобразилась цена, Вам необходимо выполнить импорт данных на эту деталь. Для этого используйте таблицу [Цена продукта]. Во вложении высылаю Вам примерный вариант импорта.
Кроме того, после того как будет выполнен импорт, Вам необходимо выполнить скрипт на сервере для актуализации прайс-листа.
update tbl_OfferingPrice
set PriceKindID = '{5EC1AF89-2B99-4E78-9965-C0DAA8F00B69}'
Где {5EC1AF89-2B99-4E78-9965-C0DAA8F00B69} ID [Основной прайс-лист] из перечисления enm_OfferingPriceKind, который Вы можете посмотреть в Terrasoft Administrator.

О, спасибо огромное буду разбираться!

А, понятно, у ошибся в главном - надо изначально не с "продукт" интегрироваться, а с "цена продукта".

Добрый день, к сожалению не могу посмотреть пример, т.к. стоит версия 3.4.9.132
Но задача в сущности такая же.
Можете ли выслать свежий пример с настройками для моего случая? Зачухался я уже совсем с этими ценами... Кроме первой - не импортирует больше ничего.

*3.4.0.132

Денис, здравствуйте.

Инструкция по импорту цены во вложении.
Если возникнут дополнительные вопросы - буду рад помочь.

"Олейник Дмитрий" написал:

Денис, здравствуйте.

Инструкция по импорту цены во вложении.

Если возникнут дополнительные вопросы - буду рад помочь.

Прикрепленный файлРазмер

import_ceny.docx
1.13 Мб

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


Здравствуйте, подскажите пожалуйста не отображается цена, я сделал как в файле, но цена не появляется .
Импорт вроде происходит

Импортируются данные в таблицу 'Цена прайс-листа'
Импортируется запись Итого = 1100
Запись обновлена
Импортируется запись Итого = 1150
Запись обновлена
Импортируется запись Итого = 1300
Запись обновлена
Импортируется запись Итого = 1650
Запись обновлена
Импортируется запись Итого = 1850
Запись обновлена
Импорт данных в таблицу 'Цена прайс-листа' завершен. Добавлено: 5. Обновлено:0.
Импорт данных из листа 'Прайс' завершен

3.4.0.130

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

Во вложении еще один способ. Попробуйте и сообщите о результатах.

"Олейник Дмитрий" написал:

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

Во вложении еще один способ. Попробуйте и сообщите о результатах.

Прикрепленный файлРазмер

import_prays_lista.docx
270.87 кб

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


Спасибо, Дмитрий, способ работает, но есть пару вопросов.

1. Почему устанавливается именно розничный прайс-лист(в настройках базовый оптовый) ?
2. Как добавить тип продукта в импорт ?

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

По первому вопросу, в скрипте
строка [PriceCategoryID] = '66A30457-F823-44A3-9E8D-1CD58FAE2A59' устанавливает розничный прайс-лист, для оптового замените на '1D3CEAA6-9787-4633-8BA5-5ABEC4E44C2C'.

По поводу второго вопроса - просто добавьте колонку "тип" в ексель, и настройте соответствие полей.

Спасибо, разобрался !

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

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

Здравствуйте, теперь стоит задача сделать импорт в XRM D 3.4.1.ххх

в принципе действия аналогичные, описанным выше , но есть проблема , в XRM немного по другому реализован механизм ценообразования .Там существует авто расчет полей сумма налога, цена и т.д

При импорте заполняется ключевое поле Цена с налогом , а так-как импорт выполняется напрямую в таблицу (в обход обработчиков) ,то авто расчет полей не выполняется , в связи с этим вопрос:

Как быть в такой ситуации ?

в JS кодить не умею , если в лоб решать проблему , то нужно написать по кнопке цикл перебор всех записей таблицы и вызвать функцию пересчета , как-то так ...

может есть еще какие решения ?

Здравствуйте!
Если не вручную - то только со скрипта вызывать данную функцию...
Этот код можно повесить на нажатие кнопки, к примеру, "Пересчитать":

var Dataset = Services.GetNewItemByUSI('ds_Offering');
Dataset.Open();
while(!Dataset.IsEOF)
{
//Выполнить функцию пересчета;
Dataset.GotoNext();
}

"Олейник Дмитрий" написал:

Dataset.Open();

while(!Dataset.IsEOF)

{

//Выполнить функцию пересчета;

Dataset.GotoNext();

}

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


Спасибо за ответ , а какая функция в XRM отвечает за пересчет ?

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

Функция CalcOfferingPriceTaxSum(AObject, AValue); и другая логика на событии OfferingPriceDataChange(DataFieldName, AValue, AObject, Dataset).

"Олейник Дмитрий" написал:

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

Функция CalcOfferingPriceTaxSum(AObject, AValue); и другая логика на событии OfferingPriceDataChange(DataFieldName, AValue, AObject, Dataset).

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки

Здравствуйте!
Подскажите, пожалуйста, какие значения в параметры нужно передавать? После импорта заполняется только Цена с налогом.

Можно ли это сделать не на кнопку, а после проведения импорта - автоматически? Причем чтоб прописать цены только добавленным записям

Марина, здравствуйте.

Вот код, который пересчитывает цену по продуктам. Его можно поместить в обработчик нажатия действия "Пересчитать цену после импорта".

var DSOfferingPrice = Services.GetNewItemByUSI('ds_OfferingPrice');
         EnableDatasetFilters(DSOfferingPrice, false);
         DSOfferingPrice.Open();
         DSOfferingPrice.GotoFirst();
         while(!DSOfferingPrice.IsEOF)
         {        
         var OfferingPriceEdit = new Object();
         CopyOfferingPriceDatasetToObject(DSOfferingPrice, OfferingPriceEdit);
         //recalc price
    OfferingPriceDataChange('Price', DSOfferingPrice('Price'), OfferingPriceEdit, DSOfferingPrice);
 
         //PriceWithoutTax'
         OfferingPriceDataChange('PriceWithoutTax', DSOfferingPrice('PriceWithoutTax'), OfferingPriceEdit, DSOfferingPrice);
 
         //TaxID
         OfferingPriceDataChange('TaxID', DSOfferingPrice('TaxID'), OfferingPriceEdit, DSOfferingPrice);
         CopyOfferingPriceObjectToDataset(OfferingPriceEdit, DSOfferingPrice);          
 
         DSOfferingPrice.GotoNext();
         }
         ShowInformationDialog('Пересчет закончен');

Подключите скрипт scr_OfferingPriceEdit.

Автоматически не получится, т.к. не срабатывают события датасета (в этом то изначально проблема и её причина).

"Шальнева Марина" написал:

Можно ли это сделать не на кнопку, а после проведения импорта - автоматически? Причем чтоб прописать цены только добавленным записям

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

У вас какая платформа CRM иил XRM ?

если CRM то все выше сказанное верно

в XRM сложно ,но можно , кнопка не нужна,
все настраивается при импорте и на уровне БД запросами

на счет цен старых - новых , при импорте задаются ключевые поля и по ним ведется обновление или добавление данных в БД.

"Катыхин Руслан" написал:

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

У вас какая платформа CRM иил XRM ?

если CRM то все выше сказанное верно

в XRM сложно ,но можно , кнопка не нужна,

все настраивается при импорте и на уровне БД запросами

на счет цен старых - новых , при импорте задаются ключевые поля и по ним ведется обновление или добавление данных в БД.

XRM D 3.4.1.xxx

MSSQL 2008

Добрый день!

Используется XRM.

При импорте могу настроить импорт одной цены - Цена с налогом. Других у меня цен в файле нет.
Кнопкой не удобно (про нее можно и забыть), поэтому нужна автоматизация.

Хотела в скрипт Scr_DataflowExcelUtils там в функции function ExecuteImportFromExcel(DataflowID, Workbook, UpdateRecords, ServiceScriptID) прописать, но не пойму как обратиться именно к импортированным записям.

Руслан, могли бы вы наглядно показать как настроить? Спасибо.

"Шальнева Марина" написал:

Хотела в скрипт Scr_DataflowExcelUtils там в функции function ExecuteImportFromExcel(DataflowID, Workbook, UpdateRecords, ServiceScriptID) прописать, но не пойму как обратиться именно к импортированным записям.

Руслан, могли бы вы наглядно показать как настроить? Спасибо.

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

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

только запрос там надо подправить

update [TSXRM].[dbo].tbl_OfferingPrice
set 
[PriceKindID] = '5EC1AF89-2B99-4E78-9965-C0DAA8F00B69',
[PriceCategoryID] = '1D3CEAA6-9787-4633-8BA5-5ABEC4E44C2C ',
[TaxID] = 'EDDF2911-0A45-49D5-8ABA-BCAD35BE2275',
[IsPriceWithTaxCalc] = 1,
StartDate = CONVERT(DATETIME, GETDATE(), 121)
where PriceKindID is NULL

старайтесь при импорте заполнить максимум информации даже те поля которые казалось бы не важны (кратность, объем, вес к примеру = 1 ) или в UPDATE tbl_Offering потом эти поля заполнить можно и т.д

Поля по умолчанию в импорте Цена прайс листа>Название = значение, Цена прайс листа>Основной прайс лист= значение

Не забудьте как написано выше указать ключевые поля например по цене и по названию продукта

что вспомнил написал... если что пишите попробую помочь...

Руслан, это ведь тоже нужно делать ручками после каждого импорта (запрос на уровне БД), правильно понимаю? Тогда это не удобно. Также возникают и другие задачи, которые требуют обработки импортированных данных после импорта.

Кстати, этот запрос, я прописываю в скрипте Scr_DataflowExcelUtils в функции ExecuteImportFromExcel. Прайс становится актуальным, прописывается величина налога.. но! Цены не заполняются

"Шальнева Марина" написал:

Кстати, этот запрос, я прописываю в скрипте Scr_DataflowExcelUtils в функции ExecuteImportFromExcel. Прайс становится актуальным, прописывается величина налога.. но! Цены не заполняются

а у Вас импорт настроен ? цена появляется ? хотя бы в карточке продукта ?

Импорт настроен, после прайс-лист выглядит следующим образом:
Прайс-лист

"Шальнева Марина" написал:

Импорт настроен, после прайс-лист выглядит следующим образом:

Прайс-лист


а карточка продукта ?

Карточка продукта выглядит следующим образом:
продукт

Марина, здравствуйте.

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

Марина , здравствуйте , я сейчас пробовал загрузить прайс

1. Открыл настроенный импорт выполнил , загрузились позиции
2. Выполнил этот запрос (скопировал его выше )

UPDATE [TSXRM].[dbo].tbl_OfferingPrice
SET
[PriceKindID] = '5EC1AF89-2B99-4E78-9965-C0DAA8F00B69',
[PriceCategoryID] = '1D3CEAA6-9787-4633-8BA5-5ABEC4E44C2C ',
[TaxID] = 'EDDF2911-0A45-49D5-8ABA-BCAD35BE2275',
[IsPriceWithTaxCalc] = 1,
StartDate = CONVERT(DATETIME, GETDATE(), 121)
WHERE PriceKindID IS NULL

и еще у меня в меню действия добавлен скрипт(извиняюсь, забыл про него)

function amiRecalcOfferingPriceOnExecute(ActionMenuItem, Sender) {
 
	var DSOfferingPrice = Services.GetNewItemByUSI('ds_OfferingPrice');
 
         EnableDatasetFilters(DSOfferingPrice, false);
 
         DSOfferingPrice.Open();
 
         DSOfferingPrice.GotoFirst();
 
         while(!DSOfferingPrice.IsEOF)
         {       
         var OfferingPriceEdit = new Object();
 
    CopyOfferingPriceDatasetToObject(DSOfferingPrice, OfferingPriceEdit);
 
    //recalc price
    OfferingPriceDataChange('Price', DSOfferingPrice('Price'), OfferingPriceEdit, DSOfferingPrice);
 
	  DSOfferingPrice.Edit();
	  DSOfferingPrice('TaxSum') =  OfferingPriceEdit.TaxSum;
	  DSOfferingPrice('TaxBasicSum') =  OfferingPriceEdit.TaxBasicSum;
	  DSOfferingPrice('PriceWithoutTax') =  OfferingPriceEdit.PriceWithoutTax;
	  DSOfferingPrice('BasicPriceWithoutTax') =  OfferingPriceEdit.BasicPriceWithoutTax;
 
	  DSOfferingPrice.Post();
 
      DSOfferingPrice.GotoNext();
         }
 
         ShowInformationDialog('Пересчет закончен');
 
 
}

проверил все работает

Добрый день!

Выполнять функцию - function amiRecalcOfferingPriceOnExecute(ActionMenuItem, Sender) как-то очень не удобно, когда записей в Продуктах больше 15 000. И это будет занимать много времени. Так же можно забыть его запустить. Поэтому хотелось бы проходиться скриптом по тем записям, которые только что были проимпортированы.

я это делал один раз при запуске системы...

всегда можно применить фильтр программно.... на нули или по дате к примеру ... масса вариантов

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


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

так добавьте скрипт в функцию которую Вы написали...

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

Каким образом можно запретить импорт значений в подчинённые (связанные справочники)?
Настраиваю импорт цен на продукты (деталь Прайс-листы)
Настроил, импортируется. Но если встречается новое название продукта или прайс-листа (например из-за ошибки), то они добавляются в раздел продуктов или в справочник прайс-листов.

Пробовал убрать название продукта и прайса из первичных ключей, тогда вообще ничего не импортируется, только в логе сообщение, что импорт прерван, т.к. не был импортирован справочник. Пробовал не связывать первичное поле подчинённой таблицы, тогда при импорте возникает ошибка - что-то вроде не могу конвертировать string в unicidentifier.

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

Нравится

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

Данное действие не внесено в базовую реализацию.
Система "верит" тому, что загружаемый файл актуален. Соответственно, если в списке продуктов встречается продукт, который не был ранее занесен - система создаст данный продукт, так как считается, что он необходим пользователю.
Ваш запрос зарегистрирован как пожелание и передан на 4-ую линию поддержки для рассмотрения актуальности следующей реализации:
По аналогии с настройкой [Обновлять существующие записи] добавить в функционал настройку [Обновлять только существующие записи].

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