Имя: Пароль:
1C
1С v8
Проведение группы документов
0 sqr4
 
06.08.14
14:55
&НаСервере
Процедура ПодготовитьНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    СписокЗаказов.Заказ
    |ПОМЕСТИТЬ ЗаказыСписок
    |ИЗ
    |    &СписокЗаказов КАК СписокЗаказов
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ДополнительныеСведения.Свойство КАК Свойство,
    |    ДополнительныеСведения.Значение,
    |    ДополнительныеСведения.Объект
    |ПОМЕСТИТЬ СписокСвойств
    |ИЗ
    |    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    |ГДЕ
    |    ДополнительныеСведения.Свойство = &Свойство
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ЗаказыСписок.Заказ,
    |    СписокСвойств.Значение,
    |    ЕСТЬNULL(СписокСвойств.Свойство, &Свойство) КАК Свойство
    |ИЗ
    |    ЗаказыСписок КАК ЗаказыСписок
    |        ЛЕВОЕ СОЕДИНЕНИЕ СписокСвойств КАК СписокСвойств
    |        ПО ЗаказыСписок.Заказ = СписокСвойств.Объект";
    Запрос.УстановитьПараметр("СписокЗаказов",ДанныеФормыВЗначение(ЗаказыСписок, Тип("ТаблицаЗначений")));
    Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Время отгрузки"));     
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
        Проводить = Ложь;
        ОбъектЗаказ = Результат.Заказ.ПолучитьОбъект();
        Если ЗаполнитьДатуОтгрузки Тогда
            Если ЗначениеЗаполнено(Результат.Значение) Тогда
                ДатаСтрокой = СокрЛП(Результат.Значение);
                Попытка
                    ДатаОтгрузки = Дата(Лев(ДатаСтрокой,4)+Сред(ДатаСтрокой,6,2)+Сред(ДатаСтрокой,9,2)+Сред(ДатаСтрокой,12,2)+Сред(ДатаСтрокой,15,2)+Сред(ДатаСтрокой,18,2));
                    ЗаполнитьДатуОтгрузки(ОбъектЗаказ, ДатаОтгрузки);
                    Проводить = Истина;
                Исключение
                    Сообщение = Новый СообщениеПользователю;
                    Сообщение.Текст = "Не верный формат даты заказа в документе "+Результат.Заказ;
                    Сообщение.Сообщить();
                КонецПопытки;
            Иначе
                СписокСПустойДатой.Добавить(Результат.Заказ);
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        Если Исправить Тогда
            ПриИзмененииСкладаСервер(ОбъектЗаказ);
            Проводить = Истина;
        КонецЕсли;
        Если ЗначениеЗаполнено(УстановитьСтатус) Тогда
            ОбъектЗаказ.Статус = УстановитьСтатус;
            ПриИзмененииСтатуса(ОбъектЗаказ);
            Проводить = Истина;
        КонецЕсли;    
        Если Проводить Тогда
            Попытка
                ОбъектЗаказ.Записать(РежимЗаписиДокумента.Проведение);
            Исключение
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Не удалось провести заказ "+Результат.Заказ+".";
                Сообщение.Сообщить();
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;    
КонецПроцедуры
сама процедура. Чем больше заказов тем сильнее тормозит, причем по началу работает быстро, а чем дальше тем медленнее. Как оптимизировать.
1 Ёпрст
 
гуру
06.08.14
15:03
Зачем ЭТО проводить ?
У вас чего, датаОтгрузки влияет на движения регистров шо ле ?
2 sqr4
 
06.08.14
15:05
Там и склад прописывается. Т.е проводить вроде как бы надо полюбому
3 Ёпрст
 
гуру
06.08.14
15:06
в каком месте склад переопределяется и зачем ?
4 Ёпрст
 
гуру
06.08.14
15:06
вижу только ЗаполнитьДатуОтгрузки(ОбъектЗаказ, ДатаОтгрузки);
5 sqr4
 
06.08.14
15:07
Причем проведение первых документов занимает минимум времени. К примеру первые 10 проводятся за секунду, вторые 10 уже за 10 сек, третьи 10 уже за минуту и т.д
6 sqr4
 
06.08.14
15:09
(3) ПриИзмененииСкладаСервер(ОбъектЗаказ);
Документы создаются другой обработкой, загрузкой с сайта, типовой. Причем склад заполняется косячно, при проведении не заполняется по регистру заказов эта аналитика не встает. Данный момент это дело поправляет
7 sqr4
 
06.08.14
15:12
т.е много быстрее запустить обработку шесть раз по месяцу, чем один раз за пол года. С чем это может быть связано
8 sqr4
 
06.08.14
15:14
Причем быстрее в разы
9 hhhh
 
06.08.14
15:23
попробуйте в транзакции проводить. по сто документов в одной транзакции
10 sqr4
 
06.08.14
15:36
Не разу такого не делал. Можете пример привести подобной транзакции, в плане кода.