gifts2017

Корректировка в табличной части единицы измерения для номенклатуры (Метаданные)

Опубликовал Андрей Краснокутский (Andry.Boris) в раздел Обработки - Обработка документов

Из-за некорректного переноса документов из УТП в БУ во всех документах оказалось не заполнена единица измерения номенклатуры, а документов в базе очень много... Встал вопрос как исправить руками или обработка?...

В результате за 30 мин. была написана обработка которая на основе метаданных обходит все документы в базе находит те которые содержат ключевую пару "номенклатура" и "ЕдиницаИзмерения" в табличной части и исправляет запись реквизита.

Это моя первая публикация. Работаю с метаданными по 8.1 в первый раз...
Поэтому если сильно криво, просьба не ругать, а оценить как есть...
Спасибо за поддержку и понимание.


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

Скачать файлы

Наименование Файл Версия Размер
ОбходПоДокументам.epf 42
.epf 6,79Kb
14.09.10
42
.epf 6,79Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Аркадий Кучер (Abadonna) 28.09.10 13:22
>Если (Реквизит="Номенклатура") или (Реквизит="ЕдиницаИзмерения") Тогда
Хм.. А вдруг (хотя и вряд ли) реквизит другой идентификатор имеет?
Уж лучше на тип реквизита проверять, имхо
Andry.Boris; +1 Ответить
2. Андрей Краснокутский (Andry.Boris) 28.09.10 14:08
Обработка на стандартную конфигурация.
В стандартной реквизиты называются именно так...
Проверять на тип смысла нет... суть одна и та же...
Как по мне...
Реквизит носит название справочника...
Если поменять на проверку типа....то нужно дописать пару строк...
на получение типа... Если нужно...
3. IG (IG) 20.07.13 05:51
в КА не проставляет единицы, а наоборот удаляет
ТекСтрока.ЕдиницаИзмерения=ТекСтрока.Номенклатура.БазоваяЕдиницаИзмерения; - не заменяет пустое значение