Пытаюсь написать обработку по автоматическому созданию документа "Ведомость на счета" для версии ЗУП 3.1.8. Документ создается, но табличная часть - не заполняется! Для заполнения использую типовую процедуру ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма), но в отладчике видно, что не заходит в эту процедуру, хотя условие Форма.Объект.Основания.Количество() возвращает 1.
Помогите!!! Вот мой код:
&НаКлиенте
Процедура СформироватьДокумент(Команда)
Структура = ПодготовитьСписокСотрудников();
док = СформироватьДокументВедомостьНаСервере(Структура.мФизЛица,СсылкаДН);
Парам = Новый Структура("Ключ", Док);
Форма = ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", Парам);
Если Форма.Объект.Основания.Количество() > 0 Тогда
ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма); //Форма.Объект.Основания.Количество() возвращает 1, но сюда не проваливается!
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СформироватьДокументВедомостьНаСервере (мФизЛица, СсылкаДН)
ДатаДокумента = Объект.Дата;
НовыйДокументВедомость = Документы.ВедомостьНаВыплатуЗарплатыПеречислением.СоздатьДокумент();
НовыйДокументВедомость.Дата = Объект.Дата;
НовыйДокументВедомость.ПериодРегистрации = НачалоМесяца(ДатаДокумента);
НовыйДокументВедомость.Организация = Объект.Организация;
НовыйДокументВедомость.СпособВыплаты = Справочники.СпособыВыплатыЗарплаты.НайтиПоНаименованию("Начисления по договорам");
НовыйДокументВедомость.Комментарий = "Создан обработкой" + ТекущаяДата();
НовыйДокументВедомость.Ответственный = ПараметрыСеанса.ТекущийПользователь;
НовыйДокументВедомость.ПеречислениеНДФЛВыполнено = Истина;
НовыйДокументВедомость.Округление = Справочники.СпособыОкругленияПриРасчетеЗарплаты.НайтиПоНаименованию("Без округления");
НовыйДокументВедомость.ПроцентВыплаты = 100;
Строка = НовыйДокументВедомость.Основания.Добавить();
Строка.Документ = СсылкаДН;
НовыйДокументВедомость.Записать();
Возврат НовыйДокументВедомость.Ссылка;
КонецФункции
(1) Все действия по созданию и заполнению должны быть на сервере.
Вы правильно создаете документ и заполняете шапку, правильно записываете пустой, без табличной части.
Где заполнение данными ? Его нету...
То что вы написали на клиенте - странный код, который не ясно как вы пытаетесь использовать...
Продолжите заполнение табличной части документа перед сохранением.....
СсылкаДН - это ссылка на документ-основание. В моем случае - это всегда документ "Начисление по договорам".
Т.е. изначально, я пишу обработку, которая загружает из Эксель в 1С:ЗУП, создает и заполняет три документа:
- документ "Договор (работы, услуги)"
- документ "Начисление по договорам"
- документ "Ведомость на счета"
И вот при заполнении документа "Ведомость на счета" возникли трудности...
Поясните, что значит автоматическое создание документа в вашем понимании?
Т.е. сейчас у меня документ "Ведомость на счета" создается, но табличная часть не заполняется. Заполнить я ее пытаюсь типовыми процедурами и функциями, например использую типовую процедуру ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма), но в нее не проваливается отладчик (я об этом в самом начале написала).
ваш документ Договор - еще не основание для начисления зарплаты.
Чтобы ведомость заполнилась по кнопке "Заполнить" должна быть начислена сумма по ГПХ. Это может быть проведенный документ "Начисление по договорам" или "Начисление зарплаты". У вас это сделано?
ваш документ Договор - еще не основание для начисления зарплаты.
Чтобы ведомость заполнилась по кнопке "Заполнить" должна быть начислена сумма по ГПХ. Это может быть проведенный документ "Начисление по договорам" или "Начисление зарплаты". У вас это сделано?
У меня обработка последовательно создает, заполняет и проводит сначала документ "Договор (работы, услуги)", затем документ "Начисление по договорам". Т.е. на момент создания документа "Ведомость на счета" у меня существуют и проведены документ "Договор (работы, услуги)" и документ "Начисление по договорам".
(12) давно писала обработку по автоматическому формированию всех ведомостей всех видов
https://infostart.ru/public/581874/ но, так как больше нет необходимости в дальнейшем ее использовании - больше ее не дорабатывала до текущих версий.
...глянула - там для ведомости нужно правильно выбрать банк. И только потом ее заполнять. По крайней мере у меня так сделано!
проверьте эту идею...
Напоминаю, в чем проблема:
В Если (при выполнения условия) заходит, но в процедуру ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) - не заходит. Хотя эта процедура типовая, она есть!
&НаКлиенте
Процедура СформироватьДокумент(Команда)
Структура = ПодготовитьСписокСотрудников();
док = СформироватьДокументВедомостьНаСервере(Структура.мФизЛица,СсылкаДН);
Парам = Новый Структура("Ключ", Док);
Форма = ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", Парам);
Если Форма.Объект.Основания.Количество() > 0 Тогда
ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма); //Форма.Объект.Основания.Количество() возвращает 1, но сюда не проваливается!
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СформироватьДокументВедомостьНаСервере (мФизЛица, СсылкаДН)
ДатаДокумента = Объект.Дата;
НовыйДокументВедомость = Документы.ВедомостьНаВыплатуЗарплатыПеречислением.СоздатьДокумент();
НовыйДокументВедомость.Дата = Объект.Дата;
НовыйДокументВедомость.ПериодРегистрации = НачалоМесяца(ДатаДокумента);
НовыйДокументВедомость.Организация = Объект.Организация;
НовыйДокументВедомость.СпособВыплаты = Справочники.СпособыВыплатыЗарплаты.НайтиПоНаименованию("Начисления по договорам");
НовыйДокументВедомость.Комментарий = "Создан обработкой" + ТекущаяДата();
НовыйДокументВедомость.Ответственный = ПараметрыСеанса.ТекущийПользователь;
НовыйДокументВедомость.ПеречислениеНДФЛВыполнено = Истина;
НовыйДокументВедомость.Округление = Справочники.СпособыОкругленияПриРасчетеЗарплаты.НайтиПоНаименованию("Без округления");
НовыйДокументВедомость.ПроцентВыплаты = 100;
Строка = НовыйДокументВедомость.Основания.Добавить();
Строка.Документ = СсылкаДН;
НовыйДокументВедомость.Записать();
Возврат НовыйДокументВедомость.Ссылка;
КонецФункции
(15) Да, до версии ЗУП 3.1.5 я тоже использовала эту процедуру ЗаполнитьЗарплату(). Но в ЗУП 3.1.8 разработчики опять переписали многое и теперь этой процедуры - нет.
(17) Общий модуль ВедомостьНаВыплатуЗарплатыКлиент
Так я ее в самом начале и использую (ниже фрагмент), но в Если заходит, а в процедуру ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) - не заходит.
&НаКлиенте
Процедура СформироватьДокумент(Команда)
Структура = ПодготовитьСписокСотрудников();
док = СформироватьДокументВедомостьНаСервере(Структура.мФизЛица,СсылкаДН);
Парам = Новый Структура("Ключ", Док);
Форма = ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", Парам);
Если Форма.Объект.Основания.Количество() > 0 Тогда
ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма); //условие выполняется, возвращает 1, но сюда не проваливается!
КонецЕсли;
КонецПроцедуры
(21) убрала условие, оставила только ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма);
В отладчике, курсор на ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) становится, но затем сразу переходит на следующую строку! В отладчике, нажала на "Вычислить выражение", в Значении пишет: "Обращение к процедуре объекта как к функции (Заполнить)"
Как так?! Ведь в общем модуле ВедомостьНаВыплатуЗарплатыКлиент, это процедура и я обращаюсь к ней как к процедуре! Ниже сама процедура:
Разобралась! Была нелепая ошибка: в конце строки ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) не нужно было ставить ";". Ниже итоговый код:
&НаКлиенте
Процедура СформироватьДокумент(Команда)
Структура = ПодготовитьСписокСотрудников();
док = СформироватьДокументВедомостьНаСервере(Структура.мФизЛица,СсылкаДН);
Парам = Новый Структура("Ключ", Док);
Форма = ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.Форма.ФормаДокумента", Парам);
Если Форма.Объект.Основания.Количество() > 0 Тогда
ВедомостьНаВыплатуЗарплатыКлиент.Заполнить(Форма) // вот здесь надо было убрать ;
КонецЕсли;
КонецПроцедуры