Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 00:55

Обработка выгружает данные но не сохраняет их в файл

Автор Дмитрий Джей, 22 сен 2020, 17:16

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

Дмитрий Джей

Добрый день.
Есть обработка, которая выгружает сертификаты из Розницы. Но по неизвестным мне причинам файл куда выгружаются данные в формате XML не сохраниется. система даже не предлагает его сохранить.
Ниже представлен модуль формы, скажите пожалуйста, что и где пропущено, что когда я выбираю файл выгрузки и нажимаю кнопку выгрузить, файл не сохраняется и просто отсутствует

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

&НаКлиенте
Процедура УстановитьПериодПутьВыгрузкиДанных()
   Если ПустаяСтрока(ПутьВыгрузкиДанных) Тогда
      ПутьВыгрузкиДанных = КаталогДокументов() + "AnalisSale.xml";
   КонецЕсли;
   Если Период.ДатаНачала = Дата(1, 1, 1) И Период.ДатаОкончания = Дата(1, 1, 1) Тогда
      Период.Вариант = ВариантСтандартногоПериода.ЭтотГод; //Сегодня;
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура комВыгрузитьДанных(Команда)
   МассивПолучаемыхФайлов = Новый Массив;
   МассивПолучаемыхФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьВыгрузкиДанных, ПолучитьАдресФайла()));
//   НачатьПолучениеФайлов(Новый ОписаниеОповещения("ОкончаниеВыгрузкиДанных", ЭтотОбъект), МассивПолучаемыхФайлов, ПутьВыгрузкиДанных, Ложь);

   ФормированиеФайла();
КонецПроцедуры

&НаСервере
Функция ПолучитьТЗДляПереноса()
   
   ТЗ = НОВЫЙ ТаблицаЗначений;
   
   ТЗ.Колонки.Добавить("НомерСтроки");
   ТЗ.Колонки.Добавить("ТипНом");
   ТЗ.Колонки.Добавить("Зн");
   
   ТЗ.Колонки.Добавить("Номенклатура");
   ТЗ.Колонки.Добавить("Характеристика");
   ТЗ.Колонки.Добавить("ТипЗапасовЧ");
   ТЗ.Колонки.Добавить("РазделУчета");
   ТЗ.Колонки.Добавить("ДокументОснования");
   ТЗ.Колонки.Добавить("Партия");
   ТЗ.Колонки.Добавить("Покупатель");
   
   ТЗ.Колонки.Добавить("Количество");
   ТЗ.Колонки.Добавить("СуммаСНДС");
   ТЗ.Колонки.Добавить("СуммаНДС");
   ТЗ.Колонки.Добавить("СтавкаНДС");
   ТЗ.Колонки.Добавить("СуммаПередачиСНДС");
   ТЗ.Колонки.Добавить("СуммаВознагражденияСНДС");
   ТЗ.Колонки.Добавить("СуммаНДСВознаграждения");
   
   ТЗ.Колонки.Добавить("СтоимостьБезНДС");
   
   Возврат ТЗ;
   
КонецФункции
&НаСервере
Процедура ФормированиеФайла()
   
   //массивДокументов = ПолучитьРеестрОбрабатываемыхДокументов();   
   //
   //ТЗ = ПолучитьТЗДляПереноса();
   
   Запись = Новый ЗаписьXML;
   Запись.ОткрытьФайл(ПутьВыгрузкиДанных);
   Запись.ЗаписатьОбъявлениеXML();
   // формируем корневой элемент
   Запись.ЗаписатьНачалоЭлемента("Документы");
   
   Запрос = НОВЫЙ ЗАПРОС;
   Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |   ДвиженияСерийныхНомеров.Номенклатура КАК ПодарочныйСертификат,
                  |   ДвиженияСерийныхНомеров.СерийныйНомер КАК СерийныйНомер,
                  |   ДвиженияСерийныхНомеров.Получатель КАК Склад,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.Период < &НачалоПериода
                  //|            И НЕ ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации = ЗНАЧЕНИЕ(Справочник.АналитикаХозяйственныхОпераций.ПогашениеПодарочныхСертификатов)
                  |         ТОГДА ДвиженияСерийныхНомеров.Количество
                  |      ИНАЧЕ 0
                  |   КОНЕЦ КАК КоличествоНачальныйОстаток,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.Период >= &НачалоПериода
                  //|            И НЕ ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации = ЗНАЧЕНИЕ(Справочник.АналитикаХозяйственныхОпераций.ПогашениеПодарочныхСертификатов)
                  |         ТОГДА ДвиженияСерийныхНомеров.Количество
                  |      ИНАЧЕ 0
                  |   КОНЕЦ КАК КоличествоПриход,
                  |   0 КАК КоличествоРасход,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации = ЗНАЧЕНИЕ(Справочник.АналитикаХозяйственныхОпераций.РеализацияТоваров)
                  |         ТОГДА ДвиженияСерийныхНомеров.Период
                  |      ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                  |   КОНЕЦ КАК ДатаРеализации,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации = ЗНАЧЕНИЕ(Справочник.АналитикаХозяйственныхОпераций.ПогашениеПодарочныхСертификатов)
                  |         ТОГДА ДвиженияСерийныхНомеров.Период
                  |      ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                  |   КОНЕЦ КАК ДатаПогашения,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СписаниеНаЗатраты)
                  |            ИЛИ ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СписаниеПоИнвентаризации)
                  |         ТОГДА ДвиженияСерийныхНомеров.Период
                  |      ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                  |   КОНЕЦ КАК ДатаСписания,
                  |   ДвиженияСерийныхНомеров.Организация КАК Организация,
                  |   ДвиженияСерийныхНомеров.Регистратор КАК Регистратор
                  |ПОМЕСТИТЬ ДвиженияПодарочныхСертификатов
                  |ИЗ
                  |   РегистрСведений.ДвиженияСерийныхНомеров КАК ДвиженияСерийныхНомеров
                  |ГДЕ
                  |   ДвиженияСерийныхНомеров.Период <= &КонецПериода
                  |   И НЕ ДвиженияСерийныхНомеров.Получатель = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
                  |
                  |ОБЪЕДИНИТЬ ВСЕ
                  |
                  |ВЫБРАТЬ
                  |   ДвиженияСерийныхНомеров.Номенклатура,
                  |   ДвиженияСерийныхНомеров.СерийныйНомер,
                  |   ДвиженияСерийныхНомеров.Отправитель,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.Период < &НачалоПериода
                  |         ТОГДА -ДвиженияСерийныхНомеров.Количество
                  |      ИНАЧЕ 0
                  |   КОНЕЦ,
                  |   0,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.Период >= &НачалоПериода
                  |         ТОГДА ДвиженияСерийныхНомеров.Количество
                  |      ИНАЧЕ 0
                  |   КОНЕЦ,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации = ЗНАЧЕНИЕ(Справочник.АналитикаХозяйственныхОпераций.РеализацияТоваров)
                  |         ТОГДА ДвиженияСерийныхНомеров.Период
                  |      ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                  |   КОНЕЦ,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации = ЗНАЧЕНИЕ(Справочник.АналитикаХозяйственныхОпераций.ПогашениеПодарочныхСертификатов)
                  |         ТОГДА ДвиженияСерийныхНомеров.Период
                  |      ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                  |   КОНЕЦ,
                  |   ВЫБОР
                  |      КОГДА ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СписаниеНаЗатраты)
                  |            ИЛИ ДвиженияСерийныхНомеров.АналитикаХозяйственнойОперации.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СписаниеПоИнвентаризации)
                  |         ТОГДА ДвиженияСерийныхНомеров.Период
                  |      ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                  |   КОНЕЦ,
                  |   ДвиженияСерийныхНомеров.Организация,
                  |   ДвиженияСерийныхНомеров.Регистратор
                  |ИЗ
                  |   РегистрСведений.ДвиженияСерийныхНомеров КАК ДвиженияСерийныхНомеров
                  |ГДЕ
                  |   ДвиженияСерийныхНомеров.Период <= &КонецПериода
                  |   И НЕ ДвиженияСерийныхНомеров.Отправитель = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |   ДвиженияПодарочныхСертификатов.ПодарочныйСертификат КАК ПодарочныйСертификат,
                  |   ДвиженияПодарочныхСертификатов.СерийныйНомер КАК СерийныйНомер,
                  |   МАКСИМУМ(ДвиженияПодарочныхСертификатов.ДатаРеализации) КАК ДатаРеализации,
                  |   МАКСИМУМ(ДвиженияПодарочныхСертификатов.ДатаПогашения) КАК ДатаПогашения,
                  |   МАКСИМУМ(ДвиженияПодарочныхСертификатов.ДатаСписания) КАК ДатаСписания
                  |ПОМЕСТИТЬ ДатыДвиженияСерийныхНомеров
                  |ИЗ
                  |   ДвиженияПодарочныхСертификатов КАК ДвиженияПодарочныхСертификатов
                  |ГДЕ
                  |   НЕ ДвиженияПодарочныхСертификатов.СерийныйНомер = ЗНАЧЕНИЕ(Справочник.СерийныеНомера.ПустаяСсылка)
                  |
                  |СГРУППИРОВАТЬ ПО
                  |   ДвиженияПодарочныхСертификатов.ПодарочныйСертификат,
                  |   ДвиженияПодарочныхСертификатов.СерийныйНомер
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |   ДвиженияПодарочныхСертификатов.ПодарочныйСертификат КАК ПодарочныйСертификат,
                  |   ДвиженияПодарочныхСертификатов.СерийныйНомер КАК СерийныйНомер,
                  |   ДвиженияПодарочныхСертификатов.Склад КАК Склад,
                  |   ДвиженияПодарочныхСертификатов.Организация КАК Организация,
                  |   СУММА(ДвиженияПодарочныхСертификатов.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
                  |   СУММА(ДвиженияПодарочныхСертификатов.КоличествоПриход) КАК КоличествоПриход,
                  |   СУММА(ДвиженияПодарочныхСертификатов.КоличествоРасход) КАК КоличествоРасход,
                  |   ВЫРАЗИТЬ(ЕСТЬNULL(ДатыДвиженияСерийныхНомеров.ДатаРеализации, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДАТА) КАК ДатаРеализации,
                  |   ВЫРАЗИТЬ(ЕСТЬNULL(ДатыДвиженияСерийныхНомеров.ДатаПогашения, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДАТА) КАК ДатаПогашения,
                  |   ВЫРАЗИТЬ(ЕСТЬNULL(ДатыДвиженияСерийныхНомеров.ДатаСписания, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДАТА) КАК ДатаСписания,
                  |   ДвиженияПодарочныхСертификатов.Регистратор КАК Регистратор
                  |ПОМЕСТИТЬ ТабНачальныхОстатков
                  |ИЗ
                  |   ДвиженияПодарочныхСертификатов КАК ДвиженияПодарочныхСертификатов
                  |      ЛЕВОЕ СОЕДИНЕНИЕ ДатыДвиженияСерийныхНомеров КАК ДатыДвиженияСерийныхНомеров
                  |      ПО ДвиженияПодарочныхСертификатов.ПодарочныйСертификат = ДатыДвиженияСерийныхНомеров.ПодарочныйСертификат
                  |         И ДвиженияПодарочныхСертификатов.СерийныйНомер = ДатыДвиженияСерийныхНомеров.СерийныйНомер
                  |
                  |СГРУППИРОВАТЬ ПО
                  |   ДвиженияПодарочныхСертификатов.ПодарочныйСертификат,
                  |   ДвиженияПодарочныхСертификатов.СерийныйНомер,
                  |   ДвиженияПодарочныхСертификатов.Склад,
                  |   ДвиженияПодарочныхСертификатов.Организация,
                  |   ВЫРАЗИТЬ(ЕСТЬNULL(ДатыДвиженияСерийныхНомеров.ДатаРеализации, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДАТА),
                  |   ВЫРАЗИТЬ(ЕСТЬNULL(ДатыДвиженияСерийныхНомеров.ДатаПогашения, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДАТА),
                  |   ВЫРАЗИТЬ(ЕСТЬNULL(ДатыДвиженияСерийныхНомеров.ДатаСписания, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДАТА),
                  |   ДвиженияПодарочныхСертификатов.Регистратор
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |   ТабНачальныхОстатков.ПодарочныйСертификат КАК ПодарочныйСертификат,
                  |   ТабНачальныхОстатков.СерийныйНомер КАК СерийныйНомер,
                  |   ТабНачальныхОстатков.Склад КАК Склад,
                  |   ТабНачальныхОстатков.Организация КАК Организация,
                  |   ТабНачальныхОстатков.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
                  |   ТабНачальныхОстатков.КоличествоПриход КАК КоличествоПриход,
                  |   ТабНачальныхОстатков.КоличествоРасход КАК КоличествоРасход,
                  |   ТабНачальныхОстатков.КоличествоНачальныйОстаток + ТабНачальныхОстатков.КоличествоПриход - ТабНачальныхОстатков.КоличествоРасход КАК КоличествоКонечныйОстаток,
                  |   ТабНачальныхОстатков.ПодарочныйСертификат.Номинал КАК Номинал,
                  |   ТабНачальныхОстатков.КоличествоНачальныйОстаток * ТабНачальныхОстатков.ПодарочныйСертификат.Номинал КАК СуммаНачальныйОстаток,
                  |   ТабНачальныхОстатков.КоличествоПриход * ТабНачальныхОстатков.ПодарочныйСертификат.Номинал КАК СуммаПриход,
                  |   (ТабНачальныхОстатков.КоличествоНачальныйОстаток + ТабНачальныхОстатков.КоличествоПриход - ТабНачальныхОстатков.КоличествоРасход) * ТабНачальныхОстатков.ПодарочныйСертификат.Номинал КАК СуммаКонечныйОстаток,
                  |   ТабНачальныхОстатков.КоличествоРасход * ТабНачальныхОстатков.ПодарочныйСертификат.Номинал КАК СуммаРасход,
                  |   ТабНачальныхОстатков.ДатаРеализации КАК ДатаРеализации,
                  |   ТабНачальныхОстатков.ДатаПогашения КАК ДатаПогашения,
                  |   ТабНачальныхОстатков.ДатаСписания КАК ДатаСписания,
                  |   ВЫБОР
                  |      КОГДА ТабНачальныхОстатков.ПодарочныйСертификат.ТипСрокаДействия = ЗНАЧЕНИЕ(Перечисление.СрокДействияПодарочныхСертификатов.СОграничениемНаДату)
                  |         ТОГДА ТабНачальныхОстатков.ПодарочныйСертификат.ДатаОкончанияДействия
                  |      ИНАЧЕ ВЫБОР
                  |            КОГДА НЕ ТабНачальныхОстатков.ДатаРеализации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                  |                  И ТабНачальныхОстатков.ПодарочныйСертификат.ТипСрокаДействия = ЗНАЧЕНИЕ(Перечисление.СрокДействияПодарочныхСертификатов.ПериодПослеПродажи)
                  |               ТОГДА ВЫБОР
                  |                     КОГДА ТабНачальныхОстатков.ПодарочныйСертификат.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Год)
                  |                        ТОГДА ДОБАВИТЬКДАТЕ(ТабНачальныхОстатков.ДатаРеализации, ГОД, ТабНачальныхОстатков.ПодарочныйСертификат.КоличествоПериодовДействия)
                  |                     КОГДА ТабНачальныхОстатков.ПодарочныйСертификат.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Полугодие)
                  |                        ТОГДА ДОБАВИТЬКДАТЕ(ТабНачальныхОстатков.ДатаРеализации, ПОЛУГОДИЕ, ТабНачальныхОстатков.ПодарочныйСертификат.КоличествоПериодовДействия)
                  |                     КОГДА ТабНачальныхОстатков.ПодарочныйСертификат.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал)
                  |                        ТОГДА ДОБАВИТЬКДАТЕ(ТабНачальныхОстатков.ДатаРеализации, КВАРТАЛ, ТабНачальныхОстатков.ПодарочныйСертификат.КоличествоПериодовДействия)
                  |                     КОГДА ТабНачальныхОстатков.ПодарочныйСертификат.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц)
                  |                        ТОГДА ДОБАВИТЬКДАТЕ(ТабНачальныхОстатков.ДатаРеализации, МЕСЯЦ, ТабНачальныхОстатков.ПодарочныйСертификат.КоличествоПериодовДействия)
                  |                     КОГДА ТабНачальныхОстатков.ПодарочныйСертификат.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Декада)
                  |                        ТОГДА ДОБАВИТЬКДАТЕ(ТабНачальныхОстатков.ДатаРеализации, ДЕКАДА, ТабНачальныхОстатков.ПодарочныйСертификат.КоличествоПериодовДействия)
                  |                     КОГДА ТабНачальныхОстатков.ПодарочныйСертификат.Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя)
                  |                        ТОГДА ДОБАВИТЬКДАТЕ(ТабНачальныхОстатков.ДатаРеализации, НЕДЕЛЯ, ТабНачальныхОстатков.ПодарочныйСертификат.КоличествоПериодовДействия)
                  |                     ИНАЧЕ ДОБАВИТЬКДАТЕ(ТабНачальныхОстатков.ДатаРеализации, ДЕНЬ, ТабНачальныхОстатков.ПодарочныйСертификат.КоличествоПериодовДействия)
                  |                  КОНЕЦ
                  |            ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                  |         КОНЕЦ
                  |   КОНЕЦ КАК ДатаОкончанияДействия,
                  |   ТабНачальныхОстатков.Регистратор КАК Регистратор,
                  |   ТабНачальныхОстатков.СерийныйНомер.Наименование КАК СерийныйНомерНаименование
                  |ИЗ
                  |   ТабНачальныхОстатков КАК ТабНачальныхОстатков";   
   

   Запрос.УстановитьПараметр("НачалоПериода", Период.ДатаНачала);
   Запрос.УстановитьПараметр("КонецПериода", КонецДня(Период.ДатаОкончания));   
   
   Сообщить("Выгрузка началась: "+ТекущаяДата());   
   
   ТабВыборка = Запрос.Выполнить().Выгрузить();
   
   Для Каждого Выборка Из ТабВыборка Цикл
      
      Если ТипЗнч(Выборка.Регистратор) <> Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда            
         Продолжить;
      КонецЕсли;            
      
      Запись.ЗаписатьНачалоЭлемента("Документ");   

      Запись.ЗаписатьАтрибут("ИД",               УникальныйИдентификаторОбъекта(Выборка.Регистратор));                  
      Запись.ЗаписатьАтрибут("Регистратор",         Строка(Выборка.Регистратор));      
               
      Запись.ЗаписатьАтрибут("ПодарочныйСертификат",   Строка(Выборка.ПодарочныйСертификат));
      Запись.ЗаписатьАтрибут("СерийныйНомер",         Строка(Выборка.СерийныйНомер));
      Запись.ЗаписатьАтрибут("Склад",               Строка(Выборка.Склад));      
      Запись.ЗаписатьАтрибут("Организация",         Строка(Выборка.Организация));
      
      Запись.ЗаписатьАтрибут("КоличествоПриход",      СтрокаЗаписиДляXML(Выборка.КоличествоПриход));
      Запись.ЗаписатьАтрибут("КоличествоРасход",      СтрокаЗаписиДляXML(Выборка.КоличествоРасход));
      Запись.ЗаписатьАтрибут("Номинал",            СтрокаЗаписиДляXML(Выборка.Номинал));
      Запись.ЗаписатьАтрибут("СуммаПриход",         СтрокаЗаписиДляXML(Выборка.СуммаПриход));
      Запись.ЗаписатьАтрибут("СуммаРасход",         СтрокаЗаписиДляXML(Выборка.СуммаРасход));
      
      Запись.ЗаписатьАтрибут("ДатаРеализации",      ФорматДатыДляXDTO(Выборка.ДатаРеализации, Истина, Истина));
      Запись.ЗаписатьАтрибут("ДатаПогашения",         ФорматДатыДляXDTO(Выборка.ДатаПогашения, Истина, Истина));
      Запись.ЗаписатьАтрибут("ДатаСписания",         ФорматДатыДляXDTO(Выборка.ДатаСписания, Истина, Истина));
      Запись.ЗаписатьАтрибут("ДатаОкончанияДействия",   ФорматДатыДляXDTO(Выборка.ДатаОкончанияДействия, Истина, Истина));      
      
      // закрываем элемент клиента
      Запись.ЗаписатьКонецЭлемента();         
      
      Сообщить(Выборка.СерийныйНомер);         

   КонецЦикла;   
   // закрываем корневой элемент xml-документа
   Запись.ЗаписатьКонецЭлемента();   
   // закрыть файл
   Запись.Закрыть();

   Сообщить("Выгрузка завершилась:"+ТекущаяДата());

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

&НаСервере
Функция ПоучитьСтатусДокументаДляВыгрузки(Док)
   Если Док.Проведен тогда
      Возврат "1";
   КонецЕсли;
   
   Если Док.ПометкаУдаления тогда
      Возврат "2";
   КонецЕсли;
   
   Возврат "0";
   
КонецФункции

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

      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.СписаниеНедостачТоваров") тогда
         
      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") тогда
         
      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.ОприходованиеИзлишковТоваров") тогда
         
         
      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") тогда
         Если док.ЦенаВключаетНДС тогда
            СтрокаТовары.СуммаСНДС = СтрокаТовары.Сумма;
         Иначе
            СтрокаТовары.СуммаСНДС = СтрокаТовары.Сумма + СтрокаТовары.СуммаНДС;
         КонецЕсли;
      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") тогда
         Попытка
            СтрокаТовары.ДокументОснования = СтрокаТовары.ДокументРеализации;
         Исключение
            
         КонецПопытки;
      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.ВозвратТоваровПоставщику") тогда
         Попытка
            СтрокаТовары.ДокументОснования = СтрокаТовары.ДокументПоступления;
         Исключение
            
         КонецПопытки;
         
      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.ПересортицаТоваров") тогда
         
      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.РеализацияТоваровУслуг") тогда
         
      ИначеЕсли ТипЗнчДок = Тип("ДокументСсылка.ОтчетКомиссионера") тогда
         
         СтрокаТовары.СуммаСНДС            = СтрокаТовары.СуммаПродажи; 
         СтрокаТовары.СуммаНДС            = СтрокаТовары.СуммаПродажиНДС; 
         
         СтрокаТовары.СуммаПередачиСНДС      = СтрокаТовары.СуммаСНДС; 
         СтрокаТовары.СуммаВознагражденияСНДС= СтрокаТовары.СуммаВознаграждения;
         СтрокаТовары.СуммаНДСВознаграждения   = СтрокаТовары.СуммаНДСВознаграждения;      
      Иначе
         Сообщить("216 Неизвестный вид документа:"+ТипЗнчДок);
      КонецЕсли;

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

&НаСервере
Процедура ПроверимСвернемОдинаковыеСтрокиВДокументе(док, ТипЗнчДок, прТЗ)
   
   прТЗ_проверка = прТЗ.Скопировать();
   прТЗ_проверка.Колонки.Добавить("Контроль");
   прТЗ_проверка.ЗаполнитьЗначения(1,"Контроль");
   прТЗ_проверка.Свернуть("Номенклатура, Характеристика","Количество, Контроль");
   Если прТЗ_проверка.Количество() <> прТЗ.Количество() тогда
      Сообщить("В документе: "+док+" найдены дубли строк, ОБЪЕДЕНЕНЫ автоматически.");
      
      прТЗ.Свернуть("Номенклатура, Характеристика, СтавкаНДС, ДокументОснования","Количество,Сумма,СуммаСНДС,СуммаНДС, СуммаПередачиСНДС,СуммаВознагражденияСНДС,СуммаНДСВознаграждения");      
      Если (ТипЗнчДок = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") или ТипЗнчДок = Тип("ДокументСсылка.ВозвратТоваровПоставщику"))
         и прТЗ_проверка.Количество() <> прТЗ.Количество() тогда
         
         Сообщить("      - В табл. части указан одинаковый товар с разными основаниями, ОБЪЕДЕНЕНЫ");
         прТЗ.Свернуть("Номенклатура, Характеристика, СтавкаНДС","Количество,Сумма,СуммаСНДС,СуммаНДС, СуммаПередачиСНДС,СуммаВознагражденияСНДС,СуммаНДСВознаграждения");      
         прТЗ.Колонки.Добавить("ДокументОснования");
         
      КонецЕсли;
      
      прТЗ.Колонки.Добавить("НомерСтроки");
      Для Каждого СтрокаТовары из прТЗ Цикл
         СтрокаТовары.НомерСтроки = 0;
         Для Каждого СтрокаДокумента из док.Товары Цикл
         
            Если СтрокаТовары.Номенклатура <> СтрокаДокумента.Номенклатура тогда
               продолжить;
            КонецЕсли;
            
            Если СтрокаТовары.Характеристика <> СтрокаДокумента.Характеристика тогда
               продолжить;
            КонецЕсли;
            
            СтрокаТовары.НомерСтроки = СтрокаДокумента.НомерСтроки;
         КонецЦикла;
      КонецЦикла;
      
   КонецЕсли;
   прТЗ_проверка.Очистить();
   
КонецПроцедуры

&НаСервере
Функция СтрокаЗаписиДляXML(Значение)
   
   СтрокаЗаписи = Строка(Значение);
   
   Если ТипЗнч(Значение) = Тип("Число") Тогда
      
      СтрокаЗаписи = СтрЗаменить(СтрокаЗаписи, Символы.НПП, "");
      СтрокаЗаписи = СтрЗаменить(СтрокаЗаписи, ",", ".");
      
   ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
      
      Если Значение Тогда
         СтрокаЗаписи = "true";
      Иначе
         СтрокаЗаписи = "false";
      КонецЕсли;
      
   КонецЕсли;
   
   Возврат СтрокаЗаписи;
   
КонецФункции

&НаСервере
Функция ПолучитьПоСтавкеНДСЗначениеДляВыгрузки(СтавкаНДС)
   
   ЗначениеСтавкиНДС = 88;
   Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
      ЗначениеСтавкиНДС = 20;
   ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
      ЗначениеСтавкиНДС = 20;
   иначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
      ЗначениеСтавкиНДС = 18;
   ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
      ЗначениеСтавкиНДС = 18;
   ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
      ЗначениеСтавкиНДС = 10;
   ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
      ЗначениеСтавкиНДС = 10;
   ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
      ЗначениеСтавкиНДС = 0;
   ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
      ЗначениеСтавкиНДС = 99;
      
   КонецЕсли;
   
   Возврат ЗначениеСтавкиНДС;
КонецФункции

&НаСервере
Функция УникальныйИдентификаторОбъекта(_Объект)
   
   Ид = Строка(_Объект.УникальныйИдентификатор());
   
   Возврат Ид;
   
КонецФункции

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

&НаСервере
Функция ПолучитьХозяйственнуюОперацию(_Объект)
   
   _имяРеквизита = "ХозяйственнаяОперация";
   Попытка
      Имя = Строка(_Объект[_имяРеквизита]);
   Исключение
      Имя = "";
   КонецПопытки;
   
   Возврат Имя;
   
КонецФункции

&НаСервере
Функция ФорматДатыДляXDTO(ЗначениеДата, ВернутьДату = Истина, ВернутьВремя = Ложь)
   
   ФорматДаты = "ДФ=yyyy-MM-dd; ДЛФ=D";
   ФорматВремени = "ДЛФ=T";
   РазделительДатаВремя = "T";
   
   ДатаСтрока = Формат(ЗначениеДата, ФорматДаты);
   ВремяСтрока = ПРАВ("0"+Формат(ЗначениеДата, ФорматВремени),8);
   Результат = "";
   
   Если ВернутьДату И ВернутьВремя Тогда
      Результат = ДатаСтрока + РазделительДатаВремя + ВремяСтрока;
   ИначеЕсли ВернутьДату И (НЕ ВернутьВремя) Тогда
      Результат = ДатаСтрока;
   ИначеЕсли (НЕ ВернутьДату) И ВернутьВремя Тогда
      Результат = ВремяСтрока;
   КонецЕсли;
   
   Возврат Результат;
   
КонецФункции

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

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

&НаКлиенте
Процедура ПутьВыгрузкиДанныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   Диа = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
   Диа.Фильтр = "*.xml|*.xml";
   Диа.Показать(Новый ОписаниеОповещения("ОкончаниеВыбораФайлаПутьВыгрузкиДанных", ЭтотОбъект));
   Диа = Неопределено;
КонецПроцедуры

&НаКлиенте
Процедура ОкончаниеВыбораФайлаПутьВыгрузкиДанных(ВыбранныеФайлы = Неопределено, ДопПараметры = Неопределено) Экспорт
   Если ВыбранныеФайлы = Неопределено Тогда Возврат;КонецЕсли;
   ПутьВыгрузкиДанных = ВыбранныеФайлы[0];
КонецПроцедуры // ОкончаниеВыбораФайлаПутьВыгрузкиДанных()

antoneus

Ну да, молча открывает файл на сервере, вываливает данные туда, молча закрывает. Путь к файлу сетевой или что-то типа "C:\Папка выгрузки\"? Если второе - искать его на клиентской машине бесполезно.

Теги:

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

Рейтинг@Mail.ru

Поиск