ПрисоеденитьСекцию

1. SpideRus 08.07.09 19:50 Сейчас в теме
Не могу понять как создать в таблице шахматную доску путем использования ПрисоеденитьСекцию.
Сама таблица состоит из трех секций: Горизонтальной и 2-х Вертикальных. В таблице заданы две ячейки, одна белая, другая черная, эти ячейки разбиты по секциям. В зависимости от того, четная ячейка или нет, она соответвенно и выводит необходимую секцию, чтобы формирование происходило по принципу шахматной доски, но пока не получается. Постоянно путаюсь.

Таб=СоздатьОбъект("Таблица");
	Таб.ИсходнаяТаблица("Таблица");
	Для Я=1 по Горизонт Цикл     // Горизонт - поле для ввода высоты доски
		Если Я-цел(Я/2)=Я/2 Тогда   / / проверка на четность или нечетность ячеек
			Таб.ВывестиСекцию("Гор|Вер2");
		Иначе
			Таб.ВывестиСекцию("Гор|Вер1");
		КонецЕсли;
		Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски
			Если (Ф-цел(Ф/2)=Ф/2) Тогда    // проверка на четность или нечетность ячеек
				Таб.ПрисоединитьСекцию("Гор|Вер1");
			Иначе
				Таб.ПрисоединитьСекцию("Гор|Вер2");
			КонецЕсли;	
		КонецЦикла;
	КонецЦикла;
	Таб.ТолькоПросмотр(1); 
	Таб.Показать("Таблица");
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Altair777 644 08.07.09 20:06 Сейчас в теме
Ошибок несколько :-)

Процедура Сформировать()
   Таб=СоздатьОбъект("Таблица"); 
   Таб.ИсходнаяТаблица("Таблица");
   Горизонт=8; Вертикаль=8;
   Ф=1;
   Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски 
      Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски
         Если Я+Ф-цел((Я+Ф)/2)=(Я+Ф)/2 Тогда // проверка на четность или нечетность ячеек 
            Если Ф=1 Тогда
               Таб.ВывестиСекцию("Гор|Вер1"); 
            Иначе
               Таб.ПрисоединитьСекцию("Гор|Вер1"); 
            КонецЕсли;
         Иначе
            Если Ф=1 Тогда
               Таб.ВывестиСекцию("Гор|Вер2"); 
            Иначе
               Таб.ПрисоединитьСекцию("Гор|Вер2"); 
            КонецЕсли;
         КонецЕсли; 
      КонецЦикла; 
   КонецЦикла; 
   Таб.ТолькоПросмотр(1); 
   Таб.Показать("Таблица");
КонецПроцедуры
Показать


Результат
4. Ёпрст 1063 08.07.09 20:09 Сейчас в теме
(2) гы... так шахматную доску не получишь!
6. Altair777 644 08.07.09 20:15 Сейчас в теме
Ёпрст пишет:
(2) гы... так шахматную доску не получишь!

Немного поменял :-)

Надо бы еще название вертикалей вставить и горизонтали пронумеровать.....
8. Ёпрст 1063 08.07.09 20:19 Сейчас в теме
(6) Ага..еще немного кода и ...

http://infostart.ru/projects/52/

получится...

А на будующее, автор, на четность проверяй так:

Если (Я+Ф)%2=0 Тогда
  Сообщить("четное, биомать!");
Иначе
  Сообщить("догадайся сам ...")
КонецЕсли;
9. Altair777 644 08.07.09 20:26 Сейчас в теме
Окончательный вариант (?) :-)

Процедура Сформировать()
   Таб=СоздатьОбъект("Таблица"); 
   Таб.ИсходнаяТаблица("Таблица");
   Горизонт=8; Вертикаль=8;
   Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски 
      Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски
         Если (Я+Ф)%2=0 Тогда	//Спасибо Ёпрсту!!!
            Если Ф=1 Тогда
               Таб.ВывестиСекцию("Гор|Вер1"); 
            Иначе
               Таб.ПрисоединитьСекцию("Гор|Вер1"); 
            КонецЕсли;
         Иначе
            Если Ф=1 Тогда
               Таб.ВывестиСекцию("Гор|Вер2"); 
            Иначе
               Таб.ПрисоединитьСекцию("Гор|Вер2"); 
            КонецЕсли;
         КонецЕсли; 
      КонецЦикла; 
   КонецЦикла; 
   Таб.ТолькоПросмотр(1); 
   Таб.Показать("Таблица");
КонецПроцедуры
Показать
10. Ёпрст 1063 08.07.09 20:30 Сейчас в теме
(9) конечно нет!

:)
Процедура Сформировать() 
   Таб=СоздатьОбъект("Таблица"); 
   Таб.ИсходнаяТаблица("Таблица"); 
   Горизонт=8; Вертикаль=8; 
   Ф=1; 
   Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски 
      Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски 
            Если Ф=1 Тогда 
               Таб.ВывестиСекцию("Гор|Вер"+((Я+Ф)%2+1)); 
            Иначе 
               Таб.ПрисоединитьСекцию("Гор|Вер"+((Я+Ф)%2+1)); 
            КонецЕсли; 
      КонецЦикла; 
   КонецЦикла; 
   Таб.ТолькоПросмотр(1); 
   Таб.Показать("Шахматы"); 
КонецПроцедуры
Показать
24. Altair777 644 09.07.09 11:38 Сейчас в теме
Вот рачертил доску


И теперь жду критики кода :-)
Процедура Сформировать() 
  Таб=СоздатьОбъект("Таблица"); 
  Таб.ИсходнаяТаблица("Таблица"); 
  Горизонт=8; Вертикаль=8; 
  ПечЯчейка="";
  Таб.ВывестиСекцию("Гор|Вер1"); 
  Для Я=1 По Вертикаль Цикл
    ПечЯчейка=Симв(65+Вертикаль-Я);
    Таб.ПрисоединитьСекцию("Гор|Перевернутая"); 
  КонецЦикла;
  ПечЯчейка="";
  Таб.ПрисоединитьСекцию("Гор|Вер1"); 
  Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски 
    Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски 
      Если Ф=1 Тогда 
        ПечЯчейка=Горизонт-Я+1;
        Таб.ВывестиСекцию("Гор|Вер1"); 
        ПечЯчейка="";
      КонецЕсли; 
      Таб.ПрисоединитьСекцию("Гор|Вер"+((Я+Ф)%2+1)); 
      Если Ф=Вертикаль Тогда
        ПечЯчейка=Я;
        Таб.ПрисоединитьСекцию("Гор|Перевернутая"); 
      КонецЕсли;
    КонецЦикла; 
  КонецЦикла; 
  ПечЯчейка="";
  Таб.ВывестиСекцию("Гор|Вер1"); 
  Для Я=1 По Вертикаль Цикл
    ПечЯчейка=Симв(64+Я);
    Таб.ПрисоединитьСекцию("Гор|Вер1"); 
  КонецЦикла;
  ПечЯчейка="";
  Таб.ПрисоединитьСекцию("Гор|Вер1"); 
  Таб.ТолькоПросмотр(1); 
  Таб.Показать("Шахматы"); 
КонецПроцедуры
Показать
30. SpideRus 02.08.09 09:00 Сейчас в теме
Снова. Используя метод ПрисоеденитьСекцию.

Необходимо ТОЛЬКО с помощью Таблицы значений вывести номенклатуру товаров и справа присоединить все склады с количеством. Выглядеть это должно примерно так:


Но, дальше вывода номенклатуры и присоединения первой секции со всем количеством, без разбивки по складам у меня не идет. Пробывал даже использовать, НЕПРАВИЛЬНЫЙ подход, одновременнно создовал две таблицы значений, одну сворачивал по номенклатуре, другую по складам, но все равно ни фига не получается.

Процедура Сформировать()
	ТЗ=СоздатьОбъект("ТаблицаЗначений");
	ТЗ2=СоздатьОбъект("ТаблицаЗначений");
	Таб=Создатьобъект("Таблица");
	Таб.ИсходнаяТаблица("Таблица"); 
	ТЗ.НоваяКолонка("Номенклатура");
	ТЗ.НоваяКолонка("Склад");
	ТЗ.НоваяКолонка("Количество","Число",10,0);
	ТЗ2.НоваяКолонка("Номенклатура");
	ТЗ2.НоваяКолонка("Склад");
	ТЗ2.НоваяКолонка("Количество","Число",10,0);
	Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");
	Рег.ВыбратьДвижения();
	Рег2=СоздатьОбъект("Регистр.ОстаткиТМЦ");
	Рег2.ВыбратьДвижения();
	Пока Рег.ПолучитьДвижение()=1 Цикл
		ТЗ.НоваяСтрока();
		ТЗ.Номенклатура=Рег.Номенклатура;
		ТЗ.Склад=Рег.Склад;
		ТЗ.Количество=Рег.Количество;
		//Вторая таблица значений
		ТЗ2.НоваяСтрока();
		ТЗ2.Номенклатура=Рег.Номенклатура;
		ТЗ2.Склад=Рег.Склад;           
		ТЗ2.Количество=Рег.Количество;
	КонецЦикла;
	ТЗ.Свернуть("Номенклатура,Склад", "Количество");
	ТЗ2.Свернуть("Склад", "Количество"); 
	ТЗ.Сортировать("Номенклатура");
	ТЗ2.Сортировать("Склад");
	ТЗ.ВыбратьСтроки();
	ТЗ2.ВыбратьСтроки();
	Таб.ВывестиСекцию("Шапка|Товар");
	Пока ТЗ2.ПолучитьСтроку()=1 Цикл
		Таб.ПрисоединитьСекцию("Шапка|Склад");
	КонецЦикла;
	Пока ТЗ.ПолучитьСтроку()=1 Цикл
		Таб.ВывестиСекцию("Элемент|Товар");
		Для Я=1 по ТЗ2.КоличествоСтрок() Цикл
		Таб.ПрисоединитьСекцию("Элемент|Склад");
		КонецЦикла;
	КонецЦикла;
	Таб.ТолькоПросмотр(1);        
	Таб.Показать()
КонецПроцедуры
Показать


С разметкой таблицы:
31. k_step 18.08.09 22:46 Сейчас в теме
Постарался от твоего строения алгоритма далеко не уходить! ))

Процедура Сформировать() 
  ТЗ=СоздатьОбъект("ТаблицаЗначений"); 
  ТЗ2=СоздатьОбъект("ТаблицаЗначений"); 
  Таб=Создатьобъект("Таблица"); 
  Таб.ИсходнаяТаблица("Таблица"); 
  ТЗ.НоваяКолонка("Номенклатура"); 
  ТЗ.НоваяКолонка("Склад"); 
  ТЗ.НоваяКолонка("Количество","Число",10,0); 
  //ТЗ2.НоваяКолонка("Номенклатура");  			//
  //ТЗ2.НоваяКолонка("Склад");         			//Это все оставим напотом!.. ))
  //ТЗ2.НоваяКолонка("Количество","Число",10,0);  //
  Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ"); 
  Рег.ВыбратьДвижения(); 
  Рег2=СоздатьОбъект("Регистр.ОстаткиТМЦ"); 
  Рег2.ВыбратьДвижения(); 
  Пока Рег.ПолучитьДвижение()=1 Цикл 
 	ТЗ.НоваяСтрока(); 
	ТЗ.Номенклатура=Рег.Номенклатура; 
	ТЗ.Склад=Рег.Склад; 
	ТЗ.Количество=Рег.Количество; 
	//Вторая таблица значений           //Из рег. все склады не получишь. Только с движениями. 
	//ТЗ2.НоваяСтрока();                //Да и зачем так?..
	//ТЗ2.Номенклатура=Рег.Номенклатура;// 
	//ТЗ2.Склад=Рег.Склад;              //
	//ТЗ2.Количество=Рег.Количество;    //
  КонецЦикла;   
  ТЗ.Выгрузить(ТЗ2,,,"Номенклатура");
  ТЗ2.Свернуть("Номенклатура","");
  ТЗ2.Сортировать("Номенклатура");
  Скл=СоздатьОбъект("Справочник.Склады");
  Скл.ВыбратьЭлементы();
  Пока Скл.ПолучитьЭлемент()=1 Цикл  //Получаем все склады. 
	//Усл-е на помеченный на удал-е склад думаю не сложно добавить самим!..
	ТЗ2.НоваяКолонка("ТЫ"+СтрЗаменить(Скл.Код," ",""),"Число",10,0,Скл.Наименование);
	//В кач-е идентификатора колонки произв-й префикс+код склада без пробела(По требованиям к ТЗ).
	//В заголовок колонки заносим наименование склада.
  КонецЦикла;
  ТЗ.Свернуть("Номенклатура,Склад", "Количество"); 
  ТЗ.Сортировать("Номенклатура"); 
  ТЗ.ВыбратьСтроки(); 
  Пока ТЗ.ПолучитьСтроку()=1 Цикл 
	Стр=0;   
	Рез=ТЗ2.НайтиЗначение(ТЗ.Номенклатура,Стр,"Номенклатура");
	Если Рез=0 Тогда
		Сообщить("Упс! Косякнулся! ;)))");    //Так м/б если в ТЗ больше товаров чем в ТЗ2
		Продолжить;							  //что врятли!!!
	КонецЕсли;     
	//Раскидываем значения ТЗ по Складам в ТЗ2!.. 
        ТЗ2.УстановитьЗначение(Стр,"ТЫ"+СтрЗаменить(ТЗ.Склад.Код," ",""),ТЗ.Количество); 
  КонецЦикла; 								
  ТЗ2.ВыбратьСтроку(); // Усе! Тута уже готовая таблица для вывода на печать!..
  //Это тоже распишу так и быть...
  //Будем считать что количество складов может меняться... Иначе тупо в Таблице каждой колонке присвоить 
  //значение колонок ТЗ2
  Для Сч = 1 По ТЗ2.КоличествоКолонок() Цикл 
	Заголовок="";
	ТЗ2.ПолучитьПараметрыКолонки(Сч,,,,Заголовок,,,);   
	Если Сч=1 Тогда
		Таб.ВывестиСекцию("Шапка|Товар");
	Иначе
		Таб.ПрисоединитьСекцию("Шапка|Склад");//В шапке вместо "ТЗ2.Склад" пишем "Заголовок"
	КонецЕсли;
  КонецЦикла;
  ТЗ2.ВыбратьСтроки();
  Пока ТЗ2.ПолучитьСтроку()=1 Цикл
	Для Сч = 1 По ТЗ2.КоличествоКолонок() Цикл 
		Заголовок="";
		ТЗ2.ПолучитьПараметрыКолонки(Сч,,,,Заголовок,,,);   
		Если Сч=1 Тогда
			Таб.ВывестиСекцию("Элемент|Товар"); //В Таблице вместо "ТЗ.Номенклатура" "ТЗ2.Номенклатура"
		Иначе              
			Количество=ТЗ2.ПолучитьЗначение(ТЗ2.НомерСтроки,Сч);
			Таб.ПрисоединитьСекцию("Элемент|Склад");//В Таблице вместо "ТЗ.Количество" просто "Количество"
		КонецЕсли;
	КонецЦикла;
  КонецЦикла;
  Таб.ТолькоПросмотр(1);         
  Таб.Показать() 
КонецПроцедуры 
Показать


Что поменять в таблице см. в комментах!
Честно говоря не понимаю почему это нужно делать ТОЛЬКО с помощью ТЗ?! Ч/з запрос куда быстрее и удобнее!!!
38. SpideRus 20.08.09 20:37 Сейчас в теме
(31) Понятно что через запрос быстрее и проще, но надо попробывать и другие варианты.
3. Ёпрст 1063 08.07.09 20:07 Сейчас в теме
ужас какой...особенно коробит это:
Я+Ф-цел((Я+Ф)/2)=(Я+Ф)/2
5. Ёпрст 1063 08.07.09 20:13 Сейчас в теме
А ...прозевал что прибавляешь еще..

Один хрен, за
(Я+Ф-цел((Я+Ф)/2)=(Я+Ф)/2 )

расстрел на месте!
:)
7. Altair777 644 08.07.09 20:17 Сейчас в теме
Ёпрст пишет:
А ...прозевал что прибавляешь еще..

Один хрен, за Код (Я+Ф-цел((Я+Ф)/2)=(Я+Ф)/2 )

расстрел на месте!:)


Нет времени... работа 1 час 15 минут назад закончилась...
:-)
11. Ёпрст 1063 08.07.09 20:32 Сейчас в теме
+10 блин... пока всё лишнее уберешь..понимашь..
:)
12. Altair777 644 08.07.09 20:35 Сейчас в теме
(11) Ну, вот так работает :-)
А перед этим было ....
13. Altair777 644 08.07.09 21:44 Сейчас в теме
Усложню задачу...
Нужно вывести раскрой шахматки, что бы обклеить куб и играть по всей его поверхности. :-)

Сам я сегодня этим заниматься не буду. У меня дома с понедельника идет сериал "Один дома".
Мои уехали на море.... И сегодня как раз третья серия ;-)
14. Ёпрст 1063 08.07.09 21:56 Сейчас в теме
(13) ипать...те же яйца... завтра только приедут.
15. SpideRus 09.07.09 05:43 Сейчас в теме
Если (Я+Ф)%2=0 Тогда 
  Сообщить("четное, биомать!"); 
Иначе 
  Сообщить("догадайся сам ...") 
КонецЕсли;


Спасибо.
Всем Спасибо.

Но, что означает % в формуле (Я+Ф)%2=0.
16. Ёпрст 1063 09.07.09 10:05 Сейчас в теме
17. SpideRus 09.07.09 10:23 Сейчас в теме
18. Altair777 644 09.07.09 10:31 Сейчас в теме
Ёпрст пишет:
ипать...те же яйца... завтра только приедут

Сочувствую....

Ну что, будем играть в кубические шахматы? :-)
19. Ёпрст 1063 09.07.09 10:33 Сейчас в теме
(18) не.. я не фанат шахмат.. лучше в 1000.
20. Altair777 644 09.07.09 10:46 Сейчас в теме
21. Ёпрст 1063 09.07.09 10:53 Сейчас в теме
(20) По сети, если есть реальный IP...
23. Altair777 644 09.07.09 11:00 Сейчас в теме
(21) На домашнем компе есть
(22) Я уже изучаю правила на http://www.cardgames.net.ru/1000.html :-)
22. Ёпрст 1063 09.07.09 10:55 Сейчас в теме
http://the1000.narod.ru/
в эту играл еще в 2000 году и переписывался с автором, что б он правила улучшал/добавлял...
25. SpideRus 09.07.09 11:54 Сейчас в теме
Альтаир Павленко пишет:
Вот рачертил доску


Как расчертил? Выложи Таблицу.
27. Altair777 644 09.07.09 12:36 Сейчас в теме
(25) http://infostart.ru/projects/4958/

(26)
PeRom пишет:
Нумерация неверная. Слева одна, справа другая. Должна быть одинаковая - зачем?

упс.... Спасибо! Это меня глюкнуло

Уже исправил и перевыложил
26. PeRom 51 09.07.09 12:09 Сейчас в теме
Нумерация неверная. Слева одна, справа другая. Должна быть одинаковая - зачем?
        ПечЯчейка=Горизонт-Я+1; 

вполне подойдёт
        ПечЯчейка=Я;
28. SpideRus 09.07.09 18:56 Сейчас в теме
Альтаир Павленко,

Сколько времени потратил на это дело?
29. Altair777 644 09.07.09 19:01 Сейчас в теме
(28) Чисто что бы код написать? В общей сложности примерно 20.
Я же говорю - Сборник несерьезных обработок :-)
32. Ёпрст 1063 19.08.09 08:31 Сейчас в теме
Читай коменты в этой ветке:
http://infostart.ru/projects/5382/
Там есть рабочий код, то что в самой теме не качай - там не рабочий алгоритм.
33. k_step 19.08.09 10:53 Сейчас в теме
(32) Поглядел мельком ветку. Некогда вчитываться. Идея подобная была! Сори за повторение... Но, тем не менее, мой код 100% рабочий... И имеет место быть! ) Лучше свой велосипед придумать и знать что и как работает. Чем с чужими возиться! Я так на все это смотрю! ))))
34. Ёпрст 1063 19.08.09 11:31 Сейчас в теме
(33) мот и рабочий, но меееееееедленный, что п..ц.
35. k_step 19.08.09 11:34 Сейчас в теме
(34) Наю - наю! ))
А что поделать коль челу именно ч/з ТЗ хочется задачку решить...
36. Ёпрст 1063 19.08.09 13:33 Сейчас в теме
(35) см. (32) там всё есть и именно через ТЗ. только в разы быстрее.
37. k_step 19.08.09 14:05 Сейчас в теме
Спасибо!.. Ток задачу не рассматривал с точки зрения оптимизации скорости! Так и написал в шапке своего кода постарался алгоритм автора ветки особо не менять...
Тем не менее тема оптимизации оч. интересна! Нашел для себя кое что интересное. Спасибо еще раз!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот