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