|
Программное изменение движений документа
СвинТуз, Прохожий, Шаграм, maxar, Ненавижу 1С, pavlika, Fedor-1971, Pahom, spiller26, Hawk_1c, 2S, Доминошник, АгентБезопаснойНацио, dubraver, Smit1C, piter3, dergreche, kolanych, Мультук, Guk, Chai Nic, p-soft, vyaz, Dmitry1c, DiMel_77, ldo6
| ☑ |
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
|
Все ушли в другую ветку...
|
|
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший