8.х Регламентированное задание на выгрузку актуальных остатков по номенклатуре

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Mamont_SXI, 28 ноя 2012.

  1. TopicStarter Overlay
    Mamont_SXI
    Offline

    Mamont_SXI Опытный в 1С

    Регистрация:
    30 дек 2011
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    Привет форумчане. возник вопрос о создании автоматического формировании актуальных остатков по номенклатуре и выгрузки их в XML.
    Знаю что это надо делать через Регламентированные задания, но вот саму обработку с записью в файл я не соображу как делать, так как с выгрузкой в XML я не встречался.

    Работаем в УТ 10.2 под 8.1
    Есть какие нибудь предложения по решению вопроса?
  2. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Если проблема только в написании кода выгрузки в XML, то почему бы не загуглить, благо примеров туча.
  3. st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    ну вначале напиши процедуру выгрузки, а потом её запускай в регламентном задании.
  4. TopicStarter Overlay
    Mamont_SXI
    Offline

    Mamont_SXI Опытный в 1С

    Регистрация:
    30 дек 2011
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    не только в нём, как правильно подцепить выгрузку к рег заданию, я так понял через общий модуль(то есть там писать обработку), или отдельно делать обработку и её цеплять к общему модулю?
  5. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    1. В Общем модуле пишем процедуру/функцию выгрузки в XML, например, РегламентнаяВыгрузкаВXML
    2. Создаем РегламентноеЗадание, цепляем созданную процедуру/функцию (РегламентнаяВыгрузкаВXMLметод) из Общего модуля, настраиваем остальные свойства.

    Можно, и через внешнюю обработку, но в любом случае вызов из общего модуля (если не так, поправьте меня). И очень важно помнить, что на стороне сервера некому показывать форму обработки, поэтому либо вообще не показывать форму, т.е. обращаться к объекту и вызывать процедуры/функции объекта, либо же отказываться от открытия формы обработки, т.е. все действия делать перед открытием.

    Я вам советую писать процедуру/функцию в общем модуле :smile:
  6. TopicStarter Overlay
    Mamont_SXI
    Offline

    Mamont_SXI Опытный в 1С

    Регистрация:
    30 дек 2011
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    обработку у меня есть, она выполняется в клиентском режиме, но так как база на 8.1 я не могу вызвать через общий модуль саму процедуру из обработки отвечающую за формирование файла.

    в общем модуле
    Код:
    Процедура ВыгрузкаДляСайта() Экспорт
    ВнешняяОбработка = Обработки.Рилас_УТ_ВыгрузкаПрайсаВФайл.Создать();
    ВнешняяОбработка.КнопкаВыполнитьНажатие();
    КонецПроцедуры
    
    сама обработка состоит из:

    [sql]
    Перем ФайлОбмена;
    Перем СтарыйТовар;

    Процедура КнопкаВыполнитьНажатие(Кнопка) Экспорт
    ФайлОбмена = Новый ЗаписьТекста;
    Попытка
    ФайлОбмена.Открыть(Тфайл, КодировкаТекста.UTF8);
    Сообщить("Открыл файл "+ТФайл);
    Исключение
    Предупреждение("Не смог записать файл XML");
    Возврат;
    КонецПопытки;
    // <?xml version="1.0" encoding="UTF-8" ?>
    //- <items>
    //- <item sku="7812900">
    // <model>7812900</model>
    // <quantity>1</quantity>
    // <price>15378.0000</price>
    // <tax_class_id>9</tax_class_id>
    // <status>1</status>
    // <stock_status_id>8</stock_status_id>
    // <name>Балерина бело-золотая 22</name>
    // <main_category_id>5</main_category_id>
    // <description>1</description>
    // </item>
    ФайлОбмена.ЗаписатьСтроку("<?xml version=""1.0"" encoding=""UTF-8"" ?>");
    ФайлОбмена.ЗаписатьСтроку("<items>");
    //Переменные запроса.
    ТекстЗапроса = "ВЫБРАТЬ
    | СписокНоменклатуры.Номенклатура КАК Номенклатура,
    | ЦеныИзСправочника.ТипЦен КАК ТипЦен,
    | Остатки.ОстатокКоличество КАК НоменклатураОстатокКоличество,
    | ВЫБОР
    | КОГДА Цены.Цена ЕСТЬ NULL
    | ТОГДА 0
    | ИНАЧЕ Цены.Цена
    | КОНЕЦ КАК Цена
    |ИЗ
    | (ВЫБРАТЬ
    | Ном.Владелец КАК Номенклатура,
    | Ном.Владелец.Представление КАК НоменклатураПредставление
    | ИЗ
    | (ВЫБРАТЬ
    | ХарактеристикиНоменклатуры.Владелец КАК Владелец,
    | ХарактеристикиНоменклатуры.Ссылка КАК Ссылка
    | ИЗ
    | Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
    |
    | ОБЪЕДИНИТЬ
    |
    | ВЫБРАТЬ
    | Номенклатура.Ссылка,
    | &ПустаяХарактеристика
    | ИЗ
    | Справочник.Номенклатура КАК Номенклатура) КАК Ном) КАК СписокНоменклатуры
    | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    | СправочникЦен.Ссылка КАК ТипЦен
    | ИЗ
    | Справочник.ТипыЦенНоменклатуры КАК СправочникЦен
    | ГДЕ
    | СправочникЦен.Ссылка В(&СписТипЦен)) КАК ЦеныИзСправочника
    | ПО (ИСТИНА)
    | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    | Рег.Номенклатура КАК Номенклатура,
    | Рег.ТипЦен.Ссылка КАК ТипЦен,
    | Рег.Цена КАК Цена
    | ИЗ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаПрайса, ТипЦен В (&СписТипЦен)) КАК Рег) КАК Цены
    | ПО СписокНоменклатуры.Номенклатура = Цены.Номенклатура
    | И (ЦеныИзСправочника.ТипЦен = Цены.ТипЦен)
    | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    | НесвернутыеОстатки.Номенклатура КАК Номенклатура,
    | СУММА(НесвернутыеОстатки.ОстатокКоличество) КАК ОстатокКоличество
    | ИЗ
    | (ВЫБРАТЬ
    | Ост.Номенклатура.Ссылка КАК Номенклатура,
    | Ост.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    | Ост.КоличествоОстаток КАК ОстатокКоличество,
    | Ост.Склад КАК Склад
    | ИЗ
    | РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаПрайса, ) КАК Ост
    |
    | ОБЪЕДИНИТЬ ВСЕ
    |
    | ВЫБРАТЬ
    | НТТ.Номенклатура.Ссылка,
    | НТТ.ХарактеристикаНоменклатуры,
    | НТТ.КоличествоОстаток,
    | НТТ.Склад
    | ИЗ
    | РегистрНакопления.ТоварыВНеавтоматизированныхТорговыхТочках.Остатки(&ДатаПрайса, ) КАК НТТ) КАК НесвернутыеОстатки
    |
    | СГРУППИРОВАТЬ ПО
    | НесвернутыеОстатки.Номенклатура) КАК Остатки
    | ПО (Остатки.Номенклатура = СписокНоменклатуры.Номенклатура)
    |ГДЕ
    | (НЕ СписокНоменклатуры.Номенклатура.Набор)";
    Если Не(ВыбТовар.Пустая()) ТОгда
    ТекстЗапроса = ТекстЗапроса + "

    |СписокНоменклатуры.Номенклатура в иерархии (&ВыбТовар)";
    КонецЕсли;
    ////ГдеНеВыведено = Истина;
    //ГдеНеВыведено = Ложь;
    Если БезОтсутствующихВКомпании Тогда
    //Если ГдеНеВыведено Тогда
    // ТекстЗапроса = ТекстЗапроса + "
    // |Где
    // |";
    //Иначе
    ТекстЗапроса = ТекстЗапроса + "

    |";
    //КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + "
    |( Остатки.ОстатокКоличество <> 0
    |)
    |";
    КонецЕсли;
    //ТекстЗапроса = ТекстЗапроса + "
    //|УПОРЯДОЧИТЬ ПО
    //| Номенклатура,
    //| ТипЦен УБЫВ
    //|";
    //Если БезОтсутствующихВКомпании Тогда
    // ТекстЗапроса = ТекстЗапроса + "
    // |ИТОГИ СУММА(Цена),СУММА(Курс),СУММА(Кратность),СУММА(ПроцентСкидкиНаценки),СУММА(Остатки.ОстатокКоличество) ПО
    // | Номенклатура,
    // | ХарактеристикаНоменклатуры,
    // | ЦеныЕдиницаИзмерения,
    // | Валюта,
    // | ТипЦен
    // |";
    //Иначе
    // ТекстЗапроса = ТекстЗапроса + "
    // |ИТОГИ СУММА(Курс), СУММА(Цена), СУММА(Кратность), СУММА(ПроцентСкидкиНаценки) ПО
    // | Номенклатура,
    // | ХарактеристикаНоменклатуры,
    // | ЦеныЕдиницаИзмерения,
    // | Валюта,
    // | ТипЦен
    // |";
    //КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + "
    |АВТОУПОРЯДОЧИВАНИЕ
    |";
    Запрос=Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("ДатаПрайса", ТекущаяДата());
    Запрос.УстановитьПараметр("ПустаяХарактеристика", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
    Запрос.УстановитьПараметр("СписТипЦен", ВыбТипЦен);
    Запрос.УстановитьПараметр("ВыбТовар", ВыбТовар);
    РезультатЗапроса=Запрос.Выполнить();
    Выборка=РезультатЗапроса.Выбрать();
    Сообщить("Всего в выборке "+Выборка.Количество()+" записей.");
    а=0;
    Пока Выборка.Следующий() Цикл
    а=а+1;

    //Тиман
    Гр1="";
    Гр2="";
    Гр3="";
    Гр4="";
    ТекущийТовар=Выборка.Номенклатура;
    Уровень=Выборка.Номенклатура.Уровень();
    Если Уровень=1 Тогда
    Гр4=ТекущийТовар;
    КонецЕсли;
    Если Уровень=2 Тогда
    Гр3=ТекущийТовар.Родитель;
    Гр4=ТекущийТовар;
    КонецЕсли;
    Если Уровень=3 Тогда
    Гр2=ТекущийТовар.Родитель.Родитель;
    Гр3=ТекущийТовар.Родитель;
    Гр4=ТекущийТовар;
    КонецЕсли;
    Если Уровень>=4 Тогда
    Гр1=ТекущийТовар.Родитель.Родитель.Родитель;
    Гр2=ТекущийТовар.Родитель.Родитель;
    Гр3=ТекущийТовар.Родитель;
    Гр4=ТекущийТовар;
    КонецЕсли;
    //Если Не(ТекущийТовар=СтарыйТовар) Тогда
    Ост=Выборка.НоменклатураОстатокКоличество;
    СтрЦена=""+СтрЗаменить(Строка(Выборка.Цена)," ","");
    СтрЦена=""+СтрЗаменить(СтрЦена,",",".");
    Если (Выборка.Цена="0.00" или Выборка.Цена=0) И БезПустыхЦен Тогда
    Продолжить;
    КонецЕсли;

    //Стр=""+Гр1+";"+Гр2+";"+Гр3+";"+Гр4+";"+ТекущийТовар.Код+";"+СтрЦена+";"+ТекущийТовар.Артикул+";"+Ост+";";
    //- <items>
    //- <item sku="7812900">
    ФайлОбмена.ЗаписатьСтроку("");
    ФайлОбмена.ЗаписатьСтроку(" <item sku="""+ТекущийТовар.Код+""">");
    // <model>7812900</model>
    //ФайлОбмена.ЗаписатьСтроку(" <quantity>"+Ост+"</quantity>");
    ФайлОбмена.ЗаписатьСтроку(" <price>"+СтрЦена+"</price>");
    Если ФлагРежим ТОгда
    ФайлОбмена.ЗаписатьСтроку(" <model>"+ТекущийТовар.Артикул+"</model>");
    ФайлОбмена.ЗаписатьСтроку(" <quantity>"+?(Ост=0,0,1)+"</quantity>");
    ФайлОбмена.ЗаписатьСтроку(" <tax_class_id>"+"9"+"</tax_class_id>");
    ФайлОбмена.ЗаписатьСтроку(" <status>"+"1"+"</status>");
    ФайлОбмена.ЗаписатьСтроку(" <stock_status_id>"+?(Ост=0,8,7)+"</stock_status_id>");
    ИмяТовара=СтрЗаменить(ТекущийТовар.НаименованиеПолное,"&","&amp;");
    ФайлОбмена.ЗаписатьСтроку(" <stock>"+Ост+"</stock>");
    ФайлОбмена.ЗаписатьСтроку(" <name>"+ИмяТовара+"</name>");
    КонецЕСли;
    //ФайлОбмена.ЗаписатьСтроку(" <main_category_id>"+"9"+"</main_category_id>");
    //ФайлОбмена.ЗаписатьСтроку(" <description>"+ТекущийТовар.Наименование+"</description>");
    ФайлОбмена.ЗаписатьСтроку(" </item>");
    // <quantity>1</quantity>
    // <price>15378.0000</price>
    // <tax_class_id>9</tax_class_id>
    // <status>1</status>
    // <stock_status_id>8</stock_status_id>
    // <name>Балерина бело-золотая 22</name>
    // <main_category_id>5</main_category_id>
    // <description>1</description>
    // </item>

    //ФайлОбмена.ЗаписатьСтроку(Стр);
    Состояние("Вывод в файл "+а+" - "+ТекущийТовар);
    //КонецЕсли;
    //СтарыйТовар=ТекущийТовар;
    ОбработкаПрерыванияПользователя();
    КонецЦикла;
    //Тиман
    ФайлОбмена.ЗаписатьСтроку("</items>");
    ФайлОбмена.Закрыть();
    Сообщить("Записал "+ТФайл);

    КонецПроцедуры
    //тиман
    Процедура ВыборФайла(Элемент, ПроверятьСуществование=Ложь)

    ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогФыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml";
    ДиалогФыбораФайла.Расширение = "xml";

    ДиалогФыбораФайла.Заголовок = "Выберите файл";
    ДиалогФыбораФайла.ПредварительныйПросмотр = Ложь;
    ДиалогФыбораФайла.ИндексФильтра = 0;
    ДиалогФыбораФайла.ПолноеИмяФайла = Элемент.Значение;
    ДиалогФыбораФайла.ПроверятьСуществованиеФайла = ПроверятьСуществование;

    Если ДиалогФыбораФайла.Выбрать() Тогда
    Элемент.Значение = ДиалогФыбораФайла.ПолноеИмяФайла;
    КонецЕсли;

    КонецПроцедуры
    Процедура ИмяФайлаДанныхНачалоВыбора(Элемент, СтандартнаяОбработка)

    ВыборФайла(Элемент);

    КонецПроцедуры
    Процедура ИмяФайлаОбменаПриИзменении(Элемент)
    Файл = Новый Файл(Тфайл);

    КонецПроцедуры
    Процедура ПриОткрытии()[/sql]


    примерно так
  7. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Перенесите процедуру КнопкаВыполнитьНажатие() в модуль Обработки из модуля формы, ну и назовите как-н. адекватно, например ВыгрузкаВXML
    В общем модуле пишем что-то такое:

    Код:
    ВнешняяОбработка = Обработки.Рилас_УТ_ВыгрузкаПрайсаВФайл.Создать();
    ВнешняяОбработка.ВыгрузкаВXML;
    И да, процедура ВыгрузкаВXML() должна быть экспортной.
  8. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Пардон, скобки потерялись
    Код:
    ВнешняяОбработка = Обработки.Рилас_УТ_ВыгрузкаПрайсаВФайл.Создать();
    ВнешняяОбработка.ВыгрузкаВXML();

Поделиться этой страницей