06.04.2015, 15:06 | #1 |
Участник
|
Поиск по таблице
Выделена строка нужно найти есть ли в таблице (в гриде(RContractTable)) запись где например № договора равен № договора выделенной строки.
RContractTable.RContractNumber дает значение выделенной строки а как обратится ко всем другим не знаю. |
|
06.04.2015, 15:31 | #2 |
северный Будда
|
Уточните, что именно вам надо - просто узнать, если ли другие договоры с таким же номером, выделить их в гриде, запустить по ним какую-то обработку, ещё что-то. Если первое, то достаточно повесить на гриде кнопку, которая будет считать количество строк с номером договора, соответствующим таковому для активной строки грида. Если больше 1, то есть.
__________________
С уважением, Вячеслав |
|
06.04.2015, 15:40 | #3 |
Участник
|
а как сделать этот подсчет?
Мне надо если есть строка где номер договора, имя контрагента, и номер подразделения совпадают то тогда значит что это дубликат и для названия этого документа добавить дату подписания. Да просто узнать есть ли договор дубликат. |
|
06.04.2015, 16:07 | #4 |
северный Будда
|
это вам надо не строки выделять тогда, а разово пробежаться джобом по всем договорам в поисках дубликатов. самый простой вариант - сделать цикл с группировкой по нужным уникальным полям и подсчётом Count(RecId). А внутри цикла смотреть - если этот count больше 1, то есть дубликаты. Тогда надо запустить второй цикл (по дубликатам), в котором их коды будут исправляться на нужные.
Да, и совсем не помешал бы уникальный индекс на таблице. Во избежание дубликатов на будущее.
__________________
С уважением, Вячеслав |
|
06.04.2015, 16:26 | #5 |
Участник
|
спасибо наоборот дупликаты нужны и моя прога генерирующая уникальное название на них не работает правильно, для этого и нужен поиск чтобы для дубликата добавочно довить дату который в названиях всех других не используются
|
|
06.04.2015, 16:26 | #6 |
Участник
|
А как это все будет выглядеть с точки зрения пользователя? Что в этот момент делает пользователь? Выбирает договор для некоего документа или создает новый договор? "Добавить дату подписания" куда? В договор? А если и "дата подписания" совпадет?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
07.04.2015, 13:02 | #7 |
Участник
|
Пользователь в моем случае это человек который добавляет скан копии в Search а затем вписывает айди договора в аксапту. Моя программа, а точнее просто кнопка, при выборе договора и нажатии на кнопку вылазиет диалог выбора файла там пользователь выбриает отсканированый договор после чего жмет окей и происходит переименнование документа по образцу "№подразделение_№договора_Контрагент" затем документ помещается в серч посредством апи функций и возвращает его айди в нужную ячейку.
Некоторым контрагентам удобней если номер договора меняться не будет даже если это новый договор, но в этом случае в серч он наложится на старый так как совпадет уникальное обозначение, поэтому было принято добавлять даты подписания в конце договора. Я программист на пол ставки) сказали сделать так а как сделать не сказали) с аксаптой работую только в рамках данной задачи, никогда до этого не работал с ней да и в дальнейшем врятли буду) |
|
07.04.2015, 14:36 | #8 |
Участник
|
Цитата:
Сообщение от pitersky
Уточните, что именно вам надо - просто узнать, если ли другие договоры с таким же номером, выделить их в гриде, запустить по ним какую-то обработку, ещё что-то. Если первое, то достаточно повесить на гриде кнопку, которая будет считать количество строк с номером договора, соответствующим таковому для активной строки грида. Если больше 1, то есть.
|
|
07.04.2015, 15:18 | #9 |
Участник
|
X++: ttsbegin; while select forupdate RContractTableUpdate where RContractTableUpdate.RContractNumber == RContractTable.RContractNumber && RContractTableUpdate.RecId != RContractTable.RecId { ... ... RContractTableUpdate.update(); } ttscommit; |
|
07.04.2015, 15:26 | #10 |
Участник
|
Цитата:
Сообщение от Sy4a
Пользователь в моем случае это человек который добавляет скан копии в Search а затем вписывает айди договора в аксапту. Моя программа, а точнее просто кнопка, при выборе договора и нажатии на кнопку вылазиет диалог выбора файла там пользователь выбриает отсканированый договор после чего жмет окей и происходит переименнование документа по образцу "№подразделение_№договора_Контрагент" затем документ помещается в серч посредством апи функций и возвращает его айди в нужную ячейку.
Некоторым контрагентам удобней если номер договора меняться не будет даже если это новый договор, но в этом случае в серч он наложится на старый так как совпадет уникальное обозначение, поэтому было принято добавлять даты подписания в конце договора. Я программист на пол ставки) сказали сделать так а как сделать не сказали) с аксаптой работую только в рамках данной задачи, никогда до этого не работал с ней да и в дальнейшем врятли буду) Кстати, можете в конец имени файла добавлять RContractTable.RecId выбранной записи. Уникальность обеспечена, а то, что для пользователя это "мусор" не так уж и принципиально.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
07.04.2015, 15:41 | #11 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Я правильно Вас понял, что цель всего этого сформировать уникальное имя файла из реквизитов договора? Так может, просто всегда добавлять в конец дату подписания и не заморачиваться поиском?
Кстати, можете в конец имени файла добавлять RContractTable.RecId выбранной записи. Уникальность обеспечена, а то, что для пользователя это "мусор" не так уж и принципиально. А покачто попробую как написал Kiot, точнее уже завтра, смена заканчивается. |
|
07.04.2015, 16:59 | #12 |
Участник
|
Цитата:
Сообщение от Sy4a
Это то да можно и для всех пихать только дело уже в том что в серче хранятся сотни договоров у которых ещё может быть под сотни версий и если сделать так то все старые просто затеряются. Одним словом это Завод).
А покачто попробую как написал Kiot, точнее уже завтра, смена заканчивается. Вы ведь именно это и собираетесь сделать, просто добавляете окончание не для всех новых файлов, а для некоторых. Что изменится, если будете добавлять для всех?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
08.04.2015, 12:32 | #13 |
Участник
|
изменится то что документы добавляются в серч по обозначению а обозначение это название файла если название изменится то они будут добавляться как новые договора а надо чтобы накладывались на старые. Просто я сделал так что ищется договор в серче по обозначению если обозначение находится то значит это тот же договор и ему добавляется новая версия если не находится то создается как новый которому присваивается новый айди.
|
|
08.04.2015, 12:52 | #14 |
Участник
|
Пишет переменная RContractTableUpdate не объявлена... как её объявить или какой класс присвоить?
|
|
08.04.2015, 13:01 | #15 |
Участник
|
Цитата:
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 |
Участник
|
Цитата:
Сообщение от Sy4a
изменится то что документы добавляются в серч по обозначению а обозначение это название файла если название изменится то они будут добавляться как новые договора а надо чтобы накладывались на старые. Просто я сделал так что ищется договор в серче по обозначению если обозначение находится то значит это тот же договор и ему добавляется новая версия если не находится то создается как новый которому присваивается новый айди.
У Вас есть старые договора (старые записи таблицы RContractTable), к которым уже есть файлы в хранилище. Теперь создали новую записи в таблице договоров с тем же номером. Как Вы определите, что речь идет о новом договоре, к которому файлы еще не прикреплялись, а не о старом, где надо выполнить замену? Предположим, добавили файлы к обоим договорам. Теперь внесли изменение в файл по одному из договоров. Как Вы определите для какого из этих договоров надо добавлять некое окончание к имени файла для его поиска (дату подписания), а для какого - нет?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
08.04.2015, 14:43 | #17 |
Участник
|
Уловил о чем ты. На данный момент имена файлов пишется вручную и люди которые сканят эти договора знают че к чему и дописывают где надо дату подписания, а заносят их другие люди и в поиске вбивают номер и по дате смотрят в какой внести (просто знают что если есть дата то это дубликат). После завершения того что я делаю эти же люди будут заносить их и в аксапту и соотвественно в серч посредством нажатия всего одной кнопки и соответственно они будут знать что это за договор. Процесс идет если я не ошибуюсь следующим образом:
Сначало создается договор в аксапте по всем правилам и тд, затем они идут его утверждать с начальником или ещё с кем (имею виду договор на бумаге), затем если утвержден его сканируют и его добавляют в серч и его айди заносят в аксапту. Если бы это делал левый человек так скажем то ты прав он ни как не узнает какой это договор и с какого из них брать дату, точнее в какой добавить) |
|
08.04.2015, 14:44 | #18 |
Участник
|
Повторю ещё раз - ЭТО ЗАВОД) тут всегда всё через одно место делается.)
|
|
08.04.2015, 15:19 | #19 |
Участник
|
Цитата:
Сообщение от Sy4a
Уловил о чем ты. На данный момент имена файлов пишется вручную и люди которые сканят эти договора знают че к чему и дописывают где надо дату подписания, а заносят их другие люди и в поиске вбивают номер и по дате смотрят в какой внести (просто знают что если есть дата то это дубликат). После завершения того что я делаю эти же люди будут заносить их и в аксапту и соотвественно в серч посредством нажатия всего одной кнопки и соответственно они будут знать что это за договор. Процесс идет если я не ошибуюсь следующим образом:
Сначало создается договор в аксапте по всем правилам и тд, затем они идут его утверждать с начальником или ещё с кем (имею виду договор на бумаге), затем если утвержден его сканируют и его добавляют в серч и его айди заносят в аксапту. Если бы это делал левый человек так скажем то ты прав он ни как не узнает какой это договор и с какого из них брать дату, точнее в какой добавить) Вообще-то, подобные задачи решаются по другому. Просто в таблице RContractTable (или в таблице связи, если на один договор может быть несколько файлов) тупо записывается имя файла. И совершенно не важно, есть дубль договора или нет. Главное, чтобы имя файла было уникально во ВСЕЙ таблице. Вот для обеспечения этой уникальности, старые имена записываются "как есть" (они уже уникальны), а для всех новых файлов в конец имени записывается дата подписания. В крайнем случае, можно выполнить массовое переименование старых файлов с добавлением даты в конец имени.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
08.04.2015, 16:04 | #20 |
Участник
|
На мысль на толкнул. Добавлю условие сравнения даты подписания текущей с найдеными если она новее любой из базы то переименовать если же самая старая то не добавлять дату. А так я сделал как написал Kiot и вроде меня устраивает)
|
|