Имя: Пароль:
1C
1С v8
Директива на сервере
0 Borteg
 
05.06.14
11:55
С клиента вызываю сервер с директивой на сервере(тоесть передаю весь контекст формы), при вызове из этой серверной процедуры еще одной серверной процедуры я снова передам кучу данных формы?, или уже форма существует на сервере и не будет передачи контекста всей формы.
1 H A D G E H O G s
 
05.06.14
11:56
(0) нет, не передашь. Все уже на сервере, не боись.
2 Borteg
 
05.06.14
11:56
(1) спасибо)
3 Fragster
 
гуру
05.06.14
12:00
вообще контекстные вызовы зло.
http://infostart.ru/public/198264/
выводит время контекстного и неконтекстного вызова - там разница в десять и более раз легко может быть
4 Borteg
 
05.06.14
12:06
(3) Я понимаю, но у меня огромная ТЧ около 10000 строк. Потом из этих строк создаются документы Около 6000-7000. Общее время работы 3-4 часа. Я в начале просто вызываю сразу сервер и там  Для каждого Строка из объект.мояТч Цикл
и поехали там процедуры создания документов
КонецЦикла
5 Borteg
 
05.06.14
12:07
(3) Делал через БСП. Фоновое задание и создание документов -не  понравилось както.
6 Fragster
 
гуру
05.06.14
12:07
а эти 10 килострок - они как беруться? может их вообще на клиент не надо тянуть?
7 Borteg
 
05.06.14
12:09
(6) Они из веб системы берутся, запрос к веб системе, она выдает xml файл, я его разбираю. Там просто иногда контрагенты не определяются например, или еще чтото. Там много проверок всяких.
Я просто че заморочился в 2.0 подобная загрузка отрабатывала за час, в 3.0 3-4 часа
8 Borteg
 
05.06.14
12:11
(7)Тоесть ТЧ появляется и говорит не найден контрагент, не правильный код агента, инн, договор, направление итд итп. Они правят руками обычно это 5-6 минут и ждут кнопку создать документы. И начинается. 3.0 умирает 3-4 часа, в 2.0 проблем вообще не было.
9 Borteg
 
05.06.14
12:12
(8) у меня ощущение что проведение самих документов в 3.0 намного дольше. Да и работы пользователей тоже заметно медленнее стала..
10 H A D G E H O G s
 
05.06.14
12:12
(8) Ты что-то делаешь не так.
11 H A D G E H O G s
 
05.06.14
12:15
ТЧ в Тонком умирает на over 100000 строк *30 колонок.
Именно умирает - каждый скролл грузит сервер вумат на пару минут.

Лечит разбитие ТЧ на блоки по 10000 строк. - там все влет отрабатывает
12 H A D G E H O G s
 
05.06.14
12:16
" процедуры создания документов " - тормоза там.

Поиск контрагентов по коду, номенклатуры по артикулу в цикле без кэширования - вот тебе и ответ
13 acsent
 
05.06.14
12:18
(12) с каких пор поиск элемента по индексу стал таким ресурсоемким?
14 Borteg
 
05.06.14
12:18
(12) Да все это находится на форме, есть закладка настройки там все лежит, никаких поисков по коду ничего такого нету, все грубо берется из настроек.
Может это тормозить типа
РТИУ.СтрокаТЧ.Номенклатура = Объект.НомеклатураРТИУ;
Может лучше собирать ее например в структура и с помощью ЗаполнитьЗначенияСвойств  отбивать?
15 Fragster
 
гуру
05.06.14
12:22
(13) если оно в цикле
16 H A D G E H O G s
 
05.06.14
12:23
(14) Давай, показывай обработку.
17 hhhh
 
05.06.14
12:24
(14) ЗаполнитьЗначенияСвойств - тормозней, чем присваивание. Она для облегчения труда 1с-ников сделана, а не для производительности.
18 Borteg
 
05.06.14
12:25
ДокументУслуг = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    
    ДокументУслуг.Организация  = Организация;
    ДокументУслуг.Ответственный = ПараметрыСеанса.ТекущийПользователь;
    ДокументУслуг.Дата   = КонецДня(Объект.КонецПериода);
    ДокументУслуг.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.Услуги;
    ДокументУслуг.Контрагент = КонтрагентПост;
    ДокументУслуг.ДоговорКонтрагента = ДоговорПост;
    ДокументУслуг.ВалютаДокумента = Константы.ВалютаРегламентированногоУчета.Получить();
    ДокументУслуг.Грузоотправитель = КонтрагентПост;
    ДокументУслуг.КратностьВзаиморасчетов = 1;
    ДокументУслуг.КурсВзаиморасчетов = 1;
    ДокументУслуг.Комментарий = КомментарийПост.Значение;
    ДокументУслуг.НомерВходящегоДокумента = "б/н";
    ДокументУслуг.ДатаВходящегоДокумента = КонецДня(Объект.КонецПериода);
    ДокументУслуг.СуммаВключаетНДС = Истина;
    ДокументУслуг.СчетУчетаРасчетовСКонтрагентом = Объект.СчетУчетаРасчетовСКонтрагентамиПТиУ;
    ДокументУслуг.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.НеЗачитывать;
    
    
    //Агентское вознаграждение
    Если (СуммаПост - СтрахВознПост) <> 0 Тогда
        
        НовСтрока = ДокументУслуг.Услуги.Добавить();
        НовСтрока.Количество = 1;
        НовСтрока.Номенклатура = Объект.НоменклатураПТиУ;
        
        НовСтрока.Сумма = СуммаПост - СтрахВознПост;
        
        Если НЕ НДСПост = 0 Тогда
            Если СтрахВознПост <> 0 тогда
                НовСтрока.СуммаНДС = НДСПост - Окр(СтрахВознПост*18/118,2);
            иначе
                НовСтрока.СуммаНДС = НДСПост;        
            КонецЕсли;
        иначе
            НовСтрока.СуммаНДС = 0;
        КонецЕсли;
        
        НовСтрока.Цена = НовСтрока.Сумма;
        
        Если Не НовСтрока.СуммаНДС = 0 Тогда
            Новстрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
        Иначе
            Новстрока.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
        КонецЕсли;
        
        НовСтрока.СчетЗатрат = Объект.СчетЗатратПТиУ;
        НовСтрока.ПодразделениеЗатрат = Объект.ПодразделениеЗатратПТиУ;
        НовСтрока.Содержание = Объект.НоменклатураПТиУ.НаименованиеПолное;
        НовСтрока.Субконто1 = Объект.Субконто1ПТиУ;
        НовСтрока.Субконто2 = Объект.Субконто2ПТиУ;
        НовСтрока.СчетЗатратНУ = Объект.СчетЗатратПТиУ;
        НовСтрока.СубконтоНУ1 =Объект.Субконто1ПТиУ;
        НовСтрока.СубконтоНУ2 = Объект.Субконто2ПТиУ;
        НовСтрока.СчетУчетаНДС = Объект.СчетУчетаНДСПТиУ;
        
    КонецЕсли;
    
    
    //Страховка
    
    Если СтрахВознПост <> 0 тогда
        
        НовСтрока = ДокументУслуг.Услуги.Добавить();
        НовСтрока.Количество = 1;
        НовСтрока.Номенклатура = Объект.НоменклатураСтрахованияПТиУ;        
        НовСтрока.Сумма = СтрахВознПост;
        
        Если НЕ НДСПост = 0 Тогда
            НовСтрока.СуммаНДС = Окр(СтрахВознПост*18/118,2);
        Иначе
            НовСтрока.СуммаНДС = 0;
        КонецЕсли;  
        
        НовСтрока.Цена = СтрахВознПост;
        
        Если Не НовСтрока.СуммаНДС=0 Тогда
            Новстрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
        Иначе
            Новстрока.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
        КонецЕсли;
        
        НовСтрока.ПодразделениеЗатрат = Объект.ПодразделениеЗатратПТиУСтрахование;
        НовСтрока.Содержание = Объект.НоменклатураСтрахованияПТиУ.НаименованиеПолное;
        НовСтрока.СчетЗатрат = Объект.СчетЗатратПТиУСтрахование;
        НовСтрока.Субконто1 = Объект.Субконто1ПТиУСтрахование;
        НовСтрока.Субконто2 = Объект.Субконто2ПТиУСтрахование;
        НовСтрока.СчетЗатратНУ =Объект.СчетЗатратПТиУСтрахование;
        НовСтрока.СубконтоНУ1 = Объект.Субконто1ПТиУСтрахование;
        НовСтрока.СубконтоНУ2 =  Объект.Субконто2ПТиУСтрахование;
        НовСтрока.СчетУчетаНДС = Объект.СчетУчетаНДСПТиУСтрахование
        
    КонецЕсли;
    
    Попытка            
        ДокументУслуг.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        ДокументУслуг.Записать(РежимЗаписиДокумента.Запись);
        Сообщение = Новый СообщениеПользователю();
        Сообщение.Текст = "Документ не проведен: " + ДокументУслуг.Ссылка;
        Сообщение.УстановитьДанные(ДокументУслуг);
        Сообщение.Сообщить();
    КонецПопытки;
    
    Если Не НДСПост = 0 Тогда
        Попытка
            СчетФактура = УчетНДСПереопределяемый.СоздатьСчетФактуруПолученныйНаОсновании(ДокументУслуг.Ссылка, "б/н",КонецДня(Объект.КонецПериода), );
        Исключение
            Сообщение = Новый СообщениеПользователю();
            Сообщение.Текст = "Проверьте счет фактуру: " + СчетФактура;
            Сообщение.УстановитьДанные(СчетФактура.ПолучитьОбъект());
            Сообщение.Сообщить();
        КонецПопытки
        
    КонецЕсли;
19 Borteg
 
05.06.14
12:26
Ну вот так примерно все документы и реализации тоже также заполняются СФ тоже типовым заполнением на основании делается
20 Borteg
 
05.06.14
12:26
ну по сравнению с 2.0 создание намного дольше, мне кажется что сама бухгалтерия 3.0 просто медленее
21 Borteg
 
05.06.14
12:26
&НаСервере
Функция СоздатьПоступлениеТоваровИУслуг(КонтрагентПост,ДоговорПост,СуммаПост,НДСПост,СтрахВознПост = 0,КомментарийПост)
22 H A D G E H O G s
 
05.06.14
12:28
(21) Тормозит (18) ?

Или все-же тормозит то, что создается на основании 10000 строк табличной части?
23 Borteg
 
05.06.14
12:28
Если СтрокаТч.ОказУсл <> 0 тогда
                        
                        Документ = СоздатьПоступлениеТоваровИУслуг(СтрокаТч.Контрагент,СтрокаТч.Договор,СтрокаТч.ОказУсл,СтрокаТч.НдсОказУсл,0,Комментарий);
                            
                    КонецЕсли;
Ну а вот так она вызывается в цикле с серверной процедуры куда я весь контекст передал один раз
24 Fragster
 
гуру
05.06.14
12:28
ну так ты замер производительности-то сделал, чтобы определить места тормозов? или все занимает по 2%?
25 acsent
 
05.06.14
12:28
Серверная версия? Есть подозрение на блокировки. Попробуй для начала константу читать 1 раз
26 H A D G E H O G s
 
05.06.14
12:29
(23) ну вооот
27 H A D G E H O G s
 
05.06.14
12:29
Все стало ясно
28 H A D G E H O G s
 
05.06.14
12:29
Контекстный вызов сервера для каждой строки?
29 Fragster
 
гуру
05.06.14
12:30
т.е. (18) на клиенте, а (23) - переход на сервер в цикле? или что?
30 H A D G E H O G s
 
05.06.14
12:30
Если СтрокаТч.ОказУсл <> 0 тогда

                        
                        Документ = СоздатьПоступлениеТоваровИУслуг(СтрокаТч.Контрагент,СтрокаТч.Договор,СтрокаТч.ОказУсл,СтрокаТч.НдсОказУсл,0,Комментарий);
                            
                    КонецЕсли;


Это - на сервере?
31 Borteg
 
05.06.14
12:30
(27) нет это серверная процедура я в нее передела все,
тоесть на сервер передал, начал там перебирать объектТч и вызывать ту процедуру сверху, контекст один раз приехал, это
не с клиента.
32 H A D G E H O G s
 
05.06.14
12:30
скинь обработку, не мучай никого
33 Borteg
 
05.06.14
12:30
(30) да
34 Borteg
 
05.06.14
12:32
(32) да не мучаю)) я что хотел узнал))) я думал что с сервера на сервер может гоняю контекст)) сейчас помучаюсь еще) Я суть уловил как надо, просто само проведение документов куда медленее, да и вообще 8.3 платформа у меня с памятью проблемы на сервере, не освобождается, да и медленее все стало...Скорее всего проблемы в этом. Проведение документов, работа с ними просто у пользователей медленее..
35 Borteg
 
05.06.14
13:21
Хм задам  может еще один глупый вопрос) У меня почти вся логика в  модуле формы, в типовых используется чаще модуль объекта и менеджера, я прекрасно понимаю что и как можно сделать и зачем это обычно делается, но влияет ли это на скорость?? Если я например создание документов делаю в модуле формы.
36 H A D G E H O G s
 
05.06.14
13:26
(35) Не влияет.

Делается для внеинтерфейсной работы.
37 Borteg
 
05.06.14
13:26
(36) Спасибо))
38 Borteg
 
05.06.14
13:36
По проблеме впринципе все ясно. Я не учел что 3.0 у нас с бит финансом и при проведении делаются проводки по бюджетам бит итдп итп в 2.0 такого не было. + по передачи данных. Сделал такую гадость начал гонять между клиентом и сервером контекст формы на каждый документ и поставил там состояние чтобы смотреть скорость создания документов. При это обнаружил что данные практически не гоняются туда сюда , разница между таким кодом и правильным примерно в 3 минуты. Читал в проф разработке давно чтото вроде того что между сервером и клиентом гоняются только измененные данные(что то такое точно было) поэтому при нашем варианте когда все в локалке быстрой не сильно сказывается на работе, единственное конечно вызовов много))изза этого наверное и разница в 3 минуты между двумя этими вариантами. Как то так получилось.
39 Borteg
 
05.06.14
13:37
(38) попробую еще внеконтекстные вызовы сделать, по фэньшую совсем, скажу что там получится, но кажется скорость не сильно увеличится, по замеру проведение документов сильно много тянет. С битом вообще тяжко походу.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший