Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 апр 2024, 11:20

обработка поиск и замена элементов

Автор djvjv, 19 июн 2012, 14:09

0 Пользователей и 1 гость просматривают эту тему.

djvjv

Как мне сделать чтоб после замены ссылки на номенклатуру элемент в справочнике помещался программно на удаление?

djvjv

Мне чтоб пометка на удаление происходила автоматически

djvjv

Помогите пожалуйста решить этот вопрос

djvjv

Вопрос тот же! Что мне нужно добавить в эту обработку, чтобы после поиска и замены дублирующего элемента, элемент который заменили в справочнике стал помеченным на удаление?

&НаКлиенте
Процедура Поиск(Команда)
   
   ПоискНаСервере();
   
КонецПроцедуры

&НаСервере
Процедура ПоискНаСервере()
   
   Если ПустаяСтрока(РежимПоиска) Тогда
      Сообщение = Новый СообщениеПользователю;
      Сообщение.Текст = "Укажите режим поиска!";
      Сообщение.Сообщить();
      Возврат;
   КонецЕсли;   
   
   ТаблицаНаименований.Очистить();
   ТаблицаНоменклатуры.Очистить();
   ОбщаяТаблица.Очистить();
   
   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ РАЗЛИЧНЫЕ
      |   Номенклатура.Ссылка
      |ПОМЕСТИТЬ ПовторяющаясяНоменклатура
      |ИЗ
      |   Справочник.Номенклатура КАК Номенклатура
      |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1
      |      ПО Номенклатура.Ссылка <> Номенклатура1.Ссылка
      |         И Номенклатура.Наименование = Номенклатура1.Наименование
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |   ПовторяющаясяНоменклатура.Ссылка КАК Ссылка,
      |   ПовторяющаясяНоменклатура.Ссылка.Наименование КАК Группа
      |ИЗ
      |   ПовторяющаясяНоменклатура КАК ПовторяющаясяНоменклатура
      |ИТОГИ
      |   КОЛИЧЕСТВО(Ссылка)
      |ПО
      |   Группа";

   Если РежимПоиска = "Артикул" Тогда
      Запрос.Текст = СтрЗаменить(Запрос.Текст, "Наименование", "Артикул");
   КонецЕсли;   
      
   Результат = Запрос.Выполнить();

   ВыборкаИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

   Пока ВыборкаИтог.Следующий() Цикл
      
      НоваяСтрока = ТаблицаНаименований.Добавить();
      НоваяСтрока.Группа = ВыборкаИтог.Группа;
      НоваяСтрока.Количество = ВыборкаИтог.Ссылка;
      
      Выборка = ВыборкаИтог.Выбрать();
      
      Пока Выборка.Следующий() Цикл
         
         Стр = ОбщаяТаблица.Добавить();
         Стр.Группа = Выборка.Группа;
         Стр.Номенклатура = Выборка.Ссылка;
         
      КонецЦикла;   
      
   КонецЦикла;
   
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаНаименованийПриАктивизацииСтроки(Элемент)
   
   Если ТаблицаНаименований.Количество() = 0 Тогда
      Возврат;
   КонецЕсли;   
   
   ТекущаяСтрока = Элементы.ТаблицаНаименований.ТекущиеДанные;
   
   МассивСтрокТаблицы = ПолучитьМассивСтрокТаблицы(ТекущаяСтрока.Группа);
   
   ТаблицаНоменклатуры.Очистить();
   Для каждого СтрокаТаблицы из МассивСтрокТаблицы Цикл
      НоваяСтрока = ТаблицаНоменклатуры.Добавить();
      НоваяСтрока.Номенклатура = СтрокаТаблицы.Номенклатура;
   КонецЦикла;   
   
КонецПроцедуры

&НаКлиенте
Функция ПолучитьМассивСтрокТаблицы(Группа)
   
   Отбор = Новый Структура;
   Отбор.Вставить("Группа", Группа);
   Массив = ОбщаяТаблица.НайтиСтроки(Отбор);
   
   Возврат Массив;
   
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   
   РежимПоиска   = "Наименование";
   
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗамену(Команда)
   
   Если ТаблицаНоменклатуры.Количество() = 0 Тогда
      Возврат;   
   КонецЕсли;
   
   Режим = РежимДиалогаВопрос.ДаНет;
   Текст = "Вы уверены, что хотите выполнить замену?";
   Ответ = Вопрос(Текст, Режим, 0);
   Если Ответ = КодВозвратаДиалога.Нет Тогда
       Возврат;
   КонецЕсли;

   
   ТекущаяСтрока = Элементы.ТаблицаНоменклатуры.ТекущиеДанные;
   
   Если ТипЗнч(ТекущаяСтрока) = Тип("Неопределено") Тогда
      Сообщение = Новый СообщениеПользователю;
      Сообщение.Текст = "Не выбрана номенклатура. Замена не может быть выполнена!";
      Сообщение.Сообщить();
      Возврат;
   КонецЕсли;   
   
   Для каждого СтрокаТаблицы из ТаблицаНоменклатуры Цикл
      
      Если ТекущаяСтрока.Номенклатура = СтрокаТаблицы.Номенклатура Тогда
         Продолжить;
      КонецЕсли;
      
      ЗаменитьСсылкиНаНоменклатуру(ТекущаяСтрока.Номенклатура, СтрокаТаблицы.Номенклатура);                                         
   КонецЦикла;
   
   Сообщение = Новый СообщениеПользователю;
   Сообщение.Текст = "Замена завершена!";
   Сообщение.Сообщить();
   
КонецПроцедуры


&НаСервереБезКонтекста
Процедура ЗаменитьСсылкиНаНоменклатуру(ГлавнаяНоменклатура, УдаляемаяНоменклатура);
      
   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ПоступлениеТоваровТовары.Ссылка,
      |   ПоступлениеТоваровТовары.НомерСтроки
      |ИЗ
      |   Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
      |ГДЕ
      |   (ПоступлениеТоваровТовары.Номенклатура = &Номенклатура
      |         ИЛИ ПоступлениеТоваровТовары.ОсновнаяНоменклатура = &Номенклатура)
      |
      |ОБЪЕДИНИТЬ ВСЕ
      |
      |ВЫБРАТЬ
      |   РеализацияТоваровТовары.Ссылка,
      |   РеализацияТоваровТовары.НомерСтроки
      |ИЗ
      |   Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
      |ГДЕ
      |   РеализацияТоваровТовары.Номенклатура = &Номенклатура";

   Запрос.УстановитьПараметр("Номенклатура", УдаляемаяНоменклатура);

   Результат = Запрос.Выполнить();

   Выборка = Результат.Выбрать();

   Пока Выборка.Следующий() Цикл
      
      ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
      
      Если ТипЗнч(Выборка.Ссылка) = Тип("ДокументСсылка.ПоступлениеТоваров") Тогда
         
         Если ДокОбъект.Товары[Выборка.НомерСтроки - 1].Номенклатура = УдаляемаяНоменклатура Тогда
            ДокОбъект.Товары[Выборка.НомерСтроки - 1].Номенклатура = ГлавнаяНоменклатура;
         КонецЕсли;   
            
         Если ДокОбъект.Товары[Выборка.НомерСтроки - 1].ОсновнаяНоменклатура = УдаляемаяНоменклатура Тогда
            ДокОбъект.Товары[Выборка.НомерСтроки - 1].ОсновнаяНоменклатура = ГлавнаяНоменклатура;      
         КонецЕсли;   
         
      ИначеЕсли ТипЗнч(Выборка.Ссылка) = Тип("ДокументСсылка.РеализацияТоваров") Тогда
         
         ДокОбъект.Товары[Выборка.НомерСтроки - 1].Номенклатура = ГлавнаяНоменклатура;   
            
      КонецЕсли;
      
      Попытка
         ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
      Исключение
         Сообщение = Новый СообщениеПользователю;
         Сообщение.Текст = "Не удалось провести документ " + Строка(ДокОбъект) + Символы.ПС + ОписаниеОшибки();
         Сообщение.Сообщить();
      КонецПопытки;   
      
   КонецЦикла;
      
КонецПроцедуры


djvjv

Продолжение обработки:


Если ТипЗнч(Выборка.Ссылка) = Тип("ДокументСсылка.ПоступлениеТоваров") Тогда
         
         Если ДокОбъект.Товары(Выборка.НомерСтроки - 1).Номенклатура = УдаляемаяНоменклатура Тогда
            ДокОбъект.Товары(Выборка.НомерСтроки - 1).Номенклатура = ГлавнаяНоменклатура;
         КонецЕсли;   
            
         Если ДокОбъект.Товары(Выборка.НомерСтроки - 1).ОсновнаяНоменклатура = УдаляемаяНоменклатура Тогда
            ДокОбъект.Товары(Выборка.НомерСтроки - 1).ОсновнаяНоменклатура = ГлавнаяНоменклатура;      
         КонецЕсли;   
         
      ИначеЕсли ТипЗнч(Выборка.Ссылка) = Тип("ДокументСсылка.РеализацияТоваров") Тогда
         
         ДокОбъект.Товары(Выборка.НомерСтроки - 1).Номенклатура = ГлавнаяНоменклатура;   
            
      КонецЕсли;
      
      Попытка
         ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
      Исключение
         Сообщение = Новый СообщениеПользователю;
         Сообщение.Текст = "Не удалось провести документ " + Строка(ДокОбъект) + Символы.ПС + ОписаниеОшибки();
         Сообщение.Сообщить();
      КонецПопытки;   
      
   КонецЦикла;
      
КонецПроцедуры

Dethmontt

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

djvjv

А в моей обработке это где вставить надо? Пожалуйста подскажите, а то куда не поставлю ошибку выдает.

djvjv


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск