|
Обмен базами через COM, истина не рядом.... | ☑ | ||
---|---|---|---|---|
0
NaRaz
08.12.20
✎
09:56
|
Всем привет.
Вопрос такой, есть две базы, на одном сервере, обмениваются данными через обработку, которая по COM затягивает данные. В реквизит ТЧ документа подставляется нулевое значение, а в базе источнике нулевого значения нет. НоваяСтрока.Количество = ВыборкаТовары.Количество; Выборка - строка выборки из источника, в загружаемом документе иногда, в рандомных строках и документах прилетают значения = 0, но в источнике нуля нет. Кто-нибудь сталкивался? |
|||
1
Garykom
гуру
08.12.20
✎
09:57
|
com is deprecated
|
|||
2
NaRaz
08.12.20
✎
10:00
|
(1) Спасибо бро, как мы оба понимаем, что изменить технологию мы не можем.
|
|||
3
NaRaz
08.12.20
✎
10:02
|
Если дописать условие:
НоваяСтрока.Количество = ВыборкаТовары.Количество; Если НоваяСтрока.Количество = 0 Тогда Конецесли; И в условии поставить точку останова, то ВыборкаТовары.Количество <> 0, там есть значение, но в НоваяСтрока.Количество будет установлен 0 |
|||
4
lEvGl
гуру
08.12.20
✎
10:04
|
а какое там значение?
|
|||
5
Megas
08.12.20
✎
10:04
|
(3)
Если ВыборкаТовары.Количество <> 0 может ВыборкаТовары.Количество тип не тот? |
|||
6
lEvGl
гуру
08.12.20
✎
10:05
|
пустая строка, неопределено, нул или еще что
|
|||
7
NaRaz
08.12.20
✎
10:08
|
(4) (5) (6) В момент выполнения строки хз какое значение, т.е.
Когда выполняется строка кода: НоваяСтрока.Количество = ВыборкаТовары.Количество; в значение НоваяСтрока.Количествов итоге прилетает 0, какое там сидит значение хз. Если я делаю точку останова на одну строку ниже, то вижу, что ВыборкаТовары.Количество = 3, тип число, и количество видно. Но получается, что в реквизите документа стоит 0, а в запросе уже число сидит. |
|||
8
H A D G E H O G s
08.12.20
✎
10:08
|
(3) Ну поставь точку останова с условием ТипЗнч(ВыборкаТовары.Количество)<>Тип("Число")
|
|||
9
Kigo_Kigo
08.12.20
✎
10:09
|
Что то мне подсказывает что автор коэффициент не проставляет, и при записи у него коэффициент*количество = 0
|
|||
10
hhhh
08.12.20
✎
10:09
|
(7) чего-то вы нас путаете. Реквизит называется КоличествоУпаковок. Вы его копируете или нет?
|
|||
11
Serg_1960
08.12.20
✎
10:10
|
Не исключена вероятность проблеме, аналогичной ошибке в ТИИ - "Проверка логической целостности... Значение должно быть NULL"
|
|||
12
NaRaz
08.12.20
✎
10:12
|
(9) (10) нет там никакого количество упаковок. Как скрин добавить на этот форум?
(11) В какой базе ТИИ делать в источнике? |
|||
13
Kigo_Kigo
08.12.20
✎
10:14
|
(12) так коэффициент привязан к Единице измерения
|
|||
14
Serg_1960
08.12.20
✎
10:14
|
(12) Ещё рано делать ТИИ :) Проверь тип того значение, что тебе прилетает по COM.
|
|||
15
Kigo_Kigo
08.12.20
✎
10:15
|
при записи или проведении скорее всего есть проверка/пересчет ТЧ, где количество сбрасывается в ноль
|
|||
16
NaRaz
08.12.20
✎
10:16
|
(14) (15) не фига там нет, говорю, из запроса данные выборки подставляются в документ. Вся эта фигня до записи и проведения уже в доке будет, т.е. ТЧ товары содержит 0 значение до записи
|
|||
17
arsik
гуру
08.12.20
✎
10:17
|
(16) Кривой код. Покажи кусок где ТЧ заполняется
|
|||
18
NaRaz
08.12.20
✎
10:17
|
(8) Точка останова не сработала:
НоваяСтрока.Количество = ВыборкаТовары.Количество; Если НоваяСтрока.Количество = 0 Тогда Перем = 123; Конецесли; Т.е. ВыборкаТовары.Количество = 3, но в условие я зашел, остановиться смог только на точке останова в условии. |
|||
19
Serg_1960
08.12.20
✎
10:18
|
(13) Нет. Традиционно коэффициент копируется и сохраняется в документе - он сознательно отвязывается от единицы измерения.
|
|||
20
Serg_1960
08.12.20
✎
10:24
|
(16) Меня не интересует какое значение присваивается в таблице - меня интересует исходное значение. "Нифига там нет" - Вы можете думать что хотите, но у "нифига" есть тип значения. Озвучьте его.
|
|||
21
Kigo_Kigo
08.12.20
✎
10:33
|
(19) Правильно, при выборе значения Единица- она записывается в поле коэффициент,
ТС показывай уже свой код |
|||
22
lEvGl
гуру
08.12.20
✎
10:36
|
(21) код кодушка кодило
|
|||
23
NaRaz
08.12.20
✎
10:37
|
ЗапросТовары = Соединение.NewObject("Query");
ЗапросТовары.SetParameter("Ссылка", ТекущийДокумент); ЗапросТовары.Text = "ВЫБРАТЬ | РеализацияТоваровТовары.Номенклатура, | РеализацияТоваровТовары.Количество |ИЗ | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары |ГДЕ | РеализацияТоваровТовары.Ссылка = &Ссылка"; РезультатТовары = ЗапросТовары.Выполнить(); ВыборкаТовары = РезультатТовары.Выбрать(); Пока ВыборкаТовары.Следующий() Цикл НоваяСтрока = ОбДокумент.Товары.Добавить(); НоваяСтрока.Количество = ВыборкаТовары.Количество; Если НоваяСтрока.Количество = 0 Тогда Конецесли; Конеццикла; Если сделать ЗапросТовары.Выполнить().Выгрузить(), то видна ТЗ. с нормальной суммой НДС, везде заполнена. |
|||
24
lEvGl
гуру
08.12.20
✎
10:44
|
НаРазДва
какой ндс, где там такое? проблема в конкретном коде, сначала посмотрите отладчиком значение ВыборкаТовары.Количество, потом НоваяСтрока.Количество, если все ок, а в результате 0, значит где то подменяется - при записи, проведении, подписках на событие мб, а может вы просто документ с изменениями забыли записать |
|||
25
Hmster
08.12.20
✎
10:45
|
Если НоваяСтрока.Количество = 0 Тогда
Сообщить("-"+НоваяСтрока.Количество+"-"+ВыборкаТовары.Количество"-"+ТипЗнч(НоваяСтрока.Количество)+"-"+ТипЗнч(ВыборкаТовары.Количество)); Конецесли; А так что дает? |
|||
26
lEvGl
гуру
08.12.20
✎
10:55
|
+(24) а может сами ниже по тексту и меняете/пересчитываете
|
|||
27
NaRaz
08.12.20
✎
10:55
|
(24) Проблема есть, но не в коде точно, ведь если я два раза документ загружу, то проблемы не будет, а если выгружу за период, то может быть 3 документа с косяком, может быть десять, а может не быть, при условии, что один и тот же период. Прекратите флудить, и важничать.
Лучше бы вы рассказали, куда помещается результат запроса, и как он считывается, у меня вообще предположение, что надо перезагружать агента 1с. |
|||
28
NaRaz
08.12.20
✎
10:57
|
(25) Во первых у вас ошибка тут синтаксическая, но программа выдаст:
-0-5-Число-Число |
|||
29
NaRaz
08.12.20
✎
10:59
|
И да, обработка внешняя, косячит у всех пользователей, у всех косячит по своему.
|
|||
30
hhhh
08.12.20
✎
11:04
|
(29) конфигурации какие?
|
|||
31
NaRaz
08.12.20
✎
11:07
|
(30) УТ10.3/БП3.0, обе серверные, на одном сервере лежат.
|
|||
32
arsik
гуру
08.12.20
✎
11:09
|
(31) Сделай так
времКоличество = ВыборкаТовары.Количество; НоваяСтрока.Количество = времКоличество; |
|||
33
skafandr
08.12.20
✎
11:16
|
(28) выдаст или выдает? Вставьте вывод и проверьте
И да .... Вам люди пытаются помочь а вы их строите |
|||
34
NaRaz
08.12.20
✎
11:20
|
(33) выдает
|
|||
35
skafandr
08.12.20
✎
11:25
|
(34) реально в тексте что вы привели в (23) или что-то там еще есть ? Сказка какая-то странная, так не бывает.
Вставьте еще из (32) с выводом времКоличество |
|||
36
Serg_1960
08.12.20
✎
11:26
|
(27) "Прекратите флудить, и важничать." - как только прекратите темнить и кормить объедками (23) вместо рабочего кода. К этому куску текста больше вопросов, чем ответов :( Если Вас послушать в (28), то создаётся иллюзия работы обработчика ТоварыКоличествоПриИзменении формы :((
PS: вышел с ветки, громко хлопнув дверью. |
|||
37
hhhh
08.12.20
✎
11:28
|
(34) попробуйте
НоваяСтрока2 = ОбДокумент.Товары.Добавить(); НоваяСтрока2.Количество = ВыборкаТовары.Количество; Если НоваяСтрока2.Количество = 0 Тогда Конецесли; и еще НоваяСтрока.Количество = ВыборкаТовары.Количество; НоваяСтрока.Количество = ВыборкаТовары.Количество; |
|||
38
Волшебник
08.12.20
✎
11:36
|
Если типы не совпадают, то будет ноль
|
|||
39
NaRaz
08.12.20
✎
11:38
|
Com может быть не доступен в какой то момент времени? А потом снова начать отвечать?
(37) Идея, сейчас попробую |
|||
40
NaRaz
08.12.20
✎
11:39
|
(36) Ой гляди задел. Спросил то чего не знает. Не обижайся, я просто спросил
|
|||
41
Hmster
08.12.20
✎
11:44
|
усложним задачу
Если НоваяСтрока.Количество = 0 Тогда Сообщить("1-"+НоваяСтрока.Количество+"-"+ВыборкаТовары.Количество"-"+ТипЗнч(НоваяСтрока.Количество)+"-"+ТипЗнч(ВыборкаТовары.Количество)); НоваяСтрока.Количество = ВыборкаТовары.Количество; Сообщить("2-"+НоваяСтрока.Количество+"-"+ВыборкаТовары.Количество"-"+ТипЗнч(НоваяСтрока.Количество)+"-"+ТипЗнч(ВыборкаТовары.Количество)); Конецесли; второй раз проскакивает? или так же 0 ? |
|||
42
NaRaz
08.12.20
✎
11:48
|
(41) Минуту.
|
|||
43
Hmster
08.12.20
✎
11:49
|
(39) ком вместо 3 может вернуть 3.000000000001 или 2.9999999999999
|
|||
44
NaRaz
08.12.20
✎
11:52
|
(43) Ясно, спасибо.
В общем отработало вот что: ЗапросТовары = Соединение.NewObject("Query"); ЗапросТовары.SetParameter("Ссылка", ТекущийДокумент); ЗапросТовары.Text = "ВЫБРАТЬ | РеализацияТоваровТовары.Номенклатура, | РеализацияТоваровТовары.Количество |ИЗ | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары |ГДЕ | РеализацияТоваровТовары.Ссылка = &Ссылка"; РезультатТовары = ЗапросТовары.Выполнить(); ВыборкаТовары = РезультатТовары.Выбрать(); Пока ВыборкаТовары.Следующий() Цикл НоваяСтрока = ОбДокумент.Товары.Добавить(); НоваяСтрока.Количество = ВыборкаТовары.Количество; Если НоваяСтрока.Количество = 0 Тогда НоваяСтрока.Количество = ВыборкаТовары.Количество; Конецесли; Конеццикла; Теперь вопрос, почему? |
|||
45
NaRaz
08.12.20
✎
11:54
|
Но то, что оно отработало это уже радует. Спасибо всем за поддержку, и тому за дрерью - респект.
Но теперь надо поговорить, об (44) КАК ТАК? |
|||
46
skafandr
08.12.20
✎
11:58
|
Результат (41) покажите
|
|||
47
NaRaz
08.12.20
✎
11:59
|
(46) Момент. Сейчас загрузка идет
|
|||
48
Garykom
гуру
08.12.20
✎
12:00
|
(45) см (1)
в будущем еще и не такие приколы могут быть, по сути ты паузу добавил |
|||
49
NaRaz
08.12.20
✎
12:05
|
(48) У меня была мысль вчера перед загрузкой ввалить цикл от 1 до 1000 перед добавлением строки, если в выборке какая то фигня сидит, но я не смог выцепить значение кривое из выборки, а для всех документов мне не позволила сделать моя совесть
|
|||
50
skafandr
08.12.20
✎
12:05
|
(48) Ну не надо ужасов только нагонять. У меня куча обработок 7.7 и 8 в самых разных сочетаниях - все работает.
|
|||
51
NaRaz
08.12.20
✎
12:15
|
(41)
1-0-2 718-Число-Число 2-2 718-2 718-Число-Число |
|||
52
NaRaz
08.12.20
✎
12:19
|
Теперь вопрос? Почему? И что делать если с другими полями такая фигня будет? Ведь может отваливаться по идеи любое поле, количество, сумма, или цена, как быть? Проверять на заполненность поля простых типов и повторно пытаться их заполнить?
|
|||
53
hhhh
08.12.20
✎
12:35
|
(52) скорее всего какая-то хренотень находится у тебя справа на строке
НоваяСтрока = ОбДокумент.Товары.Добавить(); правее точки с запятой. |
|||
54
Garykom
гуру
08.12.20
✎
12:39
|
(50) пока не приходишь и не пытаешься это запустить на чужом компе/серваке
|
|||
55
NaRaz
08.12.20
✎
12:57
|
(53) Тогда бы в документе всегда так было, а тут говорю второй раз документ прогрузил и нормально, на третий опять может сломаться
|
|||
56
NaRaz
08.12.20
✎
13:01
|
(53) НО справа никакого дерьма нет, слава богу, но это вообще была бы дичь. Я не додумался даже что можно справа писать что то
|
|||
57
NaRaz
08.12.20
✎
13:19
|
Ну что? Все? А поговорить?
|
|||
58
lEvGl
гуру
08.12.20
✎
13:25
|
а что говорить, такой косяк выявляется отладчиком быстрее, чем говорить, было что то аналогичное когда то, решения не помню, наверно логику по-другому делал
|
|||
59
Галахад
гуру
08.12.20
✎
13:39
|
Интересно, а если результат запроса в табличку, и табличку читать, ситуация (0) повторяется?
|
|||
60
Йохохо
08.12.20
✎
13:43
|
(59) вероятно будет ТЗ.Количество() = 0, но не раз в месяц, а раз в год
|
|||
61
Галахад
гуру
08.12.20
✎
13:45
|
(60) Ну, ТС может проверить. Интересно же.
|
|||
62
Hmster
08.12.20
✎
13:46
|
А если попробовать данные толкать, а не тянуть?
|
|||
63
NaRaz
08.12.20
✎
14:27
|
(59) Да повторяется.
|
|||
64
NaRaz
08.12.20
✎
14:31
|
(60) Нет, тз с записями, и даже сделал через НайтиСтроки(), что бы нормально было, но пришлось все таки сделать в самом начале цикл, от 0 до 5, что бы строка "очухалась"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |