Имя: Пароль:
JOB
Работа
Сравнить данные табличной части и регистра накопления
0 volfy
 
15.11.12
03:04
Помогите пожалуйста...уже кучу времени бьюсь и мозг вскипел а задачу решить надо...

Есть Документ "ОтчетыПоПроделаннымРаботам" В табличной части которого укзывается Платформа(8.2 например) ВерсияПлатформы(8.2.16.ххх) Конфигурация(УПП) РелизКонфигурации(х.х.хх)

И Регистр сведений ТекущиеРелизыПлатформы у которого также есть измерения ВерсияПлатформы КонфигурацияОбновляемая и ресурс ВерсияКонфигурации,

Надо что бы при записи документа проверялось есть ли такая конфигурация (которая указывается в табличной части документа) в регистре сведений и если нет то добавлять ...
1 AET
 
15.11.12
04:03
(0)Зачем о регистре накопления в теме...?

Присоедини в запросе к ТЧ слева РС и выбери без NULL слева. Их и добавляй.

Ну или просто пиши все подряд в РС в Попытке, запись с имеющимися измерениями не запишится.
2 programmer1c_
63
 
15.11.12
07:54
(1)
"Ну или просто пиши все подряд в РС в Попытке, запись с имеющимися измерениями не запишится."

Улыбнуло - представляю, большая база, сотни тысяч документов и пиши "все подряд" :)
3 AET
 
15.11.12
09:11
(2) метод неправильный, но рабочий.
Расскажите пожалуйста как сотни тысяч документов влияют на процесс записи одного типа Акта выполненных работ?
4 volfy
 
16.11.12
01:04
Сейчас доделаю и выложу код ...прошу потом его строго осудить и если будет можно упростить
5 volfy
 
16.11.12
16:24
Подскажите почему не происходит запись в регистр... Присылаю модули
6 volfy
 
16.11.12
16:25
Модуль формы:
....прошлые процедуры


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

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

&НаСервере
Функция ПроверитьНаНовыйРелизУКонтрагента(ТекущийДокумент, Дата);
   
    Добавляем = "Нет";
   
    Запрос2 = Новый Запрос;
    Запрос2.Текст =
      "ВЫБРАТЬ
      |    ТекущиеРелизыПлатформы.КонфигурацияОбновляемая,
      |    ТекущиеРелизыПлатформы.ВерсияКонфигурации,
      |    ОтчетОПроделаннойРаботе.Ссылка,
      |    ОтчетОПроделаннойРаботе.Конфигурации.(
      |        Платформа,
      |        ВерсияПлатформы,
      |        Конфигурация,
      |        ВерсияКонфигурации
      |    )
      |ИЗ
      |    РегистрСведений.ТекущиеРелизыПлатформы КАК ТекущиеРелизыПлатформы,
      |    Документ.ОтчетОПроделаннойРаботе КАК ОтчетОПроделаннойРаботе
      |ГДЕ
      |    ОтчетОПроделаннойРаботе.Ссылка = &Ссылка";
     Запрос2.УстановитьПараметр("Ссылка", ТекущийДокумент);
     Выборка2 = Запрос2.Выполнить();
    Результат2 = ВЫборка2.Выбрать();
                                     
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("ВерсияКонфигурации");
    ТЗ.Колонки.Добавить("ВерсияПлатформы");
    ТЗ.Колонки.Добавить("КонфигурацияОбновляемая");
   
     Если Результат2.Количество() = 0 Тогда
        Для Каждого Элемент ИЗ ТекущийДокумент.Конфигурации Цикл    
                Запись = ТЗ.Добавить();
                Запись.ВерсияКонфигурации = Элемент.ВерсияКонфигурации;
                Запись.ВерсияПлатформы = Элемент.Платформа;
                Запись.КонфигурацияОбновляемая = Элемент.Конфигурация;
       КонецЦикла;
    КонецЕсли;    
 
    Пока Результат2.Следующий() Цикл
       
        Док = Результат2.Ссылка.ПолучитьОбъект();
     
    Для Каждого Элемент ИЗ Док.Конфигурации Цикл    

            Если НЕ Результат2.ВерсияКонфигурации = Элемент.ВерсияКонфигурации Тогда
                               
                Запись = ТЗ.Добавить();
                Запись.ВерсияКонфигурации = Элемент.ВерсияКонфигурации;
                Запись.ВерсияПлатформы = Элемент.Платформа;
                Запись.КонфигурацияОбновляемая = Элемент.Конфигурация;
           КонецЕсли;    
       КонецЦикла;
       КонецЦикла;    
   
       Если ТЗ.Количество() > 0 Тогда
         Возврат "Да";
       КонецЕсли;

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

    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("ВерсияКонфигурации");
    ТЗ.Колонки.Добавить("ВерсияПлатформы");
    ТЗ.Колонки.Добавить("КонфигурацияОбновляемая");
   
    Если Результат2.Количество() = 0 Тогда
           Для Каждого Элемент ИЗ ТекущийДокумент.Конфигурации Цикл    
                Запись = ТЗ.Добавить();
                Запись.ВерсияКонфигурации = Элемент.ВерсияКонфигурации;
                Запись.ВерсияПлатформы = Элемент.Платформа;
                Запись.КонфигурацияОбновляемая = Элемент.Конфигурация;
           КонецЦикла;    
          КонецЕсли;

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

            КонецЕсли;  
        КонецЦикла;
    КонецЦикла;
   
           Док = РеквизитФормыВЗначение("Объект");
           Док.ПишемИзМодуляОбъектаЭтогоДокумента(ТЗ);
   КонецПроцедуры
7 volfy
 
16.11.12
16:25
Модуль объекта Процедура ПишемИзМодуляОбъектаЭтогоДокумента(ТЗ) Экспорт
    Движения.ТекущиеРелизыПлатформы.Записывать = Истина;
        Для Каждого Строка Из ТЗ Цикл
            Набор = Движения.ТекущиеРелизыПлатформы.Добавить();
            Набор.ВерсияКонфигурации = Строка.ВерсияКонфигурации;
            Набор.ВерсияПлатформы = Строка.ВерсияПлатформы;
            Набор.КонфигурацияОбновляемая = Строка.КонфигурацияОбновляемая;
            Набор.Период = ТекущаяДата();
        КонецЦикла;
КонецПроцедуры
8 volfy
 
16.11.12
16:27
может изза того что регистр режим записи подчинение регистратору?
9 volfy
 
16.11.12
16:29
дадада ...извините ступил)
Закон Брукера: Даже маленькая практика стоит большой теории.