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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.02.2013, 13:23   #1  
nikshev is offline
nikshev
Участник
 
54 / 10 (1) +
Регистрация: 11.12.2010
Здравствуйте! Помогите пожалуйста советом. За год с небольшим в справочнике товаров было создано n-ое количество
дублей товаров в силу разных причин. Теперь когда подошли к планированию закупок и продаж эти дубли стали камнем преткновения.
Существует ли какой нибудь метод объединения позиций в справочнике? Объединение с переносом всех операций и т.д.
Мне посоветовали сделать следующим образом:


Item1.SETFILTER("No.",'73437');
Item2.SETFILTER("No.",'73438');
IF Item1.FINDFIRST THEN
IF Item2.FINDFIRST THEN
BEGIN
Item1.DELETE(FALSE);
Item2.RENAME('73437');
END;

Но этот метод не работает так как по второй команде выскакивает много ошибок о существующих записях с кодом товара 73438
Выскакивает ошибка в единицах измерения, в точке коррекции себестоимости. Конечно можно удалять записи, но чувствую, что это не выход.
Так как можно удалить чего нибудь лишнего. Заранее всем благодарен.
Старый 20.02.2013, 15:36   #2  
Captain is offline
Captain
Участник
Лучший по профессии 2017
 
300 / 81 (3) ++++
Регистрация: 28.02.2003
Как вариант, занулить остаток по дублированной позиции (Через журнал товаров - Расход). Оприходовать на оставшуюся позицию по сумме и количеству. Сделать коррекцию себестоимости и удалить карточку дубля.
__________________
---------------------------------------------------------------------------------------------
"Собрать стадо из баранов легко, трудно собрать стадо из кошек" Профессор Сергей Капица
Старый 20.02.2013, 15:43   #3  
nikshev is offline
nikshev
Участник
 
54 / 10 (1) +
Регистрация: 11.12.2010
Спасибо за ответ, но к сожалению речь идет про тысячи. А в ручном режиме это года пол, если ошибок нигде не сделаешь.
Старый 20.02.2013, 17:19   #4  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от nikshev Посмотреть сообщение
Спасибо за ответ, но к сожалению речь идет про тысячи. А в ручном режиме это года пол, если ошибок нигде не сделаешь.
А кто мешает сделать в автоматическом (сделать небольшой пакетник)? У вас же по идее уже есть список дублей. Даете его пакетнику,и получаете журнал к обнулению и блокировке и журнал к приходу. Учитываете и радуетесь. В данном случае самый реальный вариант.
Надеюсь у вас резервов то хотя бы нет на эти товары?
Старый 20.02.2013, 19:18   #5  
nikshev is offline
nikshev
Участник
 
54 / 10 (1) +
Регистрация: 11.12.2010
В резервах могут быть и на транзитных складах и в ячейках! Вот такой
Старый 20.02.2013, 19:18   #6  
nikshev is offline
nikshev
Участник
 
54 / 10 (1) +
Регистрация: 11.12.2010
Вот такой тихий ужас....
Старый 20.02.2013, 20:19   #7  
nikshev is offline
nikshev
Участник
 
54 / 10 (1) +
Регистрация: 11.12.2010
В общем кому интересно то решилось это созданием отчета На базе таблицы Item:
DataItemTable=Table27;
OnPreDataItem=BEGIN
Item.SETRANGE("No.",OldItemCode1);
END;

OnAfterGetRecord=VAR
ItemLocal@1101970000 : Record 27;
BEGIN
IF (OldItemCode1 <> '') AND (NewItemCode <> '') THEN
WITH Item DO BEGIN
ItemLocal.GET(NewItemCode);
TempItem.INIT;
TempItem.TRANSFERFIELDS(ItemLocal);
ItemLocal.DELETE;


BinContent.RESET;
BinContent.SETRANGE("Item No.",OldItemCode1);
BinContent.DELETEALL;

ItemUnitOfMeasure.RESET;
ItemUnitOfMeasure.SETRANGE("Item No.",OldItemCode1);
ItemUnitOfMeasure.DELETEALL;

AvgCostAdjmtEntryPoint.RESET;
AvgCostAdjmtEntryPoint.SETRANGE("Item No.",OldItemCode1);
AvgCostAdjmtEntryPoint.DELETEALL;

SalesPrice.RESET;
SalesPrice.SETRANGE("Item No.",OldItemCode1);
SalesPrice.DELETEALL;

ItemItemGroup.RESET;
ItemItemGroup.SETRANGE("Item No.",OldItemCode1);
ItemItemGroup.DELETEALL;

IF RENAME(NewItemCode) THEN BEGIN
TRANSFERFIELDS(TempItem);
MODIFY;
END ELSE BEGIN
TempItem.INSERT;
END;
END;
END;

}
Некоторые таблицы не из стандартной конфигурации (Sales price, ItemItemGroup). Но работает отлично и вроде корректно. Соединяет товары вместе с операциями.
Всем спасибо за ответы.
Старый 20.02.2013, 20:36   #8  
Captain is offline
Captain
Участник
Лучший по профессии 2017
 
300 / 81 (3) ++++
Регистрация: 28.02.2003
Эх, на самом деле там много глубже...((. Поверьте и никогда не трогайте товарные операции нестандартными способами. (Даже в стандарте, нет сжатия товарных операций и подобных манипуляций).
На вскидку одни ГТД после данной функции улетят в ...
__________________
---------------------------------------------------------------------------------------------
"Собрать стадо из баранов легко, трудно собрать стадо из кошек" Профессор Сергей Капица
Старый 21.02.2013, 10:02   #9  
nikshev is offline
nikshev
Участник
 
54 / 10 (1) +
Регистрация: 11.12.2010
Цитата:
Сообщение от captain Посмотреть сообщение
Эх, на самом деле там много глубже...((. Поверьте и никогда не трогайте товарные операции нестандартными способами. (Даже в стандарте, нет сжатия товарных операций и подобных манипуляций).
На вскидку одни ГТД после данной функции улетят в ...
Спорить не буду! Тестирование проводил на тестовой базе, мне показалось что сработало корректно. На сколько я понял функция RENAME переименовывает ключ и переименовывает во всех связанных таблицах. Вот тут вопрос на сколько глубоко, она это делает. Тестирование продолжается потом отпишусь о результатах.
Старый 27.02.2013, 00:39   #10  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
2 года назад была проблема с дублежами товаров/клиентов/брендов/..

Сделал еще тогда (сейчас наверное скажи написать на память - не смогу) код, который "мержит" данные.
Сейчас полной БД нет, чтобы достать объект, поэтому пишу почти полную МОЮ (ненужное - просто выкинуть) часть кода:
Цитата:
OnAfterGetRecord=VAR
Cust@1210000 : Record 18;
BEGIN
IF (OldCustomer <> '') AND (NewCustomer <> '') THEN
WITH Customer DO BEGIN
Cust.GET(NewCustomer);

CommentLineTmp.RESET;
CommentLineTmp.DELETEALL;
CommentLine.RESET;
CommentLine.SETRANGE("Table Name", CommentLine."Table Name"::Customer);
CommentLine.SETRANGE("No.", Cust."No.");
IF CommentLine.FINDFIRST THEN
REPEAT
CommentLineTmp.INIT;
CommentLineTmp.TRANSFERFIELDS(CommentLine);
CommentLineTmp.INSERT;
CommentLine.DELETE;
UNTIL CommentLine.NEXT = 0;

TmpCustomer.INIT;
TmpCustomer.TRANSFERFIELDS(Cust);
Cust.DELETE;

IF DefaultDimension.GET(DATABASE::Customer, OldCustomer, 'LAND') THEN BEGIN
TmpDefaultDimension.INIT;
TmpDefaultDimension.TRANSFERFIELDS(DefaultDimension);
DefaultDimension.DELETE;
END;

IF GUIALLOWED THEN
Window.UPDATE(1, Text002);
IF RENAME(NewCustomer) THEN BEGIN
TRANSFERFIELDS(TmpCustomer);
MODIFY;
IF GUIALLOWED THEN
Window.UPDATE(1, Text003);

IF CommentLineTmp.FINDFIRST THEN BEGIN
CommentLine.SETRANGE("No.", "No.");
IF CommentLine.FINDLAST THEN
LineNo := CommentLine."Line No."
ELSE
LineNo := 0;

REPEAT
LineNo += 10000;
CommentLine.INIT;
CommentLine.TRANSFERFIELDS(CommentLineTmp);
CommentLine."Line No." := LineNo;
CommentLine.INSERT;
UNTIL CommentLineTmp.NEXT = 0;
END;
END
ELSE BEGIN
TmpCustomer.INSERT;
TmpDefaultDimension.INSERT;
IF GUIALLOWED THEN
Window.UPDATE(1, Text004);
IF CommentLineTmp.FINDFIRST THEN
REPEAT
CommentLine.INIT;
CommentLine.TRANSFERFIELDS(CommentLineTmp);
CommentLine.INSERT;
UNTIL CommentLineTmp.NEXT = 0;
END;
SLEEP(200);
END;
END;
Старый 27.02.2013, 00:41   #11  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Удалил дубляж - была 404 ошибка и обновил страницу. В итоге вставилось 2 раза.
Прошу модеров удалить данное сообщение
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:38.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.