|
Вопрос по КД | ☑ | ||
---|---|---|---|---|
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). Там есть пример
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |