Массовая рассылка при помощи СБИС Коннект — различия между версиями
(Новая страница: «==Задача== Всем организациям, перечисленных в таблице Excel, направить через СБИС один и тот…») |
|||
Строка 10: | Строка 10: | ||
В файле должно быть два листа: «'''Лист1'''» и «'''Лист2'''». | В файле должно быть два листа: «'''Лист1'''» и «'''Лист2'''». | ||
− | + | ===Лист1 - список получателей=== | |
− | |||
− | |||
# Первая строка является заголовком таблицы и должна содержать следующие заголовки: «ИНН», «КПП», «Название». Порядок следования столбцов не важен. | # Первая строка является заголовком таблицы и должна содержать следующие заголовки: «ИНН», «КПП», «Название». Порядок следования столбцов не важен. | ||
# Начиная со второй строки идут данные о получателях. | # Начиная со второй строки идут данные о получателях. | ||
− | + | '''Важно! '''На данный момент нельзя устанавливать в файле какие-либо фильтры. Иначе при отправке такого файла возникнет ошибка. Подробнее см.в разделе «[#Известные проблемы]». | |
− | [[ | + | [[Файл:Массовая рассылка при помощи СБИС Коннект Лист1.png]] |
− | + | ===Лист2 - параметры отправки=== | |
# Ячейка B1 – ИНН отправителя | # Ячейка B1 – ИНН отправителя | ||
# Ячейка B2 – КПП отправителя | # Ячейка B2 – КПП отправителя | ||
Строка 31: | Строка 29: | ||
'''Важно!''' - рассылаемые файлы должны быть расположены вне рабочей папки СБИС Коннекта. | '''Важно!''' - рассылаемые файлы должны быть расположены вне рабочей папки СБИС Коннекта. | ||
− | + | [[Файл:Массовая рассылка при помощи СБИС Коннект Лист2.png]] | |
− | |||
== Настройка СБИС Коннект == | == Настройка СБИС Коннект == | ||
Строка 44: | Строка 41: | ||
## В поле «XSLT преобразование» указать необходимый файл. | ## В поле «XSLT преобразование» указать необходимый файл. | ||
# На вкладке «Архив» отключить ведение архива | # На вкладке «Архив» отключить ведение архива | ||
− | |||
− | |||
== Известные проблемы == | == Известные проблемы == | ||
Строка 57: | Строка 52: | ||
Необходимо пересоздать xls файл с нуля. Копирование данных и удаление фильтра не поможет. | Необходимо пересоздать xls файл с нуля. Копирование данных и удаление фильтра не поможет. | ||
− | ==XSLT== | + | ==Пример XSLT== |
<source lang='xml'> | <source lang='xml'> | ||
<?xml version="1.0" encoding="windows-1251"?> | <?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:output method="xml" indent="yes" encoding="windows-1251"/> | ||
Строка 147: | Строка 142: | ||
<!-- Перебор строк второго листа, начиная со следующей после строки с заголовком таблицы рассылаемых файлов--> | <!-- Перебор строк второго листа, начиная со следующей после строки с заголовком таблицы рассылаемых файлов--> | ||
− | <xsl:for-each select="//Лист[starts-with(@Название,'Лист2')]/Строка[preceding-sibling::Строка[contains(Столбец[@Номер='1']/@Значение,$ЗаголовокТаблицыРассылаемыхФайлов)]][Столбец[@Номер='1']/@Значение!='']"> | + | <xsl:for-each select="//Лист[starts-with(@Название,'Лист2')]/Строка[preceding-sibling::Строка[contains(Столбец[@Номер='1']/ |
+ | @Значение,$ЗаголовокТаблицыРассылаемыхФайлов)]][Столбец[@Номер='1']/@Значение!='']"> | ||
<Вложение> | <Вложение> | ||
<xsl:attribute name="ПорНомер"> | <xsl:attribute name="ПорНомер"> | ||
Строка 157: | Строка 153: | ||
</Вложение> | </Вложение> | ||
</xsl:for-each> | </xsl:for-each> | ||
− | |||
− | |||
− | |||
</Пакет> | </Пакет> | ||
</xsl:template> | </xsl:template> | ||
− | |||
</xsl:stylesheet> | </xsl:stylesheet> | ||
</source> | </source> | ||
+ | [[Категория: СБИС Коннект]] |
Версия 11:59, 28 января 2015
Содержание
Задача
Всем организациям, перечисленных в таблице Excel, направить через СБИС один и тот же файл/файлы.
Для того чтобы произвести массовую рассылку файлов по списку клиентов необходимо:
- Подготовить один xls файл формата «Книга Excel 97-2003» со списком получателей и рассылаемых файлов.
- Настроить СБИС Коннект
Структура xls файла со списком получателей
В файле должно быть два листа: «Лист1» и «Лист2».
Лист1 - список получателей
- Первая строка является заголовком таблицы и должна содержать следующие заголовки: «ИНН», «КПП», «Название». Порядок следования столбцов не важен.
- Начиная со второй строки идут данные о получателях.
Важно! На данный момент нельзя устанавливать в файле какие-либо фильтры. Иначе при отправке такого файла возникнет ошибка. Подробнее см.в разделе «[#Известные проблемы]».
Лист2 - параметры отправки
- Ячейка B1 – ИНН отправителя
- Ячейка B2 – КПП отправителя
- Ячейка B3 – тип отправляемого пакета документов ("ДокОтгрИсх" – документы реализации; "ДоговорИсх" – договоры; "КоррИсх" – корреспонденция) . Все возможные типы документов перечислены в описании формата конверта (Элемент ТипДок.
- Ячейка B4 – название регламента Если поле не заполнено, то документы будут отправлены по стандартному регламенту.
- Пятая строка – пустая.
- Ячейка A6 - записывается название шапки таблицы «Файлы»
- Начиная с седьмой строки, в таблицу записываются полные имена (путь + имя + расширение) файлов, которые будут рассылаться.
Важно! - рассылаемые файлы должны быть расположены вне рабочей папки СБИС Коннекта.
Настройка СБИС Коннект
- Установить отдельный СБИС Коннект
- На вкладке «Обмен документами»:
- Отключить загрузку входящих документов
- Отключить загрузку исходящих статусов документов
- Установить формат обмена документов «Произвольный 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>