Два способа, как заполнить таблицу значений 1С по колонкам

В этой статье разберем два способа, как можно  заполнить таблицу значений 1С по колонкам.  Поясним, что значит заполнить таблицу по колонкам. «Заполнить по колонкам» означает, что сначала заполним какими-то значениями первую колонку, потом вторую и т.д. В первом способе реализуем простое заполнение, а во втором заполним «красиво». Суть второго способа взята из книги «Конкретная математика. Математические основы информатики»  авторов Грэхем, Кнут и Паташник.  Статья больше теоретическая, но поможет понять как работать с таблицами значений, если вы в начале своего пути освоения программирования в 1С.

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

Таблица значений на форме 1С

Наша задача заполнить все колонки по порядку. На форме создан реквизит КоличествоЯчеек – именно столько ячеек у таблицы должно быть заполнено.  Мы сначала заполняем одну колонку, потом вторую и так далее до пятой.

В первом способе, сразу определим количество строк таблицы, которые будут заполнены, и у каждой колонки будем заполнять это количество строк поэтапно, пока не кончится количество заданных ячеек. Получится такой результат:

Заполнение таблицы значений 1С

Этот способ реализован следующим образом:

&НаКлиенте
Процедура ЗаполнитьОбычно(Команда)
   
Таблица.Очистить();

   
КоличестовКолонок = 5;
   
КоличествоСтрок = ?(Цел(КоличествоЯчеек / КоличестовКолонок) = КоличествоЯчеек / КоличестовКолонок,
                       
КоличествоЯчеек / КоличестовКолонок,
                       
Цел(КоличествоЯчеек / КоличестовКолонок)  + 1);

    Для
н = 1 по КоличествоСтрок Цикл
       
НовСтр = Таблица.Добавить();
    КонецЦикла;
   
яч = 1;
    Пока
яч <= КоличествоЯчеек Цикл

        Для
к = 1 по КоличестовКолонок Цикл
            Для
с = 0 по КоличествоСтрок 1 Цикл
               
Таблица[с]["Колонка" + к] = яч;
               
яч = яч + 1;
                Если
яч > КоличествоЯчеек Тогда
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;

КонецПроцедуры

Здесь, мы определяем количество строк, которые будут в таблице, деля количество ячеек, которые нужно заполнить, на количество колонок. Если деление целое, то это и будет нужное количество строк, в противном же случае берем целое количество от результата деления и увеличиваем результат деления на 1.

Дальше, мы в цикле Пока по порядку, начиная с 1 перечисляем все ячейки, которые нужно заполнить, и уже внутри цикла по ячейкам делаем два вложенных цикла по таблице: в первом цикле обходим колонки таблицы, а во втором обходим строки таблицы, и поэтапно заполняем .

Во втором способе, который сделан на основе алгоритма из книги «Конкретная математика. Математические основы информатики»  авторов Грэхем, Кнут и Паташник (гл. 3.4, стр. 115), мы изначально создадим пустые строки у таблицы значений (этого в каноническом алгоритме не было, просто особенность программирования  в 1С), а потом для каждой колонки будем определять, сколько цифр в ней должно быть, т.е. сколько строк таблицы значений мы заполним цифрами. В результате, у нас получится более красивое заполнение таблицы.

Заполнение таблицы значений 1С

У этого алгоритма следующая реализация:

&НаКлиенте
Процедура ЗаполнитьКрасиво(Команда)
   
Таблица.Очистить();

   
КоличестовКолонок = 5;

   
КоличествоСтрок = ?(Цел(КоличествоЯчеек / КоличестовКолонок) = КоличествоЯчеек / КоличестовКолонок,
                       
КоличествоЯчеек / КоличестовКолонок,
                       
Цел(КоличествоЯчеек / КоличестовКолонок)  + 1);
   
//создаем пустые строки
   
Для н = 1 по КоличествоСтрок Цикл
       
НовСтр = Таблица.Добавить();
    КонецЦикла;
   
яч = 1;

   
ЯчейкиЗаполнения = КоличествоЯчеек;
   
КолонкиЗаполнения = КоличестовКолонок;

    Пока
яч <= КоличествоЯчеек Цикл

        Для
к = 1 по КоличестовКолонок Цикл

           
//определяем количество строк, которые заполним
           
КоличествоСтрок = ?(Цел(ЯчейкиЗаполнения / КолонкиЗаполнения) = ЯчейкиЗаполнения / КолонкиЗаполнения,
                               
ЯчейкиЗаполнения / КолонкиЗаполнения,
                               
Цел(ЯчейкиЗаполнения / КолонкиЗаполнения)  + 1);

           
Заполненные = 0;

            Для
с = 0 по КоличествоСтрок 1 Цикл
               
Таблица[с]["Колонка" + к] = яч;
               
яч = яч + 1;
               
Заполненные = Заполненные + 1;
                Если
яч > КоличествоЯчеек Тогда
                    Прервать;
                КонецЕсли;
            КонецЦикла;

           
ЯчейкиЗаполнения = ЯчейкиЗаполнения Заполненные;
           
КолонкиЗаполнения = КолонкиЗаполнения 1;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

В этой реализации, мы также определяем общее количество строк, которое должно быть в таблице значений, и также делаем три вложенных цикла: в первом цикле перечисляем все ячейки по порядку, во втором цикле обходим колонки, а в третьем заполняем по строкам ячейки таблицы. Но, уже в цикле по колонкам мы каждый раз в начале цикла определяем то количество строк, которое должно быть заполнено, для этого мы уже в конце цикла по колонкам каждый раз считаем, сколько у нас ячеек осталось заполнить после обхода колонки, и сколько колонок тоже осталось заполнить. Количество строк, которые будут заполны у колонки мы определяем, получая целое количество от оставшегося количества ячеек, деленное от оставшегося количества колонок. Если деление ровное, т.е. без остатка это и будет нужное количество строк, в противном случае увеличиваем результат деления на 1.

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»


Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Добавить комментарий

Ваш адрес email не будет опубликован.