helpf.pro
Регистрация

v8: Макет

Ermak
31.03.2013 02:29Прочитано: 2144
Подскажите почему выводит только одно значение в макет, у меня их больше должно вывести

Код 1C v 8.х
 Процедура ОсновныеДействияФормыДействиеМакет(Кнопка)


ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ТабДок.Очистить();

Макет = ПолучитьМакет("ОтчетОбИсполненныхКонтрольныхПоручениях");
ОбластьЗаголовка = Макет.ПолучитьОбласть("Заголовок");

Если Дата1 = Дата(1, 1, 1) Или Дата2 = Дата(1, 1, 1) Тогда
СтрокаПериода = "";
Иначе
ОтчетНаДату = НачалоДня(Дата1) = НачалоДня(Дата2);

Если ОтчетНаДату Тогда
СтрокаПериода = " по состоянию на " + Формат(Дата1, "ДЛФ=Д");
Иначе
СтрокаПериода = " за " + НРег(ПредставлениеПериода(Дата1, КонецДня(Дата2), "ФП = Истина"));
КонецЕсли;
КонецЕсли;

ОбластьЗаголовка.Параметры.Заголовок = "Отчет об исполненных контрольных поручениях" + СтрокаПериода;
ТабДок.Вывести(ОбластьЗаголовка);

Пробел = Макет.ПолучитьОбласть("Пробел");
ТабДок.Вывести(Пробел);

Шапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Шапка);

Детали = Макет.ПолучитьОбласть("Детали");
Запрос = Новый Запрос (
"ВЫБРАТЬ
| УниверсальнаяЗадача.КомуНазначено КАК Исполнитель,
| УниверсальнаяЗадача.ЗадачаПоДокументу КАК ДокументНаименование,
| УниверсальнаяЗадача.КонтрольныйСрок КАК Срок
|ИЗ
| Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
|ГДЕ
| УниверсальнаяЗадача.КонтрольныйСрок МЕЖДУ &Дата1 И &Дата2
|
|УПОРЯДОЧИТЬ ПО
| УниверсальнаяЗадача.КонтрольныйСрок");
Запрос.УстановитьПараметр("Дата1",Дата1);
Запрос.УстановитьПараметр("Дата2",Дата2);
//Запрос.УстановитьПараметр("Организация",Организация);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Детали.Параметры.Исполнитель = Результат.Исполнитель;
Детали.Параметры.Срок = Результат.Срок;
Детали.Параметры.ДокументНаименование = Результат.ДокументНаименование;
КонецЦикла;
ТабДок.Вывести(Детали);



КонецПроцедуры
Yandex
Возможно, вас также заинтересует
Реклама на портале
Ermak
31.03.2013 03:53Ответ № 1
Разобрался!
Подскажите как теперь упорядочить, чтобы Исполнитель не повторялся 10 раз
DJ_Serega
31.03.2013 12:25Ответ № 2
(1) Ermak, пару строк с повтором можно?
E_Migachev
31.03.2013 12:52Ответ № 3
исполнитель повторяется этим циклом?
Код 1C v 8.х
 Пока Результат.Следующий() Цикл
Детали.Параметры.Исполнитель = Результат.Исполнитель;
Детали.Параметры.Срок = Результат.Срок;
Детали.Параметры.ДокументНаименование = Результат.ДокументНаименование;
КонецЦикла;
Ermak
31.03.2013 13:28Ответ № 4
(3) E_Migachev, я не понял вас.

Я тут вот так решил сделать

Код 1C v 8.х
 ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ТабДок.Очистить();

Макет = ПолучитьМакет("ОтчетОбНеИсполненныхКонтрольныхПоручениях");
ОбластьЗаголовка = Макет.ПолучитьОбласть("Заголовок");

Если Дата1 = Дата(1, 1, 1) Или Дата2 = Дата(1, 1, 1) Тогда
СтрокаПериода = "";
Иначе
ОтчетНаДату = НачалоДня(Дата1) = НачалоДня(Дата2);

Если ОтчетНаДату Тогда
СтрокаПериода = " по состоянию на " + Формат(Дата1, "ДЛФ=Д");
Иначе
СтрокаПериода = " за " + НРег(ПредставлениеПериода(Дата1, КонецДня(Дата2), "ФП = Истина"));
КонецЕсли;
КонецЕсли;

ОбластьЗаголовка.Параметры.Заголовок = "Отчет об не исполненных контрольных поручениях" + СтрокаПериода;
ТабДок.Вывести(ОбластьЗаголовка);

Пробел = Макет.ПолучитьОбласть("Пробел");
ТабДок.Вывести(Пробел);

Шапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Шапка);


Запрос = Новый Запрос (
"ВЫБРАТЬ
| УниверсальнаяЗадача.КомуНазначено КАК Исполнитель,
| УниверсальнаяЗадача.ЗадачаПоДокументу КАК ДокументНаименование,
| УниверсальнаяЗадача.КонтрольныйСрок КАК Срок
|ИЗ
| Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
|ГДЕ
| УниверсальнаяЗадача.КонтрольныйСрок МЕЖДУ &Дата1 И &Дата2
|
|УПОРЯДОЧИТЬ ПО
| УниверсальнаяЗадача.КонтрольныйСрок
|ИТОГИ ПО
| Исполнитель");
Запрос.УстановитьПараметр("Дата1",Дата1);
Запрос.УстановитьПараметр("Дата2",Дата2);
//Запрос.УстановитьПараметр("Организация",Организация);
Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Результат.Следующий() Цикл
Детали = Макет.ПолучитьОбласть("Детали");
Детали.Параметры.Исполнитель = Результат.Исполнитель;
Детали.Параметры.Срок = Результат.Срок;
Детали.Параметры.ДокументНаименование = Результат.ДокументНаименование;
ТабДок.Вывести(Детали);

КонецЦикла;

Но почему то стали пустые колонки Срок и ДокументНаименование
Ermak
31.03.2013 13:30Ответ № 5
(2) DJ_Serega, я имею ввиду, Исполнитель - Петров, ДокументНаименование - Поручение1, Поручение2 и ...,Срок - 12.03.2013, 12.05.2013 и ...
E_Migachev
31.03.2013 16:17Ответ № 6
(5) Ermak, у тебя запросом выводятся задачи по исполнителю, сколько строк в результате запроса, столько и выводится
Ermak
31.03.2013 16:21Ответ № 7
(6) E_Migachev, а как сделать как мне нужно?
E_Migachev
31.03.2013 17:50Ответ № 8
(7) Ermak, честно говоря - так невозможно понять что ты хочешь!? фильтруй результаты запроса как тебе нужно или при выборке накладывай какие-то условия и выводи только то что тебе нужно
Ermak
31.03.2013 19:17Ответ № 9
я уже перепробовал группировки и все не то, постараюсь объяснить что нужно. Вот так я сгруппировал

Код 1C v 8.х
 		
Запрос = Новый Запрос (
"ВЫБРАТЬ
| УниверсальнаяЗадача.КомуНазначено КАК КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок
|ИЗ
| Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
|ГДЕ
| УниверсальнаяЗадача.КонтрольныйСрок МЕЖДУ &Дата1 И &Дата2
|
|СГРУППИРОВАТЬ ПО
| УниверсальнаяЗадача.КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок");
Запрос.УстановитьПараметр("Дата1",Дата1);
Запрос.УстановитьПараметр("Дата2",Дата2);
//Запрос.УстановитьПараметр("Организация",Организация);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Детали = Макет.ПолучитьОбласть("Детали");
Детали.Параметры.Исполнитель = Результат.КомуНазначено;
Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;
ТабДок.Вывести(Детали);

КонецЦикла;


Получилось

title

а как сделать чтобы так получилось

title
DJ_Serega
01.04.2013 03:26Ответ № 10
(9) Ermak, Этот отчет я бы делал через СКД.
Если нужно объединять (как на последнем скрине), то только программным способом.
Ermak
01.04.2013 08:28Ответ № 11
(10) DJ_Serega, подскажите как программным способом это делается?
DJ_Serega
01.04.2013 10:42Ответ № 12
Код 1C v 8.х
 
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1R5C1").Объединить();

Я когда-то где-то делал объединение в 81. Если найду скину.
У меня была основная проблема определерния области которую нужно группировать )
Но я знаю, Вы разберетесь )
DJ_Serega
01.04.2013 10:51Ответ № 13
Вот так объединял области для подписей:
Код 1C v 8.х
 
ОбластьВерхнейСтрокиПодписи = ДокументРезультат.Область(НомерСтрокиДляПодписи,НомерЛевойКолонкиДляПодписи,НомерСтрокиДляПодписи,НомерПравойКолонкиДляПодписи);
ОбластьВерхнейСтрокиПодписи.Объединить();
Ermak
01.04.2013 12:42Ответ № 14
(13) DJ_Serega, Спасибо попробую
Ermak
01.04.2013 14:55Ответ № 15
Вы номера сами ставили что ли в переменных НомерСтрокиДляПодписи,НомерЛевойКолонкиДляПодписи,НомерСтрокиДляПодписи,НомерПравойКолонкиДляПодписи
DJ_Serega
01.04.2013 18:18Ответ № 16
(15) Ermak, Да. Анализировал текущее значение (которое помещал в ячейку), и если оно не совпадало, объединял ячейки (предыдущие)
Ermak
01.04.2013 18:25Ответ № 17
Ясно, а нет метода например, если значение ячейки колонка = 1 одинаковое тогда объединяем если разное тогда нет. Можно такое написать?
Изменено 01.04.13 18:25:42
DJ_Serega
01.04.2013 18:39Ответ № 18
(17) Ermak, а что именно объединять нужно? Нужно же указать что объединять )
Ermak
01.04.2013 18:48Ответ № 19
Первая колонка это параметр Исполнитель, если значение Исполнитель одинаковый то объединяем эту строки
DJ_Serega
01.04.2013 19:04Ответ № 20
(19) Ermak, Одинаковый с чем? с предыдущим. Ну так нужно знать начало ячейки объединения )
Ermak
01.04.2013 19:18Ответ № 21
Мы получили данные ячейки колонки = 1 строки = 1, потом переходим колонка = 1 строка = 2 и сравниваем значение строки = 1 и строки = 2, если значение одинаково тогда объединяем, и т.д
DJ_Serega
01.04.2013 19:49Ответ № 22
(21) Ermak, а где проблема?
Код 1C v 8.х
 
ТабДок.Область("R1C1R2C1").Объединить();
Ermak
01.04.2013 22:25Ответ № 23
А как условие тогда сделать чтобы он автомаческий искал в каждой строке, я тут накидал но что то не то

Код 1C v 8.х
 Стр1 = ТабДок.Область("R5C2").Значение;
Стр2 = ТабДок.Область("R6C2").Значение;

Если Стр1 = Стр2 Тогда
ТабДок.Область("R5C2R6C2").Объединить();
Иначе
КонецЕсли;
DJ_Serega
02.04.2013 10:56Ответ № 24
(23) Ermak, тебе нужно как-то так:
Код 1C v 8.х
 
Стр1 = ТабДок.Область("R5C2").Значение;
Стр2 = ТабДок.Область("R6C2").Значение;

Если Стр1 = Стр2 Тогда
ПоследняяСтрока = Стр2;
Иначе
ТабДок.Область("R5C2" + ПоследняяСтрока ).Объединить();
КонецЕсли;
Ermak
02.04.2013 16:29Ответ № 25
Выдает ошибку

{Форма.ОтчетОбНеИсполненныхКонтрольныхПоручениях.Форма(161)}: Поле объекта недоступно для чтения (Значение)
Стр1 = ТабДок.Область("R5C2").Значение;


Код 1C v 8.х
    Результат = Запрос.Выполнить().Выбрать();

а = новый массив;

Пока Результат.Следующий() Цикл
Детали = Макет.ПолучитьОбласть("Детали");
б = Результат.КомуНазначено;
Детали.Параметры.Исполнитель = б;
Если а.найти(б)= Неопределено тогда
а.добавить(б);
иначе
Детали.Параметры.Исполнитель = "";

КонецЕсли;
Стр1 = ТабДок.Область("R5C2").Значение;
Стр2 = ТабДок.Область("R6C2").Значение;

Если Стр1 = Стр2 Тогда
ПоследняяСтрока = Стр2;
Иначе
ТабДок.Область("R5C2" + ПоследняяСтрока ).Объединить();
КонецЕсли;
Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;
ТабДок.Вывести(Детали);

КонецЦикла;
DJ_Serega
02.04.2013 21:58Ответ № 26
(25) Ermak, извините, ничего не имею против. Но никогда не понимал переменных "а", "б" и тд. Другие же программисты могут в будущем смотреть в код (допустим что-то подправить, довывести ) Про красоту кода вообще молчу ) Может тему создадим какую-то (типа "курилки") на общие вопросы? *17


Я ж вас толкаю на правильное решение, а не пишу правильный код. У меня ж нет ни БД ни ТЗ, одно только желание помочь *09
По теме нужно писать так:
Код 1C v 8.х
 
Детали = Макет.ПолучитьОбласть("Детали");

КонечнаяСтрокаОбъединения = 1;
НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения;
ПредыдущийКомуНазначено = Неопределено;
Пока Результат.Следующий() Цикл

//+ Заполнение параметров области и вывод в табличный документ
КомуНазначено = Результат.КомуНазначено;

Детали.Параметры.КомуНазначено = КомуНазначено;

Если МассивИсполнителей.Найти(КомуНазначено) = Неопределено Тогда
МассивИсполнителей.Добавить(КомуНазначено);
Иначе
Детали.Параметры.Исполнитель = "";
КонецЕсли;

Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНайименование = Результат.ЗадачаПоДокументу;

ТабДок.Вывести(Детали);
//- Заполнение параметров области и вывод в табличный документ


Если ПредыдущийКомуНазначено = Неопределено Тогда
ПредыдущийКомуНазначено = КомуНазначено;
КонецЕсли;


Если НЕ ПредыдущийКомуНазначено = КомуНазначено
И НЕ НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения Тогда

ОбластьОбъединения = ТабДок.Область("R" + НачальнаяСтрокаОбъединения + "C" + "Тут укажите нужную колонку макета" + ":" + "R" + КонечнаяСтрокаОбъединения + "C" + "Тут укажите нужную колонку макета");

ОбластьОбъединения.Объединить();

НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения;

КонецЕсли;

КонечнаяСтрокаОбъединения = ТабДок.ВысотаТаблицы;

КонецЦикла;

Код рабочий на 101%. Не поленился и написал, так сказать вытянул на повехность то что уже залежалось *12
Ermak
03.04.2013 09:22Ответ № 27
Спасибо большое за код. Красиво написан не то что у меня )
Нашел не большие недочеты в коде и подправил

Код 1C v 8.х
 Детали = Макет.ПолучитьОбласть("Детали");

КонечнаяСтрокаОбъединения = 5;
НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения;
ПредыдущийКомуНазначено = Неопределено;

МассивИсполнителей = Новый Массив;

Пока Результат.Следующий() Цикл

//+ Заполнение параметров области и вывод в табличный документ
КомуНазначено = Результат.КомуНазначено;

Детали.Параметры.Исполнитель = КомуНазначено;

Если МассивИсполнителей.Найти(КомуНазначено) = Неопределено Тогда
МассивИсполнителей.Добавить(КомуНазначено);
Иначе
Детали.Параметры.Исполнитель = "";
КонецЕсли;

Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;

ТабДок.Вывести(Детали);
//- Заполнение параметров области и вывод в табличный документ


Если ПредыдущийКомуНазначено = Неопределено Тогда
ПредыдущийКомуНазначено = КомуНазначено;
КонецЕсли;


Если НЕ ПредыдущийКомуНазначено = КомуНазначено
И НЕ НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения Тогда

ОбластьОбъединения = ТабДок.Область("R" + НачальнаяСтрокаОбъединения + "C" + "2" + ":" + "R" + КонечнаяСтрокаОбъединения + "C" + "2");

ОбластьОбъединения.Объединить();

НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения;

КонецЕсли;

КонечнаяСтрокаОбъединения = ТабДок.ВысотаТаблицы;

КонецЦикла;


Но результат он выдал не такой который нужен

title

я так понимаю он объединил строки между R5C2 и последней а там тоже есть имена исполнителей, а по идеи должен сравнивать значение и если оно одинаковое то объединять
DJ_Serega
03.04.2013 20:06Ответ № 28
(27) Ermak, а оно лишее объединило?
Ах да... забыл уточнить, в запросе сортировку по объединяющему полю поставьте )
Ermak
04.04.2013 16:10Ответ № 29
Сортировку сделал, все равно тоже самое

Код 1C v 8.х
 Запрос = Новый Запрос (
"ВЫБРАТЬ
| УниверсальнаяЗадача.КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок КАК КонтрольныйСрок
|ИЗ
| Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
|ГДЕ
| УниверсальнаяЗадача.КонтрольныйСрок МЕЖДУ &Дата1 И &Дата2
| И УниверсальнаяЗадача.КомуНазначено.Организация В(&Организация)
| " + ?(ВидДокумента.Пустая(), "", "
| И УниверсальнаяЗадача.ЗадачаПоДокументу.ВидДокумента В ИЕРАРХИИ(&ВидДокумента)") + "
| " + ?(Подразделение.Пустая(), "", "
| И УниверсальнаяЗадача.ПодразделениеКомуНазначено В ИЕРАРХИИ(&Подразделение)") + "
|
|СГРУППИРОВАТЬ ПО
| УниверсальнаяЗадача.КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок
|
|УПОРЯДОЧИТЬ ПО
| КомуНазначено");



Запрос.УстановитьПараметр("Дата1",Дата1);
Запрос.УстановитьПараметр("Дата2",Дата2);
Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("ВидДокумента",ВидДокумента);
Запрос.УстановитьПараметр("Подразделение",Подразделение);
Результат = Запрос.Выполнить().Выбрать();

Детали = Макет.ПолучитьОбласть("Детали");

КонечнаяСтрокаОбъединения = 5;
НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения;
ПредыдущийКомуНазначено = Неопределено;

МассивИсполнителей = Новый Массив;

Пока Результат.Следующий() Цикл

//+ Заполнение параметров области и вывод в табличный документ
КомуНазначено = Результат.КомуНазначено;

Детали.Параметры.Исполнитель = КомуНазначено;

Если МассивИсполнителей.Найти(КомуНазначено) = Неопределено Тогда
МассивИсполнителей.Добавить(КомуНазначено);
Иначе
Детали.Параметры.Исполнитель = "";
КонецЕсли;

Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;

ТабДок.Вывести(Детали);
//- Заполнение параметров области и вывод в табличный документ


Если ПредыдущийКомуНазначено = Неопределено Тогда
ПредыдущийКомуНазначено = КомуНазначено;
КонецЕсли;


Если НЕ ПредыдущийКомуНазначено = КомуНазначено
И НЕ НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения Тогда

ОбластьОбъединения = ТабДок.Область("R" + НачальнаяСтрокаОбъединения + "C" + "2" + ":" + "R" + КонечнаяСтрокаОбъединения + "C" + "2");

ОбластьОбъединения.Объединить();

НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения;

КонецЕсли;

КонечнаяСтрокаОбъединения = ТабДок.ВысотаТаблицы;

КонецЦикла;

Я беру один и тот же период как должно охватить объединение как на картинках тут (9), я так понимаю, он оставляет только первую строчку и последнюю а остальные все объединяет, но в объединенных строчках есть еще другие исполнители, которых он не видет.
DJ_Serega
04.04.2013 22:50Ответ № 30
(29) Ermak, А вы логику заполнение поняли? *03
Я только что просмотрел код, и выявил, что где-то (почему-то) потерялось
Код 1C v 8.х
 ПредыдущийКомуНазначено = КомуНазначено;   
после
Код 1C v 8.х
 КонечнаяСтрокаОбъединения	= ТабДок.ВысотаТаблицы;   

Ну и получается, что "Предыдущий" не обновляется, и оно считает что все одинаковые *12
Ermak
05.04.2013 09:38Ответ № 31
Исправил все равно тоже самое

Код 1C v 8.х
 		
Запрос = Новый Запрос (
"ВЫБРАТЬ
| УниверсальнаяЗадача.КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок КАК КонтрольныйСрок
|ИЗ
| Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
|ГДЕ
| УниверсальнаяЗадача.КонтрольныйСрок МЕЖДУ &Дата1 И &Дата2
| И УниверсальнаяЗадача.КомуНазначено.Организация В(&Организация)
| " + ?(ВидДокумента.Пустая(), "", "
| И УниверсальнаяЗадача.ЗадачаПоДокументу.ВидДокумента В ИЕРАРХИИ(&ВидДокумента)") + "
| " + ?(Подразделение.Пустая(), "", "
| И УниверсальнаяЗадача.ПодразделениеКомуНазначено В ИЕРАРХИИ(&Подразделение)") + "
|
|СГРУППИРОВАТЬ ПО
| УниверсальнаяЗадача.КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок
|
|УПОРЯДОЧИТЬ ПО
| КомуНазначено");



Запрос.УстановитьПараметр("Дата1",Дата1);
Запрос.УстановитьПараметр("Дата2",Дата2);
Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("ВидДокумента",ВидДокумента);
Запрос.УстановитьПараметр("Подразделение",Подразделение);
Результат = Запрос.Выполнить().Выбрать();

Детали = Макет.ПолучитьОбласть("Детали");

КонечнаяСтрокаОбъединения = 5;
НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения;
ПредыдущийКомуНазначено = Неопределено;

МассивИсполнителей = Новый Массив;

Пока Результат.Следующий() Цикл

//+ Заполнение параметров области и вывод в табличный документ
КомуНазначено = Результат.КомуНазначено;

Детали.Параметры.Исполнитель = КомуНазначено;

Если МассивИсполнителей.Найти(КомуНазначено) = Неопределено Тогда
МассивИсполнителей.Добавить(КомуНазначено);
Иначе
Детали.Параметры.Исполнитель = "";
КонецЕсли;

Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;

ТабДок.Вывести(Детали);
//- Заполнение параметров области и вывод в табличный документ


Если ПредыдущийКомуНазначено = Неопределено Тогда
ПредыдущийКомуНазначено = КомуНазначено;
КонецЕсли;


Если НЕ ПредыдущийКомуНазначено = КомуНазначено
И НЕ НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения Тогда

ОбластьОбъединения = ТабДок.Область("R" + НачальнаяСтрокаОбъединения + "C" + "2" + ":" + "R" + КонечнаяСтрокаОбъединения + "C" + "2");

ОбластьОбъединения.Объединить();

НачальнаяСтрокаОбъединения = КонечнаяСтрокаОбъединения;

КонецЕсли;

КонечнаяСтрокаОбъединения = ТабДок.ВысотаТаблицы;
ПредыдущийКомуНазначено = КомуНазначено;

КонецЦикла;
Ermak
09.04.2013 14:58Ответ № 32
???
Ermak
11.04.2013 12:10Ответ № 33
Вот так пытаюсь сделать объединения но что то не выходит

Код 1C v 8.х
     Результат = Запрос.Выполнить().Выбрать();

Детали = Макет.ПолучитьОбласть("Детали");
Детали.Параметры.Исполнитель = Результат.КомуНазначено;
Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;
ТабДок.Вывести(Детали);

НомСлед = "";
НомПред = "";
КолПовтор = 2;
К = 0;

Пока Результат.Следующий() Цикл
НомСлед = Результат.КомуНазначено;
КолПовтор = КолПовтор + 1;
Если НомСлед = НомПред Тогда
К = К + 1;
//Объединяем ячейки по колонке "Исполнитель"
ОбластьИсполнитель = ТабДок.Область(КолПовтор - К,1,КолПовтор,1);
ОбластьИсполнитель.Объединить();
ОбластьИсполнитель.Текст = Детали.Параметры.Исполнитель;
КонецЕсли;

Если НомСлед <> НомПред Тогда
К = 0;
КонецЕсли;

НомПред = НомСлед;
НомСлед = "";
КонецЦикла;
DJ_Serega
11.04.2013 12:39Ответ № 34
(33) Ermak, лишее объединяет или вообще не объединяет?
Ermak
11.04.2013 13:45Ответ № 35
показывает шапку (Шапка = Макет.ПолучитьОбласть("Шапка")
) и первую пустую строку (Детали = Макет.ПолучитьОбласть("Детали")) и все
DJ_Serega
11.04.2013 15:49Ответ № 36
Нужно
Код 1C v 8.х
 
Детали = Макет.ПолучитьОбласть("Детали");
Детали.Параметры.Исполнитель = Результат.КомуНазначено;
Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;
ТабДок.Вывести(Детали);

в цикле выводить.
Ermak
11.04.2013 16:54Ответ № 37
Сделал но теперь какой то бред выдает

title

Код 1C v 8.х
 Результат = Запрос.Выполнить().Выбрать();


НомСлед = "";
НомПред = "";
КолПовтор = 2;
К = 0;

Пока Результат.Следующий() Цикл
Детали = Макет.ПолучитьОбласть("Детали");
Детали.Параметры.Исполнитель = Результат.КомуНазначено;
Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;
ТабДок.Вывести(Детали);

НомСлед = Детали.Параметры.Исполнитель;
КолПовтор = КолПовтор + 1;
Если НомСлед = НомПред Тогда
К = К + 1;
//Объединяем ячейки по колонке "Исполнитель"
ОбластьИсполнитель = ТабДок.Область(КолПовтор - К,1,КолПовтор,1);
ОбластьИсполнитель.Объединить();
ОбластьИсполнитель.Текст = Детали.Параметры.Исполнитель;
КонецЕсли;

Если НомСлед <> НомПред Тогда
К = 0;
КонецЕсли;

НомПред = НомСлед;
НомСлед = "";
КонецЦикла;
DJ_Serega
11.04.2013 17:58Ответ № 38
а где бред?
Ermak
11.04.2013 18:30Ответ № 39
(38) DJ_Serega, он создал еще одну колонку и в колонки Отв. исполнитель опять в каждой строчке ФИО, так не должно быть
DJ_Serega
11.04.2013 18:34Ответ № 40
(39) Ermak, значит ошиблись с номером колонки, которую нужно объединить.
Ermak
11.04.2013 18:58Ответ № 41
(40) DJ_Serega, я так понимаю этой строкой мы определяем колонку

Код 1C v 8.х
 ОбластьИсполнитель.Текст = Детали.Параметры.Исполнитель;    
почему тогда другую объединяет не пойму
DJ_Serega
11.04.2013 20:07Ответ № 42
(41) Ermak, ручками напишите номер колонки ;)
Ermak
11.04.2013 20:39Ответ № 43
что то я запутался *01

написал я ручками
Код 1C v 8.х
 ОбластьИсполнитель.Текст = "Отв. исполнитель";    

и в колонки который не должно быть появилось имя Отв. исполнитель, я тогда совсем не понимаю где прописывается номер колонки. Вообще я делал по примеру с форму

Код 1C v 8.х
 Процедура ПоКнопкеПечать()
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
Таб.ВывестиСекцию("ЗагТабл");
ВыбратьСтроки();

НомПред="";НомСлед=""; КолПовтор=7; к=0;

Пока ПолучитьСтроку() = 1
Цикл
Таб.ВывестиСекцию("СтрокаТабл");
НомСлед=СокрЛП(НомЗаявки);
КолПовтор=КолПовтор+1;
Если НомСлед=НомПред
тогда
к=к+1;
//Объединяем ячейки с одинаковым номером
Область = Таб.Область(КолПовтор-к,1,КолПовтор,1);
Область.Объединить();
Область.Текст = НомСлед;
//Объединяем ячейки по колонке "Плательщик"
Область1 = Таб.Область(КолПовтор-к,2,КолПовтор,2);
Область1.Объединить();
Область1.Текст = Плательщик;
//Объединяем ячейки по колонке "Получатель"
Область2 = Таб.Область(КолПовтор-к,3,КолПовтор,3);
Область2.Объединить();
Область2.Текст = Получатель;
//Объединяем ячейки по колонке "Итого"
Область3 = Таб.Область(КолПовтор-к,8,КолПовтор,8);
Область3.Объединить();
Область3.Текст = СуммаИтог;
КонецЕсли;

Если НомСлед<>НомПред
тогда
к=0;
КонецЕсли;

НомПред=НомСлед;НомСлед="";
КонецЦикла;

Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(0);
Таб.ПараметрыСтраницы(2,,,,,,,,,,,);
Таб.Показать("Таблица");
КонецПроцедуры


title
DJ_Serega
11.04.2013 20:47Ответ № 44
(43) Ermak, похоже на то *16

я имел ввиду про
Код 1C v 8.х
 ОбластьИсполнитель = ТабДок.Область(КолПовтор - К,1,КолПовтор,1);   

Почему 1? Почему не 2?
Ermak
11.04.2013 21:00Ответ № 45
сделал так
Код 1C v 8.х
 ОбластьИсполнитель = ТабДок.Область(КолПовтор - К,2,КолПовтор,2);   


теперь вот такой результат

title

а нужно вот так без объединения

title
Ermak
16.04.2013 08:31Ответ № 46
????
DJ_Serega
16.04.2013 11:59Ответ № 47
(46) Ermak, кто после данилова идет?
Ermak
16.04.2013 13:31Ответ № 48
Кузнецов

вот как должно быть, только должны ячейки быть объединены

title
DJ_Serega
16.04.2013 15:57Ответ № 49
(48) Ermak, так он только первую строчку "кушает"? остальные правильно объединяются?
Ermak
16.04.2013 16:49Ответ № 50
Нет, я вообще не понимаю как он объединяет.
Вот так правильно только без объединения

title


а вот так с объединением


title
Изменено 16.04.13 16:49:47
Ermak
17.04.2013 15:40Ответ № 51
?????
Ermak
18.04.2013 16:05Ответ № 52
я так понимаю ответа нет на мой вопрос *11
Gonzik2
18.04.2013 17:11Ответ № 53
Попробуй такой код немного подшаманил
Код 1C v 8.х
 
Результат = Запрос.Выполнить().Выбрать();

НомСлед = "";
НомПред = "";
//КолПовтор = ТабДок.ВысотаТаблицы; //откуда начинаем объединять
К = 0;
Пока Результат.Следующий() Цикл
НомСлед = Результат.КомуНазначено;
Если (НомСлед <> НомПред)И(НомПред <> "") Тогда
//Объединяем ячейки по колонке "Исполнитель"
ОбластьИсполнитель = ТабДок.Область(ТабДок.ВысотаТаблицы-К,2,ТабДок.ВысотаТаблицы,2);
Если (К > 1) Тогда//+
ОбластьИсполнитель.Объединить();
КонецЕсли;//+
ОбластьИсполнитель.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ОбластьИсполнитель.Текст = Детали.Параметры.Исполнитель;
К = 0;
КонецЕсли;
НомПред = НомСлед;
Детали = Макет.ПолучитьОбласть("Детали");
Детали.Параметры.Исполнитель = Результат.КомуНазначено;
Детали.Параметры.Срок = Результат.КонтрольныйСрок;
Детали.Параметры.ДокументНаименование = Результат.ЗадачаПоДокументу;
ТабДок.Вывести(Детали);
К = К + 1;
КонецЦикла;
Если (К > 1) Тогда
//Объединяем ячейки по колонке "Исполнитель" последний исполнитель
ОбластьИсполнитель = ТабДок.Область(ТабДок.ВысотаТаблицы-К,2,ТабДок.ВысотаТаблицы,2);
ОбластьИсполнитель.Объединить();
ОбластьИсполнитель.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ОбластьИсполнитель.Текст = Детали.Параметры.Исполнитель;
К = 0;
КонецЕсли;


добавил условие //+
Изменено 18.04.13 17:37:34
Ermak
18.04.2013 17:24Ответ № 54
(53) Gonzik2, Спасибо за поддержку но выдала не тот результат *03

title
Gonzik2
18.04.2013 17:34Ответ № 55
я услокие К > 1 переместил внутрь поробуй еще раз скопировать мой код
Ermak
18.04.2013 20:23Ответ № 56
(55) Gonzik2, я заменил эту строку вот так, у тебя выдавала ошибку

Код 1C v 8.х
 	  
ОбластьИсполнитель.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
ОбластьИсполнитель.Текст = Результат.КомуНазначено;
К = 0;


вот что получилось

title
Gonzik2
19.04.2013 11:39Ответ № 57
исправь +1 в двух местах
ОбластьИсполнитель = ТабДок.Область(ТабДок.ВысотаТаблицы-К+1,2,ТабДок.ВысотаТаблицы,2);
и тут НомПред в двух местах
ОбластьИсполнитель.Текст = НомПред;

должно заработать у меня работает
Изменено 19.04.13 11:40:27
Ermak
19.04.2013 12:58Ответ № 58
(57) Gonzik2, ура!!! *05 Спасибо большое очень вырубили
Ermak
19.04.2013 12:58Ответ № 59
Вопрос закрыт!
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.