Как написать программно, чтобы цена выводилась в таблице при формировании отчета?
07.03.2012
07:28
#1
"Имеется отчет, при его формировании выводится таблица с ФИО пациента, Процедурами которые он прошел, Количество процедур, Цена и Стоимость.
ФИО, Наименования процедур и их Количество выводится в таблице, теперь нужно добавить графы Цена и Стоимость. Цена должна выводиться из справочника Тариф, ну а Стоимость - из произведения Цены и Количества. Прикрепляю скрины... помогите пожалуйста...
Т = СоздатьОбъект("Таблица");
тзПроцедуры = СоздатьОбъект("ТаблицаЗначений");
тзПроцедуры.НоваяКолонка("Контрагент");
тзПроцедуры.НоваяКолонка("ФИО");
тзПроцедуры.НоваяКолонка("Цена", "Число");
СпрТарифы.ВыбратьЭлементы();
Пока СпрТарифы.ПолучитьЭлемент() = 1 Цикл
Колонка = "к" + СокрЛП(СпрТарифы.Код);
тзПроцедуры.НоваяКолонка(Колонка, "Число");
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
Док = СоздатьОбъект("Документ.СтатКартаПациента");
Если ПустоеЗначение(Контрагент) = 1 Тогда
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
//Сообщить(Док.НомерДок);
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
Иначе
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Авиакомпания <> Контрагент Тогда
Продолжить;
КонецЕсли;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
КонецЕсли;
//Сообщить(тзПроцедуры.КоличествоКолонок());
// формируем список колонок для свертки *************************************************************
//тзПроцедуры.Выгрузить(ТТТ);
СписокКолонок = "Цена";
Для а = 4 По тзПроцедуры.КоличествоКолонок() - 3 Цикл
СписокКолонок = СписокКолонок + "," + СокрЛП(а);
КонецЦикла;
тзПроцедуры.Свернуть("ФИО,Контрагент", СписокКолонок);
тзПроцедуры.Сортировать("Контрагент,ФИО");
//тзПроцедуры.Выгрузить(ТТТ);
// удаляем лишние колонки без итогов
а=4;
Пока а <= тзПроцедуры.КоличествоКолонок() Цикл
Если тзПроцедуры.Итог(а) = 0 Тогда
тзПроцедуры.УдалитьКолонку(а); //удаляем строку, но "а" не увеличиваем, т.к. следующая строка у нас и есть "а"
Иначе
а = а + 1; //увеличиваем а (для перехода на след. строку)
КонецЕсли;
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
// выводим на печать ********************************************************************************
// шапка
Т.ВывестиСекцию("Шапка|ФИО");
Т.ПрисоединитьСекцию("Шапка|Контрагент");
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
КодПроцедуры = тзПроцедуры.ПолучитьПараметрыКолонки(а);
КодПроцедуры = Прав(КодПроцедуры, 6);
СпрТарифы.НайтиПоКоду(КодПроцедуры);
КодПроцедуры = СпрТарифы.ТекущийЭлемент().ПолноеНаименование;
СпрТарифы.НайтиПоКоду(КодПроцедуры);
Цена = СпрТарифы.ТекущийЭлемент().Цена;
//Итог = тзПроцедуры.Итог(а);
//Если Итог <> 0 Тогда
Т.ПрисоединитьСекцию("Шапка|Процедуры");
//КонецЕсли;
КонецЦикла;
Т.ПрисоединитьСекцию("Шапка|Цена");
Т.ПрисоединитьСекцию("Шапка|ИтогоПоПациенту");
// строки
тзПроцедуры.ВыбратьСтроки();
Пока тзПроцедуры.ПолучитьСтроку() = 1 Цикл
Т.ВывестиСекцию("Строка|ФИО");
Т.ПрисоединитьСекцию("Строка|Контрагент");
ИтогоПоПациенту = 0;
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
Посещения = тзПроцедуры.ПолучитьЗначение(тзПроцедуры.НомерСтроки, а);
Т.ПрисоединитьСекцию("Строка|Процедуры");
ИтогоПоПациенту = ИтогоПоПациенту + Посещения;
КонецЦикла;
Т.ПрисоединитьСекцию("Строка|Цена");
Т.ПрисоединитьСекцию("Строка|ИтогоПоПациенту");
КонецЦикла;
// подвал
Т.ВывестиСекцию("Подвал|ФИО");
Т.ПрисоединитьСекцию("Подвал|Контрагент");
//Т.ПрисоединитьСекцию("Шапка|Контрагент");
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
ИтогоПосещений = тзПроцедуры.Итог(а);
СпрПрейскурант.НайтиПоКоду(КодПроцедуры);
Цена = СпрПрейскурант.ТекущийЭлемент().Цена;
Цена = СпрПрейскурант.Цена.Получить();
Т.ПрисоединитьСекцию("Подвал|Процедуры");
КонецЦикла;
Т.ПрисоединитьСекцию("Подвал|Цена");
Т.ПрисоединитьСекцию("Подвал|ИтогоПоПациенту");
Т.Опции(0);
Т.Показать();
КонецПроцедуры"
ФИО, Наименования процедур и их Количество выводится в таблице, теперь нужно добавить графы Цена и Стоимость. Цена должна выводиться из справочника Тариф, ну а Стоимость - из произведения Цены и Количества. Прикрепляю скрины... помогите пожалуйста...
Т = СоздатьОбъект("Таблица");
тзПроцедуры = СоздатьОбъект("ТаблицаЗначений");
тзПроцедуры.НоваяКолонка("Контрагент");
тзПроцедуры.НоваяКолонка("ФИО");
тзПроцедуры.НоваяКолонка("Цена", "Число");
СпрТарифы.ВыбратьЭлементы();
Пока СпрТарифы.ПолучитьЭлемент() = 1 Цикл
Колонка = "к" + СокрЛП(СпрТарифы.Код);
тзПроцедуры.НоваяКолонка(Колонка, "Число");
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
Док = СоздатьОбъект("Документ.СтатКартаПациента");
Если ПустоеЗначение(Контрагент) = 1 Тогда
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
//Сообщить(Док.НомерДок);
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
Иначе
Док.ВыбратьДокументы(НачДата, КонДата);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Авиакомпания <> Контрагент Тогда
Продолжить;
КонецЕсли;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если СокрЛП(Док.КодПроцедуры) = """" Тогда
Продолжить;
КонецЕсли;
тзПроцедуры.НоваяСтрока();
тзПроцедуры.ФИО = Док.Пациент;
тзПроцедуры.Контрагент = Док.Авиакомпания;
тзПроцедуры.Цена = Док.Цена;
КодПроцедуры = СокрЛП(Док.КодПроцедуры.Код);
//Сообщить(КодПроцедуры);
тзПроцедуры.УстановитьЗначение(тзПроцедуры.НомерСтроки, "к" + СокрЛП(КодПроцедуры), 1);
КонецЦикла;
КонецЦикла;
КонецЕсли;
//Сообщить(тзПроцедуры.КоличествоКолонок());
// формируем список колонок для свертки *************************************************************
//тзПроцедуры.Выгрузить(ТТТ);
СписокКолонок = "Цена";
Для а = 4 По тзПроцедуры.КоличествоКолонок() - 3 Цикл
СписокКолонок = СписокКолонок + "," + СокрЛП(а);
КонецЦикла;
тзПроцедуры.Свернуть("ФИО,Контрагент", СписокКолонок);
тзПроцедуры.Сортировать("Контрагент,ФИО");
//тзПроцедуры.Выгрузить(ТТТ);
// удаляем лишние колонки без итогов
а=4;
Пока а <= тзПроцедуры.КоличествоКолонок() Цикл
Если тзПроцедуры.Итог(а) = 0 Тогда
тзПроцедуры.УдалитьКолонку(а); //удаляем строку, но "а" не увеличиваем, т.к. следующая строка у нас и есть "а"
Иначе
а = а + 1; //увеличиваем а (для перехода на след. строку)
КонецЕсли;
КонецЦикла;
//тзПроцедуры.Выгрузить(ТТТ);
// выводим на печать ********************************************************************************
// шапка
Т.ВывестиСекцию("Шапка|ФИО");
Т.ПрисоединитьСекцию("Шапка|Контрагент");
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
КодПроцедуры = тзПроцедуры.ПолучитьПараметрыКолонки(а);
КодПроцедуры = Прав(КодПроцедуры, 6);
СпрТарифы.НайтиПоКоду(КодПроцедуры);
КодПроцедуры = СпрТарифы.ТекущийЭлемент().ПолноеНаименование;
СпрТарифы.НайтиПоКоду(КодПроцедуры);
Цена = СпрТарифы.ТекущийЭлемент().Цена;
//Итог = тзПроцедуры.Итог(а);
//Если Итог <> 0 Тогда
Т.ПрисоединитьСекцию("Шапка|Процедуры");
//КонецЕсли;
КонецЦикла;
Т.ПрисоединитьСекцию("Шапка|Цена");
Т.ПрисоединитьСекцию("Шапка|ИтогоПоПациенту");
// строки
тзПроцедуры.ВыбратьСтроки();
Пока тзПроцедуры.ПолучитьСтроку() = 1 Цикл
Т.ВывестиСекцию("Строка|ФИО");
Т.ПрисоединитьСекцию("Строка|Контрагент");
ИтогоПоПациенту = 0;
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
Посещения = тзПроцедуры.ПолучитьЗначение(тзПроцедуры.НомерСтроки, а);
Т.ПрисоединитьСекцию("Строка|Процедуры");
ИтогоПоПациенту = ИтогоПоПациенту + Посещения;
КонецЦикла;
Т.ПрисоединитьСекцию("Строка|Цена");
Т.ПрисоединитьСекцию("Строка|ИтогоПоПациенту");
КонецЦикла;
// подвал
Т.ВывестиСекцию("Подвал|ФИО");
Т.ПрисоединитьСекцию("Подвал|Контрагент");
//Т.ПрисоединитьСекцию("Шапка|Контрагент");
Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
ИтогоПосещений = тзПроцедуры.Итог(а);
СпрПрейскурант.НайтиПоКоду(КодПроцедуры);
Цена = СпрПрейскурант.ТекущийЭлемент().Цена;
Цена = СпрПрейскурант.Цена.Получить();
Т.ПрисоединитьСекцию("Подвал|Процедуры");
КонецЦикла;
Т.ПрисоединитьСекцию("Подвал|Цена");
Т.ПрисоединитьСекцию("Подвал|ИтогоПоПациенту");
Т.Опции(0);
Т.Показать();
КонецПроцедуры"
07.03.2012
09:44
#3
там нет ошибки, ошибка в программе... да я заметила, там не определена переменная ЦенаПроцедуры, а в макете Цена... я меняла названия, скрины просто разные по дате, но я все исправила, и все равно строка Цена у меня пустует(( вы праверьте пожалуйста, правильно ли я написала в конфигурации программу... может забыла что то?
07.03.2012
10:18
#4
Я не вижу в Вашей программе ничего с ЦенаПроцедуры.
Сохраните. Закройте. Откройте и еще раз пройтитесь с отладчиком.
Сохраните. Закройте. Откройте и еще раз пройтитесь с отладчиком.
07.03.2012
10:20
#5
вместо ЦенаПроцедуры, у меня сейчас стоит Цена... и в макете таблицы я все исправила
16.03.2012
14:01
#8
"По видимому, строки таблицы выводятся этим участком кода:
В нем не вижу, чтобы где-то была переменная "Цена", которая используется в макете. Видимо ее тут надо куда-то вставить."
// строки тзПроцедуры.ВыбратьСтроки(); Пока тзПроцедуры.ПолучитьСтроку() = 1 Цикл Т.ВывестиСекцию("Строка|ФИО"); Т.ПрисоединитьСекцию("Строка|Контрагент"); ИтогоПоПациенту = 0; Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл Посещения = тзПроцедуры.ПолучитьЗначение(тзПроцедуры.НомерСтроки, а); Т.ПрисоединитьСекцию("Строка|Процедуры"); ИтогоПоПациенту = ИтогоПоПациенту + Посещения; КонецЦикла; Т.ПрисоединитьСекцию("Строка|Цена"); Т.ПрисоединитьСекцию("Строка|ИтогоПоПациенту"); КонецЦикла;В нем не вижу, чтобы где-то была переменная "Цена", которая используется в макете. Видимо ее тут надо куда-то вставить."
16.03.2012
14:06
#9
спасибо большое за подсказку, с этим я уже разобралась и сдала этот отчет))) все равно спасибо что уделили время на просмотр кода!
16.03.2012
14:23
#10
"Для а = 4 По тзПроцедуры.КоличествоКолонок() Цикл
ИтогоПосещений = тзПроцедуры.Итог(а);
КодПроцедуры = тзПроцедуры.ПолучитьПараметрыКолонки(а);
КодПрейскуранта = Сред(КодПроцедуры, 2, 1);
КодПроцедуры = Прав(КодПроцедуры, 6);
СпрПрейскурант.НайтиПоКоду(КодПрейскуранта);
СпрТарифы.ИспользоватьВладельца(СпрПрейскурант.ТекущийЭлемент());
СпрТарифы.НайтиПоКоду(КодПроцедуры);
Цена =СпрТарифы.Цена.получить(НачДата);
сумма = Цена*ИтогоПосещений;
Т.ПрисоединитьСекцию("Подвал|Процедуры");
ИтогоПосещений=0;
Цена=0;
КонецЦикла;
мне помогли, и Цену и Стоимость добавили, все работает отлично! спасибо!"
ИтогоПосещений = тзПроцедуры.Итог(а);
КодПроцедуры = тзПроцедуры.ПолучитьПараметрыКолонки(а);
КодПрейскуранта = Сред(КодПроцедуры, 2, 1);
КодПроцедуры = Прав(КодПроцедуры, 6);
СпрПрейскурант.НайтиПоКоду(КодПрейскуранта);
СпрТарифы.ИспользоватьВладельца(СпрПрейскурант.ТекущийЭлемент());
СпрТарифы.НайтиПоКоду(КодПроцедуры);
Цена =СпрТарифы.Цена.получить(НачДата);
сумма = Цена*ИтогоПосещений;
Т.ПрисоединитьСекцию("Подвал|Процедуры");
ИтогоПосещений=0;
Цена=0;
КонецЦикла;
мне помогли, и Цену и Стоимость добавили, все работает отлично! спасибо!"
Читают тему
(гостей: 1)