ТаблицаЗначений.ТаблицаЗначений - удобство обработки данных.

24.12.07

Разработка - Универсальные функции

Вложенные ТаблицыЗначений очень удобны для группирования данных при всяческих расчетах. Например расчет вложенных нормативов затрат сырья.
Технология проста и тривиальна. Приведу пример кода, из которого все будет понятно.
ТЗВозврат= СоздатьОбъект("ТаблицаЗначений"); 
ТЗВозврат.НоваяКолонка("Документ");
ТЗВозврат.НоваяКолонка("Подраздел","Справочник.Подразделения"); 
ТЗВозврат.НоваяКолонка("ПервПарам","Число",1,0); 
ТЗВозврат.НоваяКолонка("СуммаПервПарам","Число",15,2); 
ТЗВозврат.НоваяКолонка("МинСуммаПервПарам","Число",15,2);
ТЗВозврат.НоваяКолонка("КолЮрЛицПодраздел","Число",1,0); 
ТЗВозврат.НоваяКолонка("СуммаКолЮрЛиц","Число",15,2);
ТЗВозврат.НоваяКолонка("ОстПарам","Число",1,0);
ТЗВозврат.НоваяКолонка("ПарамАЙТи","Число",1,0); 
ТЗВозврат.НоваяКолонка("ДатЛог","Дата");
ТЗВозврат.НоваяКолонка("ДатСклад","Дата"); 
ТЗВозврат.НоваяКолонка("ГруппаОфис","Справочник.ОфисныеПомещения");  
ТЗВозврат.НоваяКолонка("КоэфОбъем","Число",5,2); 
ТЗВозврат.НоваяКолонка("ТЗРаспредел","ТаблицаЗначений");
	
Док = СоздатьОбъект("Документ.РезРаспределИздержек");
Док.ВыбратьДокументы(ДатаУсловий,ДатаУсловий);
Пока Док.ПолучитьДокумент()=1 Цикл 
	ТЗВозврат.НоваяСтрока(); 
	ТЗВозврат.Документ = Док.ТекущийДокумент();
	ТЗВозврат.Подраздел = Док.Подраздел;
	ТЗВозврат.ПервПарам = Док.ПервПарам;
	ТЗВозврат.СуммаПервПарам = Док.СуммаПервПарам;
	ТЗВозврат.МинСуммаПервПарам = Док.МинСуммаПервПарам;
	ТЗВозврат.КолЮрЛицПодраздел = Док.КолЮрЛицПодраздел;
	ТЗВозврат.СуммаКолЮрЛиц = Док.СуммаКолЮрЛиц;
	ТЗВозврат.ОстПарам = Док.ОстПарам;
	ТЗВозврат.ПарамАЙТи = Док.ПарамАЙТи;
	ТЗВозврат.ДатЛог = Док.ДатЛог;
	ТЗВозврат.ДатСклад = Док.ДатСклад;
	ТЗВозврат.ГруппаОфис = Док.ГруппаОфис;
	ТЗВозврат.КоэфОбъем = Док.КоэфОбъем;
	ТЗВозврат.ТЗРаспредел = СоздатьОбъект("ТаблицаЗначений");
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("Подраздел","Справочник.Подразделения",,,"Подразделение",7); 
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолПерсонала","Строка",25,,"Колич. персонала",5);
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолЮрЛицПодраздел","Строка",25,,"Колич. юр. лиц",5);
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолРабМест","Строка",25,,"Колич. рабочих мест",5); 
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолВыпДоставок","Строка",25,,"Колич. доставок",5); 
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолВыпЗаявок","Строка",25,,"Колич. заявок",5);
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолНормЧас","Строка",25,,"Колич. нормочас",5);
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("ПроцНачисления","Число",3,0,"% начисления",5); 
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолПродаж","Строка",25,,"Колич. продаж",5); 
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолСкладПлощ","Строка",25,,"Колич. склад. площ.",5);
	ТЗВозврат.ТЗРаспредел.НоваяКолонка("РаспредСумма","Число",10,2,"Сумма распределенная",5);
	Док.ВыбратьСтроки();
        Пока Док.ПолучитьСтроку()=1 Цикл
	        ТЗВозврат.ТЗРаспредел.НоваяСтрока();
		ТЗВозврат.ТЗРаспредел.Подраздел = Док.ПодразделРаспред; 
		ТЗВозврат.ТЗРаспредел.КолПерсонала = Док.КолПерсонала;
		ТЗВозврат.ТЗРаспредел.КолЮрЛицПодраздел = Док.КолЮрЛицПодразд;
		ТЗВозврат.ТЗРаспредел.КолРабМест = Док.КолРабМест;      
		ТЗВозврат.ТЗРаспредел.КолВыпДоставок = Док.КолВыпДоставок; 
		ТЗВозврат.ТЗРаспредел.КолВыпЗаявок = Док.КолВыпЗаявок;
		ТЗВозврат.ТЗРаспредел.КолНормЧас = Док.КолНормЧас;
		ТЗВозврат.ТЗРаспредел.ПроцНачисления = Док.ПроцНачисления; 
		ТЗВозврат.ТЗРаспредел.КолПродаж = Док.КолПродаж; 
		ТЗВозврат.ТЗРаспредел.КолСкладПлощ = Док.КолСкладПлощ;
		ТЗВозврат.ТЗРаспредел.РаспредСумма = Док.РаспредСумма;
	КонецЦикла;
КонецЦикла;


Далее используем данные вложенной таблицы стандартно.
Процедура СохранитьУсловияРаспред(ТЗСохран) 
	Док = СоздатьОбъект("Документ.РезРаспределИздержек");
	ТЗСохран.ВыбратьСтроки();
	Пока ТЗСохран.ПолучитьСтроку()=1 Цикл
		Если ПустоеЗначение(ТЗСохран.Документ)=0 Тогда
			Док.НайтиДокумент(ТЗСохран.Документ); 
			Док.УдалитьСтроки();
		Иначе
			Док.Новый();	
		КонецЕсли;
		
		Док.ДатаДок = КонДата;  
		Док.Подраздел = ТЗСохран.Подраздел;
		Док.ПервПарам = ТЗСохран.ПервПарам;
		Док.СуммаПервПарам = ТЗСохран.СуммаПервПарам;
		Док.МинСуммаПервПарам = ТЗСохран.МинСуммаПервПарам;
		Док.КолЮрЛицПодраздел = ТЗСохран.КолЮрЛицПодраздел;
		Док.СуммаКолЮрЛиц = ТЗСохран.СуммаКолЮрЛиц;
		Док.ОстПарам = ТЗСохран.ОстПарам;
		Док.ПарамАЙТи = ТЗСохран.ПарамАЙТи;
		Док.ДатЛог = ТЗСохран.ДатЛог;
		Док.ДатСклад = ТЗСохран.ДатСклад;
		Док.ГруппаОфис = ТЗСохран.ГруппаОфис;
		Док.КоэфОбъем = ТЗСохран.КоэфОбъем; 
		
		ТЗСохран.ТЗРаспредел.ВыбратьСтроки();
		Пока ТЗСохран.ТЗРаспредел.ПолучитьСтроку()=1 Цикл
			Док.НоваяСтрока();
			Док.ПодразделРаспред = ТЗСохран.ТЗРаспредел.Подраздел;
			Док.КолПерсонала = ТЗСохран.ТЗРаспредел.КолПерсонала;
			Док.КолЮрЛицПодразд = ТЗСохран.ТЗРаспредел.КолЮрЛицПодраздел;
			Док.КолРабМест = ТЗСохран.ТЗРаспредел.КолРабМест;
			Док.КолВыпДоставок = ТЗСохран.ТЗРаспредел.КолВыпДоставок;
			Док.КолВыпЗаявок = ТЗСохран.ТЗРаспредел.КолВыпЗаявок;
			Док.КолНормЧас = ТЗСохран.ТЗРаспредел.КолНормЧас;
			Док.ПроцНачисления = ТЗСохран.ТЗРаспредел.ПроцНачисления;
			Док.КолПродаж = ТЗСохран.ТЗРаспредел.КолПродаж;
			Док.КолСкладПлощ = ТЗСохран.ТЗРаспредел.КолСкладПлощ;
			Док.РаспредСумма = ТЗСохран.ТЗРаспредел.РаспредСумма;
		КонецЦикла;
			
		Док.Записать();
	КонецЦикла;
КонецПроцедуры	// СохранитьУсловияРаспред



См. также

Универсальные функции Программист Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    1396    14    user706545_kseg1971    0    

5

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    2353    zhenyat    7    

8

Универсальные функции Программист Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    5161    Zoltan_Black    11    

2

Универсальные функции Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13946    4    alsen    3    

5

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10793    malovandrey    7    

19

Универсальные функции Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18895    2    HAMMER_59    6    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Shaman100M 1151 24.12.07 13:33 Сейчас в теме
А можно по-подробнее? Из примера кода понятно только, что в ТЗ можно сохранять и шапку, и табличную часть документа.
2. Rom_Kat 19 24.12.07 13:41 Сейчас в теме
дело вовсе не в документе.
Можно создать объект типа ТЗВозврат.ТЗРаспредел = СоздатьОбъект("ТаблицаЗначений");
и потом его читать ТЗВозврат.ТЗРаспредел.ВыбратьСтроки()

Ща статью обновлю ))
А то действительно не сильно понятно нафиг оно надо )))
4. Shaman100M 1151 24.12.07 14:15 Сейчас в теме
(2) Да, есть такое.
http://infostart.ru/profile/8196/projects/1354/
В ТЗ и СЗ можно создавать и использовать много других объектов, не только "ТаблицаЗначений", например, хранить и обращаться ко всем групповым контекстам открытых форм.
5. Rom_Kat 19 24.12.07 14:34 Сейчас в теме
(4) отлично. Можешь мне минус поставить. ;-)
7. Shaman100M 1151 24.12.07 14:59 Сейчас в теме
(5) Ну, я не настолько подвержен влиянию чужой самокритики. :)
(6) Спасибо. От прикладных особенностей реализации идею можно отвязать и обобщить, но, как замечено, для этого нужно время. Если времени не хватает, значит, оно тратится на что-то другое (на работу, например), что тоже неплохо.
3. Rom_Kat 19 24.12.07 13:44 Сейчас в теме
Вот и вся статья. Не судите строго )))
6. Rom_Kat 19 24.12.07 14:43 Сейчас в теме
(5+) Клевая демонстрашка. А у меня только на прикладные вещи времени и хватает (((( Их к сожалению не выложишь так как слишком к предметной области привязаны.
8. CheBurator 2712 24.12.07 17:18 Сейчас в теме
А к этому еще почитать статью отчетов с вертикальными/горизонтальными группировками на основе ТЗ...
9. Rom_Kat 19 24.12.07 17:28 Сейчас в теме
10. JohnyDeath 302 24.12.07 17:43 Сейчас в теме
Ну раз пошла такая пьянка, то смотрим все на Индексированную таблицу http://www.1cpp.ru/docum/html/IndexedTable.html Особенно на методы Группировать http://www.1cpp.ru/docum/html/IndexedTable.html#group и Загрузить http://www.1cpp.ru/docum/html/IndexedTable.html#load
11. Rom_Kat 19 24.12.07 17:51 Сейчас в теме
(10)использую постоянно ;-)
12. JohnyDeath 302 24.12.07 18:28 Сейчас в теме
(11) ну если используешь, зачем тогда тебе:
Код
 ТЗВозврат.ТЗРаспредел = СоздатьОбъект("ТаблицаЗначений");
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("Подраздел","Справочник.Подразделения",,,"Подразделение",7); 
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолПерсонала","Строка",25,,"Колич. персонала",5);
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолЮрЛицПодраздел","Строка",25,,"Колич. юр. лиц",5);
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолРабМест","Строка",25,,"Колич. рабочих мест",5); 
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолВыпДоставок","Строка",25,,"Колич. доставок",5); 
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолВыпЗаявок","Строка",25,,"Колич. заявок",5);
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолНормЧас","Строка",25,,"Колич. нормочас",5);
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("ПроцНачисления","Число",3,0,"% начисления",5); 
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолПродаж","Строка",25,,"Колич. продаж",5); 
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("КолСкладПлощ","Строка",25,,"Колич. склад. площ.",5);
   ТЗВозврат.ТЗРаспредел.НоваяКолонка("РаспредСумма","Число",10,2,"Сумма распределенная",5);
Док.ВыбратьСтроки();
        Пока Док.ПолучитьСтроку()=1 Цикл
           ТЗВозврат.ТЗРаспредел.НоваяСтрока();
      ТЗВозврат.ТЗРаспредел.Подраздел = Док.ПодразделРаспред; 
      ТЗВозврат.ТЗРаспредел.КолПерсонала = Док.КолПерсонала;
      ТЗВозврат.ТЗРаспредел.КолЮрЛицПодраздел = Док.КолЮрЛицПодразд;
      ТЗВозврат.ТЗРаспредел.КолРабМест = Док.КолРабМест;      
      ТЗВозврат.ТЗРаспредел.КолВыпДоставок = Док.КолВыпДоставок; 
      ТЗВозврат.ТЗРаспредел.КолВыпЗаявок = Док.КолВыпЗаявок;
      ТЗВозврат.ТЗРаспредел.КолНормЧас = Док.КолНормЧас;
      ТЗВозврат.ТЗРаспредел.ПроцНачисления = Док.ПроцНачисления; 
      ТЗВозврат.ТЗРаспредел.КолПродаж = Док.КолПродаж; 
      ТЗВозврат.ТЗРаспредел.КолСкладПлощ = Док.КолСкладПлощ;
      ТЗВозврат.ТЗРаспредел.РаспредСумма = Док.РаспредСумма;
   КонецЦикла; 
Показать полностью

Вместо всего этого можно написать всего 2 строчки:
Код
 ТЗВозврат.ТЗРаспредел = СоздатьОбъект("ИндексированнаяТаблица");
ТЗВозврат.ТЗРаспредел.Загрузить(Док); 
Показать полностью

!
13. Rom_Kat 19 24.12.07 18:57 Сейчас в теме
(12) можно было бы, но в обработке тогда переписывать много надо, а времени нет
14. пользователь 21.05.08 11:15
Сообщение было скрыто модератором.
...
15. Rom_Kat 19 21.05.08 11:24 Сейчас в теме
vacancy9

Да и у тебя я смотрю все также дела ;-)
16. Rom_Kat 19 21.05.08 11:33 Сейчас в теме
vacancy9
В асю выходи пообщаемся
17. пользователь 21.05.08 14:01
Сообщение было скрыто модератором.
...
18. пользователь 21.05.08 14:02
Сообщение было скрыто модератором.
...
19. Rom_Kat 19 21.05.08 14:13 Сейчас в теме
Да ты не понял меня. Я и писать ничего не собирался. И в этом блоге врядли кто еще увидит наш разговор )))
Твое мнение обо мне не объективно. А мое о тебе как о работодателе сложилось еще тогда и утвердилось после увиденных здесь вакансий. Если кто и спросит, что нигативного я вынес из сотрудничества с тобой, я конечно раскажу. А так сидеть писать в форум времени нет.
20. пользователь 21.05.08 16:24
Сообщение было скрыто модератором.
...
21. tango 545 21.05.08 16:45 Сейчас в теме
22. vasilykushnir 63 21.05.08 17:08 Сейчас в теме
23. Rom_Kat 19 21.05.08 19:38 Сейчас в теме
ну задел человека мой комментарий и из-за этого он даже мой блог посетил ))))
24. пользователь 21.05.08 20:00
Сообщение было скрыто модератором.
...
25. Rom_Kat 19 21.05.08 20:28 Сейчас в теме
может я конечно и ламер. Звез с неба не хватаю. Но 1сом занимаюсь почти 5 лет и многое из того что сделал работает до сих пор. И люди которые работают с моими ламерскими программами не жалуются.
26. Rom_Kat 19 21.05.08 20:31 Сейчас в теме
Ну и профи они не от того профи, что существуют ламеры-программеры.
27. Rom_Kat 19 21.05.08 21:21 Сейчас в теме
"много ламеров-программеров, которые проснулись однажды утром, почесались, и их осенило, "а займуська я один эсиной!"."

Я как посмотрю ты довольно часто просыпался с подобной мыслью.Шутка ли сказать 16 языков программирования.
28. пользователь 21.05.08 22:45
Сообщение было скрыто модератором.
...
Оставьте свое сообщение