Добро пожаловать,
Формирование документов оплаты по неоплаченным ведомостям в 1С ЗУП
Обработка собирает за период перечень не оплаченных ведомостей по виду выплаты (в кассу или в банк). Ведомости которые нужно оплатить отмечаются галочкой. Затем по указанным ведомостям автоматически формируются документы оплаты.
Обработка будет удобна расчетчикам, когда вводить на основании каждой ведомости РКО или ПП - не хватает времени/внимания или просто лень. :)
Код //(c)zebestov 2009
//общие настройки
Процедура НастроитьОформление()
Колонки = ЭлементыФормы.ДокументыВыплаты.Колонки;
Колонки.Документ.ширина = 20;
//Колонки.Документ.Доступность = ложь;
Колонки.Документ.ТекстШапки = "Ведомость";
Колонки.ЕстьПодчДок.ДанныеФлажка="ЕстьПодчДок";
Колонки.ЕстьПодчДок.Данные = "";
Колонки.ЕстьПодчДок.ТекстШапки = "";
Колонки.ЕстьПодчДок.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
Колонки.ЕстьПодчДок.Ширина = 1;
Колонки.Ответственный.ширина = 7;
Колонки.Ответственный.Доступность = ложь;
Колонки.Комментарий.Доступность = ложь;
Колонки.Комментарий.ширина = 20;
КонецПроцедуры
Процедура НастроитьВидимость()
Если ЭлементыФормы.СпособОплаты.Значение = Перечисления.СпособыВыплатыЗарплаты.ЧерезБанк тогда
ЭлементыФормы.ТекстСчет.Видимость = истина;
ЭлементыФормы.РасчетныйСчет.Видимость = истина;
иначе
ЭлементыФормы.ТекстСчет.Видимость = ложь;
ЭлементыФормы.РасчетныйСчет.Видимость = ложь;
КонецЕсли;
КонецПроцедуры
Процедура КоманднаяПанельВыплатаЗарплатыСнятьФлажки(Кнопка)
Для каждого стр из ДокументыВыплаты Цикл
стр.ЕстьПодчДок = ложь;
КонецЦикла;
КонецПроцедуры
Процедура КоманднаяПанельВыплатаЗарплатыУстановитьФлажки(Кнопка)
Для каждого стр из ДокументыВыплаты Цикл
стр.ЕстьПодчДок = истина;
КонецЦикла;
КонецПроцедуры
Процедура кнПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(ДатаНачала, ?(ДатаОкончания='0001-01-01', ДатаОкончания, КонецДня(ДатаОкончания)));
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
НастройкаПериода.Редактировать();
ДатаНачала = НачалоМесяца(НастройкаПериода.ПолучитьДатуНачала());
ДатаОкончания = КонецМесяца(НастройкаПериода.ПолучитьДатуОкончания());
Если ДатаНачала > ДатаОкончания или Год(ДатаНачала) < Год(ДатаОкончания) Тогда
ДатаОкончания = КонецМесяца(ДатаНачала);
КонецЕсли;
КонецПроцедуры
Процедура СпособОплатыПриИзменении(Элемент)
НастроитьВидимость();
КонецПроцедуры
Процедура ПриОткрытии()
НастроитьВидимость();
КонецПроцедуры
//сбор данных по неоплаченным ведомостям
Процедура КоманднаяПанельВыплатаЗарплатыкнЗаполнить(Кнопка)
ДокументыОплаты.Очистить();
Если ЭлементыФормы.СпособОплаты.Значение = Перечисления.СпособыВыплатыЗарплаты.ЧерезБанк тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаПлатежныхДокументов.Ссылка КАК ПлатежныйДокумент,
| ТаблицаПлатежныхДокументов.Ведомость КАК Ведомость
|ПОМЕСТИТЬ ТабПлатежныхДокументов
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаПП.Ссылка КАК Ссылка,
| ТаблицаПП.Ведомость КАК Ведомость
| ИЗ
| Документ.ПлатежноеПоручениеИсходящее.ПеречислениеЗаработнойПлаты КАК ТаблицаПП
| ГДЕ
| ТаблицаПП.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ТаблицаПП.Ссылка.Проведен = ИСТИНА
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаПО.Ссылка,
| ТаблицаПО.Ведомость
| ИЗ
| Документ.ПлатежныйОрдерСписаниеДенежныхСредств.ПеречислениеЗаработнойПлаты КАК ТаблицаПО
| ГДЕ
| ТаблицаПО.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ТаблицаПО.Ссылка.Проведен = ИСТИНА) КАК ТаблицаПлатежныхДокументов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЛОЖЬ КАК ЕстьПодчДок,
| ТабВедомостей.Ссылка КАК Документ,
| ТабВедомостей.Ответственный,
| ТабВедомостей.Комментарий,
| ЕСТЬNULL(ТабПП.ПлатежныйДокумент, 0) КАК ДокументОплаты
|ПОМЕСТИТЬ ОбщийСписок
|ИЗ
| Документ.ЗарплатаКВыплатеОрганизаций КАК ТабВедомостей
| ЛЕВОЕ СОЕДИНЕНИЕ ТабПлатежныхДокументов КАК ТабПП
| ПО (ТабПП.Ведомость = ТабВедомостей.Ссылка)
|ГДЕ
| ТабВедомостей.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ТабВедомостей.ПометкаУдаления = ЛОЖЬ
| И ТабВедомостей.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезБанк)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОбщийСписок.ЕстьПодчДок,
| ОбщийСписок.Документ,
| ОбщийСписок.Ответственный,
| ПОДСТРОКА(ОбщийСписок.Комментарий, 0, 200) КАК Комментарий
|ИЗ
| ОбщийСписок КАК ОбщийСписок
|ГДЕ
| (ОбщийСписок.ДокументОплаты.Проведен = ЛОЖЬ
| ИЛИ ОбщийСписок.ДокументОплаты = 0)";
иначе
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаРКО.Ссылка КАК ПлатежныйДокумент,
| ТаблицаРКО.Ведомость КАК Ведомость
|ПОМЕСТИТЬ ТабПлатежныхДокументов
|ИЗ
| Документ.РасходныйКассовыйОрдер.ВыплатаЗаработнойПлаты КАК ТаблицаРКО
|ГДЕ
| ТаблицаРКО.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ТаблицаРКО.Ссылка.Проведен = ИСТИНА
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЛОЖЬ КАК ЕстьПодчДок,
| ТабВедомостей.Ссылка КАК Документ,
| ТабВедомостей.Ответственный,
| ТабВедомостей.Комментарий,
| ЕСТЬNULL(ТабПП.ПлатежныйДокумент, 0) КАК ДокументОплаты
|ПОМЕСТИТЬ ОбщийСписок
|ИЗ
| Документ.ЗарплатаКВыплатеОрганизаций КАК ТабВедомостей
| ЛЕВОЕ СОЕДИНЕНИЕ ТабПлатежныхДокументов КАК ТабПП
| ПО (ТабПП.Ведомость = ТабВедомостей.Ссылка)
|ГДЕ
| ТабВедомостей.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И ТабВедомостей.ПометкаУдаления = ЛОЖЬ
| И ТабВедомостей.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезКассу)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОбщийСписок.ЕстьПодчДок,
| ОбщийСписок.Документ,
| ОбщийСписок.Ответственный,
| ПОДСТРОКА(ОбщийСписок.Комментарий, 0, 200) КАК Комментарий
|ИЗ
| ОбщийСписок КАК ОбщийСписок
|ГДЕ
| (ОбщийСписок.ДокументОплаты.Проведен = ЛОЖЬ
| ИЛИ ОбщийСписок.ДокументОплаты = 0)";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ДатаНачала",ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания",ДатаОкончания);
ДокументыВыплаты = Запрос.Выполнить().Выгрузить();
элементыФормы.ДокументыВыплаты.СоздатьКолонки();
НастроитьОформление();
КонецПроцедуры
//формирование платежных документов
Процедура СформироватьРКО()
Для каждого стр из ДокументыВыплаты Цикл
Если стр.ЕстьПодчДок Тогда
Док = стр.Документ.ПолучитьОбъект();
Для каждого строкаВедомости из Док.Зарплата Цикл
СтрокаВедомости.ВыплаченностьЗарплаты = Перечисления.ВыплаченностьЗарплаты.Выплачено;
КонецЦикла;
Док.Записать();
Ведомость = стр.Документ;
НовыйРКО = Документы.РасходныйКассовыйОрдер.СоздатьДокумент();
НовыйРКО.Дата = Ведомость.Дата;
НовыйРКО.УстановитьНовыйНомер();
НовыйРКО.Организация = Ведомость.Организация;
НовыйРКО.ВидОперации = Перечисления.ВидыОперацийРКО.ВыплатаЗаработнойПлатыПоВедомостям;
НовыйРКО.ОтражатьВБухгалтерскомУчете = Истина;
НовыйРКО.Ответственный = УправлениеПользователями.ОпределитьТекущегоПользователя();
Для каждого фл из Ведомость.зарплата Цикл
Работник = НовыйРКО.Работники.Добавить();
Работник.Физлицо = фл.Физлицо;
Работник.Сумма = фл.сумма;
КонецЦикла;
ТЧ = НовыйРКО.ВыплатаЗаработнойПлаты;
строкаТЧ = ТЧ.Добавить();
строкаТЧ.Ведомость = Ведомость;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ведомость);
Запрос.УстановитьПараметр("ВыплаченностьЗарплаты", Перечисления.ВыплаченностьЗарплаты.Выплачено);
Запрос.УстановитьПараметр("Регистратор", НовыйРКО.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ЗарплатаКВыплатеЗарплата.Сумма + ЗарплатаКВыплатеЗарплата.КомпенсацияЗаЗадержкуЗарплаты) КАК Сумма,
| ЗарплатаКВыплатеЗарплата.Ссылка
|ИЗ
| Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеЗарплата
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОВыплатахРаботникамОрганизацийПоПлатежнымВедомостям КАК РанееВыплаченныеСуммы
| ПО ЗарплатаКВыплатеЗарплата.Ссылка = РанееВыплаченныеСуммы.Ведомость
| И ЗарплатаКВыплатеЗарплата.Физлицо = РанееВыплаченныеСуммы.Физлицо
| И (РанееВыплаченныеСуммы.Регистратор <> &Регистратор)
|ГДЕ
| ЗарплатаКВыплатеЗарплата.Ссылка = &Ссылка
| И ЗарплатаКВыплатеЗарплата.ВыплаченностьЗарплаты = &ВыплаченностьЗарплаты
| И РанееВыплаченныеСуммы.Физлицо ЕСТЬ NULL
|
|СГРУППИРОВАТЬ ПО
| ЗарплатаКВыплатеЗарплата.Ссылка";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
ОбщегоНазначения.СообщитьОбОшибке("По ведомости "+строка(Ведомость)+" нет сумм к выплате!");
Иначе
Выбор