Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ЗУП. А в чем прикол такого кода?

ЗУП. А в чем прикол такого кода?
Я
   Target1025
 
21.07.21 - 09:32
Это код метода Записать()  из Увольнения.

    ДокументОбъект = РеквизитФормыВЗначение("Объект");
    РеквизитыВДанные(ДокументОбъект);
    
    УстановитьПривилегированныйРежим(Истина);
    
    Если Не СсылкаНаОбъект.Пустая() Тогда
        // служебное копирование.
        ДокументОбъект.ДополнительныеСвойства.Вставить("МодификацияЗапрещена");
        ДокументОбъект.ОбменДанными.Загрузка = Истина;
        ДокументОбъект = ДокументОбъект.Скопировать();
        ДокументОбъект.Дата = Объект.Дата;
    КонецЕсли;
    ВременнаяСсылка = Документы.Увольнение.ПолучитьСсылку();
    ДокументОбъект.УстановитьСсылкуНового(ВременнаяСсылка);
    ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
    
    УстановитьПривилегированныйРежим(Ложь);
    
    РеквизитыДляПроведения = Документы.Увольнение.РеквизитыДляПроведения(ВременнаяСсылка);
   Ненавижу 1С
 
1 - 21.07.21 - 09:38
(0) какой момент предлагается обсудить?
   Chai Nic
 
2 - 21.07.21 - 09:40
Код ужасен, как и большинство кода в современных типовых. От лаконичности и самодокументированности модулей старых конфигураций ушли. Теперь бизнес-логику не видно за толстой оберткой вызовов БСП и костылей клиент-серверного взаимодействия. Селяви.
   Target1025
 
3 - 21.07.21 - 09:46
(1) Зачем они делают временную ссылку?
   Галахад
 
4 - 21.07.21 - 09:47
Забавляет количество заглянувших в ветку и ответивших.
   Target1025
 
5 - 21.07.21 - 09:48
(1)  я так понимаю, что из-за этой временной ссылки начала рушиться уникальность по номеру, на что мне начали жаловаться пользователи. Она пытается писаться, когда в системе лежит еще старая ссылка.
   lodger
 
6 - 21.07.21 - 10:07
(3) там вроде есть комментарии
        // Для корректной регистрации данных среднего заработка нужно прежде зарегистрировать начисления и отработанное время.

        ДанныеДляПроведения = ДанныеДокументаДляПроведения(ДанныеДляПроведения);
        ИсключаемыеРегистраторы.Добавить(ДанныеДляПроведения.ДокументСсылка);
        
        // Регистрируем данные документа в учете.

        Отказ = Ложь;
        // Смоделируем коллекцию движений документа.

        НаборыЗаписей = ЗарплатаКадры.НаборыЗаписейРегистратора(Метаданные.Документы.Увольнение, ДанныеДляПроведения.ДокументСсылка);
        // Регистрация начислений

        РасчетЗарплатыРасширенный.СформироватьДвиженияНачислений(
            НаборыЗаписей, Отказ, Объект.Организация, КонецМесяца(Объект.ПериодРегистрации), ДанныеДляПроведения.Начисления, ДанныеДляПроведения.ПоказателиНачислений, Истина);
        // Регистрация отработанного времени в учете начислений и удержаний.

        ДанныеДляПроведенияУчетЗарплаты = ОтражениеЗарплатыВУчете.ОписаниеДанныеДляПроведения();
        ДанныеДляПроведенияУчетЗарплаты.Движения                 = НаборыЗаписей;
        ДанныеДляПроведенияУчетЗарплаты.Организация             = Объект.Организация;
        ДанныеДляПроведенияУчетЗарплаты.ПериодРегистрации         = Объект.ПериодРегистрации;
        ДанныеДляПроведенияУчетЗарплаты.МенеджерВременныхТаблиц = ДанныеДляПроведения.МенеджерВременныхТаблиц;
        УчетНачисленнойЗарплаты.ЗарегистрироватьОтработанноеВремя(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.ОтработанноеВремяПоСотрудникам, Истина);
        
        // Определяем исключаемый регистратор, который будет использоваться при обновлении корректировок.    

        НаборыЗаписей.ДанныеОВремениДляРасчетаСреднегоОбщий.ДополнительныеСвойства.Вставить("ИсключаемыйРегистратор", СсылкаНаОбъект);
        // Учет среднего заработка

        УчетСреднегоЗаработка.ЗарегистрироватьДанныеСреднегоЗаработка(НаборыЗаписей, Отказ, ДанныеДляПроведения.НачисленияДляСреднегоЗаработка, Истина);
        
        // Обновляем данные среднего заработка в документе с учетом зарегистрированных начислений.

        ЗаполнитьПериодРасчетаСреднегоЗаработка();
        
        ОчиститьРассчитанныеДанные();

(5) контроль уникальности включен в конфе поставщика, код тоже типовой. почему у всех робит, а у тебя сбой?
   Said_We
 
7 - 21.07.21 - 10:28
(2) Не код в типовых, а копипаст овна - вызовы, подготовка вызова и прочей шелухи.
   Said_We
 
8 - 21.07.21 - 10:29
(4) А что тут отвечать?
У ЗиУП структура таблиц данных через одно место, почему код должен быть иным?
   fisher
 
9 - 21.07.21 - 10:45
(3) Если это цельный кусок кода - то непонятно зачем. Атавизм после рефакторинга скорее всего.
   fisher
 
10 - 21.07.21 - 10:52
(5) Не вижу связи. Ты типа думаешь на то, что при записи ранее записанного УстановитьСсылкуНового() что-то нехорошее делает? Я думаю, оно просто игнорируется. Хотя говнокод конечно. Да и вообще оно все смердит.
   fisher
 
11 - 21.07.21 - 10:55
Хотя тогда возникает вопрос, что будет результатом выполнения РеквизитыДляПроведения = Документы.Увольнение.РеквизитыДляПроведения(ВременнаяСсылка);
Это точно типовой код без купюр, который вызывается и при перезаписи в том числе?
   ptiz
 
12 - 21.07.21 - 11:13
(0) причем, после Скопировать() - все ДополнительныеСвойства очищаются. Остатки овнокода какого-то.
   lodger
 
13 - 21.07.21 - 11:42
(7) а мне отдельно нравится бизнес-логика на форме документа. причем обоих (одиночный и списочный).
то есть программно с этими документами особо не поработаешь, не вызвав форму документа.
   Said_We
 
14 - 21.07.21 - 11:48
ЗУП 3.1 в топку.
Увольнение есть одиночное и списком. Делают движения оба документа. Есть прием - аналогично.
А есть отпуск и отпуск списком. Отпуск списком движений не делает. :-)

Зачем отдельный документ индивидуальный мне не понятно. Списком достаточно для всех событий иметь и не надо только в его названии это слово "списком" использовать.
Индивидуальные документы - это атавизмы, копипасты и т.д. :-)
   Target1025
 
15 - 21.07.21 - 12:52
(11) это 3.1.18 ЗУП, метод "ПриЗаписи".
   polosov
 
16 - 21.07.21 - 12:57
(14) ОтпускаСотрудников по большей части кадровый док. Отпуск - расчетный.
   Said_We
 
17 - 21.07.21 - 13:01
(15) У вас кто-то поиздевался над этим модулем.
В типовой овно код,  но в вашем случае кто-то добавил.
   Said_We
 
18 - 21.07.21 - 13:04
(16) А с остальными документами другая аналогия наблюдается :-)
т.е. другие виды документы списком полноценные, а тут на тебе и только кадровый?
На самом деле "ОтпускСписком", только для печатной формы Т-6а. Он даже не кадровый. Он вообще движений не делает никаких. Просто контейнер для сбора печатной формы Т-6а списком.

Никакой логики в действиях разработчиков ЗиУП я в части этого документа не вижу.
   polosov
 
19 - 21.07.21 - 13:07
(18) F1 нажми в ОтпускаСотрудников.
А если ты оформишь списком на 5000 человек и потом тебе надо будет скорректировать кому-то параметры отпуска, то опять будешь проводить 5000 человек по регистрам?
   Said_We
 
20 - 21.07.21 - 13:21
(19) Зачем так сложно? Я захожу в конфигуратор и наблюдаю в движениях документа пустоту.
А если увольнять списком 5 000 или перемещать 5 000 человек и надо будет что-то откорректировать, то данное правило не действует? :-)
   Said_We
 
21 - 21.07.21 - 13:24
(19) Опять же никто не мешает вводить документ списком по одному человеку и иметь функционал как у обычного документа не списком. Зачем дублирование функционала двумя видами документов и так почти по каждой операции?


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.