Имя: Пароль:
1C
1С v8
1С на ТСД зависает при вызове серверных процедур
0 Юзер123
 
naïve
21.12.21
12:48
Доброго рвемени.
ТСД в связке с самописной конфой.  
Идея простая.  Сканируют Штрихкод номенклатуры - идет вызов серверной функции проверки номенклатуры (работатет быстро возвращает код). Далее если номенклатура найдена открывается форма
ввода количества.  Если количество не 0 то добавляется строка в документ ( добавление в документ - серверная процедура и она зависает при вызове).
1 Юзер123
 
naïve
21.12.21
12:48
Количество = ОткрытьФормуМодально("Документ.СписаниеНоменклатуры.Форма.ВводКоличества");

Если не Количество  = 0 тогда
ЗаполнитьТаблицуНаСервере(Штрихкод, Количество);
КонецЕсли;
2 Юзер123
 
naïve
21.12.21
12:49
Отладку включали.
При включеной отладки
ЗаполнитьТаблицуНаСервере(Штрихкод, Количество); - начинает подвисать конфигуратор. но по точкам останова прыгает с задержкой  30 сек до минуты.
3 Юзер123
 
naïve
21.12.21
12:50
с выключеной отладкой вообще ничего не происходит.   клиент на  ТСД висит какое то время после чего выдает ошибку.
4 acht
 
21.12.21
12:50
ОФигеть! Как вы этого добились?
5 lucbak
 
21.12.21
12:51
(2) Даже интересно между чем и чем проходит до 30 секунд?
6 Юзер123
 
naïve
21.12.21
12:52
(5)  между ЗаполнитьТаблицуНаСервере(Штрихкод, Количество);

и

&НаСервере
Процедура ЗаполнитьТаблицуНаСервере(Штрихкод, Количество)
    
    ---->     аа =1;        Остановом тут
7 Юзер123
 
naïve
21.12.21
12:53
(5) все это время конфигуратор  в подвисшем состоянии
8 acht
 
21.12.21
12:59
(7) Контекстный вызов во всей красе. Красивая форма едет полностью на сервер по дохлому каналу. &НаСервереБезКонтекста может помочь.
9 Юзер123
 
naïve
21.12.21
13:00
Вопрос в другом. Если код не мнялся.  ТСД не менялся.  В чем может быть причина таких глюков.  единственное что было из  проишествий - отклюяался свет.
10 Юзер123
 
naïve
21.12.21
13:00
(8)  почему первая  сервыерная функция отрабатывает в секунду? та что ищет номенклатуру по штрихкоду?. . .
11 H A D G E H O G s
 
21.12.21
13:02
Ну и отладка по HTTP через vpn-анус админа с петлей трафика в Ленинск-Кузнецкий провайдер.

Смех - смехом, а мех мехом. Был клиент с магазинами в МСК и сервером в МСК, у которого ТонкиеКлиенты печатали чеки с заходом трафика в Питер.
12 Юзер123
 
naïve
21.12.21
13:02
(11)  без отладки зависает вообще
13 Юзер123
 
naïve
21.12.21
13:03
(11)  с отладкой подвисает на точках но отрабатывает
14 acht
 
21.12.21
13:03
(9) > единственное что было из  проишествий
Начинается... Чистите кэши, продувайте пепельницы
15 acht
 
21.12.21
13:04
(10) > почему первая
Для полноценной диагностики необходима фотография базы во второй день полнолуния и клок волос из подмышки админа.
16 Юзер123
 
naïve
21.12.21
13:05
(14)   это сделано в первую очередь было.  2 разных терминала юзали.  Диагноз 1.  Базу переносили на разные компы.
17 Юзер123
 
naïve
21.12.21
13:05
(15)   я бы просто перечню причин подобного поведения был бы рад очень.
18 H A D G E H O G s
 
21.12.21
13:06
Работайте с отладкой.
Я бы даже документацию под это дело оформил, а автор пока пусть штатную должность у руководства выбивает, чтобы тело f11 жало по кд.
19 Юзер123
 
naïve
21.12.21
13:07
Номенклатура = ПроверитьНаличиеНоменклатуры(Штрихкод);  серверная функция работает.


ЗаполнитьТаблицуНаСервере(Штрихкод, Количество);  - серверная процедура зависает.
20 Юзер123
 
naïve
21.12.21
13:09
(18)  Петросенко просто.   вас в смехопонараму без собеседования возьмут. По сабжу 0   полезности.
21 Юзер123
 
naïve
21.12.21
13:10
смехопанораму * простите
22 H A D G E H O G s
 
21.12.21
13:13
1С просто. Такая. Любит, когда смотрят...
23 Другая
 
21.12.21
13:15
(22) шли 10е бессонные сутки внедрения ERP
24 Галахад
 
гуру
21.12.21
13:24
Оно вообще как работает?
Мобильная платформа и HTTP vs WEB-сервисы?
RDP-клиент?
25 Юзер123
 
naïve
21.12.21
13:25
(24) Мобильная платформа и HTTP vs WEB-сервисы?
26 Юзер123
 
naïve
21.12.21
13:25
(24) Мобильная платформа и HTTP vs WEB-сервисы!!!
27 Галахад
 
гуру
21.12.21
13:27
Хм. И форма модально на мобилке открывается?
А "ЗаполнитьТаблицуНаСервере" что делает?
28 Юзер123
 
naïve
21.12.21
13:44
(27)  в документ строки добавляет.
29 Юзер123
 
naïve
21.12.21
13:45
(28)  с номенклатурой из

Номенклатура = ПроверитьНаличиеНоменклатуры(Штрихкод);

и количеством  введенным.

Я думал про модальность.  В итоге закоментил открытие формы и количество прописал  .

ошибка не ушла.

            //Количество = ОткрытьФормуМодально("Документ.СписаниеНоменклатуры.Форма.ВводКоличества");
            Количество = 5;
            ЗаполнитьТаблицуНаСервере(Штрихкод, Количество);
30 arsik
 
гуру
21.12.21
13:49
(29) Все таки  &НаСервереБезКонтекста пробовал?
31 Галахад
 
гуру
21.12.21
13:50
(29) А что за документ? В большой 1С? А как его находит?
Зачем вообще два шага.
1. Поиск.
2. Поиск и добавление.
Когда можно обойтись 2.
32 Юзер123
 
naïve
21.12.21
13:53
(30)   переписываю код под это.
33 Юзер123
 
naïve
21.12.21
13:53
(31)  не спорю. Можно.  Оптимизировать код до бесконечности.  
Вопрос в том что это работало.  И хотелось бы причину понять такого поведения
34 H A D G E H O G s
 
21.12.21
14:05
1000 причин. начиная от отображения деревом, до мертвого кеша
35 Галахад
 
гуру
21.12.21
14:12
(33) Довольно часто причина в ошибках в коде...
36 Злопчинский
 
21.12.21
14:13
Уронил скупую клюшечную слезу...
Отвечу за H A D G E H O G s: "вы их готовить не умеете..."
37 Юзер123
 
naïve
21.12.21
14:14
(35) работало. ничего не меняли. Перестало работать.
38 Юзер123
 
naïve
21.12.21
14:15
(34)  как чекнуть Кэш можно?
39 PLUT
 
21.12.21
14:16
(38) семь бед один резет

попробуйте выключить и снова включить.... сервер
40 Злопчинский
 
21.12.21
14:17
(39) еще можно новый сервак поставить...
41 PLUT
 
21.12.21
14:19
(40) в нем будет изначально чекнутый кэш (cash) ?
42 pechkin
 
21.12.21
14:24
скорее всего открывается модально, но не в фокусе и окна не видно
43 lubitelxml
 
21.12.21
14:30
Замер производительности пробовал уже делать?
44 Юзер123
 
naïve
21.12.21
14:41
(42)я закоментил вообще открытие формы.
(43)   Нет (39)  локально на комп базу перенес.  Все что можно очищали и перезапускали.

Переписал  на БезКонтекста  первую процедуру проверки номенклатуры.  Начала зависать в отладке.
45 Юзер123
 
naïve
21.12.21
14:45
причем на терминале вылетела ошибка Software caused connection abort    а в отладчике еще процесс идет.  причем шустро так)
46 lubitelxml
 
21.12.21
15:01
Показывай код из ЗаполнитьТаблицуНаСервере
47 Юзер123
 
naïve
21.12.21
15:08
Оно зависает на либой серверной процедуре или функции если включена отладка.

&НаСервере
ЗаполнитьТаблицуНаСервере

                л_СписокНоменклатурыПроизвЗадания =  ПолучитьИзВременногоХранилища(АдресВХранилище);
        ОстатокНПЗ = " ";
        ОстатокВведенногоКоличества = Количество;
        ВведенноеКоличество = " ";
        КоличествоИзПроизводсвтенногоЗадания = ПолучитьТаблицуСКоличествомНаСервере(Количество,КодНом,АдресВХранилище);
        Номенклатура = Справочники.Номенклатура.НайтиПоКоду(СокрЛП(КодНом));
        СчетчикИндекса = 0;
        
        
        Если Количество = Неопределено Тогда
            
            Возврат;
            
        КонецЕсли;
        
        Пока СчетчикИндекса < КоличествоИзПроизводсвтенногоЗадания.Количество() Цикл
            
            Если Не Число(КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Количество) <= 0 Тогда
                
                Если Число(КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Количество) = ОстатокВведенногоКоличества Тогда
                    
                    Строка = Объект.Номенклатура.Добавить();
                    ВведенноеКоличество = ОстатокВведенногоКоличества;    
                    Строка.Количество = ОстатокВведенногоКоличества;
                    Строка.Артикул = Номенклатура.Код;
                    Строка.НомерПроизводственногоЗадания = КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НПЗ;
                    Строка.НомерПартии = КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Комментарий;
                    Строка.Номенклатура = Номенклатура;
                    Строка.ШтрихКод = Штрихкод;
                    Строка.Дата = ТекущаяДата();
                    
                    СтруктураОтбораСтрок = Новый Структура;
                    СтруктураОтбораСтрок.Вставить("НПЗ", КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НПЗ);
                    СтруктураОтбораСтрок.Вставить("НомКод", КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НомКод);
                    УдалитьСтрокуТЗ = СписокНоменклатурыПроизвЗадания.НайтиСтроки(СтруктураОтбораСтрок);
                    СписокНоменклатурыПроизвЗадания.Удалить(УдалитьСтрокуТЗ[0]);
                    
                ИначеЕсли Число(КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Количество) > ОстатокВведенногоКоличества Тогда
                    
                    ОстатокНПЗ = Число(КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Количество) - ОстатокВведенногоКоличества;
                    ВведенноеКоличество = ОстатокВведенногоКоличества;
                    
                    Строка = Объект.Номенклатура.Добавить();
                    Строка.Количество = ВведенноеКоличество;
                    Строка.Артикул = Номенклатура.Код;
                    Строка.НомерПроизводственногоЗадания = КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НПЗ;
                    Строка.НомерПартии = КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Комментарий;
                    Строка.Номенклатура = Номенклатура;
                    Строка.ШтрихКод = Штрихкод;
                    Строка.Дата = ТекущаяДата();
                    
                    СтруктураОтбораСтрок = Новый Структура;
                    СтруктураОтбораСтрок.Вставить("НПЗ", КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НПЗ);
                    СтруктураОтбораСтрок.Вставить("НомКод", КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НомКод);
                    НайденнаяСтрокаТЗ = СписокНоменклатурыПроизвЗадания.НайтиСтроки(СтруктураОтбораСтрок);
                    
                    НайденнаяСтрокаТЗ[0].Количество = ОстатокНПЗ;
                    
                Иначе
                    
                    ОстатокНПЗ = Число(КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Количество) - ОстатокВведенногоКоличества;
                    ВведенноеКоличество = Число(КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Количество);
                    
                    Строка = Объект.Номенклатура.Добавить();
                    Строка.Количество = ВведенноеКоличество;
                    Строка.Артикул = Номенклатура.Код;
                    Строка.НомерПроизводственногоЗадания = КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НПЗ;
                    Строка.НомерПартии = КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].Комментарий;
                    Строка.Номенклатура = Номенклатура;
                    Строка.ШтрихКод = Штрихкод;
                    Строка.Дата = ТекущаяДата();
                    
                    СтруктураОтбораСтрок = Новый Структура;
                    СтруктураОтбораСтрок.Вставить("НПЗ", КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НПЗ);
                    СтруктураОтбораСтрок.Вставить("НомКод", КоличествоИзПроизводсвтенногоЗадания[СчетчикИндекса].НомКод);
                    СтруктураОтбораСтрок.Вставить("Количество", СокрЛП(ВведенноеКоличество));
                    
                    УдалитьСтрокуТЗ = СписокНоменклатурыПроизвЗадания.НайтиСтроки(СтруктураОтбораСтрок);
                    СписокНоменклатурыПроизвЗадания.Удалить(УдалитьСтрокуТЗ[0]);        
                    
                КонецЕсли;
                
                КоличествоИзПроизводсвтенногоЗадания = л_СписокНоменклатурыПроизвЗадания.НайтиСтроки(Новый Структура("НомКод", СокрЛП(Номенклатура.Код)));
                ОстатокВведенногоКоличества = ОстатокВведенногоКоличества - ВведенноеКоличество;
                
                Если ОстатокВведенногоКоличества = 0 Или ОстатокНПЗ > 0 Тогда
                    
                    Прервать;
                    
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЦикла;
КОНЕЦпРОЦЕДУРЫ
48 PLUT
 
21.12.21
15:19
мои глаза :)

пока истина цЫкл

и прервать...

а не зацыкливается ли у вас процедура?

счетчикиндекса где в процедуре увеличивается??
49 PLUT
 
21.12.21
15:20
+(48) добавь ЖыРа - пиши в журнал регистрации, если отладка зависает :)

в процедуре ЗаписьЖурналаРегистрации(...)
50 Юзер123
 
naïve
21.12.21
15:44
Да все.  Спс всем. нашел причину.  Ошибка  в коде как и говорили )

Спс.
51 PLUT
 
21.12.21
15:46
(50) надеюсь, это не твой код? :)
52 lubitelxml
 
21.12.21
15:46
(50) пора бы научится пользоваться уже отладчиком
53 H A D G E H O G s
 
21.12.21
16:18
Никто ничего не менял, но поменялись данные..
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.