1С:Предприятие 7.7 для SQL (7.70.027)
Конфигурация:
"Бухгалтерский учет" для Украины (7.70.252)
Добрый день!
Давненько было задание сделать отчет по кассам расходные и приходные документы с сортировкой по кассе за период (сделано)
Поля в отчете:
№п/п
Дата
Документ
Касса
Сумма
Примечание
Теперь хотят, что бы добавил еще 4 поля
Остаток на начало периода, дебит, кредит, остаток на конец периода по каждой кассе.
Подскажите пожалуйста, где и как найти информацию, откуда ее выкатить??
Как должен выглядеть отчет
Спасибо
! | Правила, п.3,4,5 |
Ця задача для програміста, а не для користувача, а тема в розділі для користувачів.
По суті, копайте в сторону бух.запиту в синтакс-помічнику.
Спасибо, за перенос темы в правильное русло
Добавлю код, реализации журнала ПКО и РКО
Перем Флаг, i;
Перем Запрос, КодЗапроса;
Перем Таб;
Перем ТабП; //номер подпункта
Перем ТабД; //дата документа
Перем ТабДок; //документ
Перем ТабК; //касса
Перем ТабЦФО; //цфо
Перем ТабОДДС; //оддс
Перем ТабСумма; //сумма документа
Перем ТабПр; //примечание
Перем ОстНач;
Перем пДт;
Перем пКт;
Перем ОстКон;
Перем ПутьExcel;
Процедура ИмпортExcel()
//Таб.Записать(КаталогИБ()+"ExtForms\004m.xls", 1);
//Таб.Показать("Отчет",КаталогИБ()+"ExtForms\004m.xls");
ИмяВыбрФайла = "Журнал_"+ТекущаяДата()+".xls";
Если ФС.ВыбратьФайл(1, ИмяВыбрФайла, ПутьExcel, "Сохранить Excel документ", "Microsoft Excel (*.xls)|*.xls", , ) = 1 Тогда
Таб.Записать(ПутьExcel+ИмяВыбрФайла,1);
КонецЕсли;
КонецПроцедуры
Функция ПроверкаДаты();
Флаг = 0;
Если (Число(Дата1) = 0) или (Число(Дата2) = 0) или (Дата1 > Дата2) Тогда
Сообщить("Не правильно заполнен период","!");
Возврат Флаг;
Иначе
Флаг = 1;
Возврат Флаг
КонецЕсли;
КонецФункции
//*******************************************
Процедура Сформировать()
Если (ПроверкаДаты() = 1) Тогда //Начало проверки даты [001]
ТаблЗнач = СоздатьОбъект("ТаблицаЗначений");
ТаблЗнач.Очистить();
ТаблЗнач.НоваяКолонка("ТабП");
ТаблЗнач.НоваяКолонка("ТабД");
ТаблЗнач.НоваяКолонка("ТабДок");
ТаблЗнач.НоваяКолонка("ТабК");
ТаблЗнач.НоваяКолонка("ТабЦФО");
ТаблЗнач.НоваяКолонка("ТабОДДС");
ТаблЗнач.НоваяКолонка("ТабСумма");
ТаблЗнач.НоваяКолонка("ТабПр");
ТаблЗнач.НоваяКолонка("ОстНач");
ТаблЗнач.НоваяКолонка("пДт");
ТаблЗнач.НоваяКолонка("пКт");
ТаблЗнач.НоваяКолонка("ОстКон");
row=1; //первая строка
ДокПК = СоздатьОбъект("Документ.ПриходныйКассовый");
ДокПК.ВыбратьДокументы(Дата1,Дата2);
ДокПК.УстановитьФильтр(1,0);
Пока ДокПК.ПолучитьДокумент() = 1 Цикл
Если ДокПК.ПометкаУдаления() <> 0 Тогда Продолжить КонецЕсли;
ТаблЗнач.НоваяСтрока();
ТаблЗнач.ТабП = row;
ТаблЗнач.ТабД = СокрЛП(ДокПК.ДатаДок);
ТаблЗнач.ТабДок = СокрЛП(ДокПК.НомерДок);
ТаблЗнач.ТабК = СокрЛП(ДокПК.РСчет.Наименование);
ТаблЗнач.ТабЦФО = СокрЛП(ДокПК.ЦФО.Наименование);
ТаблЗнач.ТабОДДС = СокрЛП(ДокПК.ОДДС.Наименование);
ТаблЗнач.ТабСумма = СокрЛП(ДокПК.СуммаВал);
ТаблЗнач.ТабПр = СокрЛП(ДокПК.Примечание);
row=row+1;//переходим на следующую строку
КонецЦикла;
ДокРК = СоздатьОбъект("Документ.РасходныйКассовый");
ДокРК.ВыбратьДокументы(Дата1,Дата2);
ДокРК.УстановитьФильтр(1,0);
Пока ДокРК.ПолучитьДокумент() = 1 Цикл
Если ДокРК.ПометкаУдаления() <> 0 Тогда Продолжить КонецЕсли;
ТаблЗнач.НоваяСтрока();
ТаблЗнач.ТабП = row;
ТаблЗнач.ТабД = СокрЛП(ДокРК.ДатаДок);
ТаблЗнач.ТабДок = СокрЛП(ДокРК.НомерДок);
ТаблЗнач.ТабК = СокрЛП(ДокРК.РСчет.Наименование);
ТаблЗнач.ТабЦФО = СокрЛП(ДокРК.ЦФО.Наименование);
ТаблЗнач.ТабОДДС = СокрЛП(ДокРК.ОДДС.Наименование);
ТаблЗнач.ТабСумма = СокрЛП(ДокРК.СуммаВал);
ТаблЗнач.ТабПр = СокрЛП(ДокРК.Примечание);
row=row+1;//переходим на следующую строку
КонецЦикла;
ТаблЗнач.Сортировать("ТабК+, ТабД+, ТабДок+");
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("RU_Таблица");
Состояние("Заполнение выходной таблицы...");
Таб.ВывестиСекцию("ШапкаЗаголовки");
Для i=1 по ТаблЗнач.КоличествоСтрок() Цикл
ТаблЗнач.ПолучитьСтрокуПоНомеру(i);
ТабП = i;
ТабД = ТаблЗнач.ТабД;
ТабДок = ТаблЗнач.ТабДок;
ТабК = ТаблЗнач.ТабК;
ТабЦФО = ТаблЗнач.ТабЦФО;
ТабОДДС = ТаблЗнач.ТабОДДС;
ТабСумма = ТаблЗнач.ТабСумма;
ТабПр = ТаблЗнач.ТабПр;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.Показать("Журнал операций: ("+Дата1+"-"+Дата2+")");
КонецЕсли; //Конец проверки даты [001]
КонецПроцедуры
задача сформулирована как-то нетак-то.
у вас обычный журнал же с хронологией? т.е показаны пко и рко по введенным датам?
информацию которую у вас запрашивают, это сведенная уже информация....
Аааа... это они хотят видеть на сколько уменьшает увеличивает кассу каждый документ.
из того что уже есть, можно вычислить эти колонки прямо в тз. К сумме предыдущей строки добавлять/убавлять знач текущей, вычислять тек кон и нач остатки.
в тек строке присваиваете переменным ТекНачОст, ТекДеб, ТекКред, ТекКонОста значения тек строки после ВывестиСтроку()
в месте до ВывестиСтроку() - прибавляете к значениям нужных колонок значения ТекНачОст, ТекДеб, ТекКред, ТекКонОста.
это логическим путем из того , что уже в коде есть.
Но есть запросы по Бухглатерским итогам, есть обращения к Бухгалтерским итогам. Смотрите стандартные отчеты. Там в основном на итогах все построено.
т. к документы могут быть не проведены - это раз, значения реквизитов документов, и значения проводок этих документов могут быть различны - в теории.
поправлю себя же:
НачОстаток=КонОстаток предыдущей строки таблицы.
Дт - (это 30 счет), сумма ПКО
Кт - сумма РКО
КонОстаток=НачОстаток+Дт-Кт
НачОстаток первой строки таблицы, остаток начальный Дт по счету (30) по указанной кассе на дату документа(РКО,ПКО) первой строки таблицы.
т.е. мои действия:
1. Определяемся с периодом (НачДата, КонДата), задаем через форму
2. Определяемся с кассой по которой хотим посмотреть остаток на начало дня, конец дня, дебет и кредит
//задаем фирму
Фирма = глВосстановитьЗначение(,"БазФирма");
//задаем кассу
//но так как это пока для тестов, то укажу кассу в ручную
Касса = СоздатьОбъект("Справочник.НашиДенежныеСчета");
Касса.ИспользоватьВладельца(Фирма);
Касса.НайтиПоНаименованию("Касса Д2",0);
//забираем периоды с формы
НачДата = Дата1;
КонДата = Дата2;
//создаем объект бухгалтерские итоги
<tt>БухИт = СоздатьОбъект("БухгалтескиеИтоги");
БухИт.ИспользоватьазделительУчета(Фима);
БухИт.ВклчатьСубсчета(-1);
Сообщить(БухИт.СНД("С"));</tt>
механическая ошибка Фима вместо Фирма.
Кассу нужно взять из первой строки таблицы:
ТаблЗнач.ПолучитьСтрокуПоНомеру(1);
ПерваяКасса=ТаблЗнач.ТабК;
НачОстаток=БухИт.СНД("301","С",СсылкаНаПервуюКассу);
Спасибо, попробую отпишусь
ВыполнитьЗапрос(<НачалоПериода>,<КонецПериода>,<Счет>,<КоррСчет>,<Валюта>,<ТипИтогов>,<Периодичность>,<ТипСуммы>)
ВыбратьПериоды(<ФлагВсе>,<ФлагДК>,<Номер>,<РазвСальдо>)
ПолучитьПериод(<Номер>,<ДатаНачалаПериода>)
Добрый день!
Спасибо всем кто помогал, советовал... (я попутал Таблицу значений и просто таблицу)
Я конечно тормозил, тупил, но желаемый результат достигнут, может конечно эксперты скажут что достигнут топорным способом..
1. что нужно было получить? Журнал ПКО, РКО за период по кассам с остатками на начала и конец периода, а также дебит и кредит по этим кассам (рисунок)
2. Ну собственно что получилось:
Процедура Сформировать()
Если (ПроверкаДаты() = 1) Тогда //Начало проверки даты [001]
ТаблЗнач = СоздатьОбъект("ТаблицаЗначений");
ТаблЗнач.Очистить();
ТаблЗнач.НоваяКолонка("ТабП");
ТаблЗнач.НоваяКолонка("ТабД");
ТаблЗнач.НоваяКолонка("ТабДок");
ТаблЗнач.НоваяКолонка("ТабК");
ТаблЗнач.НоваяКолонка("ТабЦФО");
ТаблЗнач.НоваяКолонка("ТабОДДС");
ТаблЗнач.НоваяКолонка("ТабСумма");
ТаблЗнач.НоваяКолонка("ТабПр");
ТаблЗнач.НоваяКолонка("ОстНач");
ТаблЗнач.НоваяКолонка("пДт");
ТаблЗнач.НоваяКолонка("пКт");
ТаблЗнач.НоваяКолонка("ОстКон");
row=1; //первая строка
////После создания таблицы значений заполняем ее значениями из приходных документов (ПКО)
ДокПК = СоздатьОбъект("Документ.ПриходныйКассовый");
ДокПК.ВыбратьДокументы(Дата1,Дата2);
ДокПК.УстановитьФильтр(1,0);
Пока ДокПК.ПолучитьДокумент() = 1 Цикл
Если ДокПК.ПометкаУдаления() <> 0 Тогда Продолжить КонецЕсли;
ТаблЗнач.НоваяСтрока();
ТаблЗнач.ТабП = row;
ТаблЗнач.ТабД = СокрЛП(ДокПК.ДатаДок);
ТаблЗнач.ТабДок = СокрЛП(ДокПК.НомерДок);
ТаблЗнач.ТабК = СокрЛП(ДокПК.РСчет.Наименование);
ТаблЗнач.ТабЦФО = СокрЛП(ДокПК.ЦФО.Наименование);
ТаблЗнач.ТабОДДС = СокрЛП(ДокПК.ОДДС.Наименование);
ТаблЗнач.ТабСумма = СокрЛП(ДокПК.СуммаВал);
ТаблЗнач.ТабПр = СокрЛП(ДокПК.Примечание);
row=row+1;//переходим на следующую строку
КонецЦикла;
//дописываем в таблицу значений значениями расходных документов (РКО)
ДокРК = СоздатьОбъект("Документ.РасходныйКассовый");
ДокРК.ВыбратьДокументы(Дата1,Дата2);
ДокРК.УстановитьФильтр(1,0);
Пока ДокРК.ПолучитьДокумент() = 1 Цикл
Если ДокРК.ПометкаУдаления() <> 0 Тогда Продолжить КонецЕсли;
ТаблЗнач.НоваяСтрока();
ТаблЗнач.ТабП = row;
ТаблЗнач.ТабД = СокрЛП(ДокРК.ДатаДок);
ТаблЗнач.ТабДок = СокрЛП(ДокРК.НомерДок);
ТаблЗнач.ТабК = СокрЛП(ДокРК.РСчет.Наименование);
ТаблЗнач.ТабЦФО = СокрЛП(ДокРК.ЦФО.Наименование);
ТаблЗнач.ТабОДДС = СокрЛП(ДокРК.ОДДС.Наименование);
ТаблЗнач.ТабСумма = СокрЛП(ДокРК.СуммаВал);
ТаблЗнач.ТабПр = СокрЛП(ДокРК.Примечание);
row=row+1;//переходим на следующую строку
КонецЦикла;
//Сортируем по трем столбцам
ТаблЗнач.Сортировать("ТабК+, ТабД+, ТабДок+");
//Теперь заполняем последние столбцы, Дт, Кт, ОстатокНаНачало ОстатокНаКонец периода
Для i=1 по ТаблЗнач.КоличествоСтрок() Цикл
ТаблЗнач.ПолучитьСтрокуПоНомеру(i);
//проверяем Дебит И Кредит по файлам
//ПКО11 и РКО10
Если Лев(ТаблЗнач.ПолучитьЗначение(i,3),3) = "ПКО" Тогда
ТаблЗнач.УстановитьЗначение(i,11,ТаблЗнач.ТабСумма);
КонецЕсли;
Если Лев(ТаблЗнач.ПолучитьЗначение(i,3),3) = "РКО" Тогда
ТаблЗнач.УстановитьЗначение(i,10,ТаблЗнач.ТабСумма);
КонецЕсли;
Если i = 1 Тогда
ТаблЗнач.УстановитьЗначение(i,9,ВозвНачОстатка(ТаблЗнач.ТабК));
КонецЕсли;
Если i > 1 Тогда
Если ТаблЗнач.ТабК <> ТаблЗнач.ПолучитьЗначение(i-1,4) Тогда
ТаблЗнач.УстановитьЗначение(i,9,ВозвНачОстатка(ТаблЗнач.ТабК));
//прКО = прКО - ТаблЗнач.ПолучитьЗначение(i,10) + ТаблЗнач.ПолучитьЗначение(i,11);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для i=1 по ТаблЗнач.КоличествоСтрок() Цикл
ТаблЗнач.ПолучитьСтрокуПоНомеру(i);
Если i = ТаблЗнач.КоличествоСтрок() Тогда
//Если ТаблЗнач.ТабК <> ТаблЗнач.ПолучитьЗначение(i-1,4) Тогда
ТаблЗнач.УстановитьЗначение(i,12,ВозвКонОстатка(ТаблЗнач.ТабК));
//КонецЕсли;
КонецЕсли;
Если i < ТаблЗнач.КоличествоСтрок() Тогда
Если ТаблЗнач.ТабК <> ТаблЗнач.ПолучитьЗначение(i+1,4) Тогда
ТаблЗнач.УстановитьЗначение(i,12,ВозвКонОстатка(ТаблЗнач.ТабК));
//прКО = прКО - ТаблЗнач.ПолучитьЗначение(i,10) + ТаблЗнач.ПолучитьЗначение(i,11);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("RU_Таблица");
Состояние("Заполнение выходной таблицы...");
Таб.ВывестиСекцию("ШапкаЗаголовки");
Для i=1 по ТаблЗнач.КоличествоСтрок() Цикл
ТаблЗнач.ПолучитьСтрокуПоНомеру(i);
ТабП = i;
ТабД = ТаблЗнач.ТабД;
ТабДок = ТаблЗнач.ТабДок;
ТабК = ТаблЗнач.ТабК;
ТабЦФО = ТаблЗнач.ТабЦФО;
ТабОДДС = ТаблЗнач.ТабОДДС;
ТабСумма = ТаблЗнач.ТабСумма;
ТабПр = ТаблЗнач.ТабПр;
ОстНач = ТаблЗнач.ОстНач;
пДт = ТаблЗнач.пДт;
пКт = ТаблЗнач.пКт;
ОстКон = ТаблЗнач.ОстКон;
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.Показать("Журнал операций: ("+Дата1+"-"+Дата2+")");
КонецЕсли; //Конец проверки даты [001]
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua