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