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

1. digorec88 19.04.19 10:44 Сейчас в теме
Всем привет. Как разбить строку табличной части на несколько строк?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. noprogrammer 237 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 297 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 297 19.04.19 11:32 Сейчас в теме
(15) да да так должно, я ошибся

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

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

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