8.х Как из столбца превратить в строку

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем r-d-v2008, 8 янв 2011.

  1. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    Добрый всем день! Вопрос такой как столбика превратить в строку программно. Пример такой
    |2185| |
    |300 | |
    |600 | |
    а надо чтобы попало так |2185|300|600|
  2. Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    а у "столбика" какой тип?

    В общем случае, обходите колонки и формируете новую последовательность...
  3. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    Может не поняли, я делаю выборку из регистра сведений оттуда выгружается в столбец а мне надо чтобы в строку выгружала
  4. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Смотря что у вас такое "|2185|300|600|" (что за цифры, откуда беруться и что означают). Если это надо делать при выводе - то выводите в табличный документ, используя метод "Присоеденить()", если не при выводе - тогда какая задача у вас стоит?
  5. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    Я вывожу в табличный документ. А вот по поводу присоединить кинте пример пожалуйста
  6. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
  7. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ДействияФормыСформировать(Кнопка)
    ТабЗнач= новый ТаблицаЗначений;
    ТабЗнач.Колонки.Добавить("Контрагент");
    ТабЗнач.Колонки.Добавить("Кол_во");
    ТабЗнач.Колонки.Добавить("Ставка");
    ТабЗнач.Колонки.Добавить("Сумма");
    ТабЗнач.Колонки.Добавить("Остаток");
    Макет=ПолучитьМакет("Молоко");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока=Макет.ПолучитьОбласть("Строка");
    ОбластьИтог=Макет.ПолучитьОбласть("Итоги");
    ОбластьПодвал=Макет.ПолучитьОбласть("Подвал");
    Запрос = Новый Запрос;
    Запрос.Текст= "ВЫБРАТЬ
    |	епСубЗначенияПоказателей.Контрагент КАК контрагент,
    |	епСубЗначенияПоказателей.Количество как кол_во,
    |	епСубЗначенияПоказателей.Период,
    //  |	епСубОплатыПоДоговорам.Регистратор,
    |	епСубНачислениеСубсидийХозяйств.Начисления.Ставка как ставка,
    |	епСубНачислениеСубсидийХозяйств.Начисления.ЗначениеПоказателя ,
    |	епСубНачислениеСубсидийХозяйств.Начисления.Сумма как сумма
    |ИЗ
    |	РегистрСведений.епСубЗначенияПоказателей КАК епСубЗначенияПоказателей,
    |	Документ.епСубНачислениеСубсидийХозяйств КАК епСубНачислениеСубсидийХозяйств";
    //    |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.епСубНачислениеСубсидийХозяйств КАК епСубНачислениеСубсидийХозяйств
    //    |		ПО епСубОплатыПоДоговорам.Регистратор = епСубНачислениеСубсидийХозяйств.Ссылка";
    Результат=Запрос.Выполнить();
    Выборка=Результат.Выбрать();
    ТабДок = новый ТабличныйДокумент;
    ТабДок.ПолеСверху = 5;
    ТабДок.ПолеСнизу  = 5;
    ТабДок.ПолеСлева  = 5;
    ТабДок.ПолеСправа = 5;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    Пока Выборка.Следующий()Цикл
    //СтрокаТаблицы=ТабЗнач.Добавить();
    ОбластьСтрока.Параметры.Контрагент=Выборка.Контрагент;
    ОбластьСтрока.Параметры.Кол_во=Выборка.Кол_во;
    конеццикла;  
    ОбластьСтрока.Параметры.Ставка=Выборка.Ставка;
    ОбластьСтрока.Параметры.Сумма=Выборка.Сумма;
    
    КонецЦикла;
    //ОбластьСтрока.Параметры.Контрагент=Контрагент;
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапка);
    ТабДок.Вывести(ОбластьСтрока);
    ТабДок.Вывести(ОбластьИтог);
    ТабДок.Вывести(ОбластьПодвал);
    ТабДок.Показать("Молоко");
    КонецПроцедуры
    
    
    Вот отчет мне нужно чтобы по кол_во из столбца сделать строку
  8. Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    Код:
     ТабКолВо = Результат.Выгрузить("Кол_во");
    КолВоСтрокой = "";
    Для каждого ТекСтрока из ТабКолВо Цикл
    КолВо = КолВоСтрокой + ТекСтрока.КолВо + "|"
    КонецЦикла;
    КолВоСтрокой = Лев(КолВоСтрокой, СтрДлина(КолВоСтрокой) - 1);
    ...
    ОбластьСтрока.Параметры.Кол_во = КолВоСтрокой;
    
    все Кол_во будет в строке через "|".

    Но:
    1) У Вас что-то не так в тексте - два раза закрываете цикл, хотя открываете его только один раз.
    2) Сейчас у Вас выводится:
    "Контрагент1" "Кол_во1"
    "Контрагент2" "Кол_во2"
    ...
    "КонтрагентN" "Кол_воN"

    а нужно то как? Вот так:
    "Контрагент1" "Кол_во1" "Кол_во2" ... "Кол_воN"
    "Контрагент2" "Кол_во1" "Кол_во2" ... "Кол_воN"
    ...
    "КонтрагентN" "Кол_во1" "Кол_во2" ... "Кол_воN"

    или как?

    Если у вас "КонтрагентN" может быть равен "КонтрагентM" то тогда показывайте макет, и то, что хотите получить в конечном варианте.
  9. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    Да так но в каком месте это все вставить?
  10. Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    то, что до "..." - после того, как выполнили запрос, когда выводите параметр в макет - "КолВоСтрокой = Лев(...."

    Вы понимаете, что такой результат даст примерно следующее:
    Если в вашем регистре было 4 записи:
    "ООО Ромашка" "100"
    "ОАО Василек" "200"
    "ЗАО Лютик" "300"
    "ОАО Василек" "400"

    То в результате запроса:
    "ООО Ромашка" "100" "200" "300" "400"
    "ОАО Василек" "100" "200" "300" "400"
    "ЗАО Лютик" "100" "200" "300" "400"
    "ОАО Василек" "100" "200" "300" "400"

    Вам так нужно? Я думаю, что на самом деле Вы где-то глубоко в душе Вы хотите сделать следующее:
    Выбрать из регистра всех записи, сгруппированные по контрагентам, затем, обходить результат запроса по уровням, что бы вышло примерно так:
    "ООО Ромашка" "100"
    "ОАО Василек" "200" "400"
    "ЗАО Лютик" "300"

    намного понятнее станет, если вы приложите макет и желаемый результат
  11. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    Вот ссылка на архив http://www.kiass.ru/soft/Отчет.rar в архиве лежит документ, регистр в котором берутся сведения из этого документа и отчет. В отчете обратите внимание только на первые три столбика не включая контрагента. В общем мне нужно из этого документа чтобы данные попали в отчет
  12. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    Если превратить в строку не получится может быть подскажете как документ изменить единственное добавлю показатель поголовье меняется каждый месяц и поэтому в конце года в отчете будет все 12 месяцев с разными показателями
  13. Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    Значит так:
    1) Делаете запрос к регистру с итогами по контрагентам
    2) Последовательно обходите сгруппированных контрагентов и выводите количество или как я показал сначала - в одной строке, или присоединяете области, как Вам говорил shurikvz

    что не будет получаться - выкладывайте сюда
  14. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    И так еще раз что надо сделать?
    Код:
    Процедура ДействияФормыСформировать(Кнопка)
    ТабЗнач= новый ТаблицаЗначений;
    ТабЗнач.Колонки.Добавить("Контрагент");
    ТабЗнач.Колонки.Добавить("Кол_во");
    ТабЗнач.Колонки.Добавить("Ставка");
    ТабЗнач.Колонки.Добавить("Сумма");
    ТабЗнач.Колонки.Добавить("Остаток");
    ТабЗнач.Колонки.Добавить("Показатель");
    ТабЗнач.Колонки.Добавить("ПоказательСН");
    ТабЗнач.Колонки.Добавить("СуммаСН");    
    ТабЗнач.Колонки.Добавить("Выплата");
    ТабЗнач.Колонки.Добавить("ВыплатаСН");
    ТабЗнач.Колонки.Добавить("ОстатокК");
    ТабЗнач.Колонки.Добавить("ИКол_во");
    ТабЗнач.Колонки.Добавить("ИСтавка");
    ТабЗнач.Колонки.Добавить("ИСумма");
    ТабЗнач.Колонки.Добавить("ИОстаток");
    ТабЗнач.Колонки.Добавить("ИПоказатель");
    ТабЗнач.Колонки.Добавить("ИПоказательСН");
    ТабЗнач.Колонки.Добавить("ИСуммаСН");   
    ТабЗнач.Колонки.Добавить("ИВыплата");
    ТабЗнач.Колонки.Добавить("ИВыплатаСН");
    ТабЗнач.Колонки.Добавить("ИОстатокК");
    ИКол_во=0;
    ИСтавка=0;
    ИСумма=0;
    ИОстаток=0;
    ИПоказатель=0;
    ИПоказательСН=0;
    ИСуммаСН=0;
    ИВыплата=0;
    ИВыплатаСН=0;
    ИОстатокК=0;
    СуммаСН=0;
    ПоказательСН=0;
    ВыплатаСН=0;
    ОстатокК=0;	
    Макет=ПолучитьМакет("Молоко");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапка=Макет.ПолучитьОбласть("Шапка");
    ОбластьСтрока=Макет.ПолучитьОбласть("Строка");
    ОбластьИтог=Макет.ПолучитьОбласть("Итоги");
    ОбластьПодвал=Макет.ПолучитьОбласть("Подвал");
    Запрос = Новый Запрос;
    Запрос.Текст= 
    "ВЫБРАТЬ
    |	епСубЗначенияПоказателей.Контрагент КАК контрагент,
    |	епСубЗначенияПоказателей.Количество КАК кол_во,
    |	епСубЗначенияПоказателей.Период КАК период,
    |	епСубОплатыПоДоговорам.Сумма КАК сумма,
    |	епСубОплатыПоДоговорам.Ставка КАК ставка,
    |	епСубОплатыПоДоговорам.ЗначениеПоказателя КАК Показатель,
    |	епСубГрафикВыплатСубсидий.Сумма КАК Остаток,
    |	епСубГрафикВыплатСубсидий.Сумма КАК Выплата,
    |	епСубОплатыПоДоговорам.Субсидия КАК Субсидия
    |ИЗ
    |	РегистрСведений.епСубЗначенияПоказателей КАК епСубЗначенияПоказателей,
    |	РегистрНакопления.епСубОплатыПоДоговорам КАК епСубОплатыПоДоговорам,
    |	РегистрНакопления.епСубГрафикВыплатСубсидий КАК епСубГрафикВыплатСубсидий,
    |	РегистрНакопления.ВыплатаСубсидий КАК ВыплатаСубсидий";
    
    Результат=Запрос.Выполнить();
    Выборка=Результат.Выбрать();
    //	ТабКолВо = Результат.Выгрузить("Кол_во");
    //    КолВоСтрокой = "";
    //    Для каждого ТекСтрока из ТабКолВо Цикл
    //      КолВо = КолВоСтрокой + ТекСтрока.КолВо + "|"
    //    КонецЦикла;
    //     КолВоСтрокой = Лев(КолВоСтрокой, СтрДлина(КолВоСтрокой) - 1);
    ТабДок = новый ТабличныйДокумент;
    ТабДок.ПолеСверху = 5;
    ТабДок.ПолеСнизу  = 5;
    ТабДок.ПолеСлева  = 5;
    ТабДок.ПолеСправа = 5;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДок.Вывести(ОбластьЗаголовок);	
    Пока Выборка.Следующий()Цикл
    Если (Субсидия=Выборка.Субсидия) или(Субсидия=Справочники.епСубВидыСубсидий.ПустаяСсылка()) тогда
    СтрокаТаблицы= ТабЗнач.Добавить(); 
    СтрокаТаблицы.Контрагент=Выборка.Контрагент;
    СтрокаТаблицы.Показатель=Выборка.Показатель;
    СтрокаТаблицы.Кол_во=Выборка.кол_во;
    СтрокаТаблицы.Ставка=Выборка.Ставка;
    СтрокаТаблицы.Сумма=Выборка.Сумма;
    ОбластьШапка.Параметры.Период=Выборка.Период;
    СтрокаТаблицы.Остаток=Выборка.Остаток;
    СтрокаТаблицы.СуммаСН=Выборка.Сумма+СуммаСН;
    СтрокаТаблицы.Выплата=Выборка.Выплата;
    СтрокаТаблицы.ВыплатаСН=Выборка.Выплата+ВыплатаСН;
    СтрокаТаблицы.ОстатокК=СтрокаТаблицы.СуммаСН-СтрокаТаблицы.ВыплатаСН;
    СтрокаТаблицы.ПоказательСН=Выборка.Показатель+ПоказательСН;
    Ипоказатель=Выборка.Показатель+ИПоказатель;
    Икол_во=Выборка.Кол_во+ИКол_во;
    ИСумма=Выборка.Сумма+Исумма;
    ИОстаток=Выборка.Остаток+ИОстаток;
    ИВыплата=Выборка.Выплата+ИВыплата;
    ИПоказательСН=СтрокаТаблицы.ПоказательСН+ИПоказательСН;
    ИВыплатаСН=СтрокаТаблицы.ВыплатаСН+ИВыплатаСН;
    ИСуммаСН=СтрокаТаблицы.СуммаСН+ИсуммаСН;
    ИОстатокК=(СтрокаТаблицы.СуммаСН-СтрокаТаблицы.ВыплатаСН)+ИОстатокК;
    КонецЕсли;
    КонецЦикла;
    i=0;
    ТабДок.Вывести(ОбластьШапка);
    Для каждого Текстрока из ТабЗнач цикл
    
    i=i+1;
    ОбластьИтог.Параметры.ИПоказатель=ИПоказатель;
    ОбластьИтог.Параметры.ИКол_во=ИКол_во;
    ОбластьИтог.Параметры.ИСумма=ИСумма;
    ОбластьИтог.Параметры.ИОстаток=ИОстаток;
    ОбластьИтог.Параметры.ИВыплата=Ивыплата;
    ОбластьИтог.Параметры.ИПоказательСН=ИПоказательСН;
    ОбластьИтог.Параметры.ИВыплатаСН=ИВыплатаСН;
    ОбластьИтог.Параметры.ИСуммаСН=ИСуммаСН;
    ОбластьИтог.Параметры.ИОстатокК=ИОстатокК;
    ОбластьСтрока.Параметры.Заполнить(ТекСтрока);
    ТабДок.Вывести(ОбластьСтрока);
    конеццикла;	
    ТабДок.Вывести(ОбластьИтог);
    ТабДок.Вывести(ОбластьПодвал);
    ТабДок.Показать("Молоко");
    КонецПроцедуры
    
    
  15. TopicStarter Overlay
    r-d-v2008
    Offline

    r-d-v2008 Опытный в 1С

    Регистрация:
    16 сен 2010
    Сообщения:
    272
    Симпатии:
    0
    Баллы:
    26
    Поподробнее опишите пожалуйста как сделать запрос к регистру с итогами по контрагентам
  16. Siddy
    Offline

    Siddy Опытный в 1С

    Регистрация:
    18 мар 2009
    Сообщения:
    311
    Симпатии:
    0
    Баллы:
    26
    Чтобы обойти результат запроса по группировкам - смотрите параметры метода Выбрать()
    (<Тип обхода>, <Группировки>, <Группировки для значений группировок>)
    Вам нужно ОбходРезультатаЗапроса.ПоГруппировкам, в любой Типовой - куча примеров

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