Имя: Пароль:
1C
 
Обмен базами через 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, что бы строка "очухалась"