Массовая рассылка при помощи СБИС Коннект

Материал из razgovorov.ru
Перейти к: навигация, поиск

Задача

Всем организациям, перечисленных в таблице Excel, направить через СБИС один и тот же файл/файлы.

Для того чтобы произвести массовую рассылку файлов по списку клиентов необходимо:

  1. Подготовить один xls файл формата «Книга Excel 97-2003» со списком получателей и рассылаемых файлов.
  2. Настроить СБИС Коннект

Структура xls файла со списком получателей

В файле должно быть два листа: «Лист1» и «Лист2».

Лист1 - список получателей

  1. Первая строка является заголовком таблицы и должна содержать следующие заголовки: «ИНН», «КПП», «Название». Порядок следования столбцов не важен.
  2. Начиная со второй строки идут данные о получателях.

Если Вы разметите в файле ещё один столбец "email", то организации получит уведомление о Вашей рассылке на указанный ящик электронной почты. Важно! На данный момент нельзя устанавливать в файле какие-либо фильтры. Иначе при отправке такого файла возникнет ошибка. Подробнее см.в разделе «[#Известные проблемы]».

Массовая рассылка при помощи СБИС Коннект Лист1.png

Лист2 - параметры отправки

  1. Ячейка B1 – ИНН отправителя
  2. Ячейка B2 – КПП отправителя
  3. Ячейка B3 – тип отправляемого пакета документов ("ДокОтгрИсх" – документы реализации; "ДоговорИсх" – договоры; "КоррИсх" – корреспонденция) . Все возможные типы документов перечислены в описании формата конверта (Элемент ТипДок.
  4. Ячейка B4 – название регламента Если поле не заполнено, то документы будут отправлены по стандартному регламенту.
  5. Пятая строка – пустая.
  6. Ячейка A6 - записывается название шапки таблицы «Файлы». Заполненные значения ячеек ниже этой (А7, А8, ...) будут восприниматься конвертером как ячейки с именем отправляемого файла.
  7. Ячейки А7... - Полное имя отправляемого файла, включающее абсолютный путь.

Важно! - файл должен быть расположен вне рабочей папки СБИС Коннекта.

Массовая рассылка при помощи СБИС Коннект Лист2.png

Настройка СБИС Коннект

  1. Установить отдельный СБИС Коннект
  2. На вкладке «Обмен документами»:
    1. Отключить загрузку входящих документов
    2. Отключить загрузку исходящих статусов документов
    3. Установить формат обмена документов «Произвольный XLS».
    4. В поле «XSLT преобразование» указать файл преобразования сделанный из приведенного ниже примера.
  3. На вкладке «Архив» отключить ведение архива

Известные проблемы

'Проблема с фильтрами в 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>