Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
18 Дек 2017, 06:31
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Проблема с запросом в отчете 1с 7.7  (Прочитано 4800 раз)

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

Оффлайн damir-it

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-26
  • Сайт: 
  • Профессия: Программист 7.7
Здравствуйте уважаемые форумчане
осваивать программирование в 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

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
секции по структуре одинаковые? если да, то зачем их делать 100500 штук?
достаточно одной. в секции я так понял присутствуют переменные с данными сотрудника (ФИО, отдел и т.).
вот эти переменные у вас уже вычисляются на каждом шаге цикле и их достаточно выводить в одной секции.

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

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

Оффлайн damir-it

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-26
  • Сайт: 
  • Профессия: Программист 7.7
Уважаемый Herby я вас понял но дело в том что секции у меня определенного размера то есть пришлось их подгонять под определенную высоту строки не везде одинаковую у меня на листе два столбца в каждом должно быть по пять секций
 и можно поподробнее со списком значений хотя бы пример

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
1) в диалоге добавляете элемент диалога СписокЗначений - и называете его, например: сзСотрудники.

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

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

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

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


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

Оффлайн damir-it

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-26
  • Сайт: 
  • Профессия: Программист 7.7
спасибо Вам я уже понял свою ошибку, а секциями что делать? так же выводить все по одному? или как?

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
спасибо Вам я уже понял свою ошибку, а секциями что делать? так же выводить все по одному? или как?

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

Оффлайн damir-it

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-26
  • Сайт: 
  • Профессия: Программист 7.7
Уважаемый Herby все получилось , только вот все таки он выстраивает все в один столбец , а нельзя как нибудь присоединить секцию , что бы все десять сотрудников умещалось на один печатный лист? может построить какой нибудь цикл который после превышения 5 значений в спискеЗначений выводил бы секцию во вором столбце? или это в принципе не возможно в структуре 1С 7.7?

Оффлайн Herby

  • *****
  • Сообщений: 936
  • РЕПУТАЦИЯ: 164
  • КПД: 18%
  • Регистрация: 2010-08-31
  • Сайт: 
  • Профессия: Программист 7.7
или это в принципе не возможно в структуре 1С 7.7

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


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
133 Сообщений
ilyay ilyay
63 Сообщений
AIFrame
62 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
41 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

  • Точка Гостей: 223
  • Точка Скрытых: 0
  • Точка Пользователей: 1
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal