Имя: Пароль:
   
1C
1С v8
Подписка на обработку проведения УПП 1с8.3
0 Casper211
 
27.09.16
14:44
Добрый день! Мне необходимо при проведении документа РТУ записать данные в регистр (который я самостоятельно создал). Мне сказали использовать подписка на событие. Я все правилньо сделал : создал подписку, привязал к ней общий модуль с таким кодом:??

Процедура РтуЦенаПродажиПрайсоваСебестоимостьОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
    Для каждого Строка Из Источник.Товары Цикл
        Движение = Источник.Движения.ПродажиПрайсоваСебестоимость.Добавить();
        Движение.Период = Строка.ЗаказПокупателя.Дата;
        Движение.Организация = Строка.ЗаказПокупателя.Организация;
        Движение.Номенклатура = Строка.Номенклатура;
        Движение.ХарактеристикаНоменклатуры = Строка.ХарактеристикаНоменклатуры;
        Движение.Количество = Строка.Количество;
        Движение.Стоимость = Строка.Цена;
    КонецЦикла;
    Источник.Движения.ПродажиПрайсоваСебестоимость.Записывать = Истина;
КонецПроцедуры


Но немного долго думает 2-3 секунды, во время кнопки провести (записать) РТУ. Возможно есть какой-то другой способ? подскажите пожалуйста.
1 John83
 
naïve
27.09.16
14:49
для начала посмотри, в каком месте зависает
2 RomanYS
 
27.09.16
14:50
(0) тормозить здесь нечему, кроме
Строка.ЗаказПокупателя.Организация;
лучше заменить на
Источник.Организация;

А вообще конечно сделать замер и посмотреть
3 Serg_1960
 
27.09.16
14:51
угу, в конфигураторе Отладка - Замер производительности.
4 hhhh
 
27.09.16
14:52
попробуйте запросом вытащить из Источник.Товары

а то вроде сейчас век кибернетики, а вы фигачите запросы в цикле.

        Движение.Период = Строка.ЗаказПокупателя.Дата;
        Движение.Организация = Строка.ЗаказПокупателя.Организация;

это же дикость
5 Serg_1960
 
27.09.16
14:54
"Строка.ЗаказПокупателя.Организация" - циклическое обращение к базе, чтение и загрузка на клиента объекта "ЗаказПокупателя".
6 rbcvg
 
27.09.16
14:54
какой-то странный регистр.
7 RomanYS
 
27.09.16
14:56
(6) ага, особенно радует:
Движение.Стоимость = Строка.Цена;
8 Casper211
 
27.09.16
14:56
(1) (2) (3) странно, но уже не зависает.
Извините что потревожил.
(4) переделаю на
Движение.Период = Источник.Дата;
Движение.Организация = Источник.Организация;
(6)(7) я еще не доделал, данные будут немного другие.
всем спасибо
9 RomanYS
 
27.09.16
14:59
(8) "данные будут немного другие" - получай все данные запросом и загружай их набор движений без цикла.
10 Serg_1960
 
27.09.16
14:59
PS: из источника бери организацию - в строках другой организации, кроме указанной в источнике не должно быть.

(8) "странно, но уже не зависает" - после первого чтения, данные кэшируются и читаются оттуда.
11 Casper211
 
27.09.16
15:01
(10) Вроде давно уже в 1с, но я еще такой зеленый
12 rbcvg
 
27.09.16
15:05
(11) еще больше удивишся, когда узнаешь, что новый регистр тут не нужен.
13 hhhh
 
27.09.16
15:07
(12) чем больше регистров, тем больше денег можно содрать с клиента. Так что регистр нужен.
14 Nuobu
 
27.09.16
15:07
ПродажиПрайсоваСебестоимость
буква "я" пропущена?
Можно писать сразу набор, может быстрей будет.
Последння строка:
Движение.Стоимость = Строка.Цена;
Это регистр сведений?
15 Serg_1960
 
27.09.16
15:07
(11) Просто не всё сразу легко и доступно, не всё запоминается и вовремя вспоминается - практикой нивелируется :)

PS: поговори ещё минутку с нами, и запуск алгоритма опять "зависнет" на пару секунд - кэш протух и требует обновления :)
16 rbcvg
 
27.09.16
15:09
(13) "Вроде давно уже в 1с, но я еще такой зеленый")))))
17 Serg_1960
 
27.09.16
15:10
(12) Возможно это только "болванка", а уникальная информация будет добавлена автором в алгоритм позднее.

(14) Это, кстати, нормальная практика. Чтобы избежать случайного попадания на идентификаторы типовой конфигурации сейчас и/или в будущем.
18 Nuobu
 
27.09.16
15:12
(17) Что именно нормальная практика? Делать ошибки в словах?
19 Serg_1960
 
27.09.16
15:13
Не переживай:) Программист, как ёлка, - круглый год зелёный... всю свою профессиональную жизнь :)))
20 hhhh
 
27.09.16
15:14
(18) может это фамилие такое? "Прайсов".
21 Nuobu
 
27.09.16
15:15
(20) Тогда уже его жена - госпожа "Прайсова".
22 Serg_1960
 
27.09.16
15:15
(18) Да. Сознательно делать ошибки, но не в словах - это безграмотность, а в наименованиях. Могу даже поискать примеры типового кода.
23 Casper211
 
27.09.16
15:16
(14) (20) Так захотел клиент. Клиент - прежде всего!)))
24 hhhh
 
27.09.16
15:16
(21) тогда бы было ПродажиПрайсовой
25 Nuobu
 
27.09.16
15:17
(23) Очень странно, что клиент указывает, как назвать объекты метаданных.
26 hhhh
 
27.09.16
15:19
(25) стоп, у вас на Украине ведь правильно "Прайсова", а не "Прайсовая". Сам же украинец и своего языка не знаешь.
27 Nuobu
 
27.09.16
15:22
(26) Тогда было бы "ПродажнаПрайсоваСобивартисть".
28 Serg_1960
 
27.09.16
15:24
"прайсова стоимость"- это ж налоговый термин в/на Украине :)
29 Nuobu
 
27.09.16
15:25
(28) Вартисть - это по украински - Стоимость.
30 Casper211
 
27.09.16
15:27
Процедура РтуЦенаПродажиПрайсоваСебестоимостьОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт

    //НаборДвижений = Источник.Движения.ПродажиПрайсоваСебестоимость;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РеализацияТоваровУслугТовары.Ссылка,
        |    РеализацияТоваровУслугТовары.НомерСтроки,
        |    РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
        |    РеализацияТоваровУслугТовары.Количество,
        |    РеализацияТоваровУслугТовары.Номенклатура,
        |    РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры,
        |    РеализацияТоваровУслугТовары.ЗаказПокупателя,
        |    ЦеныНоменклатурыСрезПоследних.Цена,
        |    ЦеныНоменклатурыСрезПоследних.Цена * РеализацияТоваровУслугТовары.Количество КАК ЦенаПрайс
        |ИЗ
        |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
        |        ПО РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
        |            И РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
        |ГДЕ
        |    РеализацияТоваровУслугТовары.Ссылка = &РТУ";
    
    Запрос.УстановитьПараметр("Период", Источник.Дата);
    Запрос.УстановитьПараметр("РТУ", Источник.Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
    
    Для каждого Строка Из РезультатЗапроса Цикл
        Движение = Источник.Движения.ПродажиПрайсоваСебестоимость.Добавить();
        Движение.Период = Строка.Ссылка.Дата;
        Движение.Организация = Строка.Ссылка.Организация;
        Движение.Номенклатура = Строка.Номенклатура;
        Движение.ХарактеристикаНоменклатуры = Строка.ХарактеристикаНоменклатуры;
        Движение.Количество = Строка.Количество;
        Движение.Стоимость = Строка.Цена;
    КонецЦикла;
    Источник.Движения.ПродажиПрайсоваСебестоимость.Записывать = Истина;
//        НаборДвижений.Записать();
КонецПроцедуры


Вот так норм?
31 Casper211
 
27.09.16
15:29
Или как сказал (9) "получай все данные запросом и загружай их набор движений без цикла." ??
32 Nuobu
 
27.09.16
15:31
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,
        |    РеализацияТоваровУслугТовары.Ссылка.Организация КАК Организация,
        |    РеализацияТоваровУслугТовары.Количество,
        |    РеализацияТоваровУслугТовары.Номенклатура,
        |    РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры,
        |    ЦеныНоменклатурыСрезПоследних.Цена КАК Стоимость
        |ИЗ
        |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        |        
        |ГДЕ
        |    РеализацияТоваровУслугТовары.Ссылка = &РТУ";
    
    Запрос.УстановитьПараметр("Период", Источник.Дата);
    Запрос.УстановитьПараметр("РТУ", Источник.Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    
     Источник.Движения.ПродажиПрайсоваСебестоимость.Загрузить(РезультатЗапроса);
//Что-то вроде такого я имел ввиду...
    
    Источник.Движения.ПродажиПрайсоваСебестоимость.Записывать = Истина;
33 Vladal
 
27.09.16
15:34
(27) "ПродажнаПрайсоваСобiвартiсть"
34 Serg_1960
 
27.09.16
15:34
РеализацияТоваровУслугТовары.Ссылка.Дата КАК Период
35 Nuobu
 
27.09.16
15:35
(34) а, точно, не досмотрел.
(33) Точно!
36 Casper211
 
27.09.16
15:35
(34) (35) Спасибо!
37 Serg_1960
 
27.09.16
15:36
:) И Вам спасибо. Весело время провели. "Собiвартiсть" :))
38 Casper211
 
27.09.16
15:38
(37) =) название это глупости. Я всегда могу их переименовать. Главное чтобы работало корректно.
39 hhhh
 
27.09.16
16:07
(33) там ценаПродажи