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

1. digorec88 19.04.19 10:44 Сейчас в теме
Всем привет. Как разбить строку табличной части на несколько строк?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. noprogrammer 236 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 По КолВо Цикл
ТМЦ = Строка.ТМЦ;
НоваяСтрока = Док.Номенклатура.Добавить();
НоваяСтрока.ТМЦ = ТМЦ;
КонецЦикла;
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)