Имя: Пароль:
1C
 
Программное изменение движений документа
0 Pahom
 
12.09.25
08:11
Стоит задача в отражении зарплаты в бухучете (Бухгалтерия 3.0) выделить начисления отпускных на отдельные статьи затрат . Типового способа нет, делать на каждое подразделение способ отражения не вариант, поэтому решил программно менять движения. После обработки проведения вставил процедуру следующего содержания:
    НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
    НаборЗаписей.Прочитать();    
    
    Если НаборЗаписей.Количество() = 0 Тогда Возврат;
    КонецЕсли;
    
    Счет20 = ПланыСчетов.Хозрасчетный.ОсновноеПроизводство;
    Счет23 = ПланыСчетов.Хозрасчетный.ВспомогательныеПроизводства;
    Счет25 = ПланыСчетов.Хозрасчетный.ОбщепроизводственныеРасходы;
    Счет26 = ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы;
    Счет4401 = ПланыСчетов.Хозрасчетный.ИздержкиОбращения;
    Счет4402 = ПланыСчетов.Хозрасчетный.КоммерческиеРасходы;
    
    Для каждого Запись из НаборЗаписей Цикл
        Если Запись.Содержание = "Начислен ежегодный отпуск" Тогда
            Если Запись.СчетДт = Счет20 Тогда
                Запись.СубконтоДт.СтатьиЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("000000022");
            ИначеЕсли Запись.СчетДт = Счет23 Тогда
                Запись.СубконтоДт.СтатьиЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("000001053");
            ИначеЕсли Запись.СчетДт = Счет25 Тогда
                Запись.СубконтоДт.СтатьиЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("000001064");
            ИначеЕсли Запись.СчетДт = Счет26 Тогда
                Запись.СубконтоДт.СтатьиЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("000001000");
            ИначеЕсли Запись.СчетДт = Счет4401 Тогда
                Запись.СубконтоДт.СтатьиЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("000001015");
            ИначеЕсли Запись.СчетДт = Счет4402 Тогда
                Запись.СубконтоДт.СтатьиЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("000001015");
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    НаборЗаписей.ОбменДанными.Загрузка = Истина;
    НаборЗаписей.Записать();

В отладке вижу, что статьи затрат меняются, но после записи всё остаётся по старому. В чём может быть проблема?
1 Dmitry1c
 
12.09.25
08:24
Типовой способ есть.

В ЗУП-е надо эти начисления по отдельным способам отражения зарплаты выделять.
2 Pahom
 
12.09.25
08:59
(1) Способ отражения отпуска в ЗУП-е такой же как у основного заработка сотрудника. Можно конечно насоздавать 20 начислений отпусков и каждому указать способ отражения, и потом их руками менять каждому сотруднику, но хотелось бы без садо-мазо.
3 maxar
 
12.09.25
09:04
(0) в обработке проведения (после) редактируй Движения.Хозрасчетный
4 Pahom
 
12.09.25
09:13
(3) Может, это не очевидно, но именно так и пытаюсь делать.
5 maxar
 
12.09.25
09:13
(4) а где тут Движения.Хозрасчетный если
"РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();"
6 Ненавижу 1С
 
гуру
12.09.25
09:14
(4) не так ты делаешь. Ты набор записей создал и записываешь. Этот набор записей к коллекции движений объекта документа не имеет никакого отношения
7 Pahom
 
12.09.25
09:37
(5) А это не одно и то же?
8 Ненавижу 1С
 
гуру
12.09.25
09:39
(7) вообще-то нет
9 Прохожий
 
12.09.25
09:46
(8) И это был не правильный ответ...
10 Прохожий
 
12.09.25
09:47
В обработке проведения Движения.Хозрасчетный, а для сторонней обработки -(0)
11 Прохожий
 
12.09.25
09:50
(3) насколько я понимаю, в типовых Движения формируются как структура и потом Движения.Загрузить(). А структура формируется где-то в общих модулях. Там и надо подготавливать. А не Движения документа парсить. Если во время проведения хотите получать другое.
12 Прохожий
 
12.09.25
09:52
Все ушли в другую ветку...
Ошибка? Это не ошибка, это системная функция.