Создание внешней печатной формы ПКО Бухгалтерия 3.0 с доработкой поля "корреспондирующий счет,субсчет".
Доброе время суток, делаю тренировочное задание суть которого заключается в том что бы создать внешнюю печатную форму Приходного кассового ордера и доработать в ней поле "корреспондирующий счет,субсчет" так чтобы в нем отображалась проводка по кредиту документа "Поступление наличных", проблема заключается в том что я не могу понять как эту проводку "взять", думаю что наверняка нужно создать какой-нибудь запрос к регистру бухгалтерии, прошу подсказать в каком направлении копать, буду рад любой полезной информации.
Функция ПолучитьТекстЗапросаДляФормированияПечатнойФормыПКО()
ТекстЗапроса =
"ВЫБРАТЬ
| ПриходныйКассовыйОрдер.Номер,
| ПриходныйКассовыйОрдер.Дата КАК ДатаДокумента,
| ПриходныйКассовыйОрдер.Ссылка,
| ПриходныйКассовыйОрдер.Организация,
| ПриходныйКассовыйОрдер.СчетКасса,
| ПриходныйКассовыйОрдер.СчетУчетаРасчетовСКонтрагентом,
| ПриходныйКассовыйОрдер.Контрагент,
| ПриходныйКассовыйОрдер.ВидОперации,
| ПриходныйКассовыйОрдер.Контрагент.Представление КАК Контрагент,
| ПриходныйКассовыйОрдер.ПринятоОт КАК ПринятоОт,
| ПриходныйКассовыйОрдер.Основание КАК Основание,
| ПриходныйКассовыйОрдер.Приложение КАК Приложение,
| ПриходныйКассовыйОрдер.СуммаДокумента КАК Сумма,
| ПриходныйКассовыйОрдер.ВалютаДокумента,
| ПриходныйКассовыйОрдер.ВалютаДокумента.Представление КАК ВалютаПредставление,
| ПриходныйКассовыйОрдер.ПодразделениеОрганизации,
| ВЫБОР
| КОГДА ПриходныйКассовыйОрдер.ПодразделениеОрганизации.НаименованиеПолное ПОДОБНО """"
| ТОГДА ПриходныйКассовыйОрдер.ПодразделениеОрганизации.Наименование
| ИНАЧЕ ПриходныйКассовыйОрдер.ПодразделениеОрганизации.НаименованиеПолное
| КОНЕЦ КАК ПредставлениеПодразделения,
| ПриходныйКассовыйОрдер.СтавкаНДС,
| ПриходныйКассовыйОрдер.РасшифровкаПлатежа.(
| Ссылка,
| НомерСтроки,
| ДоговорКонтрагента,
| Сделка,
| КурсВзаиморасчетов,
| СуммаПлатежа,
| КратностьВзаиморасчетов,
| СуммаВзаиморасчетов,
| СтавкаНДС,
| СуммаНДС,
| СтатьяДвиженияДенежныхСредств,
| СчетУчетаРасчетовСКонтрагентом,
| СчетУчетаРасчетовПоАвансам,
| СчетНаОплату,
| СпособПогашенияЗадолженности
| )
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|ГДЕ
| ПриходныйКассовыйОрдер.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| ПриходныйКассовыйОрдер.Дата,
| ПриходныйКассовыйОрдер.Ссылка,
| ПриходныйКассовыйОрдер.РасшифровкаПлатежа.НомерСтроки";
Возврат ТекстЗапроса;
КонецФункции
// Функция формирует табличный документ с печатной формой ПКО
//
// Возвращаемое значение:
// Табличный документ - печатная форма
//
Функция ПечатьПКО(МассивОбъектов, ОбъектыПечати)
Перем ПодразделениеОтветственныхЛиц;
УстановитьПривилегированныйРежим(Истина);
ВалютаРегламентированногоУчета = ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета();
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПриходныйКассовыйОрдер_КО1";
Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_КО1");
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыПКО();
// Введенно пользователем начало
//
//ЗапросКт = Новый Запрос();
//ЗапросКт.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
//ЗапросКт.Текст = ЗапросКредит();
//КредитШапка = ЗапросКт.Выполнить().Выбрать();
//Введено пользователем конец
Шапка = Запрос.Выполнить().Выбрать();
ПервыйДокумент = Истина;
Пока Шапка.Следующий() Цикл
Если НЕ ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
// Запомним номер строки, с которой начали выводить текущий документ.
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 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", ПечатьПКО(МассивОбъектов, ОбъектыПечати));
ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Добрый день!
1) Этот запрос писали вы или он типовой?
2) Счёта Кт может быть два в одном документе. И 62.01 и 62.02, как тогда выводить строки? По строкам счёт и их суммы или одной строкой и общую сумму в ней?
3) Если задача только в том, что вы описали, то вы можете без обращения в документу в запросе сразу брать виртуальную таблицу Регистры бухгалтерии "Хозрасчетный.ОборотыДтКт". В параметрах виртуальной таблицы указывать УсловияСчётаКт (62.01 и 62.02 (Массивом)) и Условия (СубконтоКт3 = Ссылке на приходник). Этого должно быть достаточно (ещё можно указать Периодичность = Авто, там же в параметрах) (Скрин). И в регистре все данные для печати, вроде, есть.
1) Этот запрос писали вы или он типовой?
2) Счёта Кт может быть два в одном документе. И 62.01 и 62.02, как тогда выводить строки? По строкам счёт и их суммы или одной строкой и общую сумму в ней?
3) Если задача только в том, что вы описали, то вы можете без обращения в документу в запросе сразу брать виртуальную таблицу Регистры бухгалтерии "Хозрасчетный.ОборотыДтКт". В параметрах виртуальной таблицы указывать УсловияСчётаКт (62.01 и 62.02 (Массивом)) и Условия (СубконтоКт3 = Ссылке на приходник). Этого должно быть достаточно (ещё можно указать Периодичность = Авто, там же в параметрах) (Скрин). И в регистре все данные для печати, вроде, есть.
Прикрепленные файлы:
Пока к сожалению ничего не вышло, вот что сделал добавил новый запрос и через него пытаюсь найти поле.
Функция СчетКт()
ТекстЗапроса =
"ВЫБРАТЬ
| ХозрасчетныйОборотыДтКт.СчетКт,
| ХозрасчетныйОборотыДтКт.СубконтоКт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";
// КонецЕсли;
ОбластьМакета.Параметры.СубСчет = КредитШапка.СчетКт;
Показать
(4) Цикл сами заполните, надеюсь. Когда в запросе обращаетесь в параметру Массива и т.п. пишите "В (...)". Посмотрите куры Чистова по запросам, очень доходчиво. Я с них начинал. И можете пробовать пользоваться консолью запросов, в гугле их море.
Счета в регистре, да и почти везде хранятся НЕ как ТИП Строка ("62.01"...), а как ссылка на объект ПланыСчетов.Хозрасчетный...
Я в предыдущем сообщение ошибся, МассивОбъектов, что вы печатаете надо приравнивать к регистратору, а не к СубконтоКт3. Третий субконто счетов 62.01 и 62.02 - это партия. Партия может быть как Приходник денег (в случае аванса 62.02), так и документ реализации товаров (если 62.01 оплата закрывает долг покупателя НЕ авансом).
Счета в регистре, да и почти везде хранятся НЕ как ТИП Строка ("62.01"...), а как ссылка на объект ПланыСчетов.Хозрасчетный...
Я в предыдущем сообщение ошибся, МассивОбъектов, что вы печатаете надо приравнивать к регистратору, а не к СубконтоКт3. Третий субконто счетов 62.01 и 62.02 - это партия. Партия может быть как Приходник денег (в случае аванса 62.02), так и документ реализации товаров (если 62.01 оплата закрывает долг покупателя НЕ авансом).
Функция ПечатьПКО(МассивОбъектов, ОбъектыПечати)
Запрос = Новый Запрос;
Запрос.Текст = ПолучитьТекстЗапроса();
Массив62 = Новый Массив;
Массив62.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателями); // 62.01
Массив62.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным); // 62.02
Запрос.УстановитьПараметр("Массив62", Массив62);
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
РезультатЗапроса = Запрос.Выполнить();
Шапка = РезультатЗапроса.Выбрать();
Пока Шапка.Следующий() Цикл
// к примеру у вас 2а документа, в одном СчётКт = 62.02, во втором 62.01 и 62.02
// При выполение запроса получим три строки
// Обойдите в цикле, но не забывайте про мой 2й вопрос и берите НЕ сумму документа, а СуммаОборот из запроса
// т.к. во втором документе сумма документа может = 10 руб., а по запросу и проводкам на 62.01 = 4 руб. | на 62.02 = 6 руб.
КонецЦикла;
КонецФункции // ПечатьПКО()
Функция ПолучитьТекстЗапроса()
Текст =
"ВЫБРАТЬ
| ХозрасчетныйОборотыДтКт.Регистратор КАК Регистратор,
| ХозрасчетныйОборотыДтКт.СубконтоКт3 КАК ДокументПартии,
| ХозрасчетныйОборотыДтКт.СчетКт КАК СчетКт,
| СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот) КАК СуммаОборот
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(, , Авто, , , СчетКт В (&Массив62), , ) КАК ХозрасчетныйОборотыДтКт
|ГДЕ
| ХозрасчетныйОборотыДтКт.Регистратор В(&МассивОбъектов)
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйОборотыДтКт.СчетКт,
| ХозрасчетныйОборотыДтКт.Регистратор,
| ХозрасчетныйОборотыДтКт.СубконтоКт3";
Возврат Текст;
КонецФункции // ПолучитьТекстЗапроса()
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот