Вход | Регистрация
 

Обмен базами через COM, истина не рядом....

[Serg_1960, 08.12.20 - 12:32]
Обмен базами через COM, истина не рядом....
Я
   NaRaz
 
08.12.20 - 09:56
Всем привет.
Вопрос такой, есть две базы, на одном сервере, обмениваются данными через обработку, которая по COM затягивает данные.
В реквизит ТЧ документа подставляется нулевое значение, а в базе источнике нулевого значения нет.


НоваяСтрока.Количество = ВыборкаТовары.Количество;

Выборка - строка выборки из источника, в загружаемом документе иногда, в рандомных строках и документах  прилетают значения = 0, но в источнике нуля нет.
Кто-нибудь сталкивался?
   Garykom
 
1 - 08.12.20 - 09:57
com is deprecated
   NaRaz
 
2 - 08.12.20 - 10:00
(1) Спасибо бро, как мы оба понимаем, что изменить технологию мы не можем.
   NaRaz
 
3 - 08.12.20 - 10:02
Если дописать условие:

НоваяСтрока.Количество = ВыборкаТовары.Количество;
Если НоваяСтрока.Количество = 0 Тогда 
Конецесли;

И в условии поставить точку останова, то ВыборкаТовары.Количество <> 0, там есть значение, но в НоваяСтрока.Количество будет установлен 0
   lEvGl
 
4 - 08.12.20 - 10:04
а какое там значение?
   Megas
 
5 - 08.12.20 - 10:04
(3)
Если ВыборкаТовары.Количество <> 0
может ВыборкаТовары.Количество тип не тот?
   lEvGl
 
6 - 08.12.20 - 10:05
пустая строка, неопределено, нул или еще что
   NaRaz
 
7 - 08.12.20 - 10:08
(4) (5) (6) В момент выполнения строки хз какое значение, т.е.
Когда выполняется строка кода: НоваяСтрока.Количество = ВыборкаТовары.Количество; в значение НоваяСтрока.Количествов итоге прилетает 0, какое там сидит значение хз. Если я делаю точку останова на одну строку ниже, то вижу, что ВыборкаТовары.Количество = 3, тип число, и количество видно. Но получается, что в реквизите документа стоит 0, а в запросе уже число сидит.
   H A D G E H O G s
 
8 - 08.12.20 - 10:08
(3) Ну поставь точку останова с условием ТипЗнч(ВыборкаТовары.Количество)<>Тип("Число")
   Kigo_Kigo
 
9 - 08.12.20 - 10:09
Что то мне подсказывает что автор коэффициент не проставляет, и при записи у него коэффициент*количество = 0
   hhhh
 
10 - 08.12.20 - 10:09
(7) чего-то вы нас путаете. Реквизит называется КоличествоУпаковок. Вы его копируете или нет?
   Serg_1960
 
11 - 08.12.20 - 10:10
Не исключена вероятность проблеме, аналогичной ошибке в ТИИ - "Проверка логической целостности... Значение должно быть NULL"
   NaRaz
 
12 - 08.12.20 - 10:12
(9) (10) нет там никакого количество упаковок. Как скрин добавить на этот форум?
(11) В какой базе ТИИ делать в источнике?
   Kigo_Kigo
 
13 - 08.12.20 - 10:14
(12) так коэффициент привязан к Единице измерения
   Serg_1960
 
14 - 08.12.20 - 10:14
(12) Ещё рано делать ТИИ :) Проверь тип того значение, что тебе прилетает по COM.
   Kigo_Kigo
 
15 - 08.12.20 - 10:15
при записи или проведении скорее всего есть проверка/пересчет ТЧ, где количество сбрасывается в ноль
   NaRaz
 
16 - 08.12.20 - 10:16
(14) (15) не фига там нет, говорю, из запроса данные выборки подставляются в документ. Вся эта фигня до записи и проведения уже в доке будет, т.е. ТЧ товары содержит 0 значение до записи
   arsik
 
17 - 08.12.20 - 10:17
(16) Кривой код. Покажи кусок где ТЧ заполняется
   NaRaz
 
18 - 08.12.20 - 10:17
(8) Точка останова не сработала:

НоваяСтрока.Количество = ВыборкаТовары.Количество;
Если НоваяСтрока.Количество = 0 Тогда 
Перем = 123;
Конецесли;

Т.е. ВыборкаТовары.Количество = 3, но в условие я зашел, остановиться смог только на точке останова в условии.
   Serg_1960
 
19 - 08.12.20 - 10:18
(13) Нет. Традиционно коэффициент копируется и сохраняется в документе - он сознательно отвязывается от единицы измерения.
   Serg_1960
 
20 - 08.12.20 - 10:24
(16) Меня не интересует какое значение присваивается в таблице - меня интересует исходное значение. "Нифига там нет" - Вы можете думать что хотите, но у "нифига" есть тип значения. Озвучьте его.
   Kigo_Kigo
 
21 - 08.12.20 - 10:33
(19) Правильно, при выборе значения Единица- она записывается в поле коэффициент, 
ТС показывай уже свой код
   lEvGl
 
22 - 08.12.20 - 10:36
(21) код кодушка кодило
   NaRaz
 
23 - 08.12.20 - 10:37
ЗапросТовары = Соединение.NewObject("Query");
        ЗапросТовары.SetParameter("Ссылка", ТекущийДокумент);
        ЗапросТовары.Text = 
        "ВЫБРАТЬ
        |    РеализацияТоваровТовары.Номенклатура,
                |    РеализацияТоваровТовары.Количество
        |ИЗ   
        |    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |ГДЕ
        |    РеализацияТоваровТовары.Ссылка = &Ссылка";
        РезультатТовары = ЗапросТовары.Выполнить();
        ВыборкаТовары = РезультатТовары.Выбрать();

Пока ВыборкаТовары.Следующий() Цикл
    НоваяСтрока = ОбДокумент.Товары.Добавить();    
НоваяСтрока.Количество = ВыборкаТовары.Количество;
Если НоваяСтрока.Количество = 0 Тогда 
Конецесли;
Конеццикла;

Если сделать ЗапросТовары.Выполнить().Выгрузить(), то видна ТЗ. с нормальной суммой НДС, везде заполнена.
   lEvGl
 
24 - 08.12.20 - 10:44
НаРазДва
какой ндс, где там такое?
проблема в конкретном коде, сначала посмотрите отладчиком значение ВыборкаТовары.Количество, потом НоваяСтрока.Количество, если все ок, а в результате 0, значит где то подменяется - при записи, проведении, подписках на событие мб, а может вы просто документ с изменениями забыли записать
   Hmster
 
25 - 08.12.20 - 10:45
Если НоваяСтрока.Количество = 0 Тогда
    Сообщить("-"+НоваяСтрока.Количество+"-"+ВыборкаТовары.Количество"-"+ТипЗнч(НоваяСтрока.Количество)+"-"+ТипЗнч(ВыборкаТовары.Количество)); 
Конецесли;

А так что дает?
   lEvGl
 
26 - 08.12.20 - 10:55
+(24) а может сами ниже по тексту и меняете/пересчитываете
   NaRaz
 
27 - 08.12.20 - 10:55
(24) Проблема есть, но не в коде точно, ведь если я два раза документ загружу, то проблемы не будет, а если выгружу за период, то может быть 3 документа с косяком, может быть десять, а может не быть, при условии, что один и тот же период. Прекратите флудить, и важничать.
Лучше бы вы рассказали, куда помещается результат запроса, и как он считывается, у меня вообще предположение, что надо перезагружать агента 1с.
   NaRaz
 
28 - 08.12.20 - 10:57
(25) Во первых у вас ошибка тут синтаксическая, но программа выдаст:

-0-5-Число-Число
   NaRaz
 
29 - 08.12.20 - 10:59
И да, обработка внешняя, косячит у всех пользователей, у всех косячит по своему.
   hhhh
 
30 - 08.12.20 - 11:04
(29) конфигурации какие?
 
 Рекламное место пустует
   NaRaz
 
31 - 08.12.20 - 11:07
(30) УТ10.3/БП3.0, обе серверные, на одном сервере лежат.
   arsik
 
32 - 08.12.20 - 11:09
(31) Сделай так 
времКоличество = ВыборкаТовары.Количество;
НоваяСтрока.Количество = времКоличество;
   skafandr
 
33 - 08.12.20 - 11:16
(28) выдаст или выдает? Вставьте вывод и проверьте
И да .... Вам люди пытаются помочь а вы их строите
   NaRaz
 
34 - 08.12.20 - 11:20
(33) выдает
   skafandr
 
35 - 08.12.20 - 11:25
(34) реально в тексте что вы привели в (23) или что-то там еще есть ? Сказка какая-то странная, так не бывает.
Вставьте еще из (32) с выводом времКоличество
   Serg_1960
 
36 - 08.12.20 - 11:26
(27) "Прекратите флудить, и важничать." - как только прекратите темнить и кормить объедками (23) вместо рабочего кода. К этому куску текста больше вопросов, чем ответов :( Если Вас послушать в (28), то создаётся иллюзия работы обработчика ТоварыКоличествоПриИзменении формы :((

PS: вышел с ветки, громко хлопнув дверью.
   hhhh
 
37 - 08.12.20 - 11:28
(34) попробуйте
НоваяСтрока2 = ОбДокумент.Товары.Добавить();    
НоваяСтрока2.Количество = ВыборкаТовары.Количество;
Если НоваяСтрока2.Количество = 0 Тогда 
Конецесли;

и еще

НоваяСтрока.Количество = ВыборкаТовары.Количество;
НоваяСтрока.Количество = ВыборкаТовары.Количество;
   Волшебник
 
38 - 08.12.20 - 11:36
Если типы не совпадают, то будет ноль
   NaRaz
 
39 - 08.12.20 - 11:38
Com может быть не доступен в какой то момент времени? А потом снова начать отвечать?

(37) Идея, сейчас попробую
   NaRaz
 
40 - 08.12.20 - 11:39
(36) Ой гляди задел. Спросил то чего не знает. Не обижайся, я просто спросил
   Hmster
 
41 - 08.12.20 - 11:44
усложним задачу

Если НоваяСтрока.Количество = 0 Тогда
    Сообщить("1-"+НоваяСтрока.Количество+"-"+ВыборкаТовары.Количество"-"+ТипЗнч(НоваяСтрока.Количество)+"-"+ТипЗнч(ВыборкаТовары.Количество));
    НоваяСтрока.Количество = ВыборкаТовары.Количество;
    Сообщить("2-"+НоваяСтрока.Количество+"-"+ВыборкаТовары.Количество"-"+ТипЗнч(НоваяСтрока.Количество)+"-"+ТипЗнч(ВыборкаТовары.Количество));
Конецесли;

второй раз проскакивает? или так же 0 ?
   NaRaz
 
42 - 08.12.20 - 11:48
(41) Минуту.
   Hmster
 
43 - 08.12.20 - 11:49
(39) ком вместо 3 может вернуть 3.000000000001 или 2.9999999999999
   NaRaz
 
44 - 08.12.20 - 11:52
(43) Ясно, спасибо.

В общем отработало вот что:

ЗапросТовары = Соединение.NewObject("Query");
        ЗапросТовары.SetParameter("Ссылка", ТекущийДокумент);
        ЗапросТовары.Text = 
        "ВЫБРАТЬ
        |    РеализацияТоваровТовары.Номенклатура,
                |    РеализацияТоваровТовары.Количество
        |ИЗ   
        |    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |ГДЕ
        |    РеализацияТоваровТовары.Ссылка = &Ссылка";
        РезультатТовары = ЗапросТовары.Выполнить();
        ВыборкаТовары = РезультатТовары.Выбрать();

Пока ВыборкаТовары.Следующий() Цикл
    НоваяСтрока = ОбДокумент.Товары.Добавить();    
НоваяСтрока.Количество = ВыборкаТовары.Количество;
Если НоваяСтрока.Количество = 0 Тогда 
НоваяСтрока.Количество = ВыборкаТовары.Количество;
Конецесли;
Конеццикла;

Теперь вопрос, почему?
   NaRaz
 
45 - 08.12.20 - 11:54
Но то, что оно отработало это уже радует. Спасибо всем за поддержку, и тому за дрерью - респект.
Но теперь надо поговорить, об (44) КАК ТАК?
   skafandr
 
46 - 08.12.20 - 11:58
Результат (41) покажите
   NaRaz
 
47 - 08.12.20 - 11:59
(46) Момент. Сейчас загрузка идет
   Garykom
 
48 - 08.12.20 - 12:00
(45) см (1)

в будущем еще и не такие приколы могут быть, по сути ты паузу добавил
   NaRaz
 
49 - 08.12.20 - 12:05
(48) У меня была мысль вчера перед загрузкой ввалить цикл от 1 до 1000 перед добавлением строки, если в выборке какая то фигня сидит, но я не смог выцепить значение кривое из выборки, а для всех документов мне не позволила сделать моя совесть
   skafandr
 
50 - 08.12.20 - 12:05
(48) Ну не надо ужасов только нагонять. У меня куча обработок 7.7 и 8 в самых разных сочетаниях - все работает.
   NaRaz
 
51 - 08.12.20 - 12:15
(41)

1-0-2 718-Число-Число
2-2 718-2 718-Число-Число
   NaRaz
 
52 - 08.12.20 - 12:19
Теперь вопрос? Почему? И что делать если с другими полями такая фигня будет? Ведь может отваливаться по идеи любое поле, количество, сумма, или цена, как быть? Проверять на заполненность поля простых типов и повторно пытаться их заполнить?
   hhhh
 
53 - 08.12.20 - 12:35
(52) скорее всего какая-то хренотень находится у тебя справа на строке

НоваяСтрока = ОбДокумент.Товары.Добавить();  

правее точки с запятой.
   Garykom
 
54 - 08.12.20 - 12:39
(50) пока не приходишь и не пытаешься это запустить на чужом компе/серваке
   NaRaz
 
55 - 08.12.20 - 12:57
(53) Тогда бы в документе всегда так было, а тут говорю второй раз документ прогрузил и нормально, на третий опять может сломаться
   NaRaz
 
56 - 08.12.20 - 13:01
(53) НО справа никакого дерьма нет, слава богу, но это вообще была бы дичь. Я не додумался даже что можно справа писать что то
   NaRaz
 
57 - 08.12.20 - 13:19
Ну что? Все? А поговорить?
   lEvGl
 
58 - 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) Ну, ТС может проверить. Интересно же.
   Hmster
 
62 - 08.12.20 - 13:46
А если попробовать данные толкать, а не тянуть?
   NaRaz
 
63 - 08.12.20 - 14:27
(59) Да повторяется.
   NaRaz
 
64 - 08.12.20 - 14:31
(60) Нет, тз с записями, и даже сделал через НайтиСтроки(), что бы нормально было, но пришлось все таки сделать в самом начале цикл, от 0 до 5, что бы строка "очухалась"


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.