Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

Как сделать сводную таблицу?

Cyril
читатель
офлайн
Дата регистрации: 06.08.2003
Сообщений: 79
Пост №1
 
30.07.2005 12:16

"Есть таблица значений со следующими колонками:<br><br>Должность, Подразделение, Количество<br><br>с записями:<br><br>Должность1;Подразделение1;Количество1;<br><br>Должность1;Подразделение2;Количество2;<br><br>Должность2;Подразделение1;Количество3;<br><br>Должность3;Подразделение2;Количество4;<br><br>и т.д.<br><br>Нужно сделать сводную таблицу:<br><br>-------------------------------------------------------------<br><br>|__________|Подразделен1|Подразделен2|Итого |<br><br>-------------------------------------------------------------<br><br>|Должность1| Количество1 | Количество2 |Итого1|<br><br>|Должность2| Количество3 |____________|Итого2|<br><br>|Должность3|____________| Количество4 |Итого3|<br><br>-------------------------------------------------------------<br><br>|__ИТОГО___|__ИТОГО1___|___ИТОГО2__|ВСЕГО| <br><br>Как это сделать средствами языка 1С?"

Serga
читатель
офлайн
Дата регистрации: 17.02.2004
Сообщений: 101
Пост №2
 
31.07.2005 08:16

"Ну если это объект "ТаблицаЗначений" то совсем просто - сделайте количество столбцов по количеству подразделений, а потом сверните по столбцу и все. Если это отчет, тогда добавьте объект "ТаблицаЗначений" . Например:<br><br>       Таб=СоздатьОбъект("ТаблицаЗначений");<br><br> Таб.НоваяКолонка("Должност","Справочник.***",,,"Должность",,,);<br><br> Таб.НоваяКолонка("Подр1",Число",10,0,"Подр1",,,);<br><br> Таб.НоваяКолонка("Подр2",Число",10,0,"Подр2",,,);<br><br> Таб.НоваяКолонка("Подр3",Число",10,0,"Подр3",,,);<br><br> Таб.НоваяКолонка("Итого",Число",10,0,"Итого",,,);<br><br>//Обработка справочника должностей или сотрудников<br><br>       Выбрать значения();<br><br>       Пока ПолучитьЗначение()=1 Цикл<br><br>            Таб.НоваяСтрока();<br><br>            Таб.Должность=ТекущийЭлемент(); <br><br>            Если Подразделение=Подразд1 Тогда<br><br>             Таб.Подр1=Число;<br><br>            ИначеЕсли Подразделение=Подразд2 Тогда<br><br>             Таб.Подр2=Число;<br><br>            КонецЕсли; <br><br>       КонецЦикла;<br><br>       Таб.Свернуть("Должность","Подр1,Подр2");<br><br>Подробней читай в описании встроенного языка.       <br><br> <br><br>"

Cyril
читатель
офлайн
Дата регистрации: 06.08.2003
Сообщений: 79
Пост №3
 
31.07.2005 08:26

Количество подразделений - величина переменная, и их много. Поэтому забивать их вручную в программу не подходит.

Dolter
читатель
офлайн
Дата регистрации: 27.07.2005
Сообщений: 17
Пост №4
 
31.07.2005 09:34

а в цикле добавлять колонки уже имея исходную ТЗ?

Serga
читатель
офлайн
Дата регистрации: 17.02.2004
Сообщений: 101
Пост №5
 
31.07.2005 11:26

Еще проще, сначала прогони и посчитай количество активных подразделений, потом в цикле создай нужное количество колонок и заполняй таблицу.

Cyril
читатель
офлайн
Дата регистрации: 06.08.2003
Сообщений: 79
Пост №6
 
31.07.2005 18:55

Вот как раз с заполнением-то и проблеммы...<br><br>Как позиционировать значения в таблице.<br><br>Можно пример кода?

Serga
читатель
офлайн
Дата регистрации: 17.02.2004
Сообщений: 101
Пост №7
 
01.08.2005 05:14

"Тогда давайте определимся, у Вас есть исходная таблица значений:<br><br>Должность1;Подразделение1;Количество1; <br><br>Должность1;Подразделение2;Количество2; <br><br>Должность2;Подразделение1;Количество3; <br><br>Должность3;Подразделение2;Количество4; <br><br>В ней возможно любое количество должностей и подразделений.<br><br>Формируем два СпискаЗначений:<br><br><br><br>Должность=СоздатьОбъект("СписокЗначений");<br><br>Подразделение=СоздатьОбъект("СписокЗначений");<br><br>Таб.ВыбратьСтроки();//Перебираем исходную таблицу<br><br>Пока Таб.ПолучитьСтроку()=1 Цикл<br><br>Если Должность.НайтиЗначение(Таб.Должность)=0 Тогда<br><br> Должность.ДобавитьЗначение(Таб.Должность);<br><br>КонецЕсли;<br><br>Если Должность.НайтиЗначение(Таб.Подразделение)=0 Тогда<br><br> Подразделение.ДобавитьЗначение(Таб.Подразделение);<br><br>КонецЕсли;<br><br><br><br>На основании этих списков формируем итоговую таблицу:<br><br><br><br>ТабИтог=СоздатьОбъект("ТаблицаЗначений");<br><br>ТабИтог.ДобавитьСтолбец("Должность","Текст");<br><br>КолПодр=Подразделение.РазмерСписка();<br><br>Для i=1 по КолПодр Цикл<br><br> Подразделение.ПолучитьЗначение(i,Подр);<br><br> ТабИтог.ДобавитьСтолбец(Подр,"Число");<br><br>КонецЦикла;<br><br>ТабИтог.ДобавитьСтолбец("Итог","Число");<br><br><br><br>Дальше выгружаешь исходную таблицу, подразделения позиционируются по наименованию столбцов.                   "

Cyril
читатель
офлайн
Дата регистрации: 06.08.2003
Сообщений: 79
Пост №8
 
01.08.2005 15:36

"Спасибо, вот дополненная рабочая процедура:<br><br>Процедура Вывод(Таб)<br><br> //в Таб передаётся исходная таблица<br><br> СпДолжность=СоздатьОбъект("СписокЗначений");<br><br> СпПодразделение=СоздатьОбъект("СписокЗначений");<br><br> Таб.ВыбратьСтроки();//Перебираем исходную таблицу<br><br> Пока Таб.ПолучитьСтроку()=1 Цикл //Сюда надо будет добавить выгрузку из таблицы<br><br> Если СпДолжность.НайтиЗначение(Таб.Должность)=0 Тогда<br><br> СпДолжность.ДобавитьЗначение(Таб.Должность);<br><br> КонецЕсли;<br><br> Если СпПодразделение.НайтиЗначение(Таб.Подразделение)=0 Тогда<br><br> СпПодразделение.ДобавитьЗначение(Таб.Подразделение);<br><br> КонецЕсли;<br><br> СпПодразделение.Сортировать();<br><br> КонецЦикла;<br><br> ТабИтог=СоздатьОбъект("ТаблицаЗначений");<br><br> ТабИтог.НоваяКолонка("Должность","Текст");<br><br> КолПодр=СпПодразделение.РазмерСписка();<br><br> Для i=1 по КолПодр Цикл //Создаём новые колонки подразделений<br><br> ТабИтог.НоваяКолонка(,"Число",,,,3);<br><br> КонецЦикла;<br><br> ТабИтог.НоваяКолонка("Итог","Число");<br><br> КолДолж=СпДолжность.РазмерСписка();<br><br> Для i=1 по КолДолж Цикл //Заполнение наименования должностей<br><br> ТабИтог.НоваяСтрока();<br><br> ТабИтог.Должность=СпДолжность.ПолучитьЗначение(i);<br><br> КонецЦикла;<br><br> ТабИтог.НоваяСтрока();<br><br> ТабИтог.Должность="Итого по подраздел.:";<br><br> Таб.ВыбратьСтроки();//Перебираем исходную таблицу<br><br> Пока Таб.ПолучитьСтроку()=1 Цикл <br><br> Стр=СпДолжность.НайтиЗначение(Таб.Должность);<br><br> Кол=СпПодразделение.НайтиЗначение(Таб.Подразделение)+1;<br><br> ТабИтог.УстановитьЗначение(Стр,Кол,Таб.Сотруд);<br><br> КонецЦикла;<br><br> //Рассчитываем итоги<br><br> Для Стр=1 по КолДолж Цикл <br><br> ИтогПоДолжн=0;<br><br> Для Кол=1 по КолПодр Цикл <br><br>       ИтогПоДолжн=ИтогПоДолжн+ТабИтог.ПолучитьЗначение(Стр, Кол+1);<br><br> Если Стр=КолДолж Тогда //Заполним итоги по подразделениям<br><br> ТабИтог.УстановитьЗначение(КолДолж+1,Кол+1,ТабИтог.Итог(Кол+1)); //Итоги по подразделениям<br><br> КонецЕсли;<br><br> КонецЦикла;<br><br> ТабИтог.УстановитьЗначение(Стр,"Итог",ИтогПоДолжн); //Итоги по должностям<br><br> КонецЦикла;<br><br> ТабИтог.УстановитьЗначение(КолДолж+1,"Итог",ТабИтог.Итог("Итог")); //Общий Итог <br><br>КонецПроцедуры<br><br><br><br>Кстати, у вас вот этот участок:<br><br>Для i=1 по КолПодр Цикл<br><br> Подразделение.ПолучитьЗначение(i,Подр);<br><br> ТабИтог.ДобавитьСтолбец(Подр,"Число");<br><br>КонецЦикла;<br><br>не присваивает названиям колонок наименования подразделений<br><br>Их вообще никак невозможно присвоить, т.к. некоторые подразделения состоят из нескольких слов..."

Показывать по 10 20 40 сообщений

Читают тему:

1 гостей
Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация