ЗУП3 (Ведомость на счета): программное создание и заполнение

1. user900554 27.03.19 18:27 Сейчас в теме
ЗУП 3.1.8

Пытаюсь написать обработку по автоматическому созданию документа "Ведомость на счета" для версии ЗУП 3.1.8. Документ создается, но табличная часть - не заполняется! Для заполнения использую типовую процедуру ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма), но в отладчике видно, что не заходит в эту процедуру, хотя условие Форма.Объект.Основания.Количество() возвращает 1.

Помогите!!! Вот мой код:


&НаКлиенте
Процедура СформироватьДокумент(Команда)
	Структура = ПодготовитьСписокСотрудников();
	док = СформироватьДокументВедомостьНаСервере(Структура.мФизЛица,СсылкаДН);  
	Парам = Новый Структура("Ключ", Док);
	Форма =  ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", Парам); 
	Если Форма.Объект.Основания.Количество() > 0 Тогда
		ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма); //Форма.Объект.Основания.Количество() возвращает 1, но сюда не проваливается!
	КонецЕсли;
КонецПроцедуры


&НаСервере
Функция СформироватьДокументВедомостьНаСервере (мФизЛица, СсылкаДН)
	
	ДатаДокумента = Объект.Дата;		
	НовыйДокументВедомость = Документы.ВедомостьНаВыплатуЗарплатыПеречислением.СоздатьДокумент();
	НовыйДокументВедомость.Дата = Объект.Дата;
	НовыйДокументВедомость.ПериодРегистрации = НачалоМесяца(ДатаДокумента);
	НовыйДокументВедомость.Организация = Объект.Организация;	
	НовыйДокументВедомость.СпособВыплаты = Справочники.СпособыВыплатыЗарплаты.НайтиПоНаименованию("Начисления по договорам");
	
	НовыйДокументВедомость.Комментарий = "Создан обработкой" + ТекущаяДата();
	НовыйДокументВедомость.Ответственный = ПараметрыСеанса.ТекущийПользователь;
	НовыйДокументВедомость.ПеречислениеНДФЛВыполнено = Истина;
	НовыйДокументВедомость.Округление = Справочники.СпособыОкругленияПриРасчетеЗарплаты.НайтиПоНаименованию("Без округления");
	НовыйДокументВедомость.ПроцентВыплаты = 100;
	Строка = НовыйДокументВедомость.Основания.Добавить();
	Строка.Документ = СсылкаДН;
	НовыйДокументВедомость.Записать();
	
	Возврат НовыйДокументВедомость.Ссылка;   	
КонецФункции
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. YannikAlx 43 28.03.19 09:12 Сейчас в теме
(1) Все действия по созданию и заполнению должны быть на сервере.
Вы правильно создаете документ и заполняете шапку, правильно записываете пустой, без табличной части.
Где заполнение данными ? Его нету...

То что вы написали на клиенте - странный код, который не ясно как вы пытаетесь использовать...
Продолжите заполнение табличной части документа перед сохранением.....
4. nestokay 62 28.03.19 10:03 Сейчас в теме
(1) Что у вас является переменной "СсылкаДН"?
5. user900554 28.03.19 11:30 Сейчас в теме
(4)
(1) Что у вас является переменной "СсылкаДН"?


СсылкаДН - это ссылка на документ-основание. В моем случае - это всегда документ "Начисление по договорам".

Т.е. изначально, я пишу обработку, которая загружает из Эксель в 1С:ЗУП, создает и заполняет три документа:
- документ "Договор (работы, услуги)"
- документ "Начисление по договорам"
- документ "Ведомость на счета"

И вот при заполнении документа "Ведомость на счета" возникли трудности...
2. Swetlana 25 28.03.19 08:33 Сейчас в теме
Поясните, что значит автоматическое создание документа в вашем понимании?
6. user900554 28.03.19 11:33 Сейчас в теме
(2)
Поясните, что значит автоматическое создание документа в вашем понимании?


Т.е. сейчас у меня документ "Ведомость на счета" создается, но табличная часть не заполняется. Заполнить я ее пытаюсь типовыми процедурами и функциями, например использую типовую процедуру ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма), но в нее не проваливается отладчик (я об этом в самом начале написала).
7. nestokay 62 28.03.19 12:01 Сейчас в теме
(6) У Вас у сотрудника как настроены выплаты? На счёт? На карточку?
9. user900554 28.03.19 13:03 Сейчас в теме
(7)
У Вас у сотрудника как настроены выплаты? На счёт? На карточку?

На счет, поэтому и формирую документ "Ведомость на счета".
8. user_2010 911 28.03.19 12:48 Сейчас в теме
ваш документ Договор - еще не основание для начисления зарплаты.
Чтобы ведомость заполнилась по кнопке "Заполнить" должна быть начислена сумма по ГПХ. Это может быть проведенный документ "Начисление по договорам" или "Начисление зарплаты". У вас это сделано?
10. user900554 28.03.19 13:07 Сейчас в теме
(8)
ваш документ Договор - еще не основание для начисления зарплаты.
Чтобы ведомость заполнилась по кнопке "Заполнить" должна быть начислена сумма по ГПХ. Это может быть проведенный документ "Начисление по договорам" или "Начисление зарплаты". У вас это сделано?


У меня обработка последовательно создает, заполняет и проводит сначала документ "Договор (работы, услуги)", затем документ "Начисление по договорам". Т.е. на момент создания документа "Ведомость на счета" у меня существуют и проведены документ "Договор (работы, услуги)" и документ "Начисление по договорам".
11. user_2010 911 28.03.19 13:10 Сейчас в теме
(10) ясно. тогда резонный вопрос: У Вас у сотрудника как настроены выплаты?

если сейчас руками создадите Ведомость на счета - она заполнится по кнопке "Заполнить"?
12. user900554 28.03.19 13:48 Сейчас в теме
(11)
(10) ясно. тогда резонный вопрос: У Вас у сотрудника как настроены выплаты?

если сейчас руками создадите Ведомость на счета - она заполнится по кнопке "Заполнить"?


Да, конечно! Здесь не методический вопрос (я в теме), а чисто программный.
14. user_2010 911 28.03.19 14:00 Сейчас в теме
(12) давно писала обработку по автоматическому формированию всех ведомостей всех видов
https://infostart.ru/public/581874/
но, так как больше нет необходимости в дальнейшем ее использовании - больше ее не дорабатывала до текущих версий.

...глянула - там для ведомости нужно правильно выбрать банк. И только потом ее заполнять. По крайней мере у меня так сделано!
проверьте эту идею...
13. user900554 28.03.19 13:54 Сейчас в теме
Напоминаю, в чем проблема:
В Если (при выполнения условия) заходит, но в процедуру ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) - не заходит. Хотя эта процедура типовая, она есть!

&НаКлиенте
Процедура СформироватьДокумент(Команда)
    Структура = ПодготовитьСписокСотрудников();
    док = СформироватьДокументВедомостьНаСервере(Структура.мФизЛица,СсылкаДН);  
    Парам = Новый Структура("Ключ", Док);
    Форма =  ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", Парам); 
    Если Форма.Объект.Основания.Количество() > 0 Тогда
        ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма); //Форма.Объект.Основания.Количество() возвращает 1, но сюда не проваливается!
    КонецЕсли;
КонецПроцедуры


&НаСервере
Функция СформироватьДокументВедомостьНаСервере (мФизЛица, СсылкаДН)
    
    ДатаДокумента = Объект.Дата;        
    НовыйДокументВедомость = Документы.ВедомостьНаВыплатуЗарплатыПеречислением.СоздатьДокумент();
    НовыйДокументВедомость.Дата = Объект.Дата;
    НовыйДокументВедомость.ПериодРегистрации = НачалоМесяца(ДатаДокумента);
    НовыйДокументВедомость.Организация = Объект.Организация;    
    НовыйДокументВедомость.СпособВыплаты = Справочники.СпособыВыплатыЗарплаты.НайтиПоНаименованию("Начисления по договорам");
    
    НовыйДокументВедомость.Комментарий = "Создан обработкой" + ТекущаяДата();
    НовыйДокументВедомость.Ответственный = ПараметрыСеанса.ТекущийПользователь;
    НовыйДокументВедомость.ПеречислениеНДФЛВыполнено = Истина;
    НовыйДокументВедомость.Округление = Справочники.СпособыОкругленияПриРасчетеЗарплаты.НайтиПоНаименованию("Без округления");
    НовыйДокументВедомость.ПроцентВыплаты = 100;
    Строка = НовыйДокументВедомость.Основания.Добавить();
    Строка.Документ = СсылкаДН;
    НовыйДокументВедомость.Записать();
    
    Возврат НовыйДокументВедомость.Ссылка;       
КонецФункции
Показать
15. user_2010 911 28.03.19 14:04 Сейчас в теме
(13) я заполняла так:
Если НовыйДокумент.МожноЗаполнитьЗарплату() Тогда
НовыйДокумент.ЗаполнитьЗарплату();
КонецЕсли;
16. user_2010 911 28.03.19 14:05 Сейчас в теме
(15) т.е. у документа есть процедура ЗаполнитьЗарплату()
17. user900554 28.03.19 14:17 Сейчас в теме
(15) Да, до версии ЗУП 3.1.5 я тоже использовала эту процедуру ЗаполнитьЗарплату(). Но в ЗУП 3.1.8 разработчики опять переписали многое и теперь этой процедуры - нет.
18. user_2010 911 28.03.19 15:01 Сейчас в теме
(17) есть такая
ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(ЭтотОбъект)

пробовали?
19. user_2010 911 28.03.19 15:03 Сейчас в теме
(17) Общий модуль ВедомостьНаВыплатуЗарплатыКлиент
20. user900554 28.03.19 15:52 Сейчас в теме
(19)
(17) Общий модуль ВедомостьНаВыплатуЗарплатыКлиент


Так я ее в самом начале и использую (ниже фрагмент), но в Если заходит, а в процедуру ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) - не заходит.

&НаКлиенте
Процедура СформироватьДокумент(Команда)
    Структура = ПодготовитьСписокСотрудников();
    док = СформироватьДокументВедомостьНаСервере(Структура.мФизЛица,СсылкаДН);  
    Парам = Новый Структура("Ключ", Док);
    Форма =  ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", Парам); 
    Если Форма.Объект.Основания.Количество() > 0 Тогда
        ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма); //условие выполняется, возвращает 1, но сюда не проваливается!
    КонецЕсли;
КонецПроцедуры
Показать
21. nestokay 62 28.03.19 16:16 Сейчас в теме
(20) Попробуйте убрать условие и отладчиком пройтись.
22. user900554 28.03.19 16:36 Сейчас в теме
(21) убрала условие, оставила только ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма);
В отладчике, курсор на ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) становится, но затем сразу переходит на следующую строку! В отладчике, нажала на "Вычислить выражение", в Значении пишет: "Обращение к процедуре объекта как к функции (Заполнить)"

Как так?! Ведь в общем модуле ВедомостьНаВыплатуЗарплатыКлиент, это процедура и я обращаюсь к ней как к процедуре! Ниже сама процедура:

Процедура Заполнить(Форма) Экспорт
	ОчиститьСообщения();
	Форма.ЗаполнитьНаСервере()
КонецПроцедуры	
23. user_2010 911 28.03.19 17:13 Сейчас в теме
(22) может быть надо Форма.ЭтотОбъект?
24. user900554 28.03.19 18:17 Сейчас в теме
Разобралась! Была нелепая ошибка: в конце строки ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) не нужно было ставить ";". Ниже итоговый код:

&НаКлиенте
Процедура СформироватьДокумент(Команда)
    Структура = ПодготовитьСписокСотрудников();
    док = СформироватьДокументВедомостьНаСервере(Структура.мФизЛица,СсылкаДН);  
    Парам = Новый Структура("Ключ", Док);
    Форма =  ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", Парам); 
    Если Форма.Объект.Основания.Количество() > 0 Тогда
        ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) // вот здесь надо было убрать ;
    КонецЕсли;
КонецПроцедуры
Показать
25. user_2010 911 29.03.19 13:25 Сейчас в теме
(24) Странно! И чем это объяснить?
26. user900554 29.03.19 14:07 Сейчас в теме
(25) Незнаю... Сама в недоумении.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот