|
v7: Не получается сделать нормальный поискПОреквизиту. | ☑ | ||
---|---|---|---|---|
0
McDos
22.10.12
✎
11:42
|
Добрый день. Вот никак не могу разобраться.
Есть две базы с одинаковыми конфами, между которыми должен быть обмен данными по клиентам с помощью обработок... Выгрузить/Загрузить. Вот с этим Загрузить и проблема. Нормально сделать функцию НайтиПоРеквизиту не выходит хоть тресни. Код обработки Процедура ВыборФайла() Папка = КаталогИБ()+"Текст"; сФайл = ""; Если ФС.ВыбратьФайл(1,сФайл,Папка,"Выберите файл DBF (*.dbf)","Файл Базы данных DBF (*.dbf)|*.dbf",,) = 1 Тогда ПутьКФайлу = СтрЗаменить(Папка,КаталогИБ(),"")+сФайл; КонецЕсли; КонецПроцедуры Процедура ДобавлениеСуммыПокупки(Идентификатор, СуммаЧека, Файл) Перем НовыйНомерКарты; ///изменяется только при изменении процента скидки в большую сторону СпрКли=СоздатьОбъект("Справочник.Клиенты"); СпрКли.ИспользоватьДату(ТекущаяДата()); Если СпрКли.НайтиПоРеквизиту("Идентификатор", Идентификатор, 0) = 1 Тогда Если СпрКли.СуммаНакопленийЗагруженная <> СуммаЧека Тогда СпрКли.СуммаНакопленийЗагруженная = СуммаЧека; НовыйПроцентСкидки=глОпределениеПроцентаСкидки(СпрКли.ОбщаяСумма+СуммаЧека); Если СпрКли.ПроцентСкидки<>НовыйПроцентСкидки Тогда СпрКли.ПроцентСкидки=НовыйПроцентСкидки; КонецЕсли; СпрКли.Записать(); КонецЕсли; Иначе Сообщить("Клиент с идентификатором " + Идентификатор + " не найден и будет добавлен."); СпрКли.Новый(); СпрКли.Идентификатор = Идентификатор; СпрКли.Код = Файл.NOM; СпрКли.Наименование = Файл.NAM; СпрКли.Адрес = Файл.ADR; СпрКли.Телефон = Файл.TEL; СпрКли.ДатаРождения = Файл.DAT; СпрКли.ОбщаяСумма = 0; СпрКли.НакопительнаяСумма = Файл.NAK; СпрКли.ПроцентСкидки = Файл.PRO; СпрКли.ДатаПервойПокупки = Файл.POK; СпрКли.НомерКарты = Файл.NOM; СпрКли.ТелефонСот = Файл.SOT; СпрКли.СуммаНакопленийЗагруженная = СуммаЧека; СпрКли.Записать(); КонецЕсли; |
|||
1
mikecool
22.10.12
✎
11:43
|
что не работает?
|
|||
2
mikecool
22.10.12
✎
11:43
|
+1 наверное индекса по полю нет?
|
|||
3
nv24
22.10.12
✎
11:47
|
чтобы искать по реквизиту, таблица должна быть упорядочена по реквизиту - так кажется.
|
|||
4
dk
22.10.12
✎
11:54
|
либо идентификатор кривой, например не хватает пробелов
|
|||
5
McDos
22.10.12
✎
11:54
|
Ну пример, есть клиент с кодом карты 01626. Идентификатор в обоих базах один и тот же. Но, прога пишет что данный клиент не найден и пробует его записать в базу. Но клиент есть, код неуникальный, поэтому стопориться. Данный клиент с таким кодом идет первым в списке. То есть чтобы решить проблему я должен просто упорядочить по коду, или по реквизиту поиска?
|
|||
6
nv24
22.10.12
✎
11:58
|
(5) см (2) в конфигураторе галка стоять должна напротив реквзита "индексировать"
|
|||
7
Zmich
22.10.12
✎
11:58
|
(5). Признак Сортировка стоит у реквизита Идентификатор? И 3-й параметр в НайтиПоРеквизиту попробуй поставить 1.
|
|||
8
McDos
22.10.12
✎
12:01
|
Признак Сортировка стоит.
|
|||
9
mikecool
22.10.12
✎
12:06
|
(8) чудес не бывает
|
|||
10
McDos
22.10.12
✎
12:15
|
Могу выложить Базы и обработки)
|
|||
11
McDos
22.10.12
✎
12:22
|
За решение проблемы положу деньги на телефон)
|
|||
12
chief accountant
22.10.12
✎
12:26
|
(11) а так работает?
Если СпрКли.НайтиПоРеквизиту("Идентификатор", Идентификатор, 1) = 1 Тогда |
|||
13
McDos
22.10.12
✎
12:31
|
Нет, проверял)
|
|||
14
nv24
22.10.12
✎
12:34
|
А так не пробовал?
Если СпрКли.НайтиПоРеквизиту("Идентификатор", Идентификатор, 0) = 1 Тогда ТекКл =СпрКли.ТекущийЭлемент(); |
|||
15
PuhUfa
22.10.12
✎
12:37
|
Тип реквизита "Идентификатор" число?
|
|||
16
McDos
22.10.12
✎
12:37
|
Как точно должен выглядеть код процедуры?
Если СпрКли.НайтиПоРеквизиту("Идентификатор", Идентификатор, 0) = 1 Тогда ТекКл = СпрКли.ТекущийЭлемент(); Если СпрКли.СуммаНакопленийЗагруженная <> СуммаЧека Тогда СпрКли.СуммаНакопленийЗагруженная = СуммаЧека; НовыйПроцентСкидки=глОпределениеПроцентаСкидки(СпрКли.ОбщаяСумма+СуммаЧека); ? |
|||
17
chief accountant
22.10.12
✎
12:37
|
(10) выложи мд и обработку
|
|||
18
McDos
22.10.12
✎
12:38
|
Строка.
|
|||
19
nv24
22.10.12
✎
12:39
|
(16) Если ТекКл.СуммаНакопленийЗагруженная <> СуммаЧека Тогда
и дальше работаешь с ТекКл попробуй |
|||
20
chief accountant
22.10.12
✎
12:40
|
(19) у него в условие не заходит, см.(5)
|
|||
21
PuhUfa
22.10.12
✎
12:41
|
(18) а в НайтиПоРеквизиту( для поиска тоже строку подставляешь или число?
|
|||
22
McDos
22.10.12
✎
12:42
|
||||
23
nv24
22.10.12
✎
12:44
|
(16) и поиск во всем справочнике
НайтиПоРеквизиту("Идентификатор", Идентификатор, 1) вместо НайтиПоРеквизиту("Идентификатор", Идентификатор, 0) |
|||
24
McDos
22.10.12
✎
12:44
|
У баз задан префикс. К префиксу плюсуется автонумератор. выходит что-то вроде D1, d2 и т.д. Первый обмен делается с копированием индетификаторов, он проходит нормально, а вот второй, стопориться.
|
|||
25
McDos
22.10.12
✎
12:45
|
(23) Было. Нифига.
|
|||
26
chief accountant
22.10.12
✎
13:21
|
(25) начнем с простого:
СпрКли=СоздатьОбъект("Справочник.Клиенты"); СпрКли.ИспользоватьДату(ТекущаяДата()); Если СпрКли.НайтиПоРеквизиту("Идентификатор", Идентификатор, 1) = 1 Тогда Сообщить(СпрКли.Идентификатор); Сообщить(СпрКли); КонецЕсли; получаем: D103 А..... Е..... М....... все работает |
|||
27
McDos
22.10.12
✎
13:25
|
Значит проблема была не в поиске? А какого черта тогда загрузка не работает?
|
|||
28
chief accountant
22.10.12
✎
13:31
|
(27) в обработке поставь после
Идентификатор = Файл.ID Сообщить(ТипЗначения(Идентификатор)); что кажет? |
|||
29
McDos
22.10.12
✎
13:39
|
пишет
2 Клиент с идентификатором 0 не найден и будет добавлен. СпрКли.Записать(); {D:\1С\ЗАГРУЗКА 2.ERT(43)}: Код не уникальный! |
|||
30
chief accountant
22.10.12
✎
13:41
|
(29) файло загрузки выложи
|
|||
31
Mikeware
22.10.12
✎
13:42
|
(29) читай документацию...
|
|||
32
chief accountant
22.10.12
✎
13:43
|
(31) на какой странице?
|
|||
33
Mikeware
22.10.12
✎
13:45
|
(32) как уголовный кодекс...
"Я, например, на свете лучшей книгой Считаю кодекс уголовный наш. И если мне неймется и не спится, Или с похмелья нет на мне лица, Открою кодекс на любой странице, И не могу, читаю до конца."©ВСВ |
|||
34
McDos
22.10.12
✎
13:46
|
http://file.karelia.ru/t5n58n/
А Можно просто через выгрузку сформировать. |
|||
35
chief accountant
22.10.12
✎
13:46
|
(33) проблема походу не в коде, а в
"Клиент с идентификатором 0" |
|||
36
McDos
22.10.12
✎
13:50
|
Это не идентификатор 0. Это его номер карты
|
|||
37
chief accountant
22.10.12
✎
13:52
|
(36) а, понятно косяк здесь:
ДобавлениеСуммыПокупки(НомерКарты,СуммаЧека,Файл); а нужно ДобавлениеСуммыПокупки(Идентификатор,СуммаЧека,Файл); |
|||
38
chief accountant
22.10.12
✎
13:52
|
(37)+ стр.89
|
|||
39
Zmich
22.10.12
✎
13:53
|
Ищи по Коду, а не по Идентификатору. Тем более, ты там в тексте Код элемента насильно присваиваешь.
|
|||
40
chief accountant
22.10.12
✎
13:56
|
(39) по-барабану как искать
|
|||
41
Zmich
22.10.12
✎
13:59
|
(40). Ну ошибка "Код не уникальный" у него не просто так возникла. Два элемента с одинаковым реквизитом Идентификатором могут быть, а вот с одинаковым Кодом - нет (Контроль уникальности у него ведь не отключен).
|
|||
42
McDos
22.10.12
✎
14:01
|
2
Клиент с идентификатором D1 не найден и будет добавлен. СпрКли.Записать(); {D:\1С\ЗАГРУЗКА 2.ERT(43)}: Код не уникальный! )) Не, изменение на Индитификатор с Номера карты ничего не дало. |
|||
43
AAP
22.10.12
✎
14:05
|
(42) сделай так
Идентификатор = Формат(Файл.ID,"С20"); проходит, ну и (37) |
|||
44
PuhUfa
22.10.12
✎
14:06
|
(42) >>Клиент с идентификатором D1 не найден и будет добавлен.
Пробелы после D1? |
|||
45
chief accountant
22.10.12
✎
14:07
|
(42) я чупею, тык если у тебя в файло колонка NOM пустая, то чего ты хочешь от СпрКли.Код = Файл.NOM;
|
|||
46
chief accountant
22.10.12
✎
14:09
|
(45) а в справочнике элемент с пустым кодом присутствует ид D1517
|
|||
47
AAP
22.10.12
✎
14:09
|
(42) проблема в том что при выгрузке у ТС есть такая строка
Файл.ДобавитьПоле("ID", "S", 12, 0); а длина Идентификатора 20 |
|||
48
chief accountant
22.10.12
✎
14:11
|
(47) мимо
|
|||
49
McDos
22.10.12
✎
14:15
|
(46) Присутвует.
|
|||
50
chief accountant
22.10.12
✎
14:17
|
(49) я знаю, что присутствует
|
|||
51
McDos
22.10.12
✎
14:19
|
Если вопрос был приписан ли емуц ИД то Да.
|
|||
52
AAP
22.10.12
✎
14:19
|
(48) может и мимо но у меня получилось
|
|||
53
chief accountant
22.10.12
✎
14:21
|
(52) чего получилось?
(51) у тебя в файле колока NOM ПУСТАЯ, поэтому и не работает обработка |
|||
54
1Сергей
22.10.12
✎
14:21
|
(47) + 1. СтрДлина(Идентификатор) должна быть как у реквизита
|
|||
55
1Сергей
22.10.12
✎
14:22
|
Кароче, правильны ответ в (43)
|
|||
56
chief accountant
22.10.12
✎
14:23
|
(54) пробовал или опять клюшек нет под рукой?
(55) неа |
|||
57
1Сергей
22.10.12
✎
14:24
|
(56) причем тут код, скажи мне? там код никоим боком
|
|||
58
AAP
22.10.12
✎
14:24
|
(53) обработка прочитала файл без ошибок, нашла всех клиентов по Идентификатору
|
|||
59
chief accountant
22.10.12
✎
14:28
|
(58) безо всяких изменений
Идентификатор = "D1 " СпрКли.НайтиПоРеквизиту("Идентификатор", Идентификатор, 1) = 1 |
|||
60
chief accountant
22.10.12
✎
14:29
|
(59)+ СтрДлина(Идентификатор) = 12
|
|||
61
chief accountant
22.10.12
✎
14:31
|
(57) код это для (42)
|
|||
62
chief accountant
22.10.12
✎
14:39
|
(51) я не понял, где бабло?
|
|||
63
McDos
22.10.12
✎
14:42
|
Ну во первых нет вашего телефона, во-вторых, у меня попрежнему не работает загрузка. Или я чего-то не сделал?
|
|||
64
AAP
22.10.12
✎
14:56
|
(63) давай почту
|
|||
65
chief accountant
22.10.12
✎
14:57
|
(63) я уже устал объяснять: поиск у тебя работает см.(59) не заботает запись новых элементов см.(42). Для того чтобы заработало нужно проблему решить с СпрКли.Код = Файл.NOM, т.к. Файл.NOM у тебя всегда пустой
|
|||
66
chief accountant
22.10.12
✎
14:58
|
(65)+ заботает -> работает
|
|||
67
McDos
22.10.12
✎
15:03
|
почта - [email protected]
|
|||
68
AAP
22.10.12
✎
15:06
|
(64) Согласен, Файл.NOM это номер карты, зачем его в Код пихать непонятно
|
|||
69
AAP
22.10.12
✎
15:09
|
(67) Код клиента в одной базе это номер карты в другой?
|
|||
70
chief accountant
22.10.12
✎
15:10
|
(68) тык у него конфе Номер карты = Код, только он в дбф этот номер не пишет
|
|||
71
chief accountant
22.10.12
✎
15:12
|
(69) нет
|
|||
72
AAP
22.10.12
✎
15:16
|
(70) в дбф пишет (пытается), но не учитывает что НомерКарты периодический реквизит
|
|||
73
chief accountant
22.10.12
✎
15:20
|
(72) Код переодический? О_о
|
|||
74
AAP
22.10.12
✎
15:28
|
(73) нет))) вот фрагмент
Спр = СоздатьОбъект("Справочник.Клиенты"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл //Спр.ИспользоватьДату(ТекущаяДата()); Файл.Добавить(); Файл.ID = Спр.Идентификатор; Файл.KOD = Спр.Код; Файл.PRI = Спр.ОбщаяСумма.Получить(ТекущаяДата()); //так тоже можно; Файл.NAM = Спр.Наименование; Файл.ADR = Спр.Адрес; Файл.TEL = Спр.Телефон; Файл.DAT = Спр.ДатаРождения; Файл.NAK = Спр.НакопительнаяСумма; Файл.PRO = Спр.ПроцентСкидки; Файл.POK = Спр.ДатаПервойПокупки; Файл.NOM = Спр.НомерКарты; Файл.SOT = Спр.ТелефонСот; Если Спр.ОбщаяСумма.Получить(ТекущаяДата())=0 тогда Сообщить(Спр.Наименование); КонецЕсли; Файл.Записать(); КонецЦикла; Файл.ЗакрытьФайл(); |
|||
75
chief accountant
22.10.12
✎
15:32
|
(74) ты не понял. У него в элементе
Процедура ИзмененКод() ///сработает при вводе данных в поле код НомерКарты=Код; КонецПроцедуры вывод: в дбф НомерКарты нах ненужен |
|||
76
AAP
22.10.12
✎
15:50
|
(75) понятно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |