Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
08 дек 2022, 03:09

Не работает выгрузка данных из УПП 8.2 в другую базу через. xml

Автор ingvars, 07 ноя 2022, 12:55

0 Пользователей и 1 гость просматривают эту тему.

ingvars

Уважаемые специалисты! Подскажите пожалуйста, что не так делаю. При ручном выборе галочек для выгрузки документов - обработка срабатывает, если добовляю в плановое задание - изменения не пишутся в другой базе:

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    МакетИмяФайлаОбмена = ОбработкаОбъект.ПолучитьМакет("ИмяФайлаОбмена");
    ОбластьИмяФайлаОбмена = МакетИмяФайлаОбмена.ПолучитьОбласть("ИмяФайлаОбмена");
    Объект.ИмяФайлаОбмена = ОбластьИмяФайлаОбмена.Область("R1C1:R1C1").Текст;
   
    МакетНаименованиеЦентральногоСклада = ОбработкаОбъект.ПолучитьМакет("НаименованиеЦентральногоСклада");
    ОбластьНаименованиеЦентральногоСклада = МакетНаименованиеЦентральногоСклада.ПолучитьОбласть("НаименованиеЦентральногоСклада");
    Объект.НаименованиеЦентральногоСклада = ОбластьНаименованиеЦентральногоСклада.Область("R1C1:R1C1").Текст;
   
    Объект.ЭтоИнтерактивныйРежим = Истина; 
   
КонецПроцедуры

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

    ПриИзмененииПериодаНаСервере();
   
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы   

&НаКлиенте
Процедура ПериодОтбораПриИзменении(Элемент)
   
    Если ЗначениеЗаполнено(ПериодОтбора) Тогда
        ОбновитьСписокДокументовКВыгрузке();   
    КонецЕсли;

    Объект.ДатаНачала = ПериодОтбора.ДатаНачала;
    Объект.ДатаОкончания = ПериодОтбора.ДатаОкончания;

    ПриИзмененииПериодаНаСервере();
   
КонецПроцедуры

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

    Объект.ТаблицаНастройкиПараметров.Загрузить(ТаблицаНастройкиПараметров);   
   
КонецПроцедуры

&НаКлиенте
Процедура ГруппаВыгрузкаЗагрузкаПриСменеСтраницы(Элемент, ТекущаяСтраница)
    Если ТекущаяСтраница.Имя = "ГруппаЗагрузка" Тогда
        Элементы.ВыгрузитьЗагрузить.Заголовок = "Загрузить";
    Иначе
        Элементы.ВыгрузитьЗагрузить.Заголовок = "Выгрузить";
    КонецЕсли;   
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийТаблицыФормы   

&НаКлиенте
Процедура СписокДокументовДляВыгрузкиОтметкаПриИзменении(Элемент)

    ТекущиеДанные = Элементы.СписокДокументовДляВыгрузки.ТекущиеДанные;
   
КонецПроцедуры

 #КонецОбласти

 #Область ОбработчикиКомандФормы 
 
 &НаКлиенте
Процедура ВыгрузитьДокументы(Команда)
   
    ПроверитьНаличиеВыбранныхДокументовИВыгрузитьНаКлиенте();
   
КонецПроцедуры         

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

КонецПроцедуры

 #КонецОбласти

#Область ОбработчикиКомандТаблицыФормы 

&НаКлиенте
Процедура ОбновитьСписокДокументов(Команда)

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

&НаКлиенте
Процедура УстановитьВсеФлажки(Команда)

    УстановитьВсеФлажкиНаСервере();
   
КонецПроцедуры

&НаКлиенте
Процедура УбратьВсеФлажки(Команда)
   
    УбратьВсеФлажкиНаСервере();
   
КонецПроцедуры

#КонецОбласти         

 #Область СлужебныеПроцедурыИФункции

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

&НаСервере
Процедура УстановитьВсеФлажкиНаСервере()

    Для каждого СтрокаСписокДокументовДляВыгрузки Из СписокДокументовДляВыгрузки Цикл
        СтрокаСписокДокументовДляВыгрузки.Отметка = Истина;
    КонецЦикла;
   
КонецПроцедуры

&НаСервере
Процедура УбратьВсеФлажкиНаСервере()

    Для каждого СтрокаСписокДокументовДляВыгрузки Из СписокДокументовДляВыгрузки Цикл
        СтрокаСписокДокументовДляВыгрузки.Отметка = Ложь;
    КонецЦикла;
   
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьНаличиеВыбранныхДокументовИВыгрузитьНаКлиенте()

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

&НаКлиенте
Процедура ВыгрузитьНаКлиенте(МассивВыгружаемыхДокументов)

    АдресФайлаДанныхВХранилище = ВыполнитьВыгрузкуНаСервере(МассивВыгружаемыхДокументов);
   
    Если АдресФайлаДанныхВХранилище = Неопределено Тогда
        Возврат;
    КонецЕсли;
   
    ОткрытьДанныеПротоколовОбменаПриНеобходимости();
   
КонецПроцедуры

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

    АдресФайлаДанных = "";
   
    ОбъектДляСервера.Параметры.Очистить();
    ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект");
   
    Возврат АдресФайлаДанных;
   
КонецФункции

&НаКлиенте
Процедура ОткрытьДанныеПротоколовОбменаПриНеобходимости()
   
    Если Не ПустаяСтрока(Объект.ИмяФайлаПротоколаОбмена) Тогда
        ОткрытьВПриложении(Объект.ИмяФайлаПротоколаОбмена);
    КонецЕсли;
   
КонецПроцедуры

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

&НаКлиенте
Процедура РазвернутьСтрокиДерева(ДеревоДанных, ПредставлениеНаФорме, ИмяФлажка)
   
    СтрокиДерева = ДеревоДанных.ПолучитьЭлементы();
   
    Для Каждого Строка Из СтрокиДерева Цикл
       
        ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
        ПредставлениеНаФорме.Развернуть(ИдентификаторСтроки, Ложь);
       
    КонецЦикла;
   
КонецПроцедуры

// Открывает файл обмена во внешнем приложении.
//
// Параметры:
// 
//
&НаКлиенте
Процедура ОткрытьВПриложении(ИмяФайла, СтандартнаяОбработка = Ложь)
   
    СтандартнаяОбработка = Ложь;
   
    ДополнительныеПараметры = Новый Структура();
    ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла);
    ДополнительныеПараметры.Вставить("ОписаниеОповещения", Новый ОписаниеОповещения);
   
    Файл = Новый Файл();
    Файл.НачатьИнициализацию(Новый ОписаниеОповещения("ПроверитьСуществованиеФайла", ЭтаФорма, ДополнительныеПараметры), ИмяФайла);
   
КонецПроцедуры

&НаСервере
Функция ИмяФайлаНаСервереИлиКлиенте(ИмяРеквизита, Знач АдресФайла, Знач ИмяФайлаДляРасширения = ".xml",
    СоздатьНовый = Ложь, ПроверятьСуществование = Истина)
   
    ИмяФайла = Неопределено;
   
    Если СоздатьНовый Тогда
       
        Расширение = ".zip";
       
        ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
       
        Файл = Новый Файл(ИмяФайла);
       
    Иначе
       
        Расширение = РасширениеФайла(ИмяФайлаДляРасширения);
        ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
        АдресНаСервере = ПолучитьИмяВременногоФайла(Расширение);
        ДвоичныеДанные.Записать(АдресНаСервере);
        ИмяФайла = АдресНаСервере;
       
    КонецЕсли;
   
    Возврат ИмяФайла;
   
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура СообщитьПользователю(Текст, ПутьКДанным = "")
   
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = Текст;
    Сообщение.ПутьКДанным = ПутьКДанным;
    Сообщение.Сообщить();
   
КонецПроцедуры

&НаСервере
Функция РасширениеФайла(Знач ИмяФайла)
   
    ПозицияТочки = ПоследнийРазделитель(ИмяФайла);
   
    Расширение = Прав(ИмяФайла,СтрДлина(ИмяФайла) - ПозицияТочки + 1);
   
    Возврат Расширение;
   
КонецФункции

&НаСервере
Функция ПоследнийРазделитель(СтрокаСРазделителем, Разделитель = ".")
   
    ДлинаСтроки = СтрДлина(СтрокаСРазделителем);
   
    Пока ДлинаСтроки > 0 Цикл
       
        Если Сред(СтрокаСРазделителем, ДлинаСтроки, 1) = Разделитель Тогда
           
            Возврат ДлинаСтроки;
           
        КонецЕсли;
       
        ДлинаСтроки = ДлинаСтроки - 1;
       
    КонецЦикла;

КонецФункции

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

&НаСервереБезКонтекста
Функция ПолучитьМассивВыгружаемыхЭлементовСправочника()   

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

#КонецОбласти

antoneus

Плановое задание - это регламентное? А при ручном выборе галочки ставит, как я понимаю, пользователь? Тогда вопрос: кто, по-вашему, ставит галочки при выполнении регламентного задания, которое выполняется без участия человека?

ingvars

Обработка. Только не работает
Плановое - да это Регламентное

ingvars


antoneus

Программно. Если нужны все документы - выгружать все строки из СписокДокументовДляВыгрузки без учета галок.

ingvars


ingvars

Пришло в голову закоментить "СтруктураОтбора.Вставить("Отметка", Истина);"

ingvars

Функция ПолучитьТаблицуЗначенийДляВыгрузкиПоПравилу(Правило,
МассивСтрокСВыгружаемымиДокументами)

� � � � СтруктураОтбора = Новый Структура;
� � � �
//СтруктураОтбора.Вставить("Отметка", Истина);
� � � � СтруктураОтбора.Вставить("ТипДокумента", Правило);

� � � � ДокументыДляВыгрузки = Новый ТаблицаЗначений();
� � � � ДокументыДляВыгрузки.Колонки.Добавить("Документ");

� � � � Если Правило = "Поступление товаров и услуг" Тогда
� � � � � � � ТипДанныхДляВыгрузки = "ДокументСсылка.ПоступлениеТоваровУслуг";
� � � � ИначеЕсли Правило = "Перемещение товаров" Тогда
� � � � � � � ТипДанныхДляВыгрузки = "ДокументСсылка.ПеремещениеТоваров";
� � � � ИначеЕсли Правило = "Номенклатура" Тогда
� � � � � � � ТипДанныхДляВыгрузки = "СправочникСсылка.Номенклатура";
� � � � КонецЕсли;

� � � � Для каждого ДокументДляВыгрузки Из
МассивСтрокСВыгружаемымиДокументами Цикл
� � � � � � � Если ТипЗнч(ДокументДляВыгрузки) = Тип(ТипДанныхДляВыгрузки) Тогда
� � � � � � � � � � НоваяСтрокаДокументыДляВыгрузки =
ДокументыДляВыгрузки.Добавить();
� � � � � � � � � � НоваяСтрокаДокументыДляВыгрузки.Документ = ДокументДляВыгрузки;
� � � � � � � КонецЕсли;
� � � � КонецЦикла;

� � � � Возврат ДокументыДляВыгрузки;

КонецФункции

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск