Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Подписка на обработку проведения УПП 1с8.3

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

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


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

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

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

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

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

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

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

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

    //НаборДвижений = Источник.Движения.ПродажиПрайсоваСебестоимость;

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

КонецПроцедуры


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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует