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

Проблема с запросом в отчете 1с 7.7

Автор damir-it, 26 июн 2014, 09:01

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

damir-it

Здравствуйте уважаемые форумчане
осваивать программирование в 1с 7.7 начал недавно поэтому сильно не "пинайте",
на работе возникла необходимость создать форму отчета по сотрудникам предприятия в виде визиток то есть на одном листе должно быть размещено десять секций с информацией о сотрудниках , то есть одна секция для одного сотрудника с его данными : табельный номер, ФИО, отдел, должность и тд,Сначала я написал запрос , потом в форму диалога поместил для начала два поля ввода с типом Справочник.Сотрудники все получилось . но потом добавил еще два поля ввода то есть уже получилось четыре секции на печатной форме и вот тут он стал заполнять мне форму либо одного и того же сотрудника на две секции подряд либо на все сразу по два одинаковых сотрудника либо вообще пустоту, видимо сам цикл я написал неправильно вот образец кода:
     Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Сотрудники = Справочник.Сотрудники.ТекущийЭлемент;
   |ТабНом = Справочник.Сотрудники.Код;
   |Подразд = Справочник.Сотрудники.Подразделение;
   |Цех =  Справочник.Сотрудники.Цех;
   |Долж =  Справочник.Сотрудники.Должность;
   |Серия =  Справочник.Сотрудники.ДокументСерия;
   |Номер =  Справочник.Сотрудники.ДокументНомер;
   |Наименование = Справочник.Сотрудники.Наименование;
   |ДатаПр =  Справочник.Сотрудники.ДатаПриема;
   |Группировка Сотрудники упорядочить по Сотрудники.Код, Сотрудники.Наименование, Сотрудники.Подразделение, Сотрудники.Цех, Сотрудники.ДокументСерия, Сотрудники.ДокументНомер, Сотрудники.Должность, Сотрудники.ДатаПриема без групп;
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
      Возврат;
   КонецЕсли;
 
   
   
   
   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
      Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл

    // Заполнение полей Сотрудники
      
   Фамилия = "";
   Имя = "";
   Отчество = "";
   ФамилияИмяОтчество = СокрЛП(Запрос.Наименование);
   ПозицияПервогоПробела = Найти(ФамилияИмяОтчество," ");
   Фамилия = Лев(ФамилияИмяОтчество,ПозицияПервогоПробела-1);
   ИмяОтчетсво = Прав(ФамилияИмяОтчество,СтрДлина(ФамилияИмяОтчество)-ПозицияПервогоПробела);
   ПозицияВторогоПробела = Найти(ИмяОтчетсво," ");
   Имя = Лев(ИмяОтчетсво,ПозицияВторогоПробела-1);
   Отчество = Прав(ИмяОтчетсво,СтрДлина(ИмяОтчетсво)-ПозицияВторогоПробела);      

      
   Если Запрос.Сотрудники = таб1 Тогда   
       Таб.ВывестиСекцию("Секция_1"); 

   КонецЕсли;   

   
    Если Запрос.Сотрудники = таб2 Тогда   
       Таб.ВывестиСекцию("Секция_2"); 

   КонецЕсли;
   
   
    Если Запрос.Сотрудники = таб3 Тогда   
       Таб.ВывестиСекцию("Секция_3"); 
   
   КонецЕсли;
   
   Если Запрос.Сотрудники = таб4 Тогда   
       Таб.ВывестиСекцию("Секция_4"); 

   КонецЕсли;
       

КонецЦикла;
   
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   
   Таб.Показать("Сформировать", "");   


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

еще раз повторюсь я только начал осваивать программирование , таб1 таб2 таб3 и таб4 это реквезиты формы диалога с типом Справочник.Сотрудники, пожалуйста подскажите где я ошибся
с Уважением Дамир

Herby

секции по структуре одинаковые? если да, то зачем их делать 100500 штук?
достаточно одной. в секции я так понял присутствуют переменные с данными сотрудника (ФИО, отдел и т.).
вот эти переменные у вас уже вычисляются на каждом шаге цикле и их достаточно выводить в одной секции.

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

|Условие (Сотрудники в сзСотрудники);   где - сзСотрудники - название вашего списка на форме.

damir-it

Уважаемый Herby я вас понял но дело в том что секции у меня определенного размера то есть пришлось их подгонять под определенную высоту строки не везде одинаковую у меня на листе два столбца в каждом должно быть по пять секций
и можно поподробнее со списком значений хотя бы пример

Herby

1) в диалоге добавляете элемент диалога СписокЗначений - и называете его, например: сзСотрудники.

2) удаляете все реквизиты таб2. та3, таб4. оставляете один реквизит Таб1.

3) добавляете кнопку "Добавить сотрудника в список". В формуле этой кнопки пишите имя процедуры, например ДобавитьСотрудника().

4) далее входите в модуль и добавляете процедуру:
Процедура ДобавитьСотрудника()
  сзСотрудники.ДобавитьЗначение(Таб1);
КонецПроцедуры


5) далее в тексте запроса добавляете условие:
|Условие (сотрудники в сзСотрудники);


Ну примерно как-то так... лучше конечно добавлять сотрудников в список через обработку подбора, но для вас наверное пока лучше так...

damir-it

спасибо Вам я уже понял свою ошибку, а секциями что делать? так же выводить все по одному? или как?

Herby

Цитата: damir-it от 26 июн 2014, 10:35спасибо Вам я уже понял свою ошибку, а секциями что делать? так же выводить все по одному? или как?

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

damir-it

Уважаемый Herby все получилось , только вот все таки он выстраивает все в один столбец , а нельзя как нибудь присоединить секцию , что бы все десять сотрудников умещалось на один печатный лист? может построить какой нибудь цикл который после превышения 5 значений в спискеЗначений выводил бы секцию во вором столбце? или это в принципе не возможно в структуре 1С 7.7?

Herby

Цитата: damir-it от 26 июн 2014, 11:36или это в принципе не возможно в структуре 1С 7.7

возможно.. метод ПрисоединитьСекцию()

Теги:

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

Рейтинг@Mail.ru

Поиск