8.х Смена вида склада

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Maks21, 2 дек 2008.

  1. TopicStarter Overlay
    Maks21
    Offline

    Maks21

    Регистрация:
    17 сен 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Конфигурация УПП. Я работаю на предприятии, где некая фирма-автоматизатор еще до меня перебрасывала данные с семерки.. И они допустили такой косяк - установили все склады оптовые, а у нас они розничные (в конфе семерки вообще не было такого реквизита). Это первичный справочник и если склад был задействован в каком-то документе, то вид склада уже нельзя поменять.. Написал обработку.. Все зашибись. НО при отмене проведения/проведении некоторых документов повисает восьмерка.. Подскажите что делать?? Не буду описывать другие процедуры. Вот код нажатия кнопки выпонить:
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    //Создаем рабочие массивы
    ТаблицаЗначенийРезультатЗапроса = Новый ТаблицаЗначений;
    МассивСсылок                     = Новый Массив;
    МассивНеобходимыхДокументов     = Новый Массив;
    СсылкаСклада                     = Новый Массив;
    МассивНеПроведенныхДокументов    = Новый Массив;
    МассивДокументов                = Новый Массив;
    ВидСкладаТекущийСеанс = Склад.ВидСклада;
    //------------------------------------------------------------------------//
    СсылкаСклада.Добавить(Склад.Ссылка);
    //Загрузка выборки из регистра сведений Цены номенклатуры
    Если Не ЗначениеЗаполнено(ВидыСкладов) или Не ЗначениеЗаполнено(Склад) Тогда
    ТекстПредупреждения = "Заполните все реквизиты.";
    Предупреждение(ТекстПредупреждения);
    Возврат;
    КонецЕсли;
    Ответ = Вопрос("Вид склада """ + Склад + """ установится на """ + ВидыСкладов + """. 
    |Продолжить?", РежимДиалогаВопрос.ДаНет);
    Если Ответ = КодВозвратаДиалога.Да Тогда
    //------------------------------------------------------------------------//
    Если ВидыСкладов = Перечисления.ВидыСкладов.Розничный или ВидыСкладов = Перечисления.ВидыСкладов.НТТ Тогда
    ТаблицаЗначенийРезультатЗапроса = тзВыборкаТовара();//выборка из регистра сведений цены номенклатуры для последующей переоценки
    КонецЕсли;    
    Сообщить("Работа обработки началась");            
    Разделение();
    Если Склад.ВидСклада = ВидыСкладов Тогда
    ТекстПредупреждения = "Выбранный склад уже является " + ВидыСкладов + "
    |Работа обработки завершена";
    Предупреждение(ТекстПредупреждения);
    Сообщить("Работа обработки завершена");
    Возврат;
    КонецЕсли;
    //------------------------------------------------------------------------//
    Сообщить("Поиск объектов");
    ТаблицаОбъектов = НайтиПоСсылкам(СсылкаСклада);
    Для каждого Элемент Из ТаблицаОбъектов Цикл
    Попытка //Таким образом отсекаются только документы
    Если Элемент[1].ПометкаУдаления = Ложь и Элемент[1].Проведен = Истина Тогда 
    МассивСсылок.Добавить(Элемент[1]);              
    КонецЕсли;
    Исключение                               
    //
    КонецПопытки;
    КонецЦикла;
    //Открытие формы для контроля полученных ссылок на объекты
    ФормаКонтроля = ПолучитьФорму("ФормаКонтроля", ЭтаФорма);
    ФормаКонтроля.Заголовок = "Контроль";
    Для Сч = 0 По МассивСсылок.ВГраница() Цикл
    НоваяСтрока = КонтрольнаяТЗ.Добавить();
    НоваяСтрока.Документ = МассивСсылок[Сч];
    КонецЦикла;
    МассивДокументов = КонтрольнаяТЗ.ВыгрузитьКолонку("Документ");
    ФормаКонтроля.ОткрытьМодально();
    //------------------------------------------------------------------------//
    Сообщить("Количество документов: " + МассивДокументов.Количество() + " шт.");
    Если МассивДокументов.Количество() > 0 Тогда
    Разделение();
    Сообщить("1. Отмена проведения объектов:");
    ИндикаторФормирования = ПолучитьОбщуюФорму("ИндикаторФормирования");
    ИндикаторФормирования.Заголовок = "Отмена проведения";
    ИндикаторФормирования.Открыть();
    ШагИндикатора = 100/МассивДокументов.Количество(); 
    ПодборкаОбщихМодулей.ЗначениеИндикатора(0, ИндикаторФормирования);
    ЗначениеИндикатора = 0;
    Для Сч = 0 По МассивДокументов.ВГраница() Цикл
    Сообщить("Отменяем проведение документа: " + МассивДокументов[Сч]);
    Попытка
    МассивДокументов[Сч].ПолучитьОбъект().Записать(РежимЗаписиДокумента.ОтменаПроведения);
    Исключение
    //
    КонецПопытки;
    ЗначениеИндикатора = ЗначениеИндикатора + ШагИндикатора;
    ПодборкаОбщихМодулей.ЗначениеИндикатора(ЗначениеИндикатора, ИндикаторФормирования);
    МассивНеобходимыхДокументов.Добавить(МассивДокументов[Сч]);
    КонецЦикла;
    ИндикаторФормирования.Закрыть();
    Разделение();
    //------------------------------------------------------------------------//
    Сообщить("2. Установка вид склада: """ + ВидыСкладов + """");
    Попытка
    ТекущийОбъект = Склад.ПолучитьОбъект();
    ТекущийОбъект.ВидСклада = ВидыСкладов;
    Если Не ЗначениеЗаполнено(ТекущийОбъект.ТипЦенРозничнойТорговли) Тогда
    ТекущийОбъект.ТипЦенРозничнойТорговли = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000009");
    КонецЕсли;    
    ТекущийОбъект.Записать();
    Исключение
    Сообщить("Не удалось изменить вид склада");
    ТекущийОбъект.ВидСклада = ВидСкладаТекущийСеанс;
    ТекущийОбъект.Записать();
    КонецПопытки;
    //------------------------------------------------------------------------//
    //Переоценка товара
    Если ВидыСкладов = Перечисления.ВидыСкладов.Розничный или ВидыСкладов = Перечисления.ВидыСкладов.НТТ Тогда
    Попытка
    СформироватьПереоценкуТовара();
    Исключение
    Сообщить("Не удалось выполнить переоценку.");
    ТекущийОбъект = Склад.ПолучитьОбъект();
    ТекущийОбъект.ВидСклада = ВидСкладаТекущийСеанс;
    Если Не ЗначениеЗаполнено(ТекущийОбъект.ТипЦенРозничнойТорговли) Тогда
    ТекущийОбъект.ТипЦенРозничнойТорговли = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000009");
    КонецЕсли;    
    ТекущийОбъект.Записать();
    КонецПопытки;
    КонецЕсли;
    //------------------------------------------------------------------------//
    Разделение();
    Сообщить("3. Проведение документов:");
    ИндикаторФормирования = ПолучитьОбщуюФорму("ИндикаторФормирования");
    ИндикаторФормирования.Заголовок = "Проведение документов";
    ИндикаторФормирования.Открыть();
    ШагИндикатора = 100/МассивНеобходимыхДокументов.Количество(); 
    ПодборкаОбщихМодулей.ЗначениеИндикатора(0, ИндикаторФормирования);
    ЗначениеИндикатора = 0;
    Для Сч = 0 По МассивНеобходимыхДокументов.ВГраница() Цикл
    Документ = МассивНеобходимыхДокументов[Сч].ПолучитьОбъект();
    Попытка
    Документ.Записать(РежимЗаписиДокумента.Проведение ,РежимПроведенияДокумента.Неоперативный);
    Сообщить("Проведение документа: " + МассивНеобходимыхДокументов[Сч] + "");
    Исключение
    Сообщить("Не удалось провести: " + МассивНеобходимыхДокументов[Сч]);
    МассивНеПроведенныхДокументов.Добавить(МассивНеобходимыхДокументов[Сч]);
    КонецПопытки;
    ЗначениеИндикатора = ЗначениеИндикатора + ШагИндикатора;
    ПодборкаОбщихМодулей.ЗначениеИндикатора(ЗначениеИндикатора, ИндикаторФормирования);
    КонецЦикла;
    ИндикаторФормирования.Закрыть();
    //------------------------------------------------------------------------//
    Если МассивНеПроведенныхДокументов.Количество() > 0 Тогда
    СохранитьВТекстовыйФайл(МассивНеПроведенныхДокументов);
    Сообщить("Файл сохранен c:эtempэErrors.txt");
    КонецЕсли;    
    //------------------------------------------------------------------------//  
    ИначеЕсли МассивСсылок.Количество() = 0 Тогда
    Попытка
    ТекущийОбъект = Склад.ПолучитьОбъект();
    ТекущийОбъект.ВидСклада = ВидыСкладов;
    Если Не ЗначениеЗаполнено(ТекущийОбъект.ТипЦенРозничнойТорговли) Тогда
    ТекущийОбъект.ТипЦенРозничнойТорговли = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000009");
    КонецЕсли;    
    ТекущийОбъект.Записать();
    Исключение
    Сообщить("Не удалось изменить вид склада");
    КонецПопытки;
    КонецЕсли;
    //------------------------------------------------------------------------//
    Разделение();
    Сообщить("Работа обработки завершена");
    ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
    Возврат;
    КонецЕсли;
    КонецПроцедуры
    
    
    
    
    
    
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Возможно, что я конкретно гоню. Я бы даже сказал, что так оно и есть. И пусть меня местные гуру поправят. Но, может быть есть смысл создать для всех нужных складов - двойники с правильным типом склада, перегнать перемещением на них весь остаток, и в дальнейшем только ими и пользоваться, а через пол годика сделать свёртку базы, и забыть про этот косяк?
  3. TopicStarter Overlay
    Maks21
    Offline

    Maks21

    Регистрация:
    17 сен 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    Была такая мысль... Придется тогда пройтись по всем документам, которые задействуют склады и установить необходимый...
    ---------------
    А хотя........ зачем по ним проходится... посмотрим что скажут "гуру"
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Что за конфа? С оптового в последних УТ и УПП можно в розницу торговать, насколько я помню...
  5. TopicStarter Overlay
    Maks21
    Offline

    Maks21

    Регистрация:
    17 сен 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    конфигурация УПП. Первым предложением было написано написано.
    Пока мною было замечено, что формирует для оптовых складов другую стоимость в документе "Перемещение товаров", а эта стоимость пишется в регистр "Партии товаров на складах"
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Да, подраздел другой надо было, ну да ладно :)
    Другую - это что значит?

Поделиться этой страницей