Имя: Пароль:
1C
1С v8
Объясните, как работают эти правила обмена
0 Godofsin
 
04.04.13
12:44
Реально, не догоняю. Объясните на примере РКО:

http://savepic.org/3154973.jpg

А вот ПВД:

ТекстЗапроса = "SELECT Existence = CASE COUNT(Id) WHEN 0 THEN 'НЕТ' WHEN 1 THEN 'ЕСТЬ' END
               |FROM tempdb..sysobjects WHERE id = object_id('tempdb..#tt1')";
Результат = глЗапросSQL.ВыполнитьИнструкцию(ТекстЗапроса);

Если НЕ (Результат.ПолучитьЗначение(1,1) = "ЕСТЬ") Тогда
   ТекстЗапроса = "CREATE TABLE #tt1(f_0 CHAR(9), f_1 CHAR(9), f_2 CHAR(9))";
   глЗапросSQL.ВыполнитьИнструкцию(ТекстЗапроса);

   ТекстЗапроса = "INSERT INTO #tt1(f_0, f_1, f_2)
                   |SELECT
                   |    Клиенты.ID,
                   |    ЮрЛица.ID,
                   |    $Справочник.ЮрЛица.ТорговаяСеть
                   |FROM
                   |    $Справочник.ЮрЛица as ЮрЛица WITH(NOLOCK)
                   |    INNER JOIN $Справочник.Клиенты as Клиенты WITH(NOLOCK)
                   |        ON $Справочник.Клиенты.ЮрЛицо = ЮрЛица.ID
                   |WHERE
                   |    $Справочник.ЮрЛица.ТорговаяСеть = ?
                   |";
   глЗапросSQL.Подготовить(ТекстЗапроса);
   Если глЗапросSQL.ПостроитьПараметры() = 1 Тогда
       глЗапросSQL.УстПараметр(1, Параметры.ТорговаяСеть);
   КонецЕсли;
   глЗапросSQL.ВыполнитьИнструкцию(ТекстЗапроса);
КонецЕсли;


Состояние("выборка всех документов возврата по клиентам торговой сети...");

ТекстЗапроса = "SELECT
               |    Журнал.IDDOC [Документ $Документ.ПриходныйКассовый],
               |    CAST(LEFT(Журнал.DATE_TIME_IDDOC, 8) AS DATETIME) as ДатаДок,
               |    Журнал.DOCNO as НомерДок,
               |    Журнал.SP1165 [Клиент $Справочник.Клиенты],
               |    Журнал.SP1005 [Фирма $Справочник.Фирмы]
               |FROM
               |    _1SJOURN as Журнал WITH(NOLOCK)
               |    INNER JOIN #tt1 as Клиенты
               |        ON Клиенты.f_0 = Журнал.SP1165
               |    INNER JOIN $Документ.ПриходныйКассовый as ПриходныйКассовый WITH(NOLOCK)
               |        ON ПриходныйКассовый.IDDOC = Журнал.IDDOC
               |WHERE
               |    CAST(LEFT(Журнал.DATE_TIME_IDDOC, 8) AS DATETIME) BETWEEN ? AND ?
               |";
глЗапросSQL.Подготовить(ТекстЗапроса);
Если глЗапросSQL.ПостроитьПараметры() = 1 Тогда
   глЗапросSQL.УстПараметр(1, ДатаНачала);    
   глЗапросSQL.УстПараметр(2, ДатаОкончания);
КонецЕсли;    

Попытка                
   Результат = глЗапросSQL.ВыполнитьИнструкцию(ТекстЗапроса);
Исключение    
   Сообщить(глЗапросSQL.ПолучитьОписаниеОшибки());
   Отказ = 1;
   Возврат 0;
КонецПопытки;

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

Результат.ВыбратьСтроки();
Пока Результат.ПолучитьСтроку() = 1 Цикл
   Приходный = Результат.Документ;
   Документы.НайтиДокумент(Приходный);
   Если (Документы.Проведен() = 0) или (Документы.ПометкаУдаления() = 1) тогда
       Продолжить;
   КонецЕсли;
   ВыборкаДанных.НоваяСтрока();
   ВыборкаДанных.алкДатаВходящегоДокумента = Дата(ДатаГод(Документы.ДатаДок),
       ДатаМесяц(Документы.ДатаДок), ДатаЧисло(Документы.ДатаДок));
   ВыборкаДанных.алкНомерВходящегоДокумента = Документы.НомерДок;
   ВыборкаДанных.ВалютаДокумента = Документы.Валюта;
   ВыборкаДанных.алкИдентификатор =Документы.Идентификатор;
   Клиент = Документы.Клиент;
   ДоговорКонтрагента = СоздатьОбъект("СписокЗначений");    
   ДоговорКонтрагента.ДобавитьЗначение(Приходный.Валюта, "ВалютаВзаиморасчетов");
   ДоговорКонтрагента.ДобавитьЗначение("ПоДоговоруВЦелом", "ВедениеВзаиморасчетов");
   ДоговорКонтрагента.ДобавитьЗначение("СПоставщиком", "ВидДоговора");
   ДоговорКонтрагента.ДобавитьЗначение(Клиент.ЮрЛицо, "Организация");
   ДоговорКонтрагента.ДобавитьЗначение(Документы.Фирма, "Владелец");
   ДоговорКонтрагента.ДобавитьЗначение("Основной договор", "Наименование");
   ДоговорКонтрагента.ДобавитьЗначение(0, "ПометкаУдаления");
   ДоговорКонтрагента.ДобавитьЗначение(0, "ЭтоГруппа");    
   ВыборкаДанных.ДоговорКонтрагента = ДоговорКонтрагента;
   ВыборкаДанных.Касса = Клиент;
   ВыборкаДанных.Контрагент = Документы.Фирма;
   ВыборкаДанных.Организация = Клиент.ЮрЛицо;
   ВыборкаДанных.Подразделение = Клиент;
   ВыборкаДанных.СуммаДокумента = Документы.Сумма;
   ВыборкаДанных.Дата = ?(ПустоеЗначение(Документы.ДатаПлатежа)=1, Документы.ДатаДок,
       Документы.ДатаПлатежа);
   ВыборкаДанных.ПометкаУдаления = Документы.ПометкаУдаления();
   ВыборкаДанных.Проведен = Документы.Проведен();
КонецЦикла;
1 Godofsin
 
04.04.13
12:46
Источник не указан. ВыгрузитьПоПравилу() нет. Галки "получать из входящих данных не установлено". А документы создаются... Как?
2 ДенисЧ
 
04.04.13
12:47
ВыборкаДанных зато есть.
3 Godofsin
 
04.04.13
12:50
(2) Ну и? Это предопределенный параметр?
4 Godofsin
 
04.04.13
12:51
Или можно создать ТЗ с любым именем, главное, чтоб колонки совпадали со свойствами, и объект будет выгружаться?
5 Godofsin
 
04.04.13
13:08
Ну чо, никто не знает шо ле?
6 rozer76
 
04.04.13
13:13
Перед обработкой
Условия возникновения события
Событие выполняется перед обработкой каждого правила выгрузки один раз. Используется для установки дополнительных параметров перед выгрузкой данных, для переопределения выборки объектов, подлежащей выгрузке, либо для выгрузки дополнительной информации

............
............

ВыборкаДанных - Запрос, Результат запроса, Выборка из результата запроса или произвольная коллекция выгружаемых объектов. Используется, когда способ выгрузки данных - Произвольный алгоритм. Если определить данную переменную, то обход коллекции и выгрузка объектов будет осуществляться автоматически

Важно:
Если для выборки данных ПВД используется произвольный алгоритм и в обработчике ПВД "Перед обработкой" инициируется параметр ВыборкаДанных, то для ПКО следует установить признак "Не запоминать выгруженные объекты".
7 rozer76
 
04.04.13
13:14
+(6) это из хелпа по обработчикам в самой КД
8 Godofsin
 
04.04.13
13:17
(6) (7) Точно! Спасибо. Вот я слепошарый...
9 cw014
 
04.04.13
13:24
В КД во всех обработчиках есть пункт меню "Информация по обработчикам". Пока туда не заглянешь - ничего у тебя не получится
10 Aprobator
 
04.04.13
13:33
в КД вообще очень приличный хелп, имхо.