Имя: Пароль:
1C
1С v8
Алгоритм по "клонированию" видов расчета
0 Dionis Sergeevich
 
23.05.13
14:49
Делаю обработку по заполнению тч видов расчета в пределах одного плана видов расчетов по подобию. То есть указываем вид расчета, смотрим по всем видам расчетов где наш вид расчета участвует, добавляем туда же свой новый вид расчета.

ТК нельзя добавить в вытесняющие первого ВР новый ВР если он не добавлен во все ВР, вытесняемые Первым создал алгоритм по их заполнению. Но вот что-то идет не так - и я ни как не могу понять что именно. Сделал проверку вида Сообщить("Косячный алгоритм"); в том месте куда по идее попасть не должен (в случае не записи ВР). И самое интересное - новый ВР добавляется в тч остальных ВР по образу и подобию "Источника" - но сообщение все равно выдает - первые 3 попытки исполнения. После чего сообщения не выводятся. Создаю новый тестовый ВР - опять 3 выполнения обработки пишет сообщение, потом перестает. Странно как-то. Мб кто опытным взглядом найдет косяк?
Обработку прилагаю  


http://rghost.ru/46198537


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

       
   
   КонецЦикла;    
       
       
   
КонецПроцедуры

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

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