Импорт цены из Excel в Продукты

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

Возник вот вопрос - есть простенькая табличка в 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. И это будет занимать много времени. Так же можно забыть его запустить. Поэтому хотелось бы проходиться скриптом по тем записям, которые только что были проимпортированы.

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

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

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


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

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

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