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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.04.2015, 15:06   #1  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
Поиск по таблице
Выделена строка нужно найти есть ли в таблице (в гриде(RContractTable)) запись где например № договора равен № договора выделенной строки.
RContractTable.RContractNumber дает значение выделенной строки а как обратится ко всем другим не знаю.
Старый 06.04.2015, 15:31   #2  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Уточните, что именно вам надо - просто узнать, если ли другие договоры с таким же номером, выделить их в гриде, запустить по ним какую-то обработку, ещё что-то. Если первое, то достаточно повесить на гриде кнопку, которая будет считать количество строк с номером договора, соответствующим таковому для активной строки грида. Если больше 1, то есть.
__________________
С уважением,
Вячеслав
Старый 06.04.2015, 15:40   #3  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
а как сделать этот подсчет?
Мне надо если есть строка где номер договора, имя контрагента, и номер подразделения совпадают то тогда значит что это дубликат и для названия этого документа добавить дату подписания.
Да просто узнать есть ли договор дубликат.
Старый 06.04.2015, 16:07   #4  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
это вам надо не строки выделять тогда, а разово пробежаться джобом по всем договорам в поисках дубликатов. самый простой вариант - сделать цикл с группировкой по нужным уникальным полям и подсчётом Count(RecId). А внутри цикла смотреть - если этот count больше 1, то есть дубликаты. Тогда надо запустить второй цикл (по дубликатам), в котором их коды будут исправляться на нужные.
Да, и совсем не помешал бы уникальный индекс на таблице. Во избежание дубликатов на будущее.
__________________
С уважением,
Вячеслав
Старый 06.04.2015, 16:26   #5  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
спасибо наоборот дупликаты нужны и моя прога генерирующая уникальное название на них не работает правильно, для этого и нужен поиск чтобы для дубликата добавочно довить дату который в названиях всех других не используются
Старый 06.04.2015, 16:26   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Sy4a Посмотреть сообщение
Мне надо если есть строка где номер договора, имя контрагента, и номер подразделения совпадают то тогда значит что это дубликат и для названия этого документа добавить дату подписания.
Да просто узнать есть ли договор дубликат.
А как это все будет выглядеть с точки зрения пользователя? Что в этот момент делает пользователь? Выбирает договор для некоего документа или создает новый договор? "Добавить дату подписания" куда? В договор? А если и "дата подписания" совпадет?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 07.04.2015, 13:02   #7  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
Пользователь в моем случае это человек который добавляет скан копии в Search а затем вписывает айди договора в аксапту. Моя программа, а точнее просто кнопка, при выборе договора и нажатии на кнопку вылазиет диалог выбора файла там пользователь выбриает отсканированый договор после чего жмет окей и происходит переименнование документа по образцу "№подразделение_№договора_Контрагент" затем документ помещается в серч посредством апи функций и возвращает его айди в нужную ячейку.
Некоторым контрагентам удобней если номер договора меняться не будет даже если это новый договор, но в этом случае в серч он наложится на старый так как совпадет уникальное обозначение, поэтому было принято добавлять даты подписания в конце договора.
Я программист на пол ставки) сказали сделать так а как сделать не сказали) с аксаптой работую только в рамках данной задачи, никогда до этого не работал с ней да и в дальнейшем врятли буду)
Старый 07.04.2015, 14:36   #8  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
Цитата:
Сообщение от pitersky Посмотреть сообщение
Уточните, что именно вам надо - просто узнать, если ли другие договоры с таким же номером, выделить их в гриде, запустить по ним какую-то обработку, ещё что-то. Если первое, то достаточно повесить на гриде кнопку, которая будет считать количество строк с номером договора, соответствующим таковому для активной строки грида. Если больше 1, то есть.
Подскажите как сделать этот поиск? то что это будет цикл это понятно но какую функцию использовать чтобы смотреть на i-тую строку чтото немогу найти и сразу вопрос как узнать число всех строк или сделать условие пока не последняя строка
Старый 07.04.2015, 15:18   #9  
Kiot is offline
Kiot
Участник
 
12 / 11 (1) +
Регистрация: 25.01.2012
X++:
ttsbegin;
while select forupdate RContractTableUpdate
where RContractTableUpdate.RContractNumber == RContractTable.RContractNumber 
&&     RContractTableUpdate.RecId                   !=  RContractTable.RecId
{
...     ...
RContractTableUpdate.update();
}
ttscommit;
Старый 07.04.2015, 15:26   #10  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Sy4a Посмотреть сообщение
Пользователь в моем случае это человек который добавляет скан копии в Search а затем вписывает айди договора в аксапту. Моя программа, а точнее просто кнопка, при выборе договора и нажатии на кнопку вылазиет диалог выбора файла там пользователь выбриает отсканированый договор после чего жмет окей и происходит переименнование документа по образцу "№подразделение_№договора_Контрагент" затем документ помещается в серч посредством апи функций и возвращает его айди в нужную ячейку.
Некоторым контрагентам удобней если номер договора меняться не будет даже если это новый договор, но в этом случае в серч он наложится на старый так как совпадет уникальное обозначение, поэтому было принято добавлять даты подписания в конце договора.
Я программист на пол ставки) сказали сделать так а как сделать не сказали) с аксаптой работую только в рамках данной задачи, никогда до этого не работал с ней да и в дальнейшем врятли буду)
Я правильно Вас понял, что цель всего этого сформировать уникальное имя файла из реквизитов договора? Так может, просто всегда добавлять в конец дату подписания и не заморачиваться поиском?

Кстати, можете в конец имени файла добавлять RContractTable.RecId выбранной записи. Уникальность обеспечена, а то, что для пользователя это "мусор" не так уж и принципиально.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 07.04.2015, 15:41   #11  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Я правильно Вас понял, что цель всего этого сформировать уникальное имя файла из реквизитов договора? Так может, просто всегда добавлять в конец дату подписания и не заморачиваться поиском?

Кстати, можете в конец имени файла добавлять RContractTable.RecId выбранной записи. Уникальность обеспечена, а то, что для пользователя это "мусор" не так уж и принципиально.
Это то да можно и для всех пихать только дело уже в том что в серче хранятся сотни договоров у которых ещё может быть под сотни версий и если сделать так то все старые просто затеряются. Одним словом это Завод).
А покачто попробую как написал Kiot, точнее уже завтра, смена заканчивается.
Старый 07.04.2015, 16:59   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Sy4a Посмотреть сообщение
Это то да можно и для всех пихать только дело уже в том что в серче хранятся сотни договоров у которых ещё может быть под сотни версий и если сделать так то все старые просто затеряются. Одним словом это Завод).
А покачто попробую как написал Kiot, точнее уже завтра, смена заканчивается.
Почему затеряется-то? Старые как были, так и остались. А для новых - всегда добавляется некое окончание для однозначной идентификации.

Вы ведь именно это и собираетесь сделать, просто добавляете окончание не для всех новых файлов, а для некоторых. Что изменится, если будете добавлять для всех?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.04.2015, 12:32   #13  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
изменится то что документы добавляются в серч по обозначению а обозначение это название файла если название изменится то они будут добавляться как новые договора а надо чтобы накладывались на старые. Просто я сделал так что ищется договор в серче по обозначению если обозначение находится то значит это тот же договор и ему добавляется новая версия если не находится то создается как новый которому присваивается новый айди.
Старый 08.04.2015, 12:52   #14  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
Цитата:
Сообщение от Kiot Посмотреть сообщение
X++:
ttsbegin;
while select forupdate RContractTableUpdate
where RContractTableUpdate.RContractNumber == RContractTable.RContractNumber 
&&     RContractTableUpdate.RecId                   !=  RContractTable.RecId
{
...     ...
RContractTableUpdate.update();
}
ttscommit;
Пишет переменная RContractTableUpdate не объявлена... как её объявить или какой класс присвоить?
Старый 08.04.2015, 13:01   #15  
Kiot is offline
Kiot
Участник
 
12 / 11 (1) +
Регистрация: 25.01.2012
!
Цитата:
Сообщение от Sy4a Посмотреть сообщение
Пишет переменная RContractTableUpdate не объявлена... как её объявить или какой класс присвоить?
Это не класс а таблица.

RContractTable RContractTableUpdate;

А вообще в соседнем посте я отписывался, Вам стоит начать с пары книг:
1. Авторы Еременко и Шашков, книга по ax 3.0. На форуме часто про неё пишут, в ней всё подробно и понятно расписано, в том числе синтаксис X++ - сам когда-то с неё начинал.
2. SQL http://www.pmbk.ru/lister/016/1/index.shtml она писалась ещё в конце 80х, начале 90х, там предельно просто всё написано - думаю она Вам тоже нужна.
Старый 08.04.2015, 14:16   #16  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Sy4a Посмотреть сообщение
изменится то что документы добавляются в серч по обозначению а обозначение это название файла если название изменится то они будут добавляться как новые договора а надо чтобы накладывались на старые. Просто я сделал так что ищется договор в серче по обозначению если обозначение находится то значит это тот же договор и ему добавляется новая версия если не находится то создается как новый которому присваивается новый айди.
"Ничего не понимаю" (с)

У Вас есть старые договора (старые записи таблицы RContractTable), к которым уже есть файлы в хранилище. Теперь создали новую записи в таблице договоров с тем же номером. Как Вы определите, что речь идет о новом договоре, к которому файлы еще не прикреплялись, а не о старом, где надо выполнить замену?

Предположим, добавили файлы к обоим договорам. Теперь внесли изменение в файл по одному из договоров. Как Вы определите для какого из этих договоров надо добавлять некое окончание к имени файла для его поиска (дату подписания), а для какого - нет?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.04.2015, 14:43   #17  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
Уловил о чем ты. На данный момент имена файлов пишется вручную и люди которые сканят эти договора знают че к чему и дописывают где надо дату подписания, а заносят их другие люди и в поиске вбивают номер и по дате смотрят в какой внести (просто знают что если есть дата то это дубликат). После завершения того что я делаю эти же люди будут заносить их и в аксапту и соотвественно в серч посредством нажатия всего одной кнопки и соответственно они будут знать что это за договор. Процесс идет если я не ошибуюсь следующим образом:
Сначало создается договор в аксапте по всем правилам и тд, затем они идут его утверждать с начальником или ещё с кем (имею виду договор на бумаге), затем если утвержден его сканируют и его добавляют в серч и его айди заносят в аксапту.
Если бы это делал левый человек так скажем то ты прав он ни как не узнает какой это договор и с какого из них брать дату, точнее в какой добавить)
Старый 08.04.2015, 14:44   #18  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
Повторю ещё раз - ЭТО ЗАВОД) тут всегда всё через одно место делается.)
Старый 08.04.2015, 15:19   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Sy4a Посмотреть сообщение
Уловил о чем ты. На данный момент имена файлов пишется вручную и люди которые сканят эти договора знают че к чему и дописывают где надо дату подписания, а заносят их другие люди и в поиске вбивают номер и по дате смотрят в какой внести (просто знают что если есть дата то это дубликат). После завершения того что я делаю эти же люди будут заносить их и в аксапту и соотвественно в серч посредством нажатия всего одной кнопки и соответственно они будут знать что это за договор. Процесс идет если я не ошибуюсь следующим образом:
Сначало создается договор в аксапте по всем правилам и тд, затем они идут его утверждать с начальником или ещё с кем (имею виду договор на бумаге), затем если утвержден его сканируют и его добавляют в серч и его айди заносят в аксапту.
Если бы это делал левый человек так скажем то ты прав он ни как не узнает какой это договор и с какого из них брать дату, точнее в какой добавить)
У тебя ключевая фраза "люди знают". Проблема в том, что Axapta как раз "не знает". Она никак, никоим образом, не сможет определить надо дописывать в конец имени дату или нет. Я показал, что факт наличия дубликата договора не является таким признаком. Надо именно "знать" в той постановке задачи, в которой ты пытаешься ее решить.

Вообще-то, подобные задачи решаются по другому. Просто в таблице RContractTable (или в таблице связи, если на один договор может быть несколько файлов) тупо записывается имя файла. И совершенно не важно, есть дубль договора или нет. Главное, чтобы имя файла было уникально во ВСЕЙ таблице.

Вот для обеспечения этой уникальности, старые имена записываются "как есть" (они уже уникальны), а для всех новых файлов в конец имени записывается дата подписания. В крайнем случае, можно выполнить массовое переименование старых файлов с добавлением даты в конец имени.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 08.04.2015, 16:04   #20  
Sy4a is offline
Sy4a
Участник
 
33 / 12 (1) ++
Регистрация: 17.09.2014
На мысль на толкнул. Добавлю условие сравнения даты подписания текущей с найдеными если она новее любой из базы то переименовать если же самая старая то не добавлять дату. А так я сделал как написал Kiot и вроде меня устраивает)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фильтрование записей при "переходе к основной таблице" demID DAX: Программирование 10 18.11.2015 12:52
Переименование полей в одной таблице на основе данных из другой niksen DAX: Программирование 1 14.09.2011 12:34
как сохранить запрос в таблице kitty DAX: Программирование 13 19.11.2007 20:16
Поиск ссылок на запись в таблице YaHooka DAX: Функционал 9 29.08.2005 13:26
фильтр по связанной таблице mick_777 DAX: Программирование 13 21.08.2002 16:00

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

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

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