Расчет начисления прочих доходов на сервере в ЗУП 3.1

29.12.22

Задачи пользователя - Адаптация типовых решений

Ещё один вариант доработки ЗУП 3.1 с целью ввода документа Регистрация прочих доходов на сервере.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Расчет начисления прочих доходов на сервере в ЗУП3.1:
.cfe 11,65Kb
3 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Понадобилось вводить документ Начисление прочих доходов (или, чтобы никто не догадался, РегистрацияПрочихДоходов) программно. При этом основные данные известны, необходимо произвести расчет НДФЛ и тому подобного. Затруднение в том, что вопреки всяким законам логики и здравого смысла расчетные механизмы ЗУП3.1 завязаны на формы.

То есть, расчет производится на сервере, но форму на сервере получить нельзя, поэтому и рассчитать на сервере без клиента по сути нельзя.

В первой итерации расчет у меня производился обработкой, поэтому дело обошлось просто экспортной обёрткой поверх РассчитатьНДФЛИВзносыВсем() в расширении - пользуйтесь, если вам этого достаточно.

Во второй итерации, понятно, клиента 1С, пользовательского интерфейса и всего такого не стало.

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

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

Следующий вызов, к сожалению, принимает в качестве аргумента Форму

УчетПрочихДоходов.РезультатРасчетаВДанныеФормы(Форма, ДанныеРасчета);

Проявив некоторую смекалку, я попытался решить проблему подменой формы:

Форма = Новый Структура;
Форма.Вставить("Объект", ДокументОбъект);
Форма.Вставить("ИтогВзносы", 0);
	
УчетПрочихДоходов.РезультатРасчетаВДанныеФормы(Форма, ДанныеРасчета);

Это помогло бы, если бы мы были на обычной форме. К сожалению, на управляемой это не совсем помогло, потому что на форме добавлены реквизиты и в сам объект. Эту проблему я решил, сконвертировав ДокументОбъект в структуру целиком, для чего написал функцию (наверное, полезная для чего-то ещё, нужно подумать):

Функция ОбъектВСтруктуру(Знач ДокументОбъект) Экспорт

	Объект = Новый Структура;
	
	Для Каждого Реквизит Из ДокументОбъект.Метаданные().СтандартныеРеквизиты Цикл
		Объект.Вставить(Реквизит.Имя, ДокументОбъект[Реквизит.Имя]);
	КонецЦикла;
	
	Для Каждого Реквизит Из ДокументОбъект.Метаданные().Реквизиты Цикл
		Объект.Вставить(Реквизит.Имя, ДокументОбъект[Реквизит.Имя]);
	КонецЦикла;
	
	Для Каждого МетаТЧ Из ДокументОбъект.Метаданные().ТабличныеЧасти Цикл
		Объект.Вставить(МетаТЧ.Имя, Новый Массив);
		
		// добавим строку-образец для добавления новых строк:
		ПустаяСтрока = Новый Структура;
		Для Каждого Реквизит Из МетаТЧ.СтандартныеРеквизиты Цикл
			ПустаяСтрока.Вставить(Реквизит.Имя, Неопределено);
		КонецЦикла;
		Для Каждого Реквизит Из МетаТЧ.Реквизиты Цикл
			ПустаяСтрока.Вставить(Реквизит.Имя, Неопределено);
		КонецЦикла;
		Объект.Вставить(МетаТЧ.Имя + "_ПустаяСтрока", ПустаяСтрока);
		
		// заполним те строки, что есть:
		ОбъектТЧ = Объект[МетаТЧ.Имя];
		ДокументОбъектТЧ = ДокументОбъект[МетаТЧ.Имя];
		Для Каждого СтрДокументОбъектТЧ Из ДокументОбъектТЧ Цикл
			СтрОбъектТЧ = Новый Структура;
			Для Каждого Реквизит Из МетаТЧ.СтандартныеРеквизиты Цикл
				СтрОбъектТЧ.Вставить(Реквизит.Имя, СтрДокументОбъектТЧ[Реквизит.Имя]);
			КонецЦикла;
			Для Каждого Реквизит Из МетаТЧ.Реквизиты Цикл
				СтрОбъектТЧ.Вставить(Реквизит.Имя, СтрДокументОбъектТЧ[Реквизит.Имя]);
			КонецЦикла;
			ОбъектТЧ.Добавить(СтрОбъектТЧ);
		КонецЦикла;
	КонецЦикла;
	
	Возврат Объект;
	
КонецФункции

Обратите внимание на "_ПустаяСтрока" - оно появилось позже.

Теперь можно спокойно вставлять получившийся "Объект" в "Форму" и вызывать функцию (в процессе всплыло ещё два добавленных реквизита):

Процедура РассчитатьНачислениеПрочихДоходовНаСервере(Знач ДокументОбъект) Экспорт
	
	СписокФизическихЛиц = Новый Массив;
	
	Для Каждого Стр Из ДокументОбъект.НачисленияУдержанияВзносы Цикл
		Если СписокФизическихЛиц.Найти(Стр.ФизическоеЛицо) = Неопределено Тогда
			СписокФизическихЛиц.Добавить(Стр.ФизическоеЛицо);
		КонецЕсли;
	КонецЦикла;
	// BSLLS:LineLength-off разбиение строки уменьшает читабельность
	РасчетНДФЛНарастающимИтогомСНачалаГода = УчетНДФЛФормыРасширенный.РасчетНДФЛНарастающимИтогомСНачалаГода(ДокументОбъект.ВидПрочегоДохода);
	// BSLLS:LineLength-on
	ПараметрыРасчета = УчетПрочихДоходов.ПараметрыРасчетаДокумента();
	ПараметрыРасчета.СписокФизическихЛиц = СписокФизическихЛиц;
	ПараметрыРасчета.РасчетНДФЛНарастающимИтогомСНачалаГода = РасчетНДФЛНарастающимИтогомСНачалаГода;
	ДанныеРасчета = УчетПрочихДоходов.РассчитатьДокумент(ДокументОбъект, ПараметрыРасчета);
	
	// копируем документ в структуру:
	Объект = ОбъектВСтруктуру(ДокументОбъект);
	
	// это реквизиты, добавленные в оригинале на форму:
	Для Каждого СтрОбъект Из Объект.НачисленияУдержанияВзносы Цикл
		СтрОбъект.Вставить("ЗачтеноАвансовыхПлатежей", 0);
		СтрОбъект.Вставить("ИтогВзносыСтрока", 0);
	КонецЦикла;
	
	Форма = Новый Структура;
	Форма.Вставить("Объект", Объект);
	Форма.Вставить("ИтогВзносы", 0);
	
	УчетПрочихДоходов.РезультатРасчетаВДанныеФормы(Форма, ДанныеРасчета);
	
	// теперь нужно все данные вернуть обратно в ДокументОбъект:
	СтруктуруВОбъект(ДокументОбъект, Форма.Объект);
	
КонецПроцедуры

(ДокументОбъект заполняется физлицами, видом прочих доходов и суммами перед вызовом, проводится вызывающей стороной.)

К сожалению, приведённый код сам по себе не работает, потому что в УчетПрочихДоходов.РезультатРасчетаВДанныеФормы() добавляются и удаляются строки в табличных частях, а у меня вместо табличных частей массивы. Пришлось в итоге взять эту процедуру в расширение (ИзменениеИКонтроль) и добавить проверку на тип Формы, чего как раз хотелось избежать:

&ИзменениеИКонтроль("РезультатРасчетаВДанныеФормы")
Процедура РезультатРасчетаВДанныеФормы(Форма, ДанныеРасчета)

	Объект = Форма.Объект;
	#Вставка
	ЭтоОбъектСтруктура = ТипЗнч(Объект) = Тип("Структура");
	#КонецВставки

    ...

    // Очищаем НДФЛ
	Идентификаторы = Новый Соответствие;
	КоличествоСтрок = Объект.НДФЛ.Количество();
	Для Сч = 1 По КоличествоСтрок Цикл
		СтрокаДокумента = Объект.НДФЛ[КоличествоСтрок - Сч];
		Если СтрокиНачисленийФизЛиц[СтрокаДокумента.ФизическоеЛицо] <> Неопределено Тогда
			Идентификаторы.Вставить(СтрокаДокумента.ИдентификаторСтрокиНДФЛ, Истина);
			#Удаление
			Объект.НДФЛ.Удалить(СтрокаДокумента);
			#КонецУдаления
			#Вставка
			Если ЭтоОбъектСтруктура Тогда
				Объект.НДФЛ.Удалить(КоличествоСтрок - Сч);
			Иначе
				Объект.НДФЛ.Удалить(СтрокаДокумента);
			КонецЕсли;
			#КонецВставки

    ...

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

Итоговое решение мне кажется не очень изящным, не совсем устойчивым к обновлениям, но другого я не нашел.

Если видите ошибки, или знаете, как полностью рассчитать документ штатными средствами - пишите комментарии!

Расширение с тестовой обработкой приложено.

* Тестировалось на Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.23.63),  1С:Предприятие 8.3 (8.3.19.1399)

** Заглавная картинка сгенерирована нейросетью midjourney по запросу "cat-like stupid server holds client window"

Вступайте в нашу телеграмм-группу Инфостарт

ЗУП расчет зарплаты расчетные механизмы начисление прочих доходов

См. также

Разработка Адаптация типовых решений Производство готовой продукции (работ, услуг) Розничная торговля 1С:Управление торговлей 10 Россия Платные (руб)

Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории в типовую поставку больше не попадают. Доработка закрывает этот пробел: новые виды номенклатуры, обмен с ГИС МТ «Честный Знак». Поставляется в виде файла .cf

14640 руб.

23.04.2026    1650    12    13    

16

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    1463    4    0    

3

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

6000 руб.

07.02.2023    13682    120    25    

76

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Решение позволяет автоматически заполнять отдельные реквизиты загружаемых банковских документов, основываясь на известных значениях реквизитов и тексте назначения платежа. Простая настройка, широкие возможности анализа назначения платежа без написания кода и сложных шаблонов.

9760 руб.

17.06.2025    4090    10    0    

9

Адаптация типовых решений 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Расширение, которое в форму списка и форму выбора справочника «Номенклатура» добавляет табличную часть в виде дерева, в которую выводится информация об остатках и доступности выбранной номенклатурной позиции.

6710 руб.

20.04.2026    507    1    0    

3

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Расширение для УНФ, чтобы автоматически отменять старые резервы и не мешалть эффективно продавать.

9150 руб.

02.08.2023    8458    26    5    

41

Адаптация типовых решений 1С 8.3 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Беларусь Россия Платные (руб)

Расширение "Дополнительные документы" предназначено для создания дополнительных документов различного назначения, как форм для внесения данных так и печатных форм в расширяемой конфигурации пользовательскими средствами, без работы в конфигураторе и внесения изменений в структуру данных. Тестировалось для "1С:БП", "1С:УНФ","1С:КА"

21859 руб.

29.12.2025    1633    1    8    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user1465168 09.01.23 09:35 Сейчас в теме
В свое время, когда понадобилось программно создавать этот документ я переносил процедуры и функции расчета НДФЛ на сервер и немного переписывал их.
2. asae 19.07.23 15:07 Сейчас в теме
в 1с 8.2 было очень хорошо. Можно было создать форму, а у формы был реквизит Объект который потом можно было сохранить. А сейчас боль и ужас.
Для отправки сообщения требуется регистрация/авторизация