• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Выгрузка из Зуп в УСН 1.3

  • Автор темы SeverBap
  • Дата начала
S

SeverBap

Вообщем ситуация такова:
Есть учет в ЗУП по нескольким организациям в одной базе, организации как на ОСН и УСН!
С выгрузкой в ОСН проблем нет так как стандартными средствами выгружаю в Бух 4.5. Но с выгрузкой в УСН появились проблемы так как как таковой я штатной реализации не нашел пришлось писать с нуля.
Дошел до собственой фиксации данных в УСН натолкнулся на проблемы при которых не получается проставить правильно проводки (реальзую выгрузку через ОLЕ, написал запрос получения из ЗУП)
Запрос:
Код:
	"ВЫБРАТЬ
|	ОтражениеЗарплатыВРеглУчете.Организация,
|	ОтражениеЗарплатыВРеглУчете.Ссылка,
|	ОтражениеЗарплатыВРеглУчете.Дата,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт1,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт2,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт3,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетКт,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт1,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт2,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт3,
|	СУММА(ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Сумма) КАК Сумма
|ИЗ
|	Документ.ОтражениеЗарплатыВРеглУчете.ОтражениеВУчете КАК ОтражениеЗарплатыВРеглУчетеОтражениеВУчете
|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтражениеЗарплатыВРеглУчете КАК ОтражениеЗарплатыВРеглУчете
|		ПО ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка = ОтражениеЗарплатыВРеглУчете.Ссылка
|ГДЕ
|	ОтражениеЗарплатыВРеглУчете.Дата <= &Дата2
|	И ОтражениеЗарплатыВРеглУчете.Дата >= &Дата1
|	И ОтражениеЗарплатыВРеглУчете.Организация = &Организация
|
|СГРУППИРОВАТЬ ПО
|	ОтражениеЗарплатыВРеглУчете.Дата,
|	ОтражениеЗарплатыВРеглУчете.Ссылка,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт2,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт3,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетКт,
|	ОтражениеЗарплатыВРеглУчете.Организация,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт1,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт1,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт2,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт3";
При присвоении субконтоКт и СубконтоДТ сваливается на ошибки:
Листинг после запроса урезаный:
Код:
Запрос.УстановитьПараметр("Дата1", НачалоДня(ЭлементыФормы.ДатаНачала.Значение));
Запрос.УстановитьПараметр("Дата2", КонецДня(ЭлементыФормы.ДатаЗавершения.Значение));
Запрос.УстановитьПараметр("Организация",Организация);
ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Запрос.Выполнить().Выгрузить().Количество();
йуукеку = Запрос.Выполнить().Выгрузить();
Выборка = Запрос.Выполнить().Выбрать();
Сотрудники = СерверOLE.CreateObject("Справочник.Сотрудники");
РасходыБудущихПериодов=СерверOLE.CreateObject("Справочник.РасходыБудущихПериодов");
Счет = СерверOLE.CreateObject("Счет");
СтараяДата=1;
Опер = СерверOLE.CreateObject("Операция");
Пока Выборка.Следующий() Цикл
ЭлементыФормы.Индикатор1.Значение = ЭлементыФормы.Индикатор1.Значение + 1;
Если СтараяДата=1 Тогда
Опер.Новая();
Опер.Содержание = "Перенос отражения зарплаты из ЗУП";
Опер.ДатаОперации = Выборка.Дата;
СуммаИтог = 0;
ИначеЕсли Не СтараяДата=Выборка.Дата Тогда
Опер.СуммаОперации = СуммаИтог;
Опер.Записать();
Опер.Новая();
Опер.Содержание = "Перенос отражения зарплаты из ЗУП";
Опер.ДатаОперации = Выборка.Дата;
СуммаИтог = 0;
КонецЕсли;
СтараяДата=Выборка.Дата;
Опер.НоваяПроводка();
Дт = Опер.Д*цензура*;
Кт = Опер.Кредит;
Если ВыБорка.СчетДт.Код="97.01" Тогда
Если Счет.НайтиПоКоду("97.1") = 1 Тогда 
СчетДт = Счет.ТекущийСчет();
КонецЕсли;
Если ТипЗнч(Выборка.СубконтоДТ2)=Тип("СправочникСсылка.ФизическиеЛица") Тогда
Если Сотрудники.НайтиПоНаименованию(СокрЛП(Выборка.СубконтоДТ2)) = 1 Тогда 
Сотрудник = Сотрудники.ТекущийЭлемент();
Кт.СубконтоКт = Сотрудник; ///тут ошибка что нет СубконтоКт 
ИначеЕсли Сотрудники.НайтиПоНаименованию(СокрЛП(Выборка.СубконтоДТ2)) = 0 Тогда
Сотрудники.Новый();
Сотрудники.Наименование = СокрЛП(Выборка.СубконтоДТ2);
Сотрудники.Записать();
Сотрудник = Сотрудники.ТекущийЭлемент();
Кт.СубконтоКт = Сотрудник; ///тут ошибка что нет СубконтоКт
КонецЕсли;	

КонецЕсли;	
Если Выборка.СчетКт.Код="69.02.2" Тогда
Если Счет.НайтиПоКоду("69.22")=1 Тогда
СчетКт=Счет.ТекущийСчет();
КонецЕсли;	
КонецЕсли;	
КонецЕсли;	

Дт.Счет = СчетДт; 
Кт.Счет = СчетКт;

КонецЦикла;
Опер.СуммаОперации = СуммаИтог;
Опер.Записать();
Уже все поперепробовал всеравно вываливается...
У кого нибудь есть либо план обмена или подскажите как тут исправить - очень буду благодарен!
 
S

SeverBap

Большую часть исправил получается пока так (сижу пишу исправления):
Код:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	ОтражениеЗарплатыВРеглУчете.Организация,
|	ОтражениеЗарплатыВРеглУчете.Ссылка,
|	ОтражениеЗарплатыВРеглУчете.Дата,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт1,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт2,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт3,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетКт,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт1,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт2,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт3,
|	СУММА(ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Сумма) КАК Сумма
|ИЗ
|	Документ.ОтражениеЗарплатыВРеглУчете.ОтражениеВУчете КАК ОтражениеЗарплатыВРеглУчетеОтражениеВУчете
|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтражениеЗарплатыВРеглУчете КАК ОтражениеЗарплатыВРеглУчете
|		ПО ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.Ссылка = ОтражениеЗарплатыВРеглУчете.Ссылка
|ГДЕ
|	ОтражениеЗарплатыВРеглУчете.Дата <= &Дата2
|	И ОтражениеЗарплатыВРеглУчете.Дата >= &Дата1
|	И ОтражениеЗарплатыВРеглУчете.Организация = &Организация
|
|СГРУППИРОВАТЬ ПО
|	ОтражениеЗарплатыВРеглУчете.Дата,
|	ОтражениеЗарплатыВРеглУчете.Ссылка,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетДт,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт2,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт3,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СчетКт,
|	ОтражениеЗарплатыВРеглУчете.Организация,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоДт1,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт1,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт2,
|	ОтражениеЗарплатыВРеглУчетеОтражениеВУчете.СубконтоКт3";

Запрос.УстановитьПараметр("Дата1", НачалоДня(ЭлементыФормы.ДатаНачала.Значение));
Запрос.УстановитьПараметр("Дата2", КонецДня(ЭлементыФормы.ДатаЗавершения.Значение));
Запрос.УстановитьПараметр("Организация",Организация);
ЭлементыФормы.Индикатор1.МаксимальноеЗначение = Запрос.Выполнить().Выгрузить().Количество();
йуукеку = Запрос.Выполнить().Выгрузить();
Выборка = Запрос.Выполнить().Выбрать();
Сотрудники = СерверOLE.CreateObject("Справочник.Сотрудники");
ВидыНачислений= СерверOLE.CreateObject("Справочник.ВидыНачислений");
РасходыБудущихПериодов=СерверOLE.CreateObject("Справочник.РасходыБудущихПериодов");
Счет = СерверOLE.CreateObject("Счет");
СтараяДата=1;
Опер = СерверOLE.CreateObject("Операция");
Пока Выборка.Следующий() Цикл
ЭлементыФормы.Индикатор1.Значение = ЭлементыФормы.Индикатор1.Значение + 1;
//СчетДт="";
//СчетКт="";
Если СтараяДата=1 Тогда
Опер.Новая();
Опер.Содержание = "Перенос отражения зарплаты из ЗУП";
Опер.ДатаОперации = Выборка.Дата;
СуммаИтог = 0;
ИначеЕсли Не СтараяДата=Выборка.Дата Тогда
Опер.СуммаОперации = СуммаИтог;
Опер.Записать();
Опер.Новая();
Опер.Содержание = "Перенос отражения зарплаты из ЗУП";
Опер.ДатаОперации = Выборка.Дата;
СуммаИтог = 0;
КонецЕсли;
СтараяДата=Выборка.Дата;
Опер.НоваяПроводка();
Дт = Опер.Д*цензура*;
Кт = Опер.Кредит;
Если ВыБорка.СчетДт.Код="97.01" Тогда
Если Счет.НайтиПоКоду("97.1") = 1 Тогда 
СчетДт = Счет.ТекущийСчет();
КонецЕсли;
КонецЕсли;		

Если ВыБорка.СчетКт.Код="70" Тогда
Если Счет.НайтиПоКоду("70") = 1 Тогда 
СчетКт = Счет.ТекущийСчет();
КонецЕсли;
КонецЕсли;		

Если Выборка.СчетКт.Код="69.02.2" Тогда
Если Счет.НайтиПоКоду("69.22")=1 Тогда
СчетКт=Счет.ТекущийСчет();
КонецЕсли;	
КонецЕсли;	
Если Выборка.СчетКт.Код="69.02.1" Тогда
Если Счет.НайтиПоКоду("69.21")=1 Тогда
СчетКт=Счет.ТекущийСчет();
КонецЕсли;	
КонецЕсли;	
Если Выборка.СчетКт.Код="69.11" Тогда
Если Счет.НайтиПоКоду("69.11")=1 Тогда
СчетКт=Счет.ТекущийСчет();
КонецЕсли;	
КонецЕсли;	



Дт.Счет = СчетДт; 
Кт.Счет = СчетКт;
Сообщить("КодД "+Выборка.СчетДт.Код);
Сообщить("Д1 "+Выборка.СубконтоДт1);
Сообщить("Д2 "+Выборка.СубконтоДт2);
Сообщить("Д3 "+Выборка.СубконтоДт3);
Сообщить("КодК "+Выборка.СчетКт.Код);
Сообщить("К1 "+Выборка.СубконтоКт1);
Сообщить("К2 "+Выборка.СубконтоКт2);
Сообщить("К3 "+Выборка.СубконтоКт3);

Если (ВыБорка.СчетДт.Код="97.01")И ((Выборка.СчетКт.Код="69.02.2") ИЛИ (Выборка.СчетКт.Код="69.02.1") ИЛИ ((Выборка.СчетКт.Код="69.11")) ИЛИ (Выборка.СчетКт.Код="70")) Тогда
Если Не Выборка.СчетКт.Код="69.11" Тогда
Сотрудник = "";
Если Сотрудники.НайтиПоНаименованию(СокрЛП(Выборка.СубконтоДт2)) = 1 Тогда 
Сотрудник = Сотрудники.ТекущийЭлемент();
ИначеЕсли Сотрудники.НайтиПоНаименованию(СокрЛП(Выборка.СубконтоДт2)) = 0 Тогда
Сотрудники.Новый();
Сотрудники.Наименование = СокрЛП(Выборка.СубконтоДт2);
Сотрудники.Записать();
Сотрудник = Сотрудники.ТекущийЭлемент();
КонецЕсли;
Кт.Сотрудники = Сотрудник;
КонецЕсли;
РПБ="";
Если РасходыБудущихПериодов.НайтиПоНаименованию(СокрЛП(Выборка.СубконтоДт1))=1 Тогда
РПБ=РасходыБудущихПериодов.ТекущийЭлемент();
Иначе
РасходыБудущихПериодов.Новый();
РасходыБудущихПериодов.Наименование=СокрЛП(Выборка.СубконтоДт1);
РасходыБудущихПериодов.Записать();
РПБ=РасходыБудущихПериодов.ТекущийЭлемент();
КонецЕсли;	
Дт.РасходыБудущихПериодов=РПБ;
Если Не Выборка.СчетКт.Код="70" Тогда
Кт.ВидыПлатежей=СерверOLE.Перечисление.ВидыПлатежей.Налог;
КонецЕсли;
КонецЕсли;	
Опер.Сумма = Выборка.Сумма;
СуммаИтог = СуммаИтог + Выборка.Сумма;
КонецЦикла;
Опер.СуммаОперации = СуммаИтог;
Опер.Записать();
Пока ошибок навалом, потом выложу для использования а то в нете нет для усн ничего вообще! <_<
 
S

SeverBap

Написал: Выгрузку из ЗУП, Зугрузка в УСН 1.3
Проверяйте и тестируйте (пока только для тестирования) если кто-то желает доработать, доработайте и напишите что там еще надо поправить..... :newconfus:
 

Вложения

  • OUT.rar
    6,5 КБ · Просмотры: 181
  • IN.rar
    11,3 КБ · Просмотры: 154
D

diablo04

Доброго времени суток..
при загрузки в УСН... написала ошибку
Балансовый счет не может корреспондировать с пустым счетом (проводка 5)
 
V

vbs

Поставить проверку - если счет не заполнен, приравнять его к счету "00"
 
S

SeverBap

Обновил загрузку
 

Вложения

  • IN.rar
    12,1 КБ · Просмотры: 200
D

diablo04

Вот файл который выгружается из ЗуП 8

ошибку я писал чуть выше...
 

Вложения

  • ________.txt
    2,3 КБ · Просмотры: 544
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!