Группа: Пользователи
Сообщений: 14
Спасибо сказали: 0 раз
Рейтинг: 0
Добрый день!
1С: Предприятие 8,2: УПП 1.3.33.6
Господа! Такая проблема, у нас поменялась форма Приложения к ЗаявкеВФСС. Необходимо отредактировать сам макет(табличную часть). Т.к. создать копию документа во внешнюю обработку нельзя, создал вручную копию документа. НО, модуль обращается к другим функциям и процедурам которые не указанные в данном модуле. Убрать их из модуля нельзя, т.к. на них завязанная работа формирования табличной части. Подскажите как можно более правильно скопировать Документ либо написать печатную форму на основе базовой?
Группа: Пользователи
Сообщений: 14
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(Vofka @ 21.01.15, 16:06)
Вам надо печатную форму изменить?
да
Цитата(logist @ 21.01.15, 22:11)
попутно вопрос - что значит "у нас"?, она же везде стандартная
Как говорят в фонде, в нашем городе (г.Мариуполь), из Киева пришло распоряжение на новый шаблон документа который отличается от шаблона установленного в 1С. А выгружать из 1с в xls , а потом еще и руками редактировать его это как минимум глупо и муторно.
Группа: Пользователи
Сообщений: 14
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(alex040269 @ 22.01.15, 8:28)
значит нужно реализовать внешнюю печатную форму.
ну это очевидно, но при создании печатной формы необходимо затягивать данные из двух другх документов, а в этих функция идет проверка на проведение соответствующих документов и ссылка на функцию "Записать" которой просто нет в данном модуле документа.
Группа: Основатель
Сообщений: 13981
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
По-моему обсуждение заходит в тупик. Если у вас есть конкретные проблемы с программированием - выкладывайте с чем конкретно (и тема переедет в раздел программирования). Потому что никто не видит вашего кода и врядли кто-то понимает о чем вы говорите. Если же вопрос не в программировании, то в чём?
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА
// Форматирует сумму прописью документа // // Параметры: // СуммаДок - число - реквизит, который надо представить прописью // СуммаБезКопеек - булево - флаг представления суммы без копеек // // Возвращаемое значение // Отформатированную строку // Функция ФорматироватьСуммуПрописи(СуммаДок)
Результат = СуммаДок; ЦелаяЧасть = Цел(СуммаДок); ФорматСтрока = "Л=uk_UA; ДП=Ложь"; ПарамПредмета = "гривна, гривні, гривень, ж, копійка, копійки, копійок, ж, 2";
Результат = ЧислоПрописью(Результат,ФорматСтрока,ПарамПредмета);
Функция ПолучитьЗапросДляПечатиПриложения(ВыборкаПоШапкеДокумента) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации); Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДокументыПоНачислениям.Документ.СерияБольничногоЛиста КАК Серия, | ДокументыПоНачислениям.Документ.НомерБольничногоЛиста КАК Номер, | ДокументыПоНачислениям.Документ.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности, | ДокументыПоНачислениям.Документ.ДатаНачала КАК ПериодНачало, | ДокументыПоНачислениям.Документ.ДатаОкончания КАК ПериодКонец, | ДокументыПоНачислениям.Документ КАК Документ |ПОМЕСТИТЬ ВТДокументыПоНачислениям |ИЗ | Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК ДокументыПоНачислениям |ГДЕ | ДокументыПоНачислениям.Ссылка = &ДокументСсылка | И ДокументыПоНачислениям.Документ ССЫЛКА Документ.НачислениеПоБольничномуЛисту | |ИНДЕКСИРОВАТЬ ПО | Документ"; Запрос.Выполнить();
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Начисления.ВидРасчета.НачислениеЗаСчетФСС КАК НачислениеЗаСчетФСС, | Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени КАК ОбозначениеВТабелеУчетаРабочегоВремени, | Начисления.ОплаченоДнейЧасов КАК ОплаченоДнейЧасов, | Начисления.НормаДней КАК НормаДней, | Начисления.Результат КАК Результат, | Начисления.Сотрудник КАК Сотрудник, | Начисления.Сотрудник.Физлицо.КодПоДРФО КАК КодПоДРФО, | Начисления.Регистратор КАК Регистратор |ПОМЕСТИТЬ ВТНачисления |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления |ГДЕ | Начисления.Регистратор В | (ВЫБРАТЬ | ДокументыПоНачислениям.Документ | ИЗ | ВТДокументыПоНачислениям КАК ДокументыПоНачислениям) | И Начисления.Назначение.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство) | И (Начисления.ВидРасчета.ЭтоБольничные = ИСТИНА | ИЛИ Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам)) | |ИНДЕКСИРОВАТЬ ПО | Регистратор"; Запрос.Выполнить();
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДокументыПоНачислениям.Серия КАК Серия, | ДокументыПоНачислениям.Номер КАК Номер, | ДокументыПоНачислениям.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности, | СУММА(ЕСТЬNULL(ВЫБОР | КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА | И Начисления.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам) | ТОГДА Начисления.ОплаченоДнейЧасов | КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА | ТОГДА Начисления.НормаДней | ИНАЧЕ NULL | КОНЕЦ, 0)) КАК КоличествоДнейФСС, | СУММА(ЕСТЬNULL(ВЫБОР | КОГДА Начисления.НачислениеЗаСчетФСС = ЛОЖЬ | ТОГДА Начисления.НормаДней | ИНАЧЕ NULL | КОНЕЦ, 0)) КАК КоличествоДней, | СУММА(ЕСТЬNULL(ВЫБОР | КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА | ТОГДА Начисления.Результат | ИНАЧЕ NULL | КОНЕЦ, 0)) КАК РезультатФСС, | СУММА(ЕСТЬNULL(ВЫБОР | КОГДА Начисления.НачислениеЗаСчетФСС = ЛОЖЬ | ТОГДА Начисления.Результат | ИНАЧЕ NULL | КОНЕЦ, 0)) КАК Результат, | Начисления.Сотрудник, | Начисления.КодПоДРФО КАК ДРФО, | ДокументыПоНачислениям.ПериодНачало КАК ПериодНачало, | ДокументыПоНачислениям.ПериодКонец КАК ПериодКонец |ИЗ | ВТДокументыПоНачислениям КАК ДокументыПоНачислениям | ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисления КАК Начисления | ПО ДокументыПоНачислениям.Документ = Начисления.Регистратор | |СГРУППИРОВАТЬ ПО | ДокументыПоНачислениям.Документ, | ДокументыПоНачислениям.ПричинаНетрудоспособности, | Начисления.Сотрудник, | ДокументыПоНачислениям.Серия, | ДокументыПоНачислениям.Номер, | Начисления.КодПоДРФО, | ДокументыПоНачислениям.ПериодНачало, | ДокументыПоНачислениям.ПериодКонец"; Возврат Запрос.Выполнить();
КонецФункции
Функция ПолучитьЗапросПоКодам()
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КодыОрганизацииСрезПоследних.НомерФСС КАК НомерРегистрации, | КодыОрганизацииСрезПоследних.КодПоЕДРПОУ, | КодыОрганизацииСрезПоследних.ИНН, | КодыОрганизацииСрезПоследних.КодКВЕД, | КодыОрганизацииСрезПоследних.ФИОДиректораФонда, | КодыОрганизацииСрезПоследних.КлассПрофессиональногоРиска, | КодыОрганизацииСрезПоследних.НазваниеРабочегоОрганаФонда |ИЗ | РегистрСведений.КодыОрганизации.СрезПоследних(&ПериодРегистрации, Организация = &Организация) КАК КодыОрганизацииСрезПоследних";
//Получим данные из РС КодыОрганизаций Результат = ПолучитьЗапросПоКодам(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.ФИОДиректораФонда = Выборка.ФИОДиректораФонда; ОбластьШапка.Параметры.НазваниеРабочегоОрганаФонда = Выборка.НазваниеРабочегоОрганаФонда; ОбластьШапка.Параметры.КодПоЕДРПОУ = Выборка.КодПоЕДРПОУ; ОбластьШапка.Параметры.НомерРегистрации = Выборка.НомерРегистрации; КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для адреса организации Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Представление КАК Адрес |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация ); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Адрес = Выборка.Адрес; КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для телефона организации Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Представление КАК Телефон |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация ); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ТелефонОрганизации);
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Телефон = Выборка.Телефон; КонецЕсли;
//Получим данные из РС КодыОрганизаций Результат = ПолучитьЗапросПоКодам(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.КодПоЕДРПОУ = Выборка.КодПоЕДРПОУ; ОбластьШапка.Параметры.ИНН = Выборка.ИНН; ОбластьШапка.Параметры.КВЕД = Выборка.КодКВЕД; ОбластьШапка.Параметры.Риск = Выборка.КлассПрофессиональногоРиска; КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для адреса организации Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Представление КАК Адрес |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация ); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Адрес = Выборка.Адрес; КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для телефона организации Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Представление КАК Телефон |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация ); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ТелефонОрганизации);
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Телефон = Выборка.Телефон; КонецЕсли; ОбластьШапка.Параметры.НомерСчета = Организация.ОсновнойБанковскийСчет.НомерСчета; ОбластьШапка.Параметры.МФОБанкаОрганизации = Организация.ОсновнойБанковскийСчет.Банк.Код; ОбластьШапка.Параметры.Банк = Организация.ОсновнойБанковскийСчет.Банк;
//Шапка помощь ОбластьШапка = Макет.ПолучитьОбласть("ШапкаПомощь"); ТабДокумент.Вывести(ОбластьШапка);
//Строка Помощь ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаПомощь"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаявлениеРасчетВФССДокументыПоНачислениям.НомерСтроки КАК Номер, | ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.НомерБольничногоЛиста КАК НомерБЛ, | ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.СерияБольничногоЛиста КАК СерияБЛ, | ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.Сотрудник КАК Сотрудник, | ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ КАК Документ, | ЗаявлениеРасчетВФСС.Комментарий |ИЗ | Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК ЗаявлениеРасчетВФССДокументыПоНачислениям | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявлениеРасчетВФСС КАК ЗаявлениеРасчетВФСС | ПО ЗаявлениеРасчетВФССДокументыПоНачислениям.Ссылка = ЗаявлениеРасчетВФСС.Ссылка |ГДЕ | ЗаявлениеРасчетВФССДокументыПоНачислениям.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Ссылка );
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке(); ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать(); Если ВыборкаПоШапкеДокумента.Следующий() Тогда РезультатЗапросаПоДокументам = ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента); ВыборкаПоДокументам = РезультатЗапросаПоДокументам.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл Если ВыборкаПоДокументам.Документ = Выборка.Документ Тогда Если НЕ ВыборкаПоДокументам.Результат = 0 Тогда ОбластьСтрока.Параметры.Номер = Выборка.Номер; ОбластьСтрока.Параметры.СерияНомер = Выборка.СерияБЛ + " " + Выборка.НомерБЛ; ОбластьСтрока.Параметры.Сотрудник = Выборка.Сотрудник;
Если ЗначениеЗаполнено(Руководители.Руководитель) Тогда ОбластьПодпись.Параметры.ФИОРуководителя = Руководители.РуководительФИО.Фамилия + " " + Руководители.РуководительФИО.Имя + " " + Руководители.РуководительФИО.Отчество; КонецЕсли;
Если ЗначениеЗаполнено(Руководители.ГлавныйБухгалтер) Тогда ОбластьПодпись.Параметры.ФИОБухгалтера = Руководители.ГлавныйБухгалтерФИО.Фамилия + " " + Руководители.ГлавныйБухгалтерФИО.Имя + " " + Руководители.ГлавныйБухгалтерФИО.Отчество; КонецЕсли;
ТабДокумент.Вывести(ОбластьПодпись);
Возврат ТабДокумент;
КонецФункции
Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
// Получить экземпляр документа на печать Если ИмяМакета = "Заявка" Тогда ТабДокумент = ПечатьЗаявка() ИначеЕсли ИмяМакета = "Приложение" Тогда Если ЗаСчетФССОтНС Тогда Предупреждение("При включенном флаге ""За счет ФСС от НС"" печать ""Приложения"" не производится!"); Иначе ТабДокумент = ПечатьПриложение() КонецЕсли; ИначеЕсли ИмяМакета = "ЗаявкаНС" Тогда ТабДокумент = ПечатьЗаявкаНС() КонецЕсли;
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер,ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,"Заявление - расчет в ФСС "));
КонецФункции
#КонецЕсли
// Возвращает доступные варианты печати документа // // Вовращаемое значение: // Струткура, каждая строка которой соответствует одному из вариантов печати // Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
Если ЗаСчетФССОтНС Тогда Возврат Новый Структура("ЗаявкаНС, Приложение", "Заявка", "Приложение"); Иначе Возврат Новый Структура("Заявка, Приложение", "Заявка", "Приложение"); КонецЕсли;
КонецФункции // ПолучитьСтруктуруПечатныхФорм()
Процедура АвтозаполнениеДокумента() Экспорт
Если ЭтоНовый() Тогда #Если Клиент Тогда ТекстВопроса = "Перед заполнением докумет необходимо записать. Продолжить?"; Если Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да,) <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; #КонецЕсли Записать(); КонецЕсли;
Функция ПолучитьЗапросДокументовПособий() Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(ПериодРегистрации)); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Приход", ВидДвиженияНакопления.Приход); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("СтатьяНС", Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп); Если ЗаСчетФССОтНС Тогда
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | НачислениеПоБольничномуЛисту.Ссылка КАК Документ |ИЗ | Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту |ГДЕ | НачислениеПоБольничномуЛисту.ПериодРегистрации = &ПериодРегистрации | И НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС = &СтатьяНС | И НачислениеПоБольничномуЛисту.Организация = &Организация | И НЕ НачислениеПоБольничномуЛисту.Ссылка В | (ВЫБРАТЬ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ | ИЗ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС | ГДЕ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Период = &ПериодРегистрации | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ВидДвижения = &Приход | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ.Ссылка <> &Ссылка | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Регистратор <> &Ссылка) | И НачислениеПоБольничномуЛисту.Ссылка.Проведен = ИСТИНА";
Иначе
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Пособия.Документ КАК Документ |ИЗ | (ВЫБРАТЬ | ЕдиновременныеПособия.Ссылка КАК Документ | ИЗ | Документ.НачислениеЕдиновременныхПособийЗаСчетФСС КАК ЕдиновременныеПособия | ГДЕ | ЕдиновременныеПособия.Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | И ЕдиновременныеПособия.ПериодРегистрации = &ПериодРегистрации | И ЕдиновременныеПособия.Организация = &Организация | | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | НачислениеПоБольничномуЛисту.Ссылка | ИЗ | Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту | ГДЕ | НачислениеПоБольничномуЛисту.ПериодРегистрации = &ПериодРегистрации | И НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС <> &СтатьяНС | И НачислениеПоБольничномуЛисту.Организация = &Организация) КАК Пособия |ГДЕ | (НЕ Пособия.Документ В | (ВЫБРАТЬ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ | ИЗ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС | ГДЕ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ПериодВзаиморасчетов = &ПериодРегистрации | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ВидДвижения = &Приход | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Регистратор <> &Ссылка)) | И Пособия.Документ.Проведен = ИСТИНА"; КонецЕсли;
Возврат Запрос;
КонецФункции
Функция ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации); Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка); Запрос.УстановитьПараметр("Документ", ДокументыПоНачислениям.ВыгрузитьКолонку("Документ"));
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ОсновнойЗапрос.Документ КАК Документ, | ОсновнойЗапрос.Результат КАК Результат, | ОсновнойЗапрос.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС, | ОсновнойЗапрос.КоличествоДней КАК КоличествоДней |ИЗ | (ВЫБРАТЬ | Начисления.Регистратор КАК Документ, | СУММА(Начисления.Результат) КАК Результат, | РазмерыВыплат.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС, | NULL КАК КоличествоДней |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерыЗаконодательноУстановленныхВыплат.СрезПоследних(&ПериодРегистрации, ) КАК РазмерыВыплат | ПО Начисления.ВидРасчета = РазмерыВыплат.ВидРасчета |ГДЕ | Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | И РазмерыВыплат.СтатьяРасчетовСФСС = ЗНАЧЕНИЕ(Справочник.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_Погребен) | И Начисления.Регистратор В(&Документ) | |СГРУППИРОВАТЬ ПО | РазмерыВыплат.СтатьяРасчетовСФСС, | Начисления.Регистратор | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Начисления.Регистратор КАК Документ, | СУММА(Начисления.Результат) КАК Результат, | Начисления.Регистратор.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС, | СУММА(ВЫБОР | КОГДА Начисления.Назначение.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство) | ТОГДА | ВЫБОР | КОГДА Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам) | ТОГДА Начисления.ОплаченоДнейЧасов | ИНАЧЕ Начисления.НормаДней | КОНЕЦ | ИНАЧЕ 0 | КОНЕЦ) КАК КоличествоДней |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления |ГДЕ | Начисления.Регистратор ССЫЛКА Документ.НачислениеПоБольничномуЛисту | И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | И Начисления.Регистратор В(&Документ) | |СГРУППИРОВАТЬ ПО | Начисления.Регистратор, | Начисления.Регистратор.ПричинаНетрудоспособности.СтатьяРасчетовсФСС)КАК ОсновнойЗапрос |";
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке(); ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать(); Если ВыборкаПоШапкеДокумента.Следующий() Тогда РезультатЗапросаПоДокументам = ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента); ВыборкаПоДокументам = РезультатЗапросаПоДокументам.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл Сумма = ВыборкаПоДокументам.Результат; КоличествоДней = ВыборкаПоДокументам.КоличествоДней; //Для документа "Начисление по больничному листу" Если ТипЗнч(ВыборкаПоДокументам.Документ) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") Тогда СтатьяДокумента = ВыборкаПоДокументам.СтатьяРасчетовСФСС; Если СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_ВремНетрудосп ИЛИ СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп Тогда ВсегоПоБольничным = ВсегоПоБольничным + Сумма; КоличествоДнейПоБольничным = КоличествоДнейПоБольничным + КоличествоДней; ИначеЕсли СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_Берем Тогда ВсегоПоБеременностиИРодам = ВсегоПоБеременностиИРодам + Сумма; КоличествоДнейПоБеременостиИРодам = КоличествоДнейПоБеременостиИРодам + КоличествоДней; ИначеЕсли СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_ВремНетрудоспУход Тогда ВсегоПоБольничнымПоУходу = ВсегоПоБольничнымПоУходу + Сумма; КоличествоДнейПоБольничнымПоУходу = КоличествоДнейПоБольничнымПоУходу + КоличествоДней; КонецЕсли; //Для документа "Начисление единовременных пособий за счет ФСС" ИначеЕсли ТипЗнч(ВыборкаПоДокументам.Документ) = Тип("ДокументСсылка.НачислениеЕдиновременныхПособийЗаСчетФСС") Тогда ВсегоНаПогребение = ВсегоНаПогребение + Сумма; КонецЕсли; КонецЦикла; ВсегоПоДокументу = ВсегоПоБольничным + ВсегоПоБеременностиИРодам + ВсегоПоБольничнымПоУходу + ВсегоНаПогребение; КонецЕсли;
КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА
// Формирует запрос по шапке документа // // Параметры: // Режим - режим проведения // // Возвращаемое значение: // Результат запроса // Функция СформироватьЗапросПоШапке()
Функция СформироватьЗапросПоДокументамТабличнойЧасти(ВыборкаПоШапкеДокумента) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации); Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка);
Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ОсновнойЗапрос.Документ КАК Документ, | ОсновнойЗапрос.Сотрудник КАК Сотрудник, | ОсновнойЗапрос.СчетУчета КАК СчетУчета, | ОсновнойЗапрос.Результат КАК Результат, | ОсновнойЗапрос.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС |ИЗ | (ВЫБРАТЬ | Документы.Документ КАК Документ, | Начисления.Сотрудник КАК Сотрудник, | Начисления.ВидРасчета.СчетУчета КАК СчетУчета, | Начисления.Результат КАК Результат, | РазмерыВыплат.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС | | ИЗ | Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК Документы | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления | ПО | Документы.Документ = Начисления.Регистратор | | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.РазмерыЗаконодательноУстановленныхВыплат.СрезПоследних(&ПериодРегистрации) КАК РазмерыВыплат | ПО | Начисления.ВидРасчета = РазмерыВыплат.ВидРасчета | ГДЕ | Документы.Ссылка = &ДокументСсылка | И Документы.Документ ССЫЛКА Документ.НачислениеЕдиновременныхПособийЗаСчетФСС | И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Документы.Документ КАК Документ, | Начисления.Сотрудник КАК Сотрудник, | Начисления.ВидРасчета.СчетУчета КАК СчетУчета, | Начисления.Результат КАК Результат, | Документы.Документ.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС | | ИЗ | Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК Документы | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления | ПО | Документы.Документ = Начисления.Регистратор | | ГДЕ | Документы.Ссылка = &ДокументСсылка | И Документы.Документ ССЫЛКА Документ.НачислениеПоБольничномуЛисту | И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | ) КАК ОсновнойЗапрос | | |"; Возврат Запрос.Выполнить(); КонецФункции
// Проверяет правильность заполнения шапки документа. // Если какой-то из реквизтов шапки, влияющий на проведение не заполнен или // заполнен не корректно, то выставляется флаг отказа в проведении. // Проверка выполняется по выборке из результата запроса по шапке, // все проверяемые реквизиты должны быть включены в выборку по шапке. // // Параметры: // ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа, // Отказ - флаг отказа в проведении. // Заголовок - Заголовок для сообщений об ошибках проведения // Процедура ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок)
Если НЕ ЗначениеЗаполнено(ВыборкаПоШапкеДокумента.Организация) Тогда ОбщегоНазначения.СообщитьОбОшибке("Не указана организация!", Отказ, Заголовок); КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВыборкаПоШапкеДокумента.Ответственный) Тогда ОбщегоНазначения.СообщитьОбОшибке("Не указано ответственное лицо!", Отказ, Заголовок); КонецЕсли;
КонецПроцедуры // ПроверитьЗаполнениеШапки()
// Проверяет заполнена ли СтатьяРасчетовСФСС. // Если реквизит не заполнен , то выставляется флаг отказа в проведении. // Проверка выполняется по выборке из результата запроса по строке ТЧ документа, // // Параметры: // ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа, // ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка // из результата запроса по документам, // Отказ - флаг отказа в проведении. // Заголовок - Заголовок для сообщений об ошибках проведения // Процедура ПроверитьЗаполнениеСтатьиРасчетовСФСС(ВыборкаПоШапкеДокумента, ВыборкаПоТЧ, Отказ, Заголовок)
Если НЕ ЗначениеЗаполнено(ВыборкаПоТЧ.СтатьяРасчетовСФСС) Тогда СтрокаСообщения = "В документе: " + ВыборкаПоТЧ.Документ + " не заполнена статья расчетов в ФСС"; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, Заголовок); КонецЕсли; КонецПроцедуры
// По строке выборки результата запроса по документу формируем движения по регистрам // // Параметры: // ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа // СтруктураПроведенияПоРегистрамНакопления - структура, содержащая имена регистров // накопления по которым надо проводить документ // СтруктураПараметров - структура параметров проведения. // // Возвращаемое значение: // Нет. // Процедура ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоТЧ)
Движение = Движения.ВзаиморасчетыПоНачислениямЗаСчетФСС.Добавить();
// Свойства Движение.Период = ВыборкаПоШапкеДокумента.Дата; Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
ПроверитьЗаполнениеСтатьиРасчетовСФСС(ВыборкаПоШапкеДокумента, ВыборкаПоДокументам, Отказ, Заголовок); //Если не заполнена СтатьяРасчетовСФСС не проводим Если Не Отказ Тогда ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоДокументам); КонецЕсли; КонецЦикла; КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеЕдиновременныхПособийЗаСчетФСС") Тогда Дата = ТекущаяДата(); ПериодРегистрации = Основание.ПериодРегистрации; Организация = Основание.Организация; Если ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК Статья |ИЗ | Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту |ГДЕ | НачислениеПоБольничномуЛисту.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Основание );
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда Если Выборка.Статья = Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп Тогда ЗаСчетФССОтНС = Истина; Иначе ЗаСчетФССОтНС = Ложь; КонецЕсли; КонецЕсли; КонецЕсли;
Функция СгруппироватьПериодыНачислений(Выборка) Перем прСотрудник, прПричинаНетрудоспособности, прДРФО, прСерия, прНомер; //переменные содержащие информацию с прошлой строки выборки при обходе ее в цикле Перем прПериодНачало; Перем прПериодКонец; Перем прКоличествоДней, прКоличествоДнейФСС, прРезультат, прРезультатФСС; Перем НоваяСтрока; //Строка табличной части
прПериодНачало = Выборка.ПериодНачало; прПериодКонец = Выборка.ПериодКонец; //если строки одинаковые и если дата конца первой строки на один день меньше даты второй строки , совмещаем их, делаем одну строку. ИначеЕсли Выборка.Сотрудник = прСотрудник И Выборка.ПричинаНетрудоспособности = прПричинаНетрудоспособности И Выборка.ДРФО = прДРФО И Выборка.Серия = прСерия И Выборка.Номер = прНомер И НачалоДня(Выборка.ПериодНачало) = (НачалоДня(прПериодКонец)+ 1*60*60*24) Тогда НоваяСтрока.ПериодНачало = прПериодНачало; НоваяСтрока.ПериодКонец = Выборка.ПериодКонец; НоваяСтрока.КоличествоДней = НоваяСтрока.КоличествоДней + Выборка.КоличествоДней + Выборка.КоличествоДнейФСС; НоваяСтрока.КоличествоДнейФСС = НоваяСтрока.КоличествоДнейФСС + Выборка.КоличествоДнейФСС; НоваяСтрока.Результат = НоваяСтрока.Результат + Выборка.Результат + Выборка.РезультатФСС; НоваяСтрока.РезультатФСС = НоваяСтрока.РезультатФСС + Выборка.РезультатФСС;
Группа: Местный
Сообщений: 2908
Из: Київ, Україна
Спасибо сказали: 1159 раз
Рейтинг: 1244.5
Цитата(Loreny @ 22.01.15, 9:24)
но там много связаных функций
Если это - экспортные функции, обращайтесь к ним через реквизит ссылки на документ (по стандартам внешних печатных форм это "СсылкаНаОбъект"). Если эти функции не экспортные, придется их скопировать в модуль впф.
Допрацьовую: - "Бухгалтерія для України 2.1"; - "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!