Программная обработка табличной части документа
По теме из базы знаний
- Внешняя обработка табличной части документа "Начисление отпуска сотрудникам организаций"
- Как автоматически заполнить обработкой табличную часть документа "Ввод начальных остатков" (Тип операции = "Расчеты с партнерами"). 1С: ERP
- Неограниченное количество строк в табличной части документа
- Внешняя обработка заполнения табличной части документа "Данные для расчета зарплаты"
- РеСольДо. Действие 1: Динамическое отражение структуры и значений табличных частей документа
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
Динамический список, в нём запрос:
Который выбирает все наряды указанного поставщика.
- это как ?
Динамический список, в нём запрос:
ВЫБРАТЬ
ЗаказНаряд.Наряд КАК Наряд,
ЗаказНаряд.Статус КАК Статус,
ЗаказНаряд.Поставщик КАК Поставщик,
ЗаказНаряд.Ссылка как Ссылка1,
&Отправить как Отправить,
Выбор
Когда
ЗаказНаряд.Наряд = Значение(Перечисление.Статус.Отправлен)
тогда 0
Иначе 1
Конец как Загрузка
ИЗ
Документ.Заказ.Наряд КАК ЗаказНаряд
{ГДЕ
ЗаказНаряд.Поставщик = &Поставщик }
ПоказатьКоторый выбирает все наряды указанного поставщика.
(1) поле где, в документе?
в табличной части или в шапке?
если в шапке - надо просто получить документ как объект и записать ему изменения
если в тч - надо опять получить документ как объект, и перезаполнить ему тч\для нужного поля установить нужное значение в соответствии с данными тч обработки по ключу связи в строке
в табличной части или в шапке?
если в шапке - надо просто получить документ как объект и записать ему изменения
если в тч - надо опять получить документ как объект, и перезаполнить ему тч\для нужного поля установить нужное значение в соответствии с данными тч обработки по ключу связи в строке
(7) Первый класс же. Или прогуливали уроки?
ДокОбъект = СсылкаДокумента.ПолучитьОбъект();
ДокОбъект.РеквизитШапки = НовоеЗначениеРеквизитаШапки;
Для Каждого Строка ТЧ из ДокОбъект.ИмяТабличнойЧасти Цикл
СтрокаТЧ.РеквизитТабличнойЧасти = НовоеЗначениеРеквизитаТабличнойЧасти;
КонецЦикла;
ДокОбъект.Записать();
(7) пример общий дали уже в (9)
или можно такой, с ключем связи, но для этого надо и в запрос ввести его же
или можно такой, с ключем связи, но для этого надо и в запрос ввести его же
ДокОбъект = СсылкаДокумента.ПолучитьОбъект();
Для Каждого СтрокаТЧ из Обработка.ИмяТабличнойЧасти Цикл
ДокОбъект.ИмяТабличнойЧасти[СтрокаТЧ.НомерСтроки-1].РеквизитТабличнойЧасти = СтрокаТЧ.ЗначениеРеквизитаТабличнойЧасти;
КонецЦикла;
ДокОбъект.Записать();
// где СтрокаТЧ.НомерСтроки -номер строки тч документа из запроса, а минус 1 - и получаем индекс строки
(10)
Спасибо за ответ!
Теперь такая проблема: Не определяется СтрокаТЧ, поэтому выдаёт ошибку "Итератор для значения не определен".
Спасибо за ответ!
Теперь такая проблема: Не определяется СтрокаТЧ, поэтому выдаёт ошибку "Итератор для значения не определен".
&НаКлиенте
Процедура НарядыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "НарядыОтправить" тогда;
ТекДанные = Элементы.Наряды.ТекущиеДанные;
ТекДанные.Статус = ИзменитьСтатус(ТекДанные.Ссылка);
Сообщить(ИзменитьСтатус(ТекДанные.Ссылка));
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ИзменитьСтатус(Тек)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Заказ.Наряды.(
| Ссылка КАК Ссылка,
| НомерСтроки КАК НомерСтроки,
| Наряд КАК Наряд,
| ДатаВыполнения КАК ДатаВыполнения,
| Сотрудник КАК Сотрудник,
| Статус КАК Статус,
| Стоимость КАК Стоимость,
| Поставщик КАК Поставщик
| ) КАК Наряды,
| Заказ.Ссылка КАК Ссылка
|ИЗ
| Документ.Заказ КАК Заказ
|ГДЕ
| Заказ.Наряды.Ссылка = &Ссыл";
Запрос.УстановитьПараметр("Ссыл", Тек);
РезультатЗапроса = Запрос.Выполнить();
Выборка1 = РезультатЗапроса.Выбрать();
Пока Выборка1.Следующий() Цикл
Док = Выборка1.Ссылка.ПолучитьОбъект();
Для каждого СтрокаТЧ из Выборка1.Наряды Цикл
Док.Наряды[СтрокаТЧ.НомерСтроки-1].Статус = Перечисления.СтатусНаряды.Отправлен;
ТЧ.Статус = Перечисления.СтатусНаряды.Отправлен;
КонецЦикла;
Док.Записать();
КонецЦикла;
КонецФункции
Показать
(13) Расскажи же мне, о Великий Учитель Первых Классов, что же я не так написал, если у меня вот этот код прекрасно работает (без ошибок и выводит то, что нужно):
Если Вы вдруг не поняли, то я отвечал на вопрос, почему выходит ошибка и как сделать правильно.
Видимо, изучают это уже не в первом классе...
&НаСервереБезКонтекста
Процедура кВыполнитьНаСервере(Док)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| РеализацияТоваровУслуг.Товары.(
| Ссылка КАК Ссылка,
| НомерСтроки КАК НомерСтроки,
| Номенклатура КАК Номенклатура,
| КоличествоМест КАК КоличествоМест,
| ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Коэффициент КАК Коэффициент,
| Количество КАК Количество,
| Цена КАК Цена,
| Сумма КАК Сумма
| ) КАК Товары
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Док);
Выборка1 = Запрос.Выполнить().Выбрать();
Пока Выборка1.Следующий() Цикл
ДокТМП = Выборка1.Ссылка.ПолучитьОбъект();
Выборка2 = Выборка1.Товары.Выбрать();
Пока Выборка2.Следующий() Цикл
Сообщить(Выборка2.Номенклатура);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
ПоказатьЕсли Вы вдруг не поняли, то я отвечал на вопрос, почему выходит ошибка и как сделать правильно.
Видимо, изучают это уже не в первом классе...
(12) во первых уже сами ответили на свой вопрос и понял в чем ошибка была
во вторых - судя по коду, статус надо изменить для документа и для ВСЕХ строк тч
для этого не надо цикл обхода, достаточно использовать ЗаполнитьЗначения(<Значение>, <Колонка>)
и тогда все упростится до, например
во вторых - судя по коду, статус надо изменить для документа и для ВСЕХ строк тч
для этого не надо цикл обхода, достаточно использовать ЗаполнитьЗначения(<Значение>, <Колонка>)
и тогда все упростится до, например
Док = Тек.ПолучитьОбъект();
Док.Статус = Перечисления.СтатусНаряды.Отправлен;
Док.Наряды.ЗаполнитьЗначения(Перечисления.СтатусНаряды.Отправлен, "Статус");
Док.Записать();
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот