Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 10:39

Внешняя печатная форма ПКО с доработкой "корреспондирующий счет,субсчет Бухгалтерия 3.0

Автор El, 17 мая 2018, 08:17

0 Пользователей и 1 гость просматривают эту тему.

El

Доброе время суток, делаю тренировочное задание суть которого заключается в том что бы создать внешнюю печатную форму Приходного кассового ордера и доработать в ней поле "корреспондирующий счет,субсчет" так чтобы в нем отображалась проводка по кредиту документа "Поступление наличных" из движения документа пытаюсь это сделать через запрос к регистру бухгалтерии но что то ничего не выходит,нуждаюсь в идеях и помощи.



//часть1

Функция ПолучитьТаблицуКоманд()
  Команды = Новый ТаблицаЗначений;
  Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));//как будет выглядеть описание печ.формы для пользователя
  Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета печ.формы
  Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода
  Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
  Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
  Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление; 
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры


Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг"); //Указываем документ к которому делаем внешнюю печ. форму
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "ПКО (шаблон)"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    ПараметрыРегистрации.Вставить("Версия", "1.0");   
    ПараметрыРегистрации.Вставить("Информация", "Эту ВПФ мы сделали для того что бы посмотреть возможности БСП ");   
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "ПКО (шаблон)", "ПриходныйКассовыйОрдер_КО1", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;

КонецФункции


// часть1






//часть2(Печать)


// Заполняет список команд печати.

// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

// Приходный кассовый ордер (КО-1)
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПКО";
КомандаПечати.Представление = НСтр("ru = 'Приходный кассовый ордер (КО-1)'");
КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";

// Реестр документов
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор  = "Реестр";
КомандаПечати.Представление  = НСтр("ru = 'Реестр документов'");
КомандаПечати.ЗаголовокФормы = НСтр("ru = 'Реестр документов ""Поступление наличных""'");
КомандаПечати.Обработчик     = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечатиРеестраДокументов";
КомандаПечати.СписокФорм     = "ФормаСписка,Обработка.ПеренумерацияДокументов.Форма.Форма";
КомандаПечати.Порядок        = 100;

КонецПроцедуры

// Определяет коды счетов дебета и кредита для вывода в печатную форму.
Функция ОпределитьКодыСчетСубсчет(ВалютаРегламентированногоУчета, Шапка)

ЕстьРасчетыСКонтрагентами = УчетДенежныхСредствКлиентСервер.ЕстьРасчетыСКонтрагентами(Шапка.ВидОперации);
ЕстьРасчетыПоКредитам     = УчетДенежныхСредствКлиентСервер.ЕстьРасчетыПоКредитам(Шапка.ВидОперации);

КодыСчетов   = Новый Структура("Дебет, Кредит");

// Определяем код счета дебета
КассаВВалюте = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(Шапка.СчетКасса).Валютный;
ВалютаРег    = ВалютаРегламентированногоУчета;

СчетДт = Шапка.СчетКасса;
КодыСчетов.Дебет = СчетДт;

Если Шапка.ВидОперации = Перечисления.ВидыОперацийПКО.ВозвратОтПодотчетногоЛица Тогда
Если КассаВВалюте Тогда
СтрокаКредит = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицамиВал).Код;
Иначе
СтрокаКредит = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами).Код;
КонецЕсли;
ИначеЕсли Шапка.ВидОперации = Перечисления.ВидыОперацийПКО.ПрочийПриход Тогда
СтрокаКредит = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(Шапка.СчетУчетаРасчетовСКонтрагентом).Код;
ИначеЕсли Шапка.ВидОперации = Перечисления.ВидыОперацийПКО.ПолучениеНаличныхВБанке Тогда
СтрокаКредит = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(Шапка.СчетУчетаРасчетовСКонтрагентом).Код;
ИначеЕсли Шапка.ВидОперации = Перечисления.ВидыОперацийПКО.РозничнаяВыручка Тогда
СтрокаКредит = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(Шапка.СчетУчетаРасчетовСКонтрагентом).Код;
ИначеЕсли Шапка.ВидОперации = Перечисления.ВидыОперацийПКО.ВозвратЗаймаРаботником Тогда
СтрокаКредит = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(ПланыСчетов.Хозрасчетный.РасчетыПоПредоставленнымЗаймам).Код;
ИначеЕсли Шапка.ВидОперации = Перечисления.ВидыОперацийПКО.ЛичныеСредстваПредпринимателя Тогда
СтрокаКредит = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(ПланыСчетов.Хозрасчетный.ПрибыльПодлежащаяРаспределению).Код;
ИначеЕсли ЕстьРасчетыСКонтрагентами ИЛИ ЕстьРасчетыПоКредитам Тогда
ТабСчет = Шапка.РасшифровкаПлатежа.Выгрузить();
ТабСчет.Свернуть("СчетУчетаРасчетовСКонтрагентом, СчетУчетаРасчетовПоАвансам", "СуммаПлатежа");
СтрокаКредит = "";
Для каждого Строка Из ТабСчет Цикл
СчетУчетаРасчетовСКонтрагентомКод = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(Строка.СчетУчетаРасчетовСКонтрагентом).Код;
СчетУчетаРасчетовПоАвансамКод     = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(Строка.СчетУчетаРасчетовПоАвансам).Код;
Если НЕ Строка.СчетУчетаРасчетовСКонтрагентом.Пустая()
И СтрНайти(СтрокаКредит, СчетУчетаРасчетовСКонтрагентомКод) = 0 Тогда
СтрокаКредит = СтрокаКредит + ", " + СчетУчетаРасчетовСКонтрагентомКод;
КонецЕсли;
Если НЕ Строка.СчетУчетаРасчетовПоАвансам.Пустая()
И СтрНайти(СтрокаКредит, СчетУчетаРасчетовПоАвансамКод) = 0 Тогда
СтрокаКредит = СтрокаКредит + ", " + СчетУчетаРасчетовПоАвансамКод;
КонецЕсли;
КонецЦикла;

СтрокаКредит = Сред(СтрокаКредит, 2);
КонецЕсли;

КодыСчетов.Кредит = СтрокаКредит;

Возврат КодыСчетов;

КонецФункции

Функция РубКоп(Сумма)

Руб = Цел(Сумма);
Коп = Окр(100 *(Сумма - Руб), 0, 1);
СуммаРубКоп = "" + Руб + " руб. " + Цел(Коп / 10) + (Коп - 10 * Цел(Коп / 10)) + " коп.";

Возврат СуммаРубКоп;

КонецФункции

// Формирует и возвращает текст запроса для выборки данных,
// необходимых для формирования печатной формы
//

//"пользовательская функция" Попытка вычислить КредитСчет для подстановки в форму
// запрос на добавлениеСчета
Функция СчетКт()
ТекстЗапроса =
"ВЫБРАТЬ
| ХозрасчетныйОборотыДтКт.СчетКт,
| ХозрасчетныйОборотыДтКт.СубконтоКт3,
| ХозрасчетныйОборотыДтКт.Регистратор
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Авто, , , , , ) КАК ХозрасчетныйОборотыДтКт
|ГДЕ
| &СубконтоКт3 = ЗНАЧЕНИЕ(ПриходныйКассовыйОрдер.СубконтоКт3)
| ХозрасчетныйОборотыДтКт.СчетКт = &СчетКт
|   
|   
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОборотыДтКт.ПериодСекунда,
| ХозрасчетныйОборотыДтКт.СчетКт,
| ХозрасчетныйОборотыДтКт.СубконтоКт3,
| ХозрасчетныйОборотыДтКт.Регистратор";
Возврат ТекстЗапроса


КонецФункции


Функция ПолучитьТекстЗапросаДляФормированияПечатнойФормыПКО()

ТекстЗапроса =
"ВЫБРАТЬ
| ПриходныйКассовыйОрдер.Номер,
| ПриходныйКассовыйОрдер.Дата КАК ДатаДокумента,
| ПриходныйКассовыйОрдер.Ссылка,
| ПриходныйКассовыйОрдер.Организация,
| ПриходныйКассовыйОрдер.СчетКасса,
| ПриходныйКассовыйОрдер.СчетУчетаРасчетовСКонтрагентом,
| ПриходныйКассовыйОрдер.Контрагент,
| ПриходныйКассовыйОрдер.ВидОперации,
| ПриходныйКассовыйОрдер.Контрагент.Представление КАК Контрагент,
| ПриходныйКассовыйОрдер.ПринятоОт КАК ПринятоОт,
| ПриходныйКассовыйОрдер.Основание КАК Основание,
| ПриходныйКассовыйОрдер.Приложение КАК Приложение,
| ПриходныйКассовыйОрдер.СуммаДокумента КАК Сумма,
| ПриходныйКассовыйОрдер.ВалютаДокумента,
| ПриходныйКассовыйОрдер.ВалютаДокумента.Представление КАК ВалютаПредставление,
| ПриходныйКассовыйОрдер.ПодразделениеОрганизации,
| ВЫБОР
| КОГДА ПриходныйКассовыйОрдер.ПодразделениеОрганизации.НаименованиеПолное ПОДОБНО """"
| ТОГДА ПриходныйКассовыйОрдер.ПодразделениеОрганизации.Наименование
| ИНАЧЕ ПриходныйКассовыйОрдер.ПодразделениеОрганизации.НаименованиеПолное
| КОНЕЦ КАК ПредставлениеПодразделения,
| ПриходныйКассовыйОрдер.СтавкаНДС,
| ПриходныйКассовыйОрдер.РасшифровкаПлатежа.(
| Ссылка,
| НомерСтроки,
| ДоговорКонтрагента,
| Сделка,
| КурсВзаиморасчетов,
| СуммаПлатежа,
| КратностьВзаиморасчетов,
| СуммаВзаиморасчетов,
| СтавкаНДС,
| СуммаНДС,
| СтатьяДвиженияДенежныхСредств,
| СчетУчетаРасчетовСКонтрагентом,
| СчетУчетаРасчетовПоАвансам,
| СчетНаОплату,
| СпособПогашенияЗадолженности
| )
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|ГДЕ
| ПриходныйКассовыйОрдер.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| ПриходныйКассовыйОрдер.Дата,
| ПриходныйКассовыйОрдер.Ссылка,
| ПриходныйКассовыйОрдер.РасшифровкаПлатежа.НомерСтроки";

Возврат ТекстЗапроса;

КонецФункции

// Функция формирует табличный документ с печатной формой ПКО
//
// Возвращаемое значение:
//  Табличный документ - печатная форма
//
Функция ПечатьПКО(МассивОбъектов, ОбъектыПечати)
Перем ПодразделениеОтветственныхЛиц;

УстановитьПривилегированныйРежим(Истина);

ВалютаРегламентированногоУчета = ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета();

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриходныйКассовыйОрдер_КО1";

Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_КО1");

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыПКО();

// Введенно пользователем начало
 
ЗапросКт = Новый Запрос();
//ЗапросКт.УстановитьПараметр("СубконтоКт3", СубконтоКт3);
Массив = Новый Массив;
Массив.Добавить("62.01");
Массив.Добавить("62.02");
ЗапросКт.УстановитьПараметр("СчетКт", Массив);
ЗапросКт.Текст = СчетКт();
КредитШапка = ЗапросКт.Выполнить().Выбрать();

//Введено пользователем конец

Шапка = Запрос.Выполнить().Выбрать();

ПервыйДокумент = Истина;
Пока Шапка.Следующий() Цикл

Если НЕ ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

ПервыйДокумент = Ложь;
// Запомним номер строки, с которой начали выводить текущий документ.
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

ЕстьРасчетыСКонтрагентами = УчетДенежныхСредствКлиентСервер.ЕстьРасчетыСКонтрагентами(Шапка.ВидОперации);
ЕстьРасчетыПоКредитам     = УчетДенежныхСредствКлиентСервер.ЕстьРасчетыПоКредитам(Шапка.ВидОперации);

Валютный = Шапка.ВалютаДокумента <> ВалютаРегламентированногоУчета;

// Выводим шапку ПКО
СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента);

ОбластьМакета = Макет.ПолучитьОбласть("Шапка");

ОбластьМакета.Параметры.Заполнить(Шапка);
ОбластьМакета.Параметры.ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");

ОбластьМакета.Параметры.СуммаРубКоп       = ?(Валютный, Формат(Шапка.Сумма, "ЧЦ=15; ЧДЦ=2") + " " + СокрЛП(Шапка.ВалютаДокумента), РубКоп(Шапка.Сумма));
ОбластьМакета.Параметры.Сумма             = Формат(Шапка.Сумма, "ЧЦ=15; ЧДЦ=2") + ?(Валютный, " " + СокрЛП(Шапка.ВалютаДокумента), "");
ОбластьМакета.Параметры.СуммаПрописью     = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(Шапка.Сумма, Шапка.ВалютаДокумента);

ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО;
ОбластьМакета.Параметры.ДатаДокумента     = Шапка.ДатаДокумента;
ОбластьМакета.Параметры.НомерДокумента    = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Шапка.Номер, Истина, Ложь);

КодыСчетСубсчет = ОпределитьКодыСчетСубсчет(ВалютаРегламентированногоУчета, Шапка);

ОбластьМакета.Параметры.КодДебета = КодыСчетСубсчет.Дебет;

//Если КодыСчетСубсчет.Кредит = " 62.01, 62.02" ИЛИ " 62.02, 62.02"  Тогда
// КодыСчетСубсчет.Кредит = "62.02";
//Иначе
// КодыСчетСубсчет.Кредит = "62.01";
// КонецЕсли;

ОбластьМакета.Параметры.СубСчет  = КредитШапка.СчетКт;
       //ОбластьМакета.Параметры.СубСчет  = Шапка.СчетУчетаРасчетовСКонтрагентом;

       
//ЕСЛИ НЕ Шапка.СчетУчетаРасчетовСКонтрагентом = NULL     Тогда
//Иначе
// ОбластьМакета.Параметры.СубСчет  = КодыСчетСубсчет.Кредит  ;

   //КонецЕсли;

//ОбластьМакета.Параметры.СубСчет   = КодыСчетСубсчет.Кредит;

ТабНДС = Шапка.РасшифровкаПлатежа.Выгрузить();
ТабНДС.Свернуть("СтавкаНДС", "СуммаНДС");

ТекстСуммаНДС = "";

Если ЕстьРасчетыСКонтрагентами ИЛИ ЕстьРасчетыПоКредитам
ИЛИ Шапка.ВидОперации = Перечисления.ВидыОперацийПКО.РозничнаяВыручка Тогда

Для каждого СтрокаНДС Из ТабНДС Цикл
ТекстСуммаНДС = ТекстСуммаНДС + Символы.ПС + "НДС ("
+ ?(НЕ ЗначениеЗаполнено(СтрокаНДС.СтавкаНДС), "без налога", СтрокаНДС.СтавкаНДС) + ") "
+ Формат(СтрокаНДС.СуммаНДС, "ЧЦ=15;ЧДЦ=2;ЧРД=-;ЧН=0-00") + " " + Шапка.ВалютаПредставление;
КонецЦикла;

Иначе
ТекстСуммаНДС = ТекстСуммаНДС + Символы.ПС + "НДС (без налога) "
+ Формат(0, "ЧЦ=15;ЧДЦ=2;ЧРД=-;ЧН=0-00") + " " + Шапка.ВалютаПредставление;
КонецЕсли;

ТекстСуммаНДС = Сред(ТекстСуммаНДС, 2);

ОбластьМакета.Параметры.ВТомЧисле = ТекстСуммаНДС;

ПодразделениеОтветственныхЛиц = Шапка.ПодразделениеОрганизации;

ОтветственныеЛица = ОтветственныеЛицаБП.ОтветственныеЛица(Шапка.Организация, Шапка.ДатаДокумента, ПодразделениеОтветственныхЛиц);

ОбластьМакета.Параметры.ФИОГлавногоБухгалтера = ОтветственныеЛица.ГлавныйБухгалтерПредставление;
ОбластьМакета.Параметры.ФИОКассира            = ОтветственныеЛица.КассирПредставление;

ОбластьМакета.Параметры.ПринятоОт  = Шапка.ПринятоОт;
ОбластьМакета.Параметры.Основание  = Шапка.Основание;
ОбластьМакета.Параметры.Приложение = Шапка.Приложение;

ТабличныйДокумент.Вывести(ОбластьМакета);

// В табличном документе зададим имя области, в которую был
// выведен объект. Нужно для возможности печати покомплектно.
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);

КонецЦикла;

Возврат ТабличныйДокумент;

КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

// Проверяем, нужно ли для макета ПКО формировать табличный документ.

// Формируем табличный документ и добавляем его в коллекцию печатных форм.
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
"ПриходныйКассовыйОрдер_КО1", "ПриходныйКассовыйОрдер_КО1", ПечатьПКО(МассивОбъектов, ОбъектыПечати));


ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);

КонецПроцедуры

Функция ПолучитьДополнительныеРеквизитыДляРеестра() Экспорт
Результат = Новый Структура("Информация", "Контрагент");

Возврат Результат;

КонецФункции

//часть2




Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск