Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 окт 2022, 08:16

Создать "Шахматную доску", вывести в печатную форму 1С

Автор Martin_Eden, 15 апр 2022, 10:23

0 Пользователей и 1 гость просматривают эту тему.

Martin_Eden

Здравствуйте, нужно вывести в печатную форму из табличного документа ячейки черного и белого цвета в шахматном порядке.
Пока есть такое решение и такой результат:   
   
    Ширина = 5;
   Высота = 4;
   
   ПервыйСимвол = 0;
   ВторойСимвол = 1;
   
   ПерваяЯчейка = Макет.ПолучитьОбласть("ЯчейкаЧерная");
   ВтораяЯчейка = Макет.ПолучитьОбласть("ЯчейкаБелая");
   Массив = Новый Массив(Высота,Ширина);
   
   
   Для Поз1=0  По  1 Цикл
      Для Поз2 = 0 По 4 Цикл
         Если (Поз1+Поз2)%2= 0 Тогда
            ПечатнаяФорма.Присоединить(ПерваяЯчейка);            
         Иначе
            ПечатнаяФорма.Присоединить(ВтораяЯчейка);
         КонецЕсли;
         //   //Значения = Значения + Массив[Поз1][Поз2];
         //   ПечатнаяФорма.Присоединить(Массив[Поз1][Поз2]);
         //
      КонецЦикла;
      Если (Поз1+Поз2)%2 = 0 Тогда
         ПечатнаяФорма.Вывести(ПерваяЯчейка);            
      Иначе
         ПечатнаяФорма.Вывести(ВтораяЯчейка);
      КонецЕсли;      
   КонецЦикла;
   
   
   
   Возврат ПечатнаяФорма;

Помогите, если есть такая возможность.

LexaK

Martin_Eden, там возможна куча вариантов, вот один
(правда не проверял, попробуйте исправить неточности/ошибки, если не получится пишите)
   Ширина = 5;
   Высота = 4;
   
   ПервыйСимвол = 0;
   ВторойСимвол = 1;
   
   ПерваяЯчейка = Макет.ПолучитьОбласть("ЯчейкаЧерная");
   ВтораяЯчейка = Макет.ПолучитьОбласть("ЯчейкаБелая");
   //Массив = Новый Массив(Высота,Ширина); //это зачем?
   
   ТекущаяЯчейка = ПерваяЯчейка;
   Для Поз1=0  По  Высота Цикл
   Для Поз2 = 0 По Ширина Цикл
//формируем строку из чередующихся ячеек   
лкСтрокаТабДока = Новый ТабличныйДокумент;
        лкСтрокаТабДока.Присоединить(ТекущаяЯчейка);           
//меняем/чередуем на другую
ТекущаяЯчейка = ?(ТекущаяЯчейка = ПерваяЯчейка,ВтораяЯчейка,ПерваяЯчейка);
      КонецЦикла;
      //добавляем готовую строку
      ПечатнаяФорма.Вывести(лкСтрокаТабДока);           
   КонецЦикла;
   
   Возврат ПечатнаяФорма;
если помогло нажмите: Спасибо!

Martin_Eden

LexaK,  нет, не выходит.. выводит в одну колонку белого цвета. Я не совсем понимаю логику данного решения. Не могли бы вы помочь допилить мою, думаю она почти готова, есть некоторые недочеты. Была попытка Массивом решить, что то вроде записать готовую строку в переменную, а ее вывести в печатную форму, с последним этапом возникли проблемы.

Измененный код, он строит доску, но только при четной ширине и высоте, иначе начинает дублировать цвета... 

Высота = 5;
Ширина = 5;

ПервыйСимвол = 0;
ВторойСимвол = 1;

ПерваяЯчейка = Макет.ПолучитьОбласть("ЯчейкаЧерная");
ВтораяЯчейка = Макет.ПолучитьОбласть("ЯчейкаБелая");
//Массив = Новый Массив(Высота,Ширина);
Поз1 = 0;
Поз2 = 0;

Для Поз1 = 0  По  Высота - 1 Цикл

Если (Поз1+Поз2)%2 = 0 Тогда
ПечатнаяФорма.Вывести(ПерваяЯчейка);
Иначе
ПечатнаяФорма.Вывести(ВтораяЯчейка);
КонецЕсли;

Для Поз2 = 1 По Ширина -1  Цикл
Если (Поз1+Поз2)%2  =  0 Тогда
ПечатнаяФорма.Присоединить(ПерваяЯчейка);
Иначе
ПечатнаяФорма.Присоединить(ВтораяЯчейка);
КонецЕсли;
// //Значения = Значения + Массив[Поз1][Поз2];
// ПечатнаяФорма.Присоединить(Массив[Поз1][Поз2]);
//
КонецЦикла;


КонецЦикла;

Возврат ПечатнаяФорма;

Martin_Eden

LexaK, все, заработало,нужно было обнулить Поз2 перед началом условия. Спасибо )

LexaK

Martin_Eden, это хорошо что заработало, а вот и пример,
если интересно посмотрите
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск