Имя: Пароль:
1C
1С v8
Вопрос по КД
,
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). Там есть пример