Не могу понять как создать в таблице шахматную доску путем использования ПрисоеденитьСекцию.
Сама таблица состоит из трех секций: Горизонтальной и 2-х Вертикальных. В таблице заданы две ячейки, одна белая, другая черная, эти ячейки разбиты по секциям. В зависимости от того, четная ячейка или нет, она соответвенно и выводит необходимую секцию, чтобы формирование происходило по принципу шахматной доски, но пока не получается. Постоянно путаюсь.
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски
Если Я-цел(Я/2)=Я/2 Тогда / / проверка на четность или нечетность ячеек
Таб.ВывестиСекцию("Гор|Вер2");
Иначе
Таб.ВывестиСекцию("Гор|Вер1");
КонецЕсли;
Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски
Если (Ф-цел(Ф/2)=Ф/2) Тогда // проверка на четность или нечетность ячеек
Таб.ПрисоединитьСекцию("Гор|Вер1");
Иначе
Таб.ПрисоединитьСекцию("Гор|Вер2");
КонецЕсли;
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Таблица");
Процедура Сформировать()
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Горизонт=8; Вертикаль=8;
Ф=1;
Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски
Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски
Если Я+Ф-цел((Я+Ф)/2)=(Я+Ф)/2 Тогда // проверка на четность или нечетность ячеек
Если Ф=1 Тогда
Таб.ВывестиСекцию("Гор|Вер1");
Иначе
Таб.ПрисоединитьСекцию("Гор|Вер1");
КонецЕсли;
Иначе
Если Ф=1 Тогда
Таб.ВывестиСекцию("Гор|Вер2");
Иначе
Таб.ПрисоединитьСекцию("Гор|Вер2");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Таблица");
КонецПроцедуры
Процедура Сформировать()
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Горизонт=8; Вертикаль=8;
Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски
Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски
Если (Я+Ф)%2=0 Тогда //Спасибо Ёпрсту!!!
Если Ф=1 Тогда
Таб.ВывестиСекцию("Гор|Вер1");
Иначе
Таб.ПрисоединитьСекцию("Гор|Вер1");
КонецЕсли;
Иначе
Если Ф=1 Тогда
Таб.ВывестиСекцию("Гор|Вер2");
Иначе
Таб.ПрисоединитьСекцию("Гор|Вер2");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Таблица");
КонецПроцедуры
Процедура Сформировать()
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Горизонт=8; Вертикаль=8;
Ф=1;
Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски
Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски
Если Ф=1 Тогда
Таб.ВывестиСекцию("Гор|Вер"+((Я+Ф)%2+1));
Иначе
Таб.ПрисоединитьСекцию("Гор|Вер"+((Я+Ф)%2+1));
КонецЕсли;
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Шахматы");
КонецПроцедуры
Процедура Сформировать()
Таб=СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Горизонт=8; Вертикаль=8;
ПечЯчейка="";
Таб.ВывестиСекцию("Гор|Вер1");
Для Я=1 По Вертикаль Цикл
ПечЯчейка=Симв(65+Вертикаль-Я);
Таб.ПрисоединитьСекцию("Гор|Перевернутая");
КонецЦикла;
ПечЯчейка="";
Таб.ПрисоединитьСекцию("Гор|Вер1");
Для Я=1 по Горизонт Цикл // Горизонт - поле для ввода высоты доски
Для Ф=1 по Вертикаль Цикл //Вертикаль - поле для ввода ширины доски
Если Ф=1 Тогда
ПечЯчейка=Горизонт-Я+1;
Таб.ВывестиСекцию("Гор|Вер1");
ПечЯчейка="";
КонецЕсли;
Таб.ПрисоединитьСекцию("Гор|Вер"+((Я+Ф)%2+1));
Если Ф=Вертикаль Тогда
ПечЯчейка=Я;
Таб.ПрисоединитьСекцию("Гор|Перевернутая");
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПечЯчейка="";
Таб.ВывестиСекцию("Гор|Вер1");
Для Я=1 По Вертикаль Цикл
ПечЯчейка=Симв(64+Я);
Таб.ПрисоединитьСекцию("Гор|Вер1");
КонецЦикла;
ПечЯчейка="";
Таб.ПрисоединитьСекцию("Гор|Вер1");
Таб.ТолькоПросмотр(1);
Таб.Показать("Шахматы");
КонецПроцедуры
Необходимо ТОЛЬКО с помощью Таблицы значений вывести номенклатуру товаров и справа присоединить все склады с количеством. Выглядеть это должно примерно так:
Но, дальше вывода номенклатуры и присоединения первой секции со всем количеством, без разбивки по складам у меня не идет. Пробывал даже использовать, НЕПРАВИЛЬНЫЙ подход, одновременнно создовал две таблицы значений, одну сворачивал по номенклатуре, другую по складам, но все равно ни фига не получается.
Процедура Сформировать()
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ2=СоздатьОбъект("ТаблицаЗначений");
Таб=Создатьобъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
ТЗ.НоваяКолонка("Номенклатура");
ТЗ.НоваяКолонка("Склад");
ТЗ.НоваяКолонка("Количество","Число",10,0);
ТЗ2.НоваяКолонка("Номенклатура");
ТЗ2.НоваяКолонка("Склад");
ТЗ2.НоваяКолонка("Количество","Число",10,0);
Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");
Рег.ВыбратьДвижения();
Рег2=СоздатьОбъект("Регистр.ОстаткиТМЦ");
Рег2.ВыбратьДвижения();
Пока Рег.ПолучитьДвижение()=1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Номенклатура=Рег.Номенклатура;
ТЗ.Склад=Рег.Склад;
ТЗ.Количество=Рег.Количество;
//Вторая таблица значений
ТЗ2.НоваяСтрока();
ТЗ2.Номенклатура=Рег.Номенклатура;
ТЗ2.Склад=Рег.Склад;
ТЗ2.Количество=Рег.Количество;
КонецЦикла;
ТЗ.Свернуть("Номенклатура,Склад", "Количество");
ТЗ2.Свернуть("Склад", "Количество");
ТЗ.Сортировать("Номенклатура");
ТЗ2.Сортировать("Склад");
ТЗ.ВыбратьСтроки();
ТЗ2.ВыбратьСтроки();
Таб.ВывестиСекцию("Шапка|Товар");
Пока ТЗ2.ПолучитьСтроку()=1 Цикл
Таб.ПрисоединитьСекцию("Шапка|Склад");
КонецЦикла;
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Таб.ВывестиСекцию("Элемент|Товар");
Для Я=1 по ТЗ2.КоличествоСтрок() Цикл
Таб.ПрисоединитьСекцию("Элемент|Склад");
КонецЦикла;
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать()
КонецПроцедуры
Постарался от твоего строения алгоритма далеко не уходить! ))
Процедура Сформировать()
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ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);
Таб.Показать()
КонецПроцедуры
Показать
Что поменять в таблице см. в комментах!
Честно говоря не понимаю почему это нужно делать ТОЛЬКО с помощью ТЗ?! Ч/з запрос куда быстрее и удобнее!!!
(32) Поглядел мельком ветку. Некогда вчитываться. Идея подобная была! Сори за повторение... Но, тем не менее, мой код 100% рабочий... И имеет место быть! ) Лучше свой велосипед придумать и знать что и как работает. Чем с чужими возиться! Я так на все это смотрю! ))))
Спасибо!.. Ток задачу не рассматривал с точки зрения оптимизации скорости! Так и написал в шапке своего кода постарался алгоритм автора ветки особо не менять...
Тем не менее тема оптимизации оч. интересна! Нашел для себя кое что интересное. Спасибо еще раз!