Имя: Пароль:
1C
1С v8
Временные файлы при проведении документов (выполнении запросов)
,
0 klis
 
21.05.15
23:45
Есть УТ11 в файловом варианте. Платформа 8.3.6. Есть нетиповой документ, который при проведении анализирует нетиповые регистры, сопоставляет с введенными данными и кладет результат в те же регистры, вроде ничего сверхъестественного.
Документ создается дополнительной обработкой по расписанию (регламентному заданию). В целом все работает более-менее хорошо, НО от случая к случаю при проведении на серваке начинает формировать временный файл, который заполняет все свободное пространство, после чего регламентное задание благополучно загибается.
Что это может быть? Есть какая-то отрывочная информация о том, что 1Сина результат запросов помещает во временные файлы, но, блин, почему один и тот же запрос может отработать как надо 3-4 раза подряд, а на 5-й взять и начать генерить бесконечный временный файл?! Кто-то может быть сталкивался?
1 GROOVY
 
21.05.15
23:54
Временные таблицы там, случаем не создаются в невообозримом количестве?
2 Сергиус
 
21.05.15
23:56
(0)Может зависит от числа строк документа? А вообще да, надо смотреть запросы, что там происходит.
3 shuhard_серый
 
21.05.15
23:57
(0) ну такой случай есть тех.журнал , ну и конечно файловая УТ 11 не предмет обсуждения, ей не положено работать от роду
4 klis
 
22.05.15
00:00
(1) Нет, как раз временных таблиц там вообще нет. Есть СрезПослдених регистра сведений на несколько тысяч записей, больше вроде ничего криминального.
5 klis
 
22.05.15
00:08
(2) Количество строк всегда практически одинаковое, разница от документа к документу <1%. Если запускать регламентное задание вручную в тонком клиенте напрямую (на сервере терминале), работает всегда, все регламентное задание отрабатывает за 3-5 сек. Если тоже само делать в тонком клиенте через веб прямо вот несколько раз подряд - каждые n раз (2-3) происходит вот эта мистика...
(3) Очень надеялся, что никогда не придется пользоваться этой штукой) Не подскажите, как его лучше настроить для моего случая?
6 klis
 
22.05.15
00:11
Вот обработка проведения...

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    Движения.ТоварыНаСкладахПоставщиков.Записывать = Истина;
    Движения.ТоварыНаСкладахПоставщиков.Очистить();
    Если Остатки.Количество() > 0 Тогда
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ВложенныйЗапрос.Номенклатура,
        |    ВложенныйЗапрос.СкладПоставщика,
        |    СУММА(ВложенныйЗапрос.Количество) КАК Количество
        |ИЗ
        |    (ВЫБРАТЬ
        |        РегистрацияОстатковПоставщикаОстатки.Номенклатура КАК Номенклатура,
        |        РегистрацияОстатковПоставщикаОстатки.СкладПоставщика КАК СкладПоставщика,
        |        РегистрацияОстатковПоставщикаОстатки.Количество КАК Количество
        |    ИЗ
        |        Документ.РегистрацияОстатковПоставщика.Остатки КАК РегистрацияОстатковПоставщикаОстатки
        |    ГДЕ
        |        РегистрацияОстатковПоставщикаОстатки.Ссылка = &Ссылка
        |    
        |    ОБЪЕДИНИТЬ ВСЕ
        |    
        |    ВЫБРАТЬ
        |        ТоварыНаСкладахПоставщиковОстатки.Номенклатура,
        |        ТоварыНаСкладахПоставщиковОстатки.СкладПоставщика,
        |        -ТоварыНаСкладахПоставщиковОстатки.КоличествоОстаток
        |    ИЗ
        |        РегистрНакопления.ТоварыНаСкладахПоставщиков.Остатки(
        |                &МоментВремени,
        |                СкладПоставщика В
        |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                        РегистрацияОстатковПоставщикаОстатки.СкладПоставщика
        |                    ИЗ
        |                        Документ.РегистрацияОстатковПоставщика.Остатки КАК РегистрацияОстатковПоставщикаОстатки
        |                    ГДЕ
        |                        РегистрацияОстатковПоставщикаОстатки.Ссылка = &Ссылка)) КАК ТоварыНаСкладахПоставщиковОстатки) КАК ВложенныйЗапрос
        |
        |СГРУППИРОВАТЬ ПО
        |    ВложенныйЗапрос.Номенклатура,
        |    ВложенныйЗапрос.СкладПоставщика
        |
        |ИМЕЮЩИЕ
        |    СУММА(ВложенныйЗапрос.Количество) <> 0";
        РезультатЗапроса = Запрос.Выполнить();
        
        Выборка = РезультатЗапроса.Выбрать();
        
        Пока Выборка.Следующий() Цикл
            Движение = Движения.ТоварыНаСкладахПоставщиков.Добавить();
            Движение.Период = Дата;
            Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
            Движение.Номенклатура = Выборка.Номенклатура;
            Движение.СкладПоставщика = Выборка.СкладПоставщика;
            Движение.Количество = Выборка.Количество;
        КонецЦикла;
    КонецЕсли;
    
    Движения.ЛидТайм.Записывать = Истина;
    Движения.ЛидТайм.Очистить();
    Если ЛидТайм.Количество() > 0 Тогда
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ЕСТЬNULL(ЛидТаймСрезПоследних.Номенклатура, ВложенныйЗапрос.Номенклатура) КАК Номенклатура,
        |    ЕСТЬNULL(ВложенныйЗапрос.ЛидТайм, 0) КАК ЛидТайм
        |ИЗ
        |    РегистрСведений.ЛидТайм.СрезПоследних(&МоментВремени, ) КАК ЛидТаймСрезПоследних
        |        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        |            РегистрацияОстатковПоставщикаЛидТайм.Номенклатура КАК Номенклатура,
        |            РегистрацияОстатковПоставщикаЛидТайм.ЛидТайм КАК ЛидТайм
        |        ИЗ
        |            Документ.РегистрацияОстатковПоставщика.ЛидТайм КАК РегистрацияОстатковПоставщикаЛидТайм
        |        ГДЕ
        |            РегистрацияОстатковПоставщикаЛидТайм.Ссылка = &Ссылка) КАК ВложенныйЗапрос
        |        ПО (ВложенныйЗапрос.Номенклатура = ЛидТаймСрезПоследних.Номенклатура)";
        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать();
        
        Пока Выборка.Следующий() Цикл
            Движение = Движения.ЛидТайм.Добавить();
            Движение.Период = Дата;
            Движение.Номенклатура = Выборка.Номенклатура;
            Движение.ЛидТайм = Выборка.ЛидТайм;
        КонецЦикла;
    КонецЕсли;
    
    Движения.ДатыСледующихПоставок.Записывать = Истина;
    Движения.ДатыСледующихПоставок.Очистить();
    Если ЗначениеЗаполнено(ДатаПоставки) Тогда
        Движение = Движения.ДатыСледующихПоставок.Добавить();
        Движение.Период = Дата;
        Движение.ДатаПоставки = ДатаПоставки;
    КонецЕсли;
            
КонецПроцедуры
7 klis
 
24.05.15
12:32
Нет идей?
8 klis
 
25.05.15
18:04
А вдруг...
9 D_E_S_131
 
25.05.15
18:14
Через монитор производительности видно что за файл вообще создается? А то может это и не 1С во все...
10 klis
 
25.05.15
18:33
(9) Явно 1С - имя файла v8_AD82_68f.tmp (например) Да и регламентное задание отваливается с ошибкой - На устройстве нет свободного места 'C:\Windows\Temp\v8_AD82_68f.tmp'. 112(0x00000070): Недостаточно места на диске.
11 D_E_S_131
 
25.05.15
19:01
Как первое, что в глаза бросается — выгрузите склады из ТЧ в массив и используйте как параметр для условий на виртуальные таблицы.
12 D_E_S_131
 
25.05.15
19:04
С "ЛидТайм" тоже какая-то хня. Перенесите хотя бы вложенный запрос во врем.таблицу с индексацией поля "Номенклатура".
13 klis
 
27.05.15
11:29
(11)(12) Попробовал. Сами по себе доки стали проводить побыстрее, но в целом ничего не изменилось. Самое забавное, что эта хня происходит, если регламентное задание происходит в контексте тонкого клиента через веб. Если запускать вручную из тонкого клиента напрямую на сервере - то все норм.
Попробовал настроить технологический журнал - не разобрался с первого раза. Что нужно отлавливать и на что смотреть в моем случае?
14 klis
 
27.05.15
16:26
В ТЖ происходит вот это http://pastebin.com/PAqun0R0 бесконечно число раз. Файл лога под гиг. Что это может быть?
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.