Разбиение строки табличной части документа

1. digorec88 19.04.19 10:44 Сейчас в теме
Всем привет. Как разбить строку табличной части на несколько строк?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. noprogrammer 239 19.04.19 10:52 Сейчас в теме
(1) в Типовых конфигурациях вроде как есть кнопка "Разбить строку"...
3. digorec88 19.04.19 10:56 Сейчас в теме
(2) Не могу найти эту кнопку.
4. alex-l19041 8 19.04.19 10:59 Сейчас в теме
(1) уточните в каком смысле "разбить" ?
5. digorec88 19.04.19 11:02 Сейчас в теме
(4)Если в строке Количество>1 то эту строку нужно разбить на несколько строк. Допустим если Количество = 5 Тогда вместо этой строки получаем 5 строк.
6. digorec88 19.04.19 11:03 Сейчас в теме
Тобиш. Номенклатура Количество
Товар1 1
Товар1 1
Товар1 1
Товар1 1
Товар1 1
7. digorec88 19.04.19 11:05 Сейчас в теме
Процедура ЗаполнитьПоОстаткам(Команда)
    Ответ = Новый Структура(); 
    Ответ.Вставить("ТекстОшибки", "");
    
    
    Если Ответ.ТекстОшибки <> "" Тогда
        // вывод текста ошибки    
    КонецЕсли;
    
    Для Каждого ТекущаяСтрока Из Объект.ТоварыОтбор Цикл
                ЗаполнитьПоОстаткамНаСервере(Ответ);

        СтруктураДействий = Новый Структура;
        СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
        СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковокСуффикс","Размещено");
        СтруктураДействий.Вставить("ЗаполнитьВесУпаковки",Новый Структура("Номенклатура, Упаковка", "ВесУпаковки"));
        СтруктураДействий.Вставить("ЗаполнитьОбъемУпаковки",Новый Структура("Номенклатура, Упаковка", "ОбъемУпаковки"));
        СтруктураДействий.Вставить("ЗаполнитьЕдиницуИзмеренияВеса",Новый Структура("Номенклатура, Упаковка", "ЕдиницаИзмеренияВеса"));
        СтруктураДействий.Вставить("ЗаполнитьЕдиницуИзмеренияОбъема",Новый Структура("Номенклатура, Упаковка", "ЕдиницаИзмеренияОбъема"));
        
        Если Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыОтборовРазмещенийТоваров.ВыполненоСОшибками") Тогда
            Суффикс = "Размещено";
        Иначе
            Суффикс = "";
        КонецЕсли;
        
        СтруктураДействий.Вставить("ПересчитатьВесОбъем", Суффикс);
        
        ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
        
    
        
       КонецЦикла;
КонецПроцедуры

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

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

Показать



По нажатию на кнопку, табличная часть заполняется остатками. Но нужно еще добавить условие на количество
8. digorec88 19.04.19 11:08 Сейчас в теме
Не обязательно вводить условие именно в этой процедуре. Можно и отдельную кнопку создать и добавить туда условие на количество.
9. digorec88 19.04.19 11:10 Сейчас в теме
Т.е Если Количество = 5(допустим) тогда нужно добавить 5 строчек ТЧ. В каждой строке кол-во = 1.
10. digorec88 19.04.19 11:11 Сейчас в теме
Те строки ТЧ, в которых кол-во=1, мы не трогаем.
11. SedovSU@mail.ru 298 19.04.19 11:15 Сейчас в теме
(10) Так можно просто сделать ведь

Есть кнопка /команда которая обходит строки табличной части и делит строки
Для Каждого СтрокаТаблицы Из ТабличнаяЧасть Цикл
     Если  СтрокаТаблицы.Количество() > 1 Тогда
            Для Счетчик = 1 По СтрокаТаблицы.Количество() Цикл
                  НоваяСтрока = ТабличнаяЧасть.Добавить();
            Конеццикла
     Конецесли
Конеццикла


Но тут подход таков, что количество должно быть целое число
12. alex-l19041 8 19.04.19 11:21 Сейчас в теме
(11) надо еще в исходной строке уменьшить количество
14. digorec88 19.04.19 11:22 Сейчас в теме
(12) Вот в этом то и проблема.....
13. digorec88 19.04.19 11:21 Сейчас в теме
(11)
Для Каждого СтрокаТаблицы Из ТабличнаяЧасть Цикл
     Если  СтрокаТаблицы.Количество() > 1 Тогда
            Для Счетчик = 1 По СтрокаТаблицы.Количество() Цикл
                  НоваяСтрока = ТабличнаяЧасть.Добавить();
            Конеццикла
     Конецесли
Конеццикла



Разве не СтрокаТаблицы.Количество?
15. alex-l19041 8 19.04.19 11:22 Сейчас в теме
(11)
СтрокаТаблицы.Количество
- так должно быть
16. SedovSU@mail.ru 298 19.04.19 11:32 Сейчас в теме
(15) да да так должно, я ошибся

Для Каждого СтрокаТаблицы Из ТабличнаяЧасть Цикл
     Если  СтрокаТаблицы.Количество > 1 Тогда
            СтрокаТаблицы.Количество = 1;
            Для Счетчик = 1 По СтрокаТаблицы.Количество() Цикл
                  НоваяСтрока = ТабличнаяЧасть.Добавить();
            Конеццикла
     Конецесли
Конеццикла
17. digorec88 19.04.19 13:06 Сейчас в теме
(16) Не прокатило. У строки нет такого метода Количество(). Метод объекта не обнаружен.
18. SedovSU@mail.ru 298 19.04.19 13:27 Сейчас в теме
(17) да нееее это я ошибся не правильно вам написал, это не метод это реквизит. Вот так пробуйте написать

Для Каждого СтрокаТаблицы Из ТабличнаяЧасть Цикл
     Если  СтрокаТаблицы.Количество > 1 Тогда / вот тут исправил
            СтрокаТаблицы.Количество = 1;
            Для Счетчик = 1 По СтрокаТаблицы.Количество() Цикл
                  НоваяСтрока = ТабличнаяЧасть.Добавить();
                  НоваяСтрока.Количество = 1;
            Конеццикла
     Конецесли
Конеццикла
Показать
19. digorec88 19.04.19 13:34 Сейчас в теме
(18) Для Счетчик = 1 По СтрокаТаблицы.Количество() Цикл
Вот тут ругается.
СтрокаТАблицы- это строка табличной части. У нее нет такого метода как Количество()
23. SedovSU@mail.ru 298 19.04.19 13:48 Сейчас в теме
(19) блин точно, нужно

Для Каждого СтрокаТаблицы Из ТабличнаяЧасть Цикл
     Если  СтрокаТаблицы.Количество > 1 Тогда / вот тут исправил
            СтрокаТаблицы.Количество = 1;
            Для Счетчик = 1 По СтрокаТаблицы.Количество Цикл
                  НоваяСтрока = ТабличнаяЧасть.Добавить();
                  НоваяСтрока.Количество = 1;
            Конеццикла
     Конецесли
Конеццикла
Показать
20. digorec88 19.04.19 13:35 Сейчас в теме
И еще вопрос. Куда внести этот кусок кода, если мы создаем документ на основании другого?
21. digorec88 19.04.19 13:35 Сейчас в теме
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ВнутреннееПотреблениеТоваров") Тогда
        // Заполнение шапки
        Комментарий = ДанныеЗаполнения.Комментарий;
        Ответственный = ДанныеЗаполнения.Ответственный;
        Склад = ДанныеЗаполнения.Склад;
        ВидОперации = Перечисления.ВидыОперацийОтбораРазмещенияТоваров.Отбор;
        Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
            НоваяСтрока = ТоварыОтбор.Добавить();
            НоваяСтрока.Количество = ТекСтрокаТовары.Количество;        
            НоваяСтрока.КоличествоУпаковок = ТекСтрокаТовары.КоличествоУпаковок;
            НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура;
            НоваяСтрока.Упаковка = ТекСтрокаТовары.Упаковка;
            НоваяСтрока.МТ_Статус = Перечисления.МТ_СтатусыРазмещенияСборки.ВРаботе;
            НоваяСтрока.ДокументОснование = ДанныеЗаполнения.Ссылка;
        КонецЦикла;
    КонецЕсли;
Показать
22. digorec88 19.04.19 13:37 Сейчас в теме
Т.е если в документе который является основанием, будет строка в которой количество>1, то эту строку мы разбиваем в созданном документе.
24. пользователь 19.04.19 14:43
Сообщение было скрыто модератором.
...
25. digorec88 19.04.19 14:44 Сейчас в теме
кол-во 5 штук
Прикрепленные файлы:
26. digorec88 19.04.19 14:44 Сейчас в теме
Заполняю по оостаткам
Прикрепленные файлы:
27. digorec88 19.04.19 14:44 Сейчас в теме
Выводится две строки вместо пяти
Прикрепленные файлы:
28. digorec88 19.04.19 14:45 Сейчас в теме
Для Каждого СтрокаТЧ Из Объект.ТоварыОтбор Цикл
        Если СтрокаТЧ.КоличествоУпаковок>1 Тогда
            СтрокаТЧ.КоличествоУпаковок=1;
            Для Счетчик=1 По Объект.ТоварыОтбор.Количество() Цикл
                НоваяСтрока = Объект.ТоварыОтбор.Добавить();
                ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаТЧ);
            КонецЦикла;
        КонецЕсли;
        
    КонецЦикла;
Показать
29. meriferi 21.04.19 18:17 Сейчас в теме
Правой кнопкой, объединить/разъединить
30. digorec88 22.04.19 08:02 Сейчас в теме
(29)Нет такой кнопки. Вопрос еще актуален. Может кто нибудь подскажет где эта кнопка находится.....
31. digorec88 22.04.19 08:53 Сейчас в теме
Разобрался. Нашел эту кнопку. Всем спасибо.
32. user640247 23.09.19 11:22 Сейчас в теме
у меня вот так получилось:
Для каждого Строка из РезультатЗапроса Цикл
Если Строка.Количество > 1 Тогда
КолВо = Строка.Количество;
Для Счетчик = 1 По КолВо Цикл
ТМЦ = Строка.ТМЦ;
НоваяСтрока = Док.Номенклатура.Добавить();
НоваяСтрока.ТМЦ = ТМЦ;
КонецЦикла;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот