Массовая рассылка при помощи СБИС Коннект
Содержание
Задача
Всем организациям, перечисленных в таблице Excel, направить через СБИС один и тот же файл/файлы.
Для того чтобы произвести массовую рассылку файлов по списку клиентов необходимо:
- Подготовить один xls файл формата «Книга Excel 97-2003» со списком получателей и рассылаемых файлов.
- Настроить СБИС Коннект
Структура xls файла со списком получателей
В файле должно быть два листа: «Лист1» и «Лист2».
Лист1 - список получателей
- Первая строка является заголовком таблицы и должна содержать следующие заголовки: «ИНН», «КПП», «Название». Порядок следования столбцов не важен.
- Начиная со второй строки идут данные о получателях.
Важно! На данный момент нельзя устанавливать в файле какие-либо фильтры. Иначе при отправке такого файла возникнет ошибка. Подробнее см.в разделе «[#Известные проблемы]».
Лист2 - параметры отправки
- Ячейка B1 – ИНН отправителя
- Ячейка B2 – КПП отправителя
- Ячейка B3 – тип отправляемого пакета документов ("ДокОтгрИсх" – документы реализации; "ДоговорИсх" – договоры; "КоррИсх" – корреспонденция) . Все возможные типы документов перечислены в описании формата конверта (Элемент ТипДок.
- Ячейка B4 – название регламента Если поле не заполнено, то документы будут отправлены по стандартному регламенту.
- Пятая строка – пустая.
- Ячейка A6 - записывается название шапки таблицы «Файлы». Заполненные значения ячеек ниже этой (А7, А8, ...) будут восприниматься конвертером как ячейки с именем отправляемого файла.
- Ячейки А7... - Полное имя отправляемого файла, включающее абсолютный путь. Важно! - файл должен быть расположен вне рабочей папки СБИС Коннекта.
Настройка СБИС Коннект
- Установить отдельный СБИС Коннект
- На вкладке «Обмен документами»:
- Отключить загрузку входящих документов
- Отключить загрузку исходящих статусов документов
- Установить формат обмена документов «Произвольный XLS».
- В поле «XSLT преобразование» указать файл преобразования сделанный из приведенного ниже примера.
- На вкладке «Архив» отключить ведение архива
Известные проблемы
'Проблема с фильтрами в xls файле.
Если в xls файле был установлен или есть на данный момент какой-либо фильтр, то при отправке такого файла возникнет ошибка вида: Объект 'Лист1$_' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.
Способ решения:
Необходимо пересоздать xls файл с нуля. Копирование данных и удаление фильтра не поможет.
Пример XSLT
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" encoding="windows-1251"/>
<!-- Определяются номера столбцов в которых находятся ИНН,КПП, название получателей.
Поиск происходит из заголовка таблицы по названию.
-->
<xsl:variable name="НомерСтолбца_НазваниеПолучателя" select="//Файл/Лист[starts-with(@Название,'Лист1')]/Строка[@Номер='1']/Столбец[contains(@Значение,'Название')]/@Номер"/>
<xsl:variable name="НомерСтолбца_ИННПолучателя" select="//Файл/Лист[starts-with(@Название,'Лист1')]/Строка[@Номер='1']/Столбец[contains(@Значение,'ИНН')]/@Номер"/>
<xsl:variable name="НомерСтолбца_КПППолучателя" select="//Файл/Лист[starts-with(@Название,'Лист1')]/Строка[@Номер='1']/Столбец[contains(@Значение,'КПП')]/@Номер"/>
<!-- Указывается где хранятся ИНН/КПП отправителя.
По-умолчанию на втором листе в первой и второй строке-->
<xsl:variable name="ИНН_Отправителя" select="normalize-space(//Файл/Лист[starts-with(@Название,'Лист2')]/Строка[@Номер='1']/Столбец[@Номер='2']/@Значение)"/>
<xsl:variable name="КПП_Отправителя" select="normalize-space(//Файл/Лист[starts-with(@Название,'Лист2')]/Строка[@Номер='2']/Столбец[@Номер='2']/@Значение)"/>
<!-- Указывается где хранятся название регламента и тип документа (договор, корреспонденция и пр)
По-умолчанию на втором листе в третьей и четвертой строке -->
<xsl:variable name="ТипДокумента" select="normalize-space(//Файл/Лист[starts-with(@Название,'Лист2')]/Строка[@Номер='3']/Столбец[@Номер='2']/@Значение)"/>
<xsl:variable name="Регламент" select="normalize-space(//Файл/Лист[starts-with(@Название,'Лист2')]/Строка[@Номер='4']/Столбец[@Номер='2']/@Значение)"/>
<!-- Заголовок таблицы в которой содержится список рассылаемых файлов-->
<xsl:variable name="ЗаголовокТаблицыРассылаемыхФайлов">
<xsl:text>Файлы</xsl:text>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="Файл">
<Реестр>
<xsl:apply-templates select="Лист[starts-with(@Название,'Лист1')]/Строка[@Номер!='1'][Столбец[@Номер=$НомерСтолбца_ИННПолучателя]/@Значение!='']" mode="Пакет"/>
</Реестр>
</xsl:template>
<!--Формирование пакетов-->
<xsl:template match="Строка" mode="Пакет">
<Пакет>
<xsl:if test="$ТипДокумента!=''">
<xsl:attribute name="ТипДок">
<xsl:value-of select="$ТипДокумента"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="$Регламент!=''">
<Регламент>
<xsl:attribute name="Название">
<xsl:value-of select="$Регламент"/>
</xsl:attribute>
</Регламент>
</xsl:if>
<Отправитель>
<xsl:attribute name="ИНН">
<xsl:value-of select="$ИНН_Отправителя"/>
</xsl:attribute>
<xsl:attribute name="КПП">
<xsl:value-of select="$КПП_Отправителя"/>
</xsl:attribute>
</Отправитель>
<Получатель>
<xsl:attribute name="ИНН">
<xsl:value-of select="normalize-space(Столбец[@Номер=$НомерСтолбца_ИННПолучателя]/@Значение)"/>
</xsl:attribute>
<!-- Если длина ИНН 10 символов, то записывается КПП-->
<xsl:if test="string-length(normalize-space(Столбец[@Номер=$НомерСтолбца_ИННПолучателя]/@Значение))=10">
<xsl:attribute name="КПП">
<xsl:value-of select="normalize-space(Столбец[@Номер=$НомерСтолбца_КПППолучателя]/@Значение)"/>
</xsl:attribute>
</xsl:if>
<xsl:if test="normalize-space(Столбец[@Номер=$НомерСтолбца_НазваниеПолучателя]/@Значение)!=''">
<xsl:attribute name="Название">
<xsl:value-of select="normalize-space(Столбец[@Номер=$НомерСтолбца_НазваниеПолучателя]/@Значение)"/>
</xsl:attribute>
</xsl:if>
</Получатель>
<!-- Перебор строк второго листа, начиная со следующей после строки с заголовком таблицы рассылаемых файлов-->
<xsl:for-each select="//Лист[starts-with(@Название,'Лист2')]/Строка[preceding-sibling::Строка[contains(Столбец[@Номер='1']/
@Значение,$ЗаголовокТаблицыРассылаемыхФайлов)]][Столбец[@Номер='1']/@Значение!='']">
<Вложение>
<xsl:attribute name="ПорНомер">
<xsl:value-of select="position()"/>
</xsl:attribute>
<xsl:attribute name="ИмяФайла">
<xsl:value-of select="Столбец[@Номер='1']/@Значение"/>
</xsl:attribute>
</Вложение>
</xsl:for-each>
</Пакет>
</xsl:template>
</xsl:stylesheet>