Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 00:01
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: обработка поиск и замена элементов  (Прочитано 3677 раз)

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

Оффлайн djvjv

  • ****
  • Сообщений: 262
  • РЕПУТАЦИЯ: -2
  • Регистрация: 2012-03-15
  • Сайт: 
  • Профессия: Программист 8.1
Как мне сделать чтоб после замены ссылки на номенклатуру элемент в справочнике помещался программно на удаление?


Оффлайн djvjv

  • ****
  • Сообщений: 262
  • РЕПУТАЦИЯ: -2
  • Регистрация: 2012-03-15
  • Сайт: 
  • Профессия: Программист 8.1
Мне чтоб пометка на удаление происходила автоматически

Оффлайн djvjv

  • ****
  • Сообщений: 262
  • РЕПУТАЦИЯ: -2
  • Регистрация: 2012-03-15
  • Сайт: 
  • Профессия: Программист 8.1
Помогите пожалуйста решить этот вопрос

Оффлайн djvjv

  • ****
  • Сообщений: 262
  • РЕПУТАЦИЯ: -2
  • Регистрация: 2012-03-15
  • Сайт: 
  • Профессия: Программист 8.1
Вопрос тот же! Что мне нужно добавить в эту обработку, чтобы после поиска и замены дублирующего элемента, элемент который заменили в справочнике стал помеченным на удаление?

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


Оффлайн djvjv

  • ****
  • Сообщений: 262
  • РЕПУТАЦИЯ: -2
  • Регистрация: 2012-03-15
  • Сайт: 
  • Профессия: Программист 8.1
Продолжение обработки:


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

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
УдаляемаяНоменклатура.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн djvjv

  • ****
  • Сообщений: 262
  • РЕПУТАЦИЯ: -2
  • Регистрация: 2012-03-15
  • Сайт: 
  • Профессия: Программист 8.1
А в моей обработке это где вставить надо? Пожалуйста подскажите, а то куда не поставлю ошибку выдает.

Оффлайн djvjv

  • ****
  • Сообщений: 262
  • РЕПУТАЦИЯ: -2
  • Регистрация: 2012-03-15
  • Сайт: 
  • Профессия: Программист 8.1
Спасибо! Все работает)))


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
170 Сообщений
ilyay ilyay
69 Сообщений
oleg-x
48 Сообщений
alex0402
44 Сообщений
andron81_81
38 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
29 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 214
  • Точка Скрытых: 0
  • Точка Пользователей: 2
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal