PDA

Просмотр полной версии : Удаление номенклатуры



ПётрВладимирович
02.12.2023, 17:40
Доброго времени суток. Подскажите пожалуйста, написал небольшой код для внешней обработки для удаления номенклатуры, которая записана в текстовом файле (выбор будет либо по коду, либо по полному наименованию (для печати))

Дано:
Платформа 1с 8.3.15.1778
Конфигурация УНФ 1.6.22.66

Писал такой код:
&НаСервере
Процедура УдНомНаСервере(ИмяФайла)
ПутьКФайлу = ИмяФайла;
// Создаем объект для чтения
Текст = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);

// Читаем файл построчно
Пока Истина Цикл
Строка = Текст.ПрочитатьСтроку();
Сообщить(Строка);
Если Строка = Неопределено Тогда
Прервать;
Иначе
// Ищем элемент справочника по заданному коду (или другому реквизиту)
Если Строка = Справочники.Номенклатура.Н айтиПоКоду(Строка) Тогда

// Помечаем запись на удаление
Строка.ПометкаУдаления = Истина;
Строка.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;

Текст.Закрыть();
КонецПроцедуры




&НаКлиенте
Процедура УдНом(Команда)
ДиалогВыбора = новый ДиалогВыбораФайла(РежимДи� �логаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = "Выберите файл";

ДиалогВыбора.Фильтр = "Текстовый документ, *.txt|*.txt";

ДиалогВыбора.Множественны� �Выбор=Ложь;

Если ДиалогВыбора.Выбрать() Тогда
ИмяФайла = ДиалогВыбора.ПолноеИмяФай� �а;
КонецЕсли;



УдНомНаСервере(ИмяФайла);
КонецПроцедуры

Он не помечает на удаление. Что-то я написал сам, где-то помог Chat-GPT.
Я очень сильно начинающий 1С работник. Помогите, или направьте на путь истинный, пожалуйста!
С Уважением, Пётр Владимирович, Ашхабад.

alexandr_ll
02.12.2023, 19:59
Что вы хотите пометить на удаление?

Если Строка = Справочники.Номенклатура.Н айтиПоКоду(Строка) Тогда

Здесь вы пытаетесь сравнить текст из файла с ссылкой на элемент справочника. Они никогда не будут равны.
Попробуйте так

Если Справочники.Номенклатура.П устаяСсылка()=Справочники.Н оменклатура.НайтиПоКоду(Ст рока) Тогда
Иначе
ТекОб=Справочники.Номенкла тура.НайтиПоКоду(Строка).По лучтьОбъект();
ТекОб.ПометкаУдаления = Истина;
ТекОб.Записать()
КонецЕсли;

ПётрВладимирович
03.12.2023, 21:22
Оказывается не проходит проверка. Я даю файл, в котором содержаться цифро-буквенные значения со спец символами (типа дефиз, если код номенклатуры или символ R в круге если наименование номенклатуры)
Сообщить(Строка);
Если Строка = Неопределено Тогда
Прервать;

для этого, я дописал вот это (сейчас, на момент написания этого комментария, я работаю дома и не пишу никаких сложных значений в текстовом документе)
Пока Истина Цикл
Строка = Текст.ПрочитатьСтроку();

Если Строка = Неопределено Тогда
Сообщить(Строка);

Сообщить("Строка не определена");
Прервать;
и функция сообщить мне даёт
1
1
1
1
1

Строка не определена
E:\1.txt

alexandr_ll
04.12.2023, 08:38
Оказывается не проходит проверка. Я даю файл, в котором содержаться цифро-буквенные значения со спец символами (типа дефиз, если код номенклатуры или символ R в круге если наименование номенклатуры)
Сообщить(Строка);
Если Строка = Неопределено Тогда
Прервать;

для этого, я дописал вот это (сейчас, на момент написания этого комментария, я работаю дома и не пишу никаких сложных значений в текстовом документе)
Пока Истина Цикл
Строка = Текст.ПрочитатьСтроку();

Если Строка = Неопределено Тогда
Сообщить(Строка);

Сообщить("Строка не определена");
Прервать;
и функция сообщить мне даёт
1
1
1
1
1

Строка не определена
E:\1.txt
Что за цикл?
Пока Истина Цикл
По-видимому нужно так:

Строка = Текст.ПрочитатьСтроку();

Пока Строка <> Неопределено Цикл
Строка = Текст.ПрочитатьСтроку();
Сообщить(Строка);
КонецЦикла;