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

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

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

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

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

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