|   |   | 
| 
 | Вопрос по КД | ☑ | ||
|---|---|---|---|---|
| 0
    
        ultrannge89 24.06.15✎ 09:53 | 
        В общем есть обмен по правилам КД, из УТ11 в БП2.0. Ситуация в следующем: В УТ есть 3 вида документов. В БП 2 вида.
 Грузится это все в последовательности УТ 1, 2 = БП 1 (Причем последовательность должна соблюдаться) УТ 3 = БП 2. ПКО расположил по порядку УТ 1 = БП 1 УТ 2 = БП 1 (При наличие в БП документа УТ1) ну и УТ 3 = БП 2. Как сделать чтобы он проверял не только наличие в базу БП нужного документа, но и смотрел сам файл, например если документ 1 и документ 2 попали в один файл...? Наверное запутал вас своими речами =) | |||
| 1
    
        Альбатрос 24.06.15✎ 09:54 | 
        "Наверное запутал вас своими речами" - не то слово...     | |||
| 2
    
        ultrannge89 24.06.15✎ 09:56 | 
        Просто если выложу все правила то окончательно запутаю     | |||
| 3
    
        VladZ 24.06.15✎ 09:57 | 
        (0)  При выгрузке объекта пиши в свой файл. При загрузке проверяй.     | |||
| 4
    
        ultrannge89 24.06.15✎ 10:01 | 
        В том то и дело что не могу понять как проверять если объект в файле?
 В БД просто при выгрузке пишу запрос к базе и понимаю есть док 1 там или нет. А как проверить есть он в файле xml или нет я не знаю... | |||
| 5
    
        Ligor 24.06.15✎ 10:05 | 
        (0) Я так понял, что тебе требуется настроить регистрацию объектов выгрузки в УТ(то есть если регистрируется документ1, то вместе с ним и регистрируется для обмена и документ2). То есть отключить автоматическую регистрацию(делается в планахОбмена, если есть) и ручками прописать свою(допустим в подписке при проведении).     | |||
| 6
    
        ultrannge89 24.06.15✎ 10:08 | 
        (5) Нет, мне надо чтобы если в файл одновременно попали документ1 и документ2, чтобы они в одной сессии загрузились в базу. Но это не получается т.к. у меня стоит проверка при загрузке документа2 если по этому договору документ1 в базе. Я хочу расширить условие и сделать проверку как в базе так и в текущем файле загрузки.     | |||
| 7
    
        ultrannge89 24.06.15✎ 10:11 | 
        Ну вот в УТ есть док реализация, и док снижение стоимости реализации. А в БП это просто документ продажи. Если из УТ В БП выгружается док реализации то в БП он попадает с видом заключение, если из ут идет док снижение стоимости то он попадает в бп как продажа с видом изменение стоимости     | |||
| 8
    
        ultrannge89 24.06.15✎ 10:14 | 
        Понятное дело что грузить изменение стоимости без документа реализации нельзя, это я отфильтровал наложив событие ПОСЛЕ ЗАГРУЗКИ, но я хочу чтобы если пользователь заведет реализацию и сразу изменение стоимости, они встанут вместе на регистрацию и попадут в один файл. Я хочу чтобы перед загрузкой изменения стоимости проверялся еще и файл.     | |||
| 9
    
        Ligor 24.06.15✎ 10:24 | 
        (8) А что ты хочешь то этой проверкой сделать? Хочешь что бы 1 документ в БП создавался?     | |||
| 10
    
        ultrannge89 24.06.15✎ 10:30 | 
        Чтобы и первый и второй последовательно попали в базу, сейчас происходит то что первый пишется а второй не находит его в базе и не пишется и по сути херится. Затем его приходится по новой ставить на выгрузку и только тогда он попадает     | |||
| 11
    
        regi1984 24.06.15✎ 10:39 | 
        Порядок в ПВД (выгрузка) настроен?     | |||
| 12
    
        ultrannge89 24.06.15✎ 10:44 | 
        Да     | |||
| 13
    
        Ligor 24.06.15✎ 10:52 | 
        (10) глупо, но все же, а если на 2 обмена разбить?     | |||
| 14
    
        regi1984 24.06.15✎ 10:58 | 
        Искать в файле не вариант. Давай хвастайся: что же за проверка у тебя для документа 2 ?     | |||
| 15
    
        regi1984 24.06.15✎ 11:01 | 
        Если документ 1 существует в базе-источнике, то он существует в базе приемнике(или едет в данной сессии обмена). Может существование Док1-Док2 проверить во время выгрузки и передать как параметр документа 2?     | |||
| 16
    
        Ligor 24.06.15✎ 11:07 | 
        (15) на сколько я понимаю, дело в транзакция. Ему требуется в разных транзакциях писать документы, при этом документ1 должен  быть раньше документ2. Сейчас у него ситуация такая(опять же это мои догадки): когда пишется документ2 в той же транзакции, что и документ1, он по запросу не находит документ1 в базе, из-за чего не записывает документ2.     | |||
| 17
    
        ultrannge89 24.06.15✎ 11:11 | 
        У второго документа. Событие ПослеЗагрузки:
 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1 | бит_стр_ДоговорИнвестированияДолевогоУчастия.Ссылка, | бит_стр_ДоговорИнвестированияДолевогоУчастия.Дата КАК Дата |ИЗ | Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия |ГДЕ | бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации = ЗНАЧЕНИЕ(Перечисление.бит_стр_ВидыОперацииДоговораИнвестирования.Заключение) | И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента = &ДоговорКонтрагента | И НЕ бит_стр_ДоговорИнвестированияДолевогоУчастия.ПометкаУдаления | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент = &Контрагент | |УПОРЯДОЧИТЬ ПО | Дата УБЫВ"; Запрос.УстановитьПараметр("ДоговорКонтрагента", Объект.ДоговорКонтрагента); Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент); ТЗЗаключений = Запрос.Выполнить().Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1 | бит_стр_ДоговорИнвестированияДолевогоУчастия.Ссылка, | бит_стр_ДоговорИнвестированияДолевогоУчастия.Дата КАК Дата |ИЗ | Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия |ГДЕ | бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации = ЗНАЧЕНИЕ(Перечисление.бит_стр_ВидыОперацииДоговораИнвестирования.Расторжение) | И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента = &ДоговорКонтрагента | И НЕ бит_стр_ДоговорИнвестированияДолевогоУчастия.ПометкаУдаления | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент = &Контрагент | |УПОРЯДОЧИТЬ ПО | Дата"; Запрос.УстановитьПараметр("ДоговорКонтрагента", Объект.ДоговорКонтрагента); Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент); ТЗРасторжений = Запрос.Выполнить().Выгрузить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1 | бит_стр_ДоговорИнвестированияДолевогоУчастия.Ссылка, | бит_стр_ДоговорИнвестированияДолевогоУчастия.Дата КАК Дата |ИЗ | Документ.бит_стр_ДоговорИнвестированияДолевогоУчастия КАК бит_стр_ДоговорИнвестированияДолевогоУчастия |ГДЕ | бит_стр_ДоговорИнвестированияДолевогоУчастия.ВидОперации = ЗНАЧЕНИЕ(Перечисление.бит_стр_ВидыОперацииДоговораИнвестирования.ИзменениеУсловий) | И бит_стр_ДоговорИнвестированияДолевогоУчастия.ДоговорКонтрагента = &ДоговорКонтрагента | И НЕ бит_стр_ДоговорИнвестированияДолевогоУчастия.ПометкаУдаления | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Проведен | И бит_стр_ДоговорИнвестированияДолевогоУчастия.Контрагент = &Контрагент | |УПОРЯДОЧИТЬ ПО | Дата УБЫВ"; Запрос.УстановитьПараметр("ДоговорКонтрагента", Объект.ДоговорКонтрагента); Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент); ТЗИзменений = Запрос.Выполнить().Выгрузить(); ДокЗаключения = Документы.бит_стр_ДоговорИнвестированияДолевогоУчастия.ПустаяСсылка(); ДокРасторжения = Документы.бит_стр_ДоговорИнвестированияДолевогоУчастия.ПустаяСсылка(); ДокИзменения = Документы.бит_стр_ДоговорИнвестированияДолевогоУчастия.ПустаяСсылка(); Если ТЗЗаключений.Количество() > 0 Тогда ДокЗаключения = ТЗЗаключений[0].Ссылка; КонецЕсли; Если ТЗРасторжений.Количество() > 0 Тогда ДокРасторжения = ТЗРасторжений[0].Ссылка; КонецЕсли; Если ТЗИзменений.Количество() > 0 Тогда ДокИзменения = ТЗИзменений[0].Ссылка; КонецЕсли; одТипЗначенияСтрокой(ДокЗаключения); одТипЗначенияСтрокой(ДокРасторжения); одТипЗначенияСтрокой(Объект); ФлУсловий = Истина; Если Не ЗначениеЗаполнено(ДокЗаключения) Тогда ФлУсловий = Ложь; ИначеЕсли ЗначениеЗаполнено(ДокРасторжения) Тогда ФлУсловий = Ложь; ИначеЕсли ДокЗаключения.Сумма <= Объект.Сумма Тогда ФлУсловий = Ложь; КонецЕсли; Если Не ФлУсловий Тогда Отказ = Истина; КонецЕсли; //Проверка даты запрета Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ГраницыЗапретаИзмененияДанных.Организация, | ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений |ИЗ | РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных |ГДЕ | ГраницыЗапретаИзмененияДанных.Организация.ИНН = ""7451343204"""; Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Если Объект.Дата <= Выборка.ГраницаЗапретаИзменений Тогда Сообщить("! Отказ загрузки объекта "+Объект+", по причине закрытого периода"); Отказ = Истина; КонецЕсли; КонецЕсли; Если Не Отказ Тогда Объект.Записать(); Объект.НоменклатурнаяГруппа = Объект.ДоговорКонтрагента.бит_Стр_Строительство; Объект.СчетРасчетов = Объект.ДоговорКонтрагента.бит_стр_ТипДоговораРеализацииНедвижимости.СчетУчетаРасчетов; Объект.СчетЦелевогоФинансирования = Объект.ДоговорКонтрагента.бит_стр_ТипДоговораРеализацииНедвижимости.СчетУчетаЦелевогоФинансирования; Для Каждого мПом из Объект.Помещения Цикл Если мПом.ДоляЧислитель = 0 Тогда мПом.ДоляЧислитель = 1; КонецЕсли; Если мПом.ДоляЗнаменатель = 0 Тогда мПом.ДоляЗнаменатель = 1; КонецЕсли; Выполнить(Алгоритмы.ЗаполнитьПлощади); КонецЦикла; попытка Объект.Ответственный = ПараметрыСеанса.ТекущийПользователь; Исключение КонецПопытки; Объект.ВидОперации = Перечисления.бит_стр_ВидыОперацииДоговораИнвестирования.ИзменениеУсловий; Выполнить(Алгоритмы.ИзменитьКонтрагентаВДоговорахДДУ); ИД = ПараметрыОбъекта["УникальныйИдентификатор"]; мЗап = РегистрыСведений.СоответствияОбъектовИнформационныхБаз.СоздатьМенеджерЗаписи(); мЗап.ТипИсточника = "ДокументСсылка.РеализацияТоваровУслуг"; мЗап.ТипПриемника = "ДокументСсылка.РеализацияТоваровУслуг"; мЗап.УникальныйИдентификаторИсточника = Объект.Ссылка; мЗап.УникальныйИдентификаторИсточникаСтрокой = Объект.Ссылка.УникальныйИдентификатор(); мЗап.УникальныйИдентификаторПриемника = ИД; мЗап.УзелИнформационнойБазы = Параметры.УзелИнформационнойБазы; мЗап.Записать(); КонецЕсли; | |||
| 18
    
        ultrannge89 24.06.15✎ 11:19 | 
        Я добавлял лишь кусок проверки ДатыЗапрета     | |||
| 19
    
        regi1984 24.06.15✎ 11:23 | 
        (18) Не понятно что в "одТипЗначенияСтрокой", вот нашел ты документы ДокЗаключения, ДокРасторжения - что с ними делаем?     | |||
| 20
    
        ultrannge89 24.06.15✎ 11:41 | 
        Мне тоже =) Просто там стоит условие, если есть расторжение то отказ, если нет заключения то отказ и если есть заключение и сумма изменения >= суммы заключения то отказ     | |||
| 21
    
        ultrannge89 24.06.15✎ 11:42 | 
        А по поводу одТипЗначенияСтрокой, тоже не знаю откуда это и главное зачем...     | |||
| 22
    
        regi1984 24.06.15✎ 15:01 | 
        Я бы проверку все же перенес на сторону Источника.     | |||
| 23
    
        ultrannge89 26.06.15✎ 07:02 | 
        А есть ли возможность в обработчике ПередВыгрузкой у ПКО, передать в параметр данные и считать их в том же ПКО но в обработчике ПослеЗагрузки? Тогда бы проблема отпала...     | |||
| 24
    
        regi1984 26.06.15✎ 12:13 | 
        (23) Есть. Внимательнее смотри свои правила (УТ11/БП2.0). Там есть пример     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |