AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.02.2023, 17:47   #1  
mira is offline
mira
Участник
Аватар для mira
 
140 / 25 (1) +++
Регистрация: 18.03.2007
Адрес: Москва
Хранимка, INSERT INTO ..SELECT (с GROUP by!!!), значение Line No
Всем добрый день!

1.Выгрузка для маркетплейса из выделенных в списке перемещений. Заказчик хочет группировку товаров по артикулу+цвету.
Данные беру хранимкой и пишу в таблицу, в которой первичный ключ Document Type,Document No.,Line No_.
Не могу корректно определить Line No_ в строке.

Вот так ругается при выгрузке
Violation of PRIMARY KEY constraint 'ххх$Export Documents$0'. Cannot insert duplicate key in object 'dbo.ххх$Export Documents'.

2.Сделала вот такую фн:
USE [ххх]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <ххх>
-- Create date: <2023-01-26, ,>
-- Description: <нужна в хп [dbo].[rnd_export22y_transfer_group], где строки перемещ групп по артик товара+цвет и запись в т 50124 с ключом ... Строка Но>
-- #SC-хх 2023-01-16 Выгрузка
-- =============================================
ALTER FUNCTION [dbo].[GetLineNo]
(
@LastLineNo int
)
RETURNS int
AS
BEGIN
RETURN (@LastLineNo + 10000)
END


в хп
SET @line = 10000

Дальше надо как-то @line впихнуть в конструкцию

INSERT INTO [ххх].[dbo].[ххх$Export Documents]
([Document Type]
,[Document No_]
......
SELECT @Type --(<Document Type, int,>
,@docGroup --docNo--<Document No_, varchar(30),>
,1--<State, int,>
,sl.[Shipment Date]--<DateTime, datetime,>
,sl.[Document No_]--<Vender, varchar(100),>
..........
Что-то типа , @line = (select [dbo].[GetLineNo] (@line) )
чтобы и @line увеличилось, и в новую запись пошло увеличенное значение.

Не получается использовать фн [dbo].[GetLineNo] ! (((((

3. Я извернулась вот так:

, (SELECT top 1 FLOOR(RAND(ART2.[Qty])*(ART2.[Line No_]))+ FLOOR(RAND(ART2.[Line No_])*(ART2.[Qty]))) [Line No]

ART2.[Line No_] при группировке сумм по всем лайнам)))
а ART2.[Qty] - по всем количествам в строках

Пока работает.

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

Спасибо!

Последний раз редактировалось mira; 01.02.2023 в 17:54.
Старый 01.02.2023, 22:21   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,314 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Не очень понял задачи. Нужно сгруппировать некоторые данные, а потом (уже сгруппированные) их пронумеровать? Если так - то это делается легко (Transact SQL)

X++:
select salesid, itemid, sum(SalesQty) as SumQty, ROW_NUMBER() over(order by salesId) as LineNumber from salesline
group by salesid, itemid
Нажмите на изображение для увеличения
Название: Pic.png
Просмотров: 77
Размер:	26.2 Кб
ID:	13539

Здесь функция ROW_NUMBER() - это штатная функция нумерации строк, а конструкция over (order by salesId) позволяет определить сортировку, согласно которой будет выполняться нумерация. Например, можно указать вместо salesId - itemid и тогда результат будет несколько иной (другие строки получат номер 1, 2 и т.д.)

Если это не то, что нужно - то я не понял задачи. Свои (невстроенные) функции в SQL использовать нужно аккуратно. Они не самые "шустрые" в плане исполнения.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 02.02.2023 в 14:04.
За это сообщение автора поблагодарили: mira (1).
Старый 02.02.2023, 11:42   #3  
mira is offline
mira
Участник
Аватар для mira
 
140 / 25 (1) +++
Регистрация: 18.03.2007
Адрес: Москва
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Не очень понял задачи. Нужно сгруппировать некоторые данные, а потом (уже сгруппированные) их пронумеровать? Если так - то это делается легко (Transact SQL)

X++:
select salesid, itemid, sum(SalesQty) as SumQty, ROW_NUMBER() over(order by salesId) as LineNumber from salesline
group by salesid, itemid
Вложение 13539
sukhanchik, спасибо большое!
Получилось и шустренько так выгрузилось в отличие от моего варианта
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
msdn.microsoft.com/nav: Bring Dynamics 365 into the flow of work with Teams—at no additional cost Blog bot NAV: Blogs 0 14.07.2021 18:12
Navigate Into Success: Resident control add-ins – no SingleInstance Blog bot NAV: Blogs 0 08.02.2021 16:11
Navigate Into Success: When you just must COUNT, no matter what Blog bot NAV: Blogs 0 09.03.2017 11:11
Kine’s info: Copy Microsoft Dynamics NAV company by SQL script into another database v2 Blog bot NAV: Blogs 0 15.05.2016 17:11
Где заполняется "Sales Invoice Line"."CD No." ? Control NAV: Программирование 9 16.09.2008 10:44
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:06.