1. digorec88 19.04.19 10:44 Сейчас в теме

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

Всем привет. Как разбить строку табличной части на несколько строк?
Ответы
Избранное Подписка Сортировка: Древо
2. noprogrammer 123 19.04.19 10:52 Сейчас в теме
(1) в Типовых конфигурациях вроде как есть кнопка "Разбить строку"...
3. digorec88 19.04.19 10:56 Сейчас в теме
(2) Не могу найти эту кнопку.
4. alex-l19041 9 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 292 19.04.19 11:15 Сейчас в теме
(10) Так можно просто сделать ведь

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


Но тут подход таков, что количество должно быть целое число
12. alex-l19041 9 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 9 19.04.19 11:22 Сейчас в теме
(11)
СтрокаТаблицы.Количество
- так должно быть
16. SedovSU@mail.ru 292 19.04.19 11:32 Сейчас в теме
(15) да да так должно, я ошибся

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

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

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

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

Работа от Инфостарт
Санкт-Петербург
Временный (на проект)

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

Ведущий программист 1С
Сочи
зарплата от 82 500 руб. до 99 000 руб.
Полный день