Имя: Пароль:
1C
 
ЗУП3. Есть ли возможность быстро и просто начислить зарплату программно?
, ,
0 DTX 4th
 
11.07.18
18:42
1. Мне не нравится код ЗУП3 67% (8)
2. Явно лучше чем ЗУП2, но до идеала далеко 17% (2)
3. Свой вариант 17% (2)
4. Мне нравится код ЗУП3 0% (0)
Всего мнений: 12

Вроде 1С старается структурировать свой, да и редакция уже третья по счету, но простого способа программно начислить зарплату я не нашёл. Ожидал увидеть что-нибудь вроде

ЗаполнитьСтандартнымиЗначениями(Док);
НачислитьЗарплату(Док);


В коде можно найти место вызова длительной операции начисления, туда улетают параметры, которые рядом и заполняются примерно вот так:

    СтруктураПараметров = РасчетЗарплатыРасширенныйКлиентСервер.ПараметрыПолученияДанныхЗаполненияДокумента();
    СтруктураПараметров.ОписаниеДокумента = ОписаниеДокумента(ЭтотОбъект); // Функция неэкспортная. Что с ней делать - непонятно
    СтруктураПараметров.Организация = Объект.Организация;
    СтруктураПараметров.ДокументСсылка = Объект.Ссылка;

В итоге натыкаемся на ОписаниеДокумента(ЭтотОбъект) без Экспорт, и дальше дороги не видно.

Это норма? Или я что-то делаю не так?
1 Мимохожий Однако
 
11.07.18
18:49
Что-то делаешь не так. Традиционное: зачем?
2 DTX 4th
 
11.07.18
18:52
(1) Да масса вариантов может быть. От "начислить зарплату, не заходя в базу", до "хочу обработку, которая начислит зарплату, проведёт синхронизацию, создаст платежки и всё-всё-всё одной кнопкой".
3 APXi
 
11.07.18
19:15
(0) геморойно там программно это делать.

Мне не нравится код ЗУП3
4 mmmarat
 
11.07.18
20:02
(0) смотрите примеры использования обработки "менеджер расчёта зарплаты". Если разобраться, то там все просто.
5 DTX 4th
 
12.07.18
11:26
(4) Обработку нашёл. Примеры - нет. Где их можно посмотреть?
6 DTX 4th
 
12.07.18
14:42
Бесит.

Мне не нравится код ЗУП3
7 Skylark
 
12.07.18
14:59
ИМХО в типовые 1С напустили "тру-программеров".
Теперь вместо написания бизнес-логики на макроязыке полноценное забубенное программирование, которое могут осилить не только лишь все.
8 Малыш Джон
 
12.07.18
15:32
(7) "ходют и ходют, топчуть и топчуть..." )))

"тру-программеры" не при чем.
захотелось универсализации и модульности? получайте "утяжеление" кода в нагрузку.

(0) смотря что значит быстро и просто...
пол-ЗУПа(а может и больше) как раз и занимается тем, что создает документ "Начисление ЗП". Если бы можно было обойтись пятью строчками - ну наверное бы так и сделали?
9 jsmith82
 
12.07.18
15:35
Используй команды формы
10 ptiz
 
12.07.18
15:35
(0) Возможность программного создания документов в ЗУП 3 максимально усложнена.

Мне не нравится код ЗУП3
11 El_Duke
 
гуру
12.07.18
15:40
(0) В комбинации из 3 хотелок "быстро", "просто" и "правильно" можно одновременно реализовать только любые 2 из них
12 DTX 4th
 
12.07.18
15:42
>Если бы можно было обойтись пятью строчками - ну наверное бы так и сделали?
(8) Руками это делается в два действия. Открыть форму, нажать заполнить. Как минимум, это можно было позволить делать программно, всего лишь добавив везде "Экспорт".

(9) Можно как-то форме отправить неэкспортную команду?
Про ComConnector даже спрашивать не буду..

(11) Какие их этих хотелок примеными к коду ЗУПа? xd
Разве что "быстро", но это не точно.
13 Вафель
 
12.07.18
15:44
(12) сделай расширение и добавь экспорт
14 Вафель
 
12.07.18
15:44
верене так

МояОбертка_Функция() Экспорт
  Функция();
15 Вафель
 
12.07.18
15:45
зуп конечно очень страдает расчетами через форму
16 DTX 4th
 
12.07.18
15:46
(13) Не вариант. Баз много, все типовые. Обновляются батником.
17 mmmarat
 
12.07.18
15:48
(5)
Пример в РасчетЗарплатыРасширенный.ДанныеДляЗаполненияТаблицДокумента

В строке МенеджерРасчета.РассчитатьЗарплату(); запускается расчет.

В МенеджерРасчета.Зарплата итоги расчета.
18 Вафель
 
12.07.18
15:48
(16) но это же расширение
19 Akela has missed
 
12.07.18
16:12
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты);
    
ЗаполнитьНачисления(МенеджерРасчета, ПериодРасчетаЗарплаты);
ЗаполнитьПерерасчеты(МенеджерРасчета);
ЗаполнитьУдержания(МенеджерРасчета);
ЗаполнитьПараметрыРасчетаПособияПоНетрудоспособности(МенеджерРасчета);
    
МенеджерРасчета.РассчитатьЗарплату();
    
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);

Задумано и выглядит круто, а на деле всё уныло. Взять хотябы этот код из больничного. Задача просто его рассчитать.
Нормальный человек, как тут сказали "тру-программер", сделал бы универсальный интерфейс одним-двумя методами. А здесь минимум 8!, да еще и с участием контекста формы.

Мне не нравится код ЗУП3
20 APXi
 
12.07.18
16:42
(7) Что то наверное наоборот, нормальных программеров выкинули.

Мне не нравится код ЗУП3
21 Skylark
 
12.07.18
17:02
(19) поэтому "тру-программер" и в кавычках
22 Alexandr_U1982
 
12.07.18
17:40
(18)ТС похоже не в курсе, что такое расширение и как ими пользоваться)
23 Alexandr_U1982
 
12.07.18
17:42
(16)Как раз вариант, когда баз много и все типовые.
Ты делаешь расширение и один раз подключаешь его к каждой базе.
Базы продолжают обновляться батником.
24 DTX 4th
 
12.07.18
17:46
(23) Ага, а потом форма меняется, расширение перестаёт работать. И снова лезть в каждую базу?

И с ComConnector'ом не поможет в любом случае. Да и костылить формы такое себе удовольствие.
25 Emery
 
12.07.18
18:45
(0) > ЗУП3. Есть ли возможность быстро и просто начислить зарплату программно?

Есть! Но только не ЗУПе, любой версии.

А так, не совсем понятен термин «начислить». Я понимаю «учет и расчет заработной платы». Дополнительными модулями к этому могут быть «кадровый учет», «управление персоналом» (что к «зарплате», на мой взгляд, имеет мало отношения), «учет рабочего времени» и т.п. Ну, да ладно, пусть будет «начислить».

Вот берем ЗУП последней версии и сохраняем конфу в xml-формате. Получаем «всего лишь» 1.3 гектара данных в более чем 28 тысячах файлов. И что-ж «они» туда «напхали»? Смотрим:

– \Ext\ParentConfigurations\ЗарплатаИУправлениеПерсоналомКОРП.cf – 200 МБ;
– \Catalogs\ЭлементыЭлектронныхРесурсов\Templates\КонвертерВидеоWindows\Ext\Template.bin – 34,3 МБ;
– \Catalogs\ЭлементыЭлектронныхРесурсов\Templates\КонвертерВидеоLinux\Ext\Template.bin – 22,3 МБ
– \Catalogs\ЭлементыЭлектронныхРесурсов\Templates\КонвертерВидеоMac\Ext\Template.bin – 10,7 МБ;

Далее пошли вроде обязательные объекты конфигурации. Посмотрим бинарники:

– \DataProcessors\ОбщиеОбъектыРеглОтчетности\Templates\ДистрибутивКомпонентыПечатиМашиночитаемыхФорм\Ext\Template.bin – 6,0 МБ;
– \CommonTemplates\КомпонентаОбмена165\Ext\Template.bin – 5,0 МБ;
– \Catalogs\СертификатыКлючейЭлектроннойПодписиИШифрования\Templates\КомпонентаXMLDSIG\Ext\Template.bin – 4,5 МБ;
– \Catalogs\ЭлементыЭлектронныхРесурсов\Templates\ПрограммаCURL\Ext\Template.bin – 3,9 МБ;
– \CommonTemplates\КомпонентаСклоненияФИО\Ext\Template.bin – 2,0 МБ;

И т.д.

А что, насчет кода? Смотрим файлы *.bsl и *.txt:

– \DataProcessors\ДокументооборотСКонтролирующимиОрганами\Ext\ObjectModule.bsl – 4.3 МБ (более 57 тысяч строк кода);
– \CommonTemplates\ЗарплатаКадрыПереносДанныхИзЗУП25\Ext\Template.txt – 4,0 МБ (почти 58 тысяч строк кода);
– \CommonTemplates\ЗарплатаКадрыПереносДанныхИзЗУП25КОРП\Ext\Template.txt – 4,0 МБ (почти 58 тысяч строк кода);
– \CommonModules\УчетСтраховыхВзносов\Ext\Module.bsl – 3,7 МБ (почти 46 тысяч строк кода);
– \Reports\РегламентированныйОтчетРасчетПоСтраховымВзносам\Ext\ObjectModule.bsl – 3,5 МБ (почти 47 тысяч строк кода);
– \CommonModules\УчетНДФЛ\Ext\Module.bsl – 1,9 МБ (более 23 тысяч строк кода);
– \CommonModules\КадровыйУчетРасширенный\Ext\Module.bsl – 1,8 МБ (более 26 тысяч строк кода);

И т.д.

Всего файлов *.bsl – 6699, общим объемом более 225 МБ.

Не, ну что можно сказать? – Монстр, однозначно! Уже по объему данных и кода это чудо природы вызывает легкую оторопь. – Ребята! Может не надо нам такого универсального чудовища? Может быть, написать простенькую, легкую базовую систему, наращиваемую десятками и сотнями плагинов / компонент, с открытым SDK либо даже опенсорсных и не засовывать без нужды в память сервера бинарники для Линукса и Мака, вроде конверторов видео или там модуль склонения фамилий на все случаи жизни? Или может быть, ждать этого ранее прихода эпохи «Цифрового Коммунизма» не стоит?

Свой вариант
26 Вафель
 
12.07.18
18:50
(25) ты еще на микросервисы предложи перейти
27 nicxxx
 
12.07.18
18:51
(25) еще один убийца 1С появился :)))))
28 Emery
 
12.07.18
18:57
(26) Не, ну одному, конкретному предприятию реально столько всего не надо. Нужна ясная концепция программы и легкость доступа к нужному месту кода. Где-то была статистика, что только в России бродит не менее 200 тысяч программ-самописок по расчету заработной платы. Наверное, не от хорошей жизни народ пишет что-то свое, а не использует всеми обожаемый ЗУП :) .
29 Web00001
 
12.07.18
18:57
(27)Каждый 1Сник должен хотя бы раз в жизни сказать "это должно быть проще! Я точно знаю!" Ну некоторые даже садятся писать это самое проще. А некоторые просто говорят. Итог все равно один.
30 Web00001
 
12.07.18
19:00
(12)autoit или сценарное тестирование?
31 DTX 4th
 
12.07.18
19:11
(30) Если это вопрос, зачем мне это нужно, то для автоматизации :)
32 Emery
 
12.07.18
19:12
(29) > Итог все равно один.

Я про свою собственную, внедренную на своем предприятии, программу по расчету зарплаты здесь говорил уже много раз. Программа (на «семерке») работает более 13 лет и необходимости ее замены на ЗУП или любую другую нет. Да, я живу в ЛНР, а не в России, но наше законодательство приспосабливается к вашему, а валюта давно уже ваша. В прошлом году адаптировал расчет средних, «как в России», разницы, почти никакой. НДФЛ наш, правда, попроще вашего, но отчетность в пенсионный и налоговую, тоже не без приколов, ЗУП бы здесь бы нам помог мало.

Теперь я понимаю, почему мою программу трудно предложить другим. Из конкретной она должна становится универсальной, а это значит более сложной, для чего нужно больше мотивации, чем имеется. Однако сама идея простой и гибкой «зарплаты» никуда не денется. Она всегда будет витать в воздухе, пока какой-нибудь умелец или даже фирма (чем чёрт не шутит, может быть и «1С») не реализует ее.
33 Akela has missed
 
12.07.18
19:57
(28) Вот бы их все посмотреть и пощупать на предмет интересных идей и решений.
34 Garikk
 
12.07.18
20:05
ЗУП всегда был кошмаром, даже когда он был еще ЗиК-ом
там всегда какието заумные решения были которые настоящий ад был отлаживать и пытаться туда ченить свое подпихнуть

до сих пор с содроганием вспоминаю многостраничные запросы которые практически нереально вытащить чтобы позапускать вручную
35 Emery
 
12.07.18
20:41
(32) + > наше законодательство приспосабливается к вашему

Вот, жду, когда у нас начнут повышать пенсионный возраст, «как в России». И это при том, что предприятие платит в ПФ не 22%, а 31%, а ранее (когда мы были еще в составе Украины) было 38-42%, в зависимости от категории страхователя (только 8% для инвалидов было). Нас, правда, «успокаивает», то, что обычная пенсия в ЛНР – 3 тыс. рублей, т.е., что есть, что нету, в любом случае, если хочешь прожить – работай, либо оформляй вторую пенсию в Украине (но лично я от этого варианта отказался в принципе).

(34) > до сих пор с содроганием вспоминаю многостраничные запросы которые практически нереально вытащить чтобы позапускать вручную

Это лишний раз доказывает, что я выбрал правильную стратегию (отвечать можно только за свою программу, а не за чужую, а то, пишет один, внедряет другой, а ответственность несет третий). У меня все запросы на VFP к файлам dbf «семерки» очень компактны. И вообще, весь код внешнего VFP приложения занимает чуть более полумегабайта в исходниках. Уже только в силу этого работа у меня любимая и приятная :) .
36 DTX 4th
 
19.07.18
10:40
(17) Менеджер расчета всё посчитал, выдал таблицу с данными, которая по структуре очень похожа на структуру документа Начисления зарплаты. Залил всё это в документ - тот провёлся. С виду всё хорошо, но если копнуть глубже, то всплывает, что в некоторых регистрах не заполнен реквизит ИдентификаторСтроки, что, думаю, не очень важно, но что более огорчило, так это то, что в документе, созданном программно, отсутствуют движения по регистру сведений ЗначенияПоказателейНачисления. Полез смотреть, как они формируются, и о чудо - всё происходит в событии ФОРМЫ "ПередЗаписью", которое использует данные менеджера расчета с дополнительной обработкой тоже на форме. То есть после перепроведения движения не появляются.
Как так то???
37 mmmarat
 
19.07.18
10:52
(36) идентификаторы строк должны быть, по ним идет связь между табличными частями. Проверьте что в ТЧ и в результате менеджера расчета совпадают имена реквизитов идентификаторов строк. Возможны варианты ИдентификаторСтроки,ИдентификаторСтрокиВидаРасчета,ИдентификаторСтрокиНДФЛ. Пустые движения по ЗначенияПоказателейНачисления могут быть связаны с тем, что у вам не заполнены показатели. В документе они в отдельной табличной части, а в менеджере расчета в каждой строке начислений отдельной таблицей значений.
38 VladZ
 
19.07.18
11:04
(25) Есть такая. ЗИК 7.7 называется.
39 rsv
 
19.07.18
11:08
(25) :)
40 VladZ
 
19.07.18
11:10
Забыл проголосовать.

Мне не нравится код ЗУП3
41 AliceLight
 
19.07.18
11:23
(36) очень важно заполнение этих Идентификаторов.
Например: отчет АнализНачисленийИВзносов, особенно его вариант "Расчетный листок"(может, конечно, в последних релизах его снова перепилили и сейчас уже не так) строится по данным регистра накопления "Начисления и удержания по сотрудникам" и данным регистра расчета "Начисления" (из него отработанные часы для отчете берутся), связанными как раз по идентификаторам строк. Если идентификаторов не будет, отработанные в расчетном листке поедут.
И это только 1 пример.
42 Alexandr_U1982
 
19.07.18
11:33
(36)Да ты просто не заполнил ТЧ "Показатели" в документе "НачислениеЗарплаты", вот у тебя и нет движений по РС "ЗначенияПоказателейНачисления".
43 DTX 4th
 
19.07.18
11:42
(42) Потому что я не смог понять, какой метод нужно вызвать, чтобы они заполнились. Не руками же я буду это делать. Потом конфу поменяют, и всё поплывёт.

Мб у кого есть пример программного заполнения документа начисления?
44 Alexandr_U1982
 
19.07.18
11:47
Метод "ЗаполнитьЗначенияСвойств()" ;)

Когда-то расчет зарплаты находился в общем модуле, а потом его перенесли в обработку "МенеджерРасчетаЗарплаты".
Так что, если снова конфу поменяют у тебя все равно все поплывет ;)
45 DTX 4th
 
19.07.18
12:04
(44) >Метод "ЗаполнитьЗначенияСвойств()" ;)
Так сейчас почти так и сделано. Только завтра смогу код на обозрение выложить.
46 Alexandr_U1982
 
19.07.18
12:15
(45)Как сказано в (37) значения показателей находятся в одной из ячеек таблицы с результатами расчета зарплаты. Там вложенная таблица значений. Точного названия ячейки не помню, что-то вроде "Показатели" или "ПоказателиРасчета". Тебе нужно перенести значения показатели из этой вложенной таблицы в ТЧ "Показатели" документа "НачисленияЗарплаты". Для связи строк используются поля с названием "ИдентификаторСтрокиВидаРасчета".
47 DTX 4th
 
20.07.18
10:32
Пробовал вот так:
&НаСервереБезКонтекста
Функция НачислитьЗарплату() Экспорт
    Объект = Документы.НачислениеЗарплаты.СоздатьДокумент();
    
    Объект.МесяцНачисления = НачалоМесяца(НачалоМесяца(ТекущаяДата())-1);
    
    ЗначенияДляЗаполнения = Новый Структура("ОрганизацияОтветственный,", "Организация", "Ответственный");
            
    ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(Объект, ЗначенияДляЗаполнения);
    
    //СотрудникиПерерасчет = СотрудникиПериодДействияДляПерерасчета();
    СотрудникиПерерасчет = Неопределено;
    
    
    //РасчетЗарплатыРасширенныйКлиентСервер.ОчиститьТаблицыДокумента(ЭтаФорма, ОписаниеДокумента(ЭтотОбъект));
    
    СтруктураПараметров = РасчетЗарплатыРасширенныйКлиентСервер.ПараметрыПолученияДанныхЗаполненияДокумента();
    СтруктураПараметров.ОписаниеДокумента = ОписаниеДокумента(Объект);
    СтруктураПараметров.Организация = Объект.Организация;
    СтруктураПараметров.ДокументСсылка = Объект.Ссылка;
    СтруктураПараметров.Подразделение = Объект.Подразделение;
    СтруктураПараметров.МесяцНачисления = Объект.МесяцНачисления;
    СтруктураПараметров.ОкончаниеПериода = КонецМесяца(Объект.МесяцНачисления);
    СтруктураПараметров.РежимНачисления = Перечисления.РежимНачисленияЗарплаты.ОкончательныйРасчет;
    СтруктураПараметров.СотрудникиПериодДействияПерерасчет = СотрудникиПерерасчет;
    СтруктураПараметров.ИспользоватьВоеннуюСлужбу = Ложь;
    СтруктураПараметров.НачислениеЗарплатыВоеннослужащим = Объект.НачислениеЗарплатыВоеннослужащим;
    СтруктураПараметров.ОкончательныйРасчетНДФЛ = Истина;
    СтруктураПараметров.ПроверятьРегистрациюПроцентаЕНВД = Истина;
    СтруктураПараметров.ДатаВыплаты = РасчетЗарплатыРасширенныйКлиентСервер.ПланируемаяДатаВыплатыЗарплаты(Объект.Организация, Объект.МесяцНачисления);
    
    
    АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
    Документы.НачислениеЗарплаты.ПодготовитьДанныеДляЗаполнения(СтруктураПараметров, АдресХранилища);
    
    Результат = ПолучитьИзВременногоХранилища(АдресХранилища);
    
    Для каждого КлЗн Из Результат.ДанныеДляЗаполненияТаблицДокумента Цикл
        Если ТипЗнч(КлЗн.Значение) = Тип("ТаблицаЗначений") Тогда
            Объект[КлЗн.Ключ].Загрузить(КлЗн.Значение);                
        КонецЕсли;          
    КонецЦикла;
    
    Объект.Дата = ТекущаяДата();
    Объект.Записать(РежимЗаписиДокумента.Проведение);
    
    Возврат Объект.Ссылка;
КонецФункции




ОписаниеДокумента() выдирал из формы. Если кому интересно, то вот оно:
https://pastebin.com/raw/mWaFMsZp

Что находится в результате можно посмотреть на скрине:
https://i.imgur.com/nSj4wn0.png
48 DTX 4th
 
20.07.18
10:45
Заполнил показатели:
https://i.imgur.com/DkgRPPI.png
Для каждого КлЗн Из Результат.ДанныеДляЗаполненияТаблицДокумента Цикл
        Если ТипЗнч(КлЗн.Значение) = Тип("ТаблицаЗначений") Тогда
            Объект[КлЗн.Ключ].Загрузить(КлЗн.Значение);    
            Попытка
                Для каждого Стр2 Из КлЗн.Значение Цикл
                    Для каждого Стр Из Стр2.Показатели Цикл
                        НСтр = Объект.Показатели.Добавить();
                        ЗаполнитьЗначенияСвойств(НСтр, Стр);
                        НСтр.ИдентификаторСтрокиВидаРасчета = Стр.ИдентификаторСтроки;    
                    КонецЦикла;
                КонецЦикла;
            Исключение
                //ОписаниеОшибки()
            КонецПопытки;
        КонецЕсли;                  
    КонецЦикла;



Движение не появилось.
49 mmmarat
 
20.07.18
10:45
(47)
Забыли
Для Каждого СтрокаНачисления Из Результат.ДанныеДляЗаполненияТаблицДокумента.Начисления Цикл
для Каждого СтрокаПоказателя Из СтрокаНачисления.Показатели Цикл
ЗаполнитьЗначенияСвойств(Объект.Показатели.Добавить(), СтрокаПоказателя);
КонецЦикла;
КонецЦикла;
50 DTX 4th
 
20.07.18
11:18
(37) Идентификатор начислений встал, спасибо.
А вот идентификатор строки НДФЛ почему-то пуст. Сейчас движения документа отличаются только из-за него.
https://i.imgur.com/x3Y19yv.png

(49) В (48) ответил, но, видимо, тогда не заметил движений, с этим всё ок, спасибо. Там, правда, есть показатели "Время в днях" и "Норма дней по графику полного рабочего времени", но думаю в этом ничего страшного нет, если они будут болтаться в регистре.
51 supersonic
 
20.07.18
11:22
И не понятно. И не логично.

Мне не нравится код ЗУП3
52 DTX 4th
 
20.07.18
12:24
В общем, идентификатор НДФЛ просто заполняется по порядку. Так и поступим...
Всем спасибо за поддержку, особенно mmmarat

Но это беда (:
53 BeerHelpsMeWin
 
20.07.18
12:54
ЗУП3 страшно трогать, особенно учитывая текущую чехарду в версиях.

Мне не нравится код ЗУП3
54 Alexandr_U1982
 
20.07.18
13:01
Код более структурирован и универсален чем в 2.5.
Гораздо меньше дублирующегося кода.

Явно лучше чем ЗУП2, но до идеала далеко
55 DTX 4th
 
26.07.18
11:59
Ещё немного поковырял конфу. Многие документы создаются очень аккуратно, мне понравилось. Поэтому меняю своё мнение. Но с модулём расчета всё равно беда :)

Явно лучше чем ЗУП2, но до идеала далеко
56 Мимохожий Однако
 
26.07.18
12:41
(55) Продолжай исследования. По мере изучения показатели улучшатся.

Свой вариант