8.х Помогите с элементарными повторяющимися наименованиями

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Элен, 3 фев 2011.

  1. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Формирую Акт об оказании услуг. При выводе печатной формы исполнителей несколько и есть повторы. Т.е. В Акт подвязаны исполнители по конкретному наименованию работы...далее таблица. Мне нужно чтобы в данной строке Исполнители, не было повторяющихся фамилий. Т.е. чтобы при выводе печатной формы сисетма уже удалила повторяющиеся значения ФИО. У меня там большой запрос и не только. Поэтому, чем можете помогите. Делала и через НайтиСтроку, но чет как то вообще не в ту степь. Натолкните на мысль, какой синтаксис брать.
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Запрос показывайте.
    А так, в общем, используйте ключевое слово "РАЗЛИЧНЫЕ", т.е. "ВЫБРАТЬ РАЗЛИЧНЫЕ * ИЗ * ГДЕ".
  3. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Приложила внешнюю обработку. В общем модуле и интересуют "Исполнители"

    Вложения:

  4. Isberg
    Offline

    Isberg Опытный в 1С

    Регистрация:
    4 май 2010
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Хотел уже посмотреть как работает, но понял что у меня в ТЧ нет поля исполнители :) Что за конфигурация?
  5. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    1С:Предприятие 8.1 (8.1.15.14).Управление производственным предприятием, редакция 1.2 + CRM ПРОФ, редакция 1.2 (1.2.29/1.2.5) (1.2.29.1)

    Ах да, док-т на который ссылается "Реализация товаров и услуг", его чуть и меняла. Добавляла во вкладке Услуги, колонку "Исполнители" и выносила галочку - несколько исполнителей.
  6. Isberg
    Offline

    Isberg Опытный в 1С

    Регистрация:
    4 май 2010
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Т.е. если я добавлю реквизит в ТЧ "Исполнители", сделаю ссылку на справочник контрагентов, то будет примерно тоже самое? И для каждой строки в ТЧ может быть разный исполнитель?
  7. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Да, только ссылаюсь я на СправочникСсылка.СотрудникиОрганизаций.
    Может быть и один исполнитель с разными номенклатурами. Тогда там все без изменений. Но если стоит галка несколько исполнителей тогда в табличной части могут быть разные или одинаковые наименования с разными ФИО Исполнителей или одинаковыми. У меня сейчас в печатной форме и выводятся ФИО как они есть в колонках, но дублирующихся фио мне не надо). В целом да, все будет работать
  8. Isberg
    Offline

    Isberg Опытный в 1С

    Регистрация:
    4 май 2010
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Так в макет выводится же построчно информация, можно написать цикл который сравнивает текущую строку со следующей, и если повторяется контрагент то просто ее не выводить.
    Просто я делал примерно тоже самое в бухгалтерии с дублирующимися документами.

    Либо после запроса перегнать в ТЗ, которую отфильтровать от двойников.
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Элен, я так же не могу просмотреть, поэтому поясните:
    У вас ведь строка исполнители фигурирует в шапке если я правильно понял, туда вы хотите вывести всех исполнителей через запятую, так?
    Зачем же вы формируете эту строку из ТаблицаУслуги, а не ЗапросШапка?
    Перепишите запрос в таком виде:
    Код:
    	"ВЫБРАТЬ
    |	РеализацияТоваровУслуг.Номер,
    |	РеализацияТоваровУслуг.Дата,
    |	РеализацияТоваровУслуг.ДоговорКонтрагента,
    |	РеализацияТоваровУслуг.Контрагент КАК Получатель,
    |	РеализацияТоваровУслуг.Организация КАК Поставщик,
    |	РеализацияТоваровУслуг.Организация,
    |	РеализацияТоваровУслуг.СуммаДокумента,
    |	РеализацияТоваровУслуг.ВалютаДокумента,
    |	РеализацияТоваровУслуг.КурсВзаиморасчетов КАК Курс,
    |	РеализацияТоваровУслуг.КратностьВзаиморасчетов КАК Кратность,
    |	РеализацияТоваровУслуг.УчитыватьНДС,
    |	РеализацияТоваровУслуг.СуммаВключаетНДС,
    |	РеализацияТоваровУслуг.Ответственный,
    |	РеализацияТоваровУслуг.Услуги.(Исполнители) КАК Исполнители,
    |	РеализацияТоваровУслуг.Сотрудник
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |	РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
    
    
    
    И дальше в коде напишите:
    Код:
    ТЗИсполнители = Шапка.Исполнители.Скопировать();
    ТЗИсполнители.Свернуть("Исполнители"); //<- уточнить название колонки в получившейся таблице
    Цикл по ТЗИсполнители
    //тут формируете свою строку
    
  10. Isberg
    Offline

    Isberg Опытный в 1С

    Регистрация:
    4 май 2010
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Посмотрел как вы выводите исполнителей, оказывается все проще можно сделать :)

    Сейчас так у вас:
    Код:
    Для Каждого СтрокаТабличнойЧасти Из ТаблицаУслуги <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл	</span>
    Исполнители =""+ Исполнители+"" +" "+(СтрокаТабличнойЧасти.Исполнители  )+",";
    КонецЦикла;
    
    
    Как вариант (может и глупый :) ) В этом цикле вписываем первого исполнителя в ТЗ (которую заранее создали), а перед записью проверяем есть ли такое значение в этой ТЗ, если нет записываем, если есть пропускаем.
    Ну а потом выводим в макет.
  11. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Заругался .... {ВнешняяОбработка.АктОбОказанииУслугВолгасофт(26)}: Значение не является значением объектного типа (Скопировать)
    ТЗИсполнители = Шапка.Исполнители.Скопировать();
  12. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Методом перебора, увеличит время. Хотя мне уже главное чтоб работало. Сейчас еще попробую.
  13. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Для Каждого Исполнители Из ОбластьМакета.Параметры.Исполнители Цикл
    //что конкретно написать. чтобы сравнить в области макета уже данные. Если одинаковые-не выводить.
    Если Исполнители=Исполнители Тогда КонецЦикла?))
  14. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    ВыборкаИсполнители = Шапка.Исполнители.Выгрузить();
    ВыборкаИсполнители.Свернуть("Исполнители");
    СтрокаИсполнители = "";
    Для Каждого Исполнители ИЗ ВыборкаИсполнители Цикл
    СтрокаИсполнители = СтрокаИсполнители + ", " + Исполнители.Исполнители;
    КонецЦикла;
    
    
  15. TopicStarter Overlay
    Элен
    Offline

    Элен

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

    Теперь ругается "Поле объекта не обнаружено (Исполнители)". Проверила Запрос-все так...
  16. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Посмотрите как я вам сказал запрос переписать. У вас не такой.

    Код:
    "ВЫБРАТЬ
    |	РеализацияТоваровУслуг.Номер,
    |	РеализацияТоваровУслуг.Дата,
    |	РеализацияТоваровУслуг.ДоговорКонтрагента,
    |	РеализацияТоваровУслуг.Контрагент КАК Получатель,
    |	РеализацияТоваровУслуг.Организация КАК Поставщик,
    |	РеализацияТоваровУслуг.Организация,
    |	РеализацияТоваровУслуг.СуммаДокумента,
    |	РеализацияТоваровУслуг.ВалютаДокумента,
    |	РеализацияТоваровУслуг.КурсВзаиморасчетов КАК Курс,
    |	РеализацияТоваровУслуг.КратностьВзаиморасчетов КАК Кратность,
    |	РеализацияТоваровУслуг.УчитыватьНДС,
    |	РеализацияТоваровУслуг.СуммаВключаетНДС,
    |	РеализацияТоваровУслуг.Ответственный,
    |	РеализацияТоваровУслуг.Услуги.(Исполнители) КАК Исполнители,
    |	РеализацияТоваровУслуг.Сотрудник
    |ИЗ
    |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |	РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
    Шапка = ЗапросШапка.Выполнить().Выбрать();
    Шапка.Следующий();
    ВыборкаИсполнители = Шапка.Исполнители.Выгрузить();
    ВыборкаИсполнители.Свернуть("Исполнители");
    СтрокаИсполнители = "";
    Для Каждого Исполнители ИЗ ВыборкаИсполнители <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл	</span>
    СтрокаИсполнители = СтрокаИсполнители + ", " + Исполнители.Исполнители;
    КонецЦикла;
    
    
  17. Isberg
    Offline

    Isberg Опытный в 1С

    Регистрация:
    4 май 2010
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    На счет свернуть не знаю, ниразу не пользовался.

    Если не получится со свернуть, могу вам помочь написать простой цикл перебора исполнителей.
  18. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    В данном случае все работает также как и было. ФИО повторяются...
    ОбластьМакета.Параметры.Исполнители = "Ответственные исполнителя:" +Исполнители; (здесь уже что только не ставила).
    Изменений нет.
  19. TopicStarter Overlay
    Элен
    Offline

    Элен

    Регистрация:
    21 янв 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    УРАА! Я ее добила). Все гуд. Спасибо за помощь, пригодилось тоже.

Поделиться этой страницей