Господа! Такая проблема, у нас поменялась форма Приложения к ЗаявкеВФСС. Необходимо отредактировать сам макет(табличную часть). Т.к. создать копию документа во внешнюю обработку нельзя, создал вручную копию документа. НО, модуль обращается к другим функциям и процедурам которые не указанные в данном модуле. Убрать их из модуля нельзя, т.к. на них завязанная работа формирования табличной части. Подскажите как можно более правильно скопировать Документ либо написать печатную форму на основе базовой?
попутно вопрос - что значит "у нас"?, она же везде стандартная
Как говорят в фонде, в нашем городе (г.Мариуполь), из Киева пришло распоряжение на новый шаблон документа который отличается от шаблона установленного в 1С. А выгружать из 1с в xls , а потом еще и руками редактировать его это как минимум глупо и муторно.
ну это очевидно, но при создании печатной формы необходимо затягивать данные из двух другх документов, а в этих функция идет проверка на проведение соответствующих документов и ссылка на функцию "Записать" которой просто нет в данном модуле документа.
У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8
По-моему обсуждение заходит в тупик. Если у вас есть конкретные проблемы с программированием - выкладывайте с чем конкретно (и тема переедет в раздел программирования). Потому что никто не видит вашего кода и врядли кто-то понимает о чем вы говорите. Если же вопрос не в программировании, то в чём?
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА
// Форматирует сумму прописью документа // // Параметры: // СуммаДок - число - реквизит, который надо представить прописью // СуммаБезКопеек - булево - флаг представления суммы без копеек // // Возвращаемое значение // Отформатированную строку // Функция ФорматироватьСуммуПрописи(СуммаДок)
Результат = СуммаДок; ЦелаяЧасть = Цел(СуммаДок); ФорматСтрока = "Л=uk_UA; ДП=Ложь"; ПарамПредмета = "гривна, гривні, гривень, ж, копійка, копійки, копійок, ж, 2";
Результат = ЧислоПрописью(Результат,ФорматСтрока,ПарамПредмета);
Функция ПолучитьЗапросДляПечатиПриложения(ВыборкаПоШапкеДокумента) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации); Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДокументыПоНачислениям.Документ.СерияБольничногоЛиста КАК Серия, | ДокументыПоНачислениям.Документ.НомерБольничногоЛиста КАК Номер, | ДокументыПоНачислениям.Документ.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности, | ДокументыПоНачислениям.Документ.ДатаНачала КАК ПериодНачало, | ДокументыПоНачислениям.Документ.ДатаОкончания КАК ПериодКонец, | ДокументыПоНачислениям.Документ КАК Документ |ПОМЕСТИТЬ ВТДокументыПоНачислениям |ИЗ | Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК ДокументыПоНачислениям |ГДЕ | ДокументыПоНачислениям.Ссылка = &ДокументСсылка | И ДокументыПоНачислениям.Документ ССЫЛКА Документ.НачислениеПоБольничномуЛисту | |ИНДЕКСИРОВАТЬ ПО | Документ"; Запрос.Выполнить();
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Начисления.ВидРасчета.НачислениеЗаСчетФСС КАК НачислениеЗаСчетФСС, | Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени КАК ОбозначениеВТабелеУчетаРабочегоВремени, | Начисления.ОплаченоДнейЧасов КАК ОплаченоДнейЧасов, | Начисления.НормаДней КАК НормаДней, | Начисления.Результат КАК Результат, | Начисления.Сотрудник КАК Сотрудник, | Начисления.Сотрудник.Физлицо.КодПоДРФО КАК КодПоДРФО, | Начисления.Регистратор КАК Регистратор |ПОМЕСТИТЬ ВТНачисления |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления |ГДЕ | Начисления.Регистратор В | (ВЫБРАТЬ | ДокументыПоНачислениям.Документ | ИЗ | ВТДокументыПоНачислениям КАК ДокументыПоНачислениям) | И Начисления.Назначение.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство) | И (Начисления.ВидРасчета.ЭтоБольничные = ИСТИНА | ИЛИ Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам)) | |ИНДЕКСИРОВАТЬ ПО | Регистратор"; Запрос.Выполнить();
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДокументыПоНачислениям.Серия КАК Серия, | ДокументыПоНачислениям.Номер КАК Номер, | ДокументыПоНачислениям.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности, | СУММА(ЕСТЬNULL(ВЫБОР | КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА | И Начисления.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам) | ТОГДА Начисления.ОплаченоДнейЧасов | КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА | ТОГДА Начисления.НормаДней | ИНАЧЕ NULL | КОНЕЦ, 0)) КАК КоличествоДнейФСС, | СУММА(ЕСТЬNULL(ВЫБОР | КОГДА Начисления.НачислениеЗаСчетФСС = ЛОЖЬ | ТОГДА Начисления.НормаДней | ИНАЧЕ NULL | КОНЕЦ, 0)) КАК КоличествоДней, | СУММА(ЕСТЬNULL(ВЫБОР | КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА | ТОГДА Начисления.Результат | ИНАЧЕ NULL | КОНЕЦ, 0)) КАК РезультатФСС, | СУММА(ЕСТЬNULL(ВЫБОР | КОГДА Начисления.НачислениеЗаСчетФСС = ЛОЖЬ | ТОГДА Начисления.Результат | ИНАЧЕ NULL | КОНЕЦ, 0)) КАК Результат, | Начисления.Сотрудник, | Начисления.КодПоДРФО КАК ДРФО, | ДокументыПоНачислениям.ПериодНачало КАК ПериодНачало, | ДокументыПоНачислениям.ПериодКонец КАК ПериодКонец |ИЗ | ВТДокументыПоНачислениям КАК ДокументыПоНачислениям | ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисления КАК Начисления | ПО ДокументыПоНачислениям.Документ = Начисления.Регистратор | |СГРУППИРОВАТЬ ПО | ДокументыПоНачислениям.Документ, | ДокументыПоНачислениям.ПричинаНетрудоспособности, | Начисления.Сотрудник, | ДокументыПоНачислениям.Серия, | ДокументыПоНачислениям.Номер, | Начисления.КодПоДРФО, | ДокументыПоНачислениям.ПериодНачало, | ДокументыПоНачислениям.ПериодКонец"; Возврат Запрос.Выполнить();
КонецФункции
Функция ПолучитьЗапросПоКодам()
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КодыОрганизацииСрезПоследних.НомерФСС КАК НомерРегистрации, | КодыОрганизацииСрезПоследних.КодПоЕДРПОУ, | КодыОрганизацииСрезПоследних.ИНН, | КодыОрганизацииСрезПоследних.КодКВЕД, | КодыОрганизацииСрезПоследних.ФИОДиректораФонда, | КодыОрганизацииСрезПоследних.КлассПрофессиональногоРиска, | КодыОрганизацииСрезПоследних.НазваниеРабочегоОрганаФонда |ИЗ | РегистрСведений.КодыОрганизации.СрезПоследних(&ПериодРегистрации, Организация = &Организация) КАК КодыОрганизацииСрезПоследних";
//Получим данные из РС КодыОрганизаций Результат = ПолучитьЗапросПоКодам(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.ФИОДиректораФонда = Выборка.ФИОДиректораФонда; ОбластьШапка.Параметры.НазваниеРабочегоОрганаФонда = Выборка.НазваниеРабочегоОрганаФонда; ОбластьШапка.Параметры.КодПоЕДРПОУ = Выборка.КодПоЕДРПОУ; ОбластьШапка.Параметры.НомерРегистрации = Выборка.НомерРегистрации; КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для адреса организации Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Представление КАК Адрес |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация ); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Адрес = Выборка.Адрес; КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для телефона организации Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Представление КАК Телефон |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация ); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ТелефонОрганизации);
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Телефон = Выборка.Телефон; КонецЕсли;
//Получим данные из РС КодыОрганизаций Результат = ПолучитьЗапросПоКодам(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.КодПоЕДРПОУ = Выборка.КодПоЕДРПОУ; ОбластьШапка.Параметры.ИНН = Выборка.ИНН; ОбластьШапка.Параметры.КВЕД = Выборка.КодКВЕД; ОбластьШапка.Параметры.Риск = Выборка.КлассПрофессиональногоРиска; КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для адреса организации Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Представление КАК Адрес |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация ); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Адрес = Выборка.Адрес; КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для телефона организации Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КонтактнаяИнформация.Представление КАК Телефон |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Тип = &Тип | И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация ); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ТелефонОрганизации);
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Телефон = Выборка.Телефон; КонецЕсли; ОбластьШапка.Параметры.НомерСчета = Организация.ОсновнойБанковскийСчет.НомерСчета; ОбластьШапка.Параметры.МФОБанкаОрганизации = Организация.ОсновнойБанковскийСчет.Банк.Код; ОбластьШапка.Параметры.Банк = Организация.ОсновнойБанковскийСчет.Банк;
//Шапка помощь ОбластьШапка = Макет.ПолучитьОбласть("ШапкаПомощь"); ТабДокумент.Вывести(ОбластьШапка);
//Строка Помощь ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаПомощь"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаявлениеРасчетВФССДокументыПоНачислениям.НомерСтроки КАК Номер, | ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.НомерБольничногоЛиста КАК НомерБЛ, | ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.СерияБольничногоЛиста КАК СерияБЛ, | ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.Сотрудник КАК Сотрудник, | ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ КАК Документ, | ЗаявлениеРасчетВФСС.Комментарий |ИЗ | Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК ЗаявлениеРасчетВФССДокументыПоНачислениям | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявлениеРасчетВФСС КАК ЗаявлениеРасчетВФСС | ПО ЗаявлениеРасчетВФССДокументыПоНачислениям.Ссылка = ЗаявлениеРасчетВФСС.Ссылка |ГДЕ | ЗаявлениеРасчетВФССДокументыПоНачислениям.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Ссылка );
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке(); ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать(); Если ВыборкаПоШапкеДокумента.Следующий() Тогда РезультатЗапросаПоДокументам = ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента); ВыборкаПоДокументам = РезультатЗапросаПоДокументам.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл Если ВыборкаПоДокументам.Документ = Выборка.Документ Тогда Если НЕ ВыборкаПоДокументам.Результат = 0 Тогда ОбластьСтрока.Параметры.Номер = Выборка.Номер; ОбластьСтрока.Параметры.СерияНомер = Выборка.СерияБЛ + " " + Выборка.НомерБЛ; ОбластьСтрока.Параметры.Сотрудник = Выборка.Сотрудник;
Если ЗначениеЗаполнено(Руководители.Руководитель) Тогда ОбластьПодпись.Параметры.ФИОРуководителя = Руководители.РуководительФИО.Фамилия + " " + Руководители.РуководительФИО.Имя + " " + Руководители.РуководительФИО.Отчество; КонецЕсли;
Если ЗначениеЗаполнено(Руководители.ГлавныйБухгалтер) Тогда ОбластьПодпись.Параметры.ФИОБухгалтера = Руководители.ГлавныйБухгалтерФИО.Фамилия + " " + Руководители.ГлавныйБухгалтерФИО.Имя + " " + Руководители.ГлавныйБухгалтерФИО.Отчество; КонецЕсли;
ТабДокумент.Вывести(ОбластьПодпись);
Возврат ТабДокумент;
КонецФункции
Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
// Получить экземпляр документа на печать Если ИмяМакета = "Заявка" Тогда ТабДокумент = ПечатьЗаявка() ИначеЕсли ИмяМакета = "Приложение" Тогда Если ЗаСчетФССОтНС Тогда Предупреждение("При включенном флаге ""За счет ФСС от НС"" печать ""Приложения"" не производится!"); Иначе ТабДокумент = ПечатьПриложение() КонецЕсли; ИначеЕсли ИмяМакета = "ЗаявкаНС" Тогда ТабДокумент = ПечатьЗаявкаНС() КонецЕсли;
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер,ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,"Заявление - расчет в ФСС "));
КонецФункции
#КонецЕсли
// Возвращает доступные варианты печати документа // // Вовращаемое значение: // Струткура, каждая строка которой соответствует одному из вариантов печати // Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
Если ЗаСчетФССОтНС Тогда Возврат Новый Структура("ЗаявкаНС, Приложение", "Заявка", "Приложение"); Иначе Возврат Новый Структура("Заявка, Приложение", "Заявка", "Приложение"); КонецЕсли;
КонецФункции // ПолучитьСтруктуруПечатныхФорм()
Процедура АвтозаполнениеДокумента() Экспорт
Если ЭтоНовый() Тогда #Если Клиент Тогда ТекстВопроса = "Перед заполнением докумет необходимо записать. Продолжить?"; Если Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да,) <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; #КонецЕсли Записать(); КонецЕсли;
Функция ПолучитьЗапросДокументовПособий() Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(ПериодРегистрации)); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Приход", ВидДвиженияНакопления.Приход); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("СтатьяНС", Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп); Если ЗаСчетФССОтНС Тогда
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | НачислениеПоБольничномуЛисту.Ссылка КАК Документ |ИЗ | Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту |ГДЕ | НачислениеПоБольничномуЛисту.ПериодРегистрации = &ПериодРегистрации | И НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС = &СтатьяНС | И НачислениеПоБольничномуЛисту.Организация = &Организация | И НЕ НачислениеПоБольничномуЛисту.Ссылка В | (ВЫБРАТЬ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ | ИЗ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС | ГДЕ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Период = &ПериодРегистрации | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ВидДвижения = &Приход | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ.Ссылка <> &Ссылка | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Регистратор <> &Ссылка) | И НачислениеПоБольничномуЛисту.Ссылка.Проведен = ИСТИНА";
Иначе
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Пособия.Документ КАК Документ |ИЗ | (ВЫБРАТЬ | ЕдиновременныеПособия.Ссылка КАК Документ | ИЗ | Документ.НачислениеЕдиновременныхПособийЗаСчетФСС КАК ЕдиновременныеПособия | ГДЕ | ЕдиновременныеПособия.Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | И ЕдиновременныеПособия.ПериодРегистрации = &ПериодРегистрации | И ЕдиновременныеПособия.Организация = &Организация | | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | НачислениеПоБольничномуЛисту.Ссылка | ИЗ | Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту | ГДЕ | НачислениеПоБольничномуЛисту.ПериодРегистрации = &ПериодРегистрации | И НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС <> &СтатьяНС | И НачислениеПоБольничномуЛисту.Организация = &Организация) КАК Пособия |ГДЕ | (НЕ Пособия.Документ В | (ВЫБРАТЬ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ | ИЗ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС | ГДЕ | РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ПериодВзаиморасчетов = &ПериодРегистрации | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ВидДвижения = &Приход | И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Регистратор <> &Ссылка)) | И Пособия.Документ.Проведен = ИСТИНА"; КонецЕсли;
Возврат Запрос;
КонецФункции
Функция ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации); Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка); Запрос.УстановитьПараметр("Документ", ДокументыПоНачислениям.ВыгрузитьКолонку("Документ"));
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ОсновнойЗапрос.Документ КАК Документ, | ОсновнойЗапрос.Результат КАК Результат, | ОсновнойЗапрос.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС, | ОсновнойЗапрос.КоличествоДней КАК КоличествоДней |ИЗ | (ВЫБРАТЬ | Начисления.Регистратор КАК Документ, | СУММА(Начисления.Результат) КАК Результат, | РазмерыВыплат.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС, | NULL КАК КоличествоДней |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерыЗаконодательноУстановленныхВыплат.СрезПоследних(&ПериодРегистрации, ) КАК РазмерыВыплат | ПО Начисления.ВидРасчета = РазмерыВыплат.ВидРасчета |ГДЕ | Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | И РазмерыВыплат.СтатьяРасчетовСФСС = ЗНАЧЕНИЕ(Справочник.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_Погребен) | И Начисления.Регистратор В(&Документ) | |СГРУППИРОВАТЬ ПО | РазмерыВыплат.СтатьяРасчетовСФСС, | Начисления.Регистратор | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Начисления.Регистратор КАК Документ, | СУММА(Начисления.Результат) КАК Результат, | Начисления.Регистратор.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС, | СУММА(ВЫБОР | КОГДА Начисления.Назначение.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство) | ТОГДА | ВЫБОР | КОГДА Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам) | ТОГДА Начисления.ОплаченоДнейЧасов | ИНАЧЕ Начисления.НормаДней | КОНЕЦ | ИНАЧЕ 0 | КОНЕЦ) КАК КоличествоДней |ИЗ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления |ГДЕ | Начисления.Регистратор ССЫЛКА Документ.НачислениеПоБольничномуЛисту | И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | И Начисления.Регистратор В(&Документ) | |СГРУППИРОВАТЬ ПО | Начисления.Регистратор, | Начисления.Регистратор.ПричинаНетрудоспособности.СтатьяРасчетовсФСС)КАК ОсновнойЗапрос |";
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке(); ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать(); Если ВыборкаПоШапкеДокумента.Следующий() Тогда РезультатЗапросаПоДокументам = ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента); ВыборкаПоДокументам = РезультатЗапросаПоДокументам.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл Сумма = ВыборкаПоДокументам.Результат; КоличествоДней = ВыборкаПоДокументам.КоличествоДней; //Для документа "Начисление по больничному листу" Если ТипЗнч(ВыборкаПоДокументам.Документ) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") Тогда СтатьяДокумента = ВыборкаПоДокументам.СтатьяРасчетовСФСС; Если СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_ВремНетрудосп ИЛИ СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп Тогда ВсегоПоБольничным = ВсегоПоБольничным + Сумма; КоличествоДнейПоБольничным = КоличествоДнейПоБольничным + КоличествоДней; ИначеЕсли СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_Берем Тогда ВсегоПоБеременностиИРодам = ВсегоПоБеременностиИРодам + Сумма; КоличествоДнейПоБеременостиИРодам = КоличествоДнейПоБеременостиИРодам + КоличествоДней; ИначеЕсли СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_ВремНетрудоспУход Тогда ВсегоПоБольничнымПоУходу = ВсегоПоБольничнымПоУходу + Сумма; КоличествоДнейПоБольничнымПоУходу = КоличествоДнейПоБольничнымПоУходу + КоличествоДней; КонецЕсли; //Для документа "Начисление единовременных пособий за счет ФСС" ИначеЕсли ТипЗнч(ВыборкаПоДокументам.Документ) = Тип("ДокументСсылка.НачислениеЕдиновременныхПособийЗаСчетФСС") Тогда ВсегоНаПогребение = ВсегоНаПогребение + Сумма; КонецЕсли; КонецЦикла; ВсегоПоДокументу = ВсегоПоБольничным + ВсегоПоБеременностиИРодам + ВсегоПоБольничнымПоУходу + ВсегоНаПогребение; КонецЕсли;
КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА
// Формирует запрос по шапке документа // // Параметры: // Режим - режим проведения // // Возвращаемое значение: // Результат запроса // Функция СформироватьЗапросПоШапке()
Функция СформироватьЗапросПоДокументамТабличнойЧасти(ВыборкаПоШапкеДокумента) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации); Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка);
Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ОсновнойЗапрос.Документ КАК Документ, | ОсновнойЗапрос.Сотрудник КАК Сотрудник, | ОсновнойЗапрос.СчетУчета КАК СчетУчета, | ОсновнойЗапрос.Результат КАК Результат, | ОсновнойЗапрос.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС |ИЗ | (ВЫБРАТЬ | Документы.Документ КАК Документ, | Начисления.Сотрудник КАК Сотрудник, | Начисления.ВидРасчета.СчетУчета КАК СчетУчета, | Начисления.Результат КАК Результат, | РазмерыВыплат.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС | | ИЗ | Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК Документы | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления | ПО | Документы.Документ = Начисления.Регистратор | | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.РазмерыЗаконодательноУстановленныхВыплат.СрезПоследних(&ПериодРегистрации) КАК РазмерыВыплат | ПО | Начисления.ВидРасчета = РазмерыВыплат.ВидРасчета | ГДЕ | Документы.Ссылка = &ДокументСсылка | И Документы.Документ ССЫЛКА Документ.НачислениеЕдиновременныхПособийЗаСчетФСС | И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Документы.Документ КАК Документ, | Начисления.Сотрудник КАК Сотрудник, | Начисления.ВидРасчета.СчетУчета КАК СчетУчета, | Начисления.Результат КАК Результат, | Документы.Документ.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС | | ИЗ | Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК Документы | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления | ПО | Документы.Документ = Начисления.Регистратор | | ГДЕ | Документы.Ссылка = &ДокументСсылка | И Документы.Документ ССЫЛКА Документ.НачислениеПоБольничномуЛисту | И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА | ) КАК ОсновнойЗапрос | | |"; Возврат Запрос.Выполнить(); КонецФункции
// Проверяет правильность заполнения шапки документа. // Если какой-то из реквизтов шапки, влияющий на проведение не заполнен или // заполнен не корректно, то выставляется флаг отказа в проведении. // Проверка выполняется по выборке из результата запроса по шапке, // все проверяемые реквизиты должны быть включены в выборку по шапке. // // Параметры: // ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа, // Отказ - флаг отказа в проведении. // Заголовок - Заголовок для сообщений об ошибках проведения // Процедура ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок)
Если НЕ ЗначениеЗаполнено(ВыборкаПоШапкеДокумента.Организация) Тогда ОбщегоНазначения.СообщитьОбОшибке("Не указана организация!", Отказ, Заголовок); КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВыборкаПоШапкеДокумента.Ответственный) Тогда ОбщегоНазначения.СообщитьОбОшибке("Не указано ответственное лицо!", Отказ, Заголовок); КонецЕсли;
КонецПроцедуры // ПроверитьЗаполнениеШапки()
// Проверяет заполнена ли СтатьяРасчетовСФСС. // Если реквизит не заполнен , то выставляется флаг отказа в проведении. // Проверка выполняется по выборке из результата запроса по строке ТЧ документа, // // Параметры: // ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа, // ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка // из результата запроса по документам, // Отказ - флаг отказа в проведении. // Заголовок - Заголовок для сообщений об ошибках проведения // Процедура ПроверитьЗаполнениеСтатьиРасчетовСФСС(ВыборкаПоШапкеДокумента, ВыборкаПоТЧ, Отказ, Заголовок)
Если НЕ ЗначениеЗаполнено(ВыборкаПоТЧ.СтатьяРасчетовСФСС) Тогда СтрокаСообщения = "В документе: " + ВыборкаПоТЧ.Документ + " не заполнена статья расчетов в ФСС"; ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, Заголовок); КонецЕсли; КонецПроцедуры
// По строке выборки результата запроса по документу формируем движения по регистрам // // Параметры: // ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа // СтруктураПроведенияПоРегистрамНакопления - структура, содержащая имена регистров // накопления по которым надо проводить документ // СтруктураПараметров - структура параметров проведения. // // Возвращаемое значение: // Нет. // Процедура ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоТЧ)
Движение = Движения.ВзаиморасчетыПоНачислениямЗаСчетФСС.Добавить();
// Свойства Движение.Период = ВыборкаПоШапкеДокумента.Дата; Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
ПроверитьЗаполнениеСтатьиРасчетовСФСС(ВыборкаПоШапкеДокумента, ВыборкаПоДокументам, Отказ, Заголовок); //Если не заполнена СтатьяРасчетовСФСС не проводим Если Не Отказ Тогда ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоДокументам); КонецЕсли; КонецЦикла; КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеЕдиновременныхПособийЗаСчетФСС") Тогда Дата = ТекущаяДата(); ПериодРегистрации = Основание.ПериодРегистрации; Организация = Основание.Организация; Если ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК Статья |ИЗ | Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту |ГДЕ | НачислениеПоБольничномуЛисту.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Основание );
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда Если Выборка.Статья = Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп Тогда ЗаСчетФССОтНС = Истина; Иначе ЗаСчетФССОтНС = Ложь; КонецЕсли; КонецЕсли; КонецЕсли;
Функция СгруппироватьПериодыНачислений(Выборка) Перем прСотрудник, прПричинаНетрудоспособности, прДРФО, прСерия, прНомер; //переменные содержащие информацию с прошлой строки выборки при обходе ее в цикле Перем прПериодНачало; Перем прПериодКонец; Перем прКоличествоДней, прКоличествоДнейФСС, прРезультат, прРезультатФСС; Перем НоваяСтрока; //Строка табличной части
прПериодНачало = Выборка.ПериодНачало; прПериодКонец = Выборка.ПериодКонец; //если строки одинаковые и если дата конца первой строки на один день меньше даты второй строки , совмещаем их, делаем одну строку. ИначеЕсли Выборка.Сотрудник = прСотрудник И Выборка.ПричинаНетрудоспособности = прПричинаНетрудоспособности И Выборка.ДРФО = прДРФО И Выборка.Серия = прСерия И Выборка.Номер = прНомер И НачалоДня(Выборка.ПериодНачало) = (НачалоДня(прПериодКонец)+ 1*60*60*24) Тогда НоваяСтрока.ПериодНачало = прПериодНачало; НоваяСтрока.ПериодКонец = Выборка.ПериодКонец; НоваяСтрока.КоличествоДней = НоваяСтрока.КоличествоДней + Выборка.КоличествоДней + Выборка.КоличествоДнейФСС; НоваяСтрока.КоличествоДнейФСС = НоваяСтрока.КоличествоДнейФСС + Выборка.КоличествоДнейФСС; НоваяСтрока.Результат = НоваяСтрока.Результат + Выборка.Результат + Выборка.РезультатФСС; НоваяСтрока.РезультатФСС = НоваяСтрока.РезультатФСС + Выборка.РезультатФСС;
Живет на форуме
Группа: Местный
Сообщений: 2920
Из: Київ, Україна
Спасибо сказали: 1238 раз
Рейтинг: 1344.3
Цитата(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С форуме!