Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Супермаг Плюс (Супермаг 2000)

Ошибка при Экспорте "Документы/проводки" - ORA-01422 : Супермаг Плюс (Супермаг 2000)

25.04.2024 16:43


27.06.2013 11:41
dolly_ev
 
Теперь другая проблема:
при выгрузке "Документы (OLAP)" в поле DocID вместо кириллических символов выгружается "?", причем неважно, в какой формат выгружаю (DBASEIV,V или TXT). Остальные поля, где есть кириллица, выгружаются нормально.
При выгрузке "Документы/Проводки" - DocID нормально выгружается с кириллицей.
Хеелп!
Или подбросьте в качестве "рыбы" обработку по прямой загрузке из oracla в 1С? Хоть 7, хоть 8, неважно. Главное текст запроса. Проще будет разобраться со структурой на чьем-нить примере.
27.06.2013 12:05
whitewizard
 
Пример тут:
Проблема выгрузки данных из СМ2000
смотри что у тебя с языковыми настройками
27.06.2013 12:38
dolly_ev
 
Цитата:
Это я видел, маловато будет)) да и ниже в комментах Olegon ругался на писателя, который дату в текст преобразует в запросе))
Цитата:
whitewizard смотри что у тебя с языковыми настройками
что и где смотреть? на серваке - все дефолтно-русское
27.06.2013 12:52
Dim
 
вечером могу скинуть пример модуля
27.06.2013 14:58
OlegON
 
Цитата:
dolly_ev что и где смотреть? на серваке - все дефолтно-русское
я предлагаю во избежание недоразумений и на сервере и на клиенте прибивать NLS_LANG в системных переменных окружения. Причем, на сервере - AMERICAN_AMERICA.CL8MSWIN1251, а на клиенте - RUSSIAN_CIS.CL8MSWIN1251. Это иногда вспучивает Супермаг, но если где-то вспучивает, то это баг. Должно работать так.
Dim, приложи, пожалуйста, пример сюда, а то ТС уже бан словил за выпрашивание на емейл.
27.06.2013 16:50
Dim
 
один из промежуточных вариантов общего модуль. написан для 1С Бух 8... в документы расхода (возврат поставщику, продажа) в табличную часть добавлена колонка "Себестоимость"). добавлен регистр сведений "СоответствиеСОбъектамиСупермага" куда вписываются данные о соответствии ИД документа или справочника в СМ+ с кодами/номерами документов 1С

Цитата:
Процедура СообщениеОбОшибке(ТабДок,Сообщение,Ошибка=Неопределено)
ТабДок.ДобавитьСтроку(Сообщение);
Сообщить(Сообщение);
Если Ошибка=Ложь Тогда
Ошибка=Истина;
КонецЕсли;
КонецПроцедуры

Процедура ЗаписатьПротоколОшибок(ТабДок,Путь)
ИмяФайла="Протокол "+Формат(ТекущаяДата(),"ДФ=гг-ММ-дд_ЧЧ-мм-сс")+".txt";
Если Путь<>"" Тогда
ИмяФайла=Путь+"\"+ИмяФайла;
КонецЕсли;
ТабДок.Записать(ИмяФайла,КодировкаТекста.Системная);
КонецПроцедуры

Функция ОбъектПоID(ID,ТипОбъекта,Дополнение="");
ЗапросПоID=Новый Запрос();
ЗапросПоID.Текст=
"ВЫБРАТЬ
| Объект
|ИЗ
| РегистрСведений.СоответствиеСОбъектамиСупермага
|ГДЕ
| ТипОбъекта = &ТипОбъекта
| И Дополнение = &Дополнение
| И КодСоответствия = &ID";
ЗапросПоID.УстановитьПараметр("ТипОбъекта",ТипОбъекта);
ЗапросПоID.УстановитьПараметр("ID",ID);
ЗапросПоID.УстановитьПараметр("Дополнение",Дополнение);
Выборка=ЗапросПоID.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Объект;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции

Функция СкладПоID(Склады,ID,Ошибка,ТабДок);
СтрокаСклада=Склады.Найти(ID,"КодСоответствия");
Если СтрокаСклада=Неопределено Тогда
Сообщение="Не найден склад соответствующий указанному в документе ID = "+ID+".";
СообщениеОбОшибке(ТабДок,Сообщение,Ошибка);
Возврат Неопределено;
Иначе
Возврат СтрокаСклада.Объект;
КонецЕсли;
КонецФункции

Функция ДокументПоДатеИСкладу(ТаблицаДокументов,Дополнение,Дата,Склад);
Отбор=Новый Структура();
Отбор.Вставить("Дополнение",Дополнение);
Отбор.Вставить("Дата",Дата);
Отбор.Вставить("Склад",Склад);
Строки=ТаблицаДокументов.НайтиСтроки(Отбор);
Если Строки.Количество()=0 Тогда
Возврат Неопределено;
Иначе
Возврат Строки[0];
КонецЕсли;
КонецФункции

Процедура УстановитьСоответствие(ID,ТипОбъекта,Объект,Дополнение="")
НаборЗаписей=РегистрыСведений.СоответствиеСОбъектамиСупермага.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Объект);
Если ТипЗнч(ID)=Тип("Массив") Тогда
Для каждого Значение Из ID Цикл
Запись=НаборЗаписей.Добавить();
Запись.КодСоответствия=Значение;
Запись.ТипОбъекта=ТипОбъекта;
Запись.Объект=Объект;
Запись.Дополнение=Дополнение;
КонецЦикла;
Иначе
Запись=НаборЗаписей.Добавить();
Запись.КодСоответствия=ID;
Запись.ТипОбъекта=ТипОбъекта;
Запись.Объект=Объект;
Запись.Дополнение=Дополнение;
КонецЕсли;
НаборЗаписей.Записать();
КонецПроцедуры

Процедура ЗаполнениеТабличныхЧастей(Номенклатура,Документ,ТаблицаДокумента,Ошибка,ТабДок,Склады=Неопределено)
МетаданныеДокумента=Документ.Метаданные();
Поступление=(МетаданныеДокумента=Метаданные.Документы.ПоступлениеТоваровУслуг);
Розница=(МетаданныеДокумента=Метаданные.Документы.ОтчетОРозничныхПродажах);
Реализация=(МетаданныеДокумента=Метаданные.Документы.РеализацияТоваровУслуг);
ВозвратПоставщику=(МетаданныеДокумента=Метаданные.Документы.ВозвратТоваровПоставщику);
Перемещение=(МетаданныеДокумента=Метаданные.Документы.ПеремещениеТоваров);
Списание=(МетаданныеДокумента=Метаданные.Документы.СписаниеТоваров);
Оприходование=(МетаданныеДокумента=Метаданные.Документы.ОприходованиеТоваров);

ПоляГруппировки="ТипНоменклатуры";
Если Не (Перемещение Или Списание Или Оприходование) Тогда
ПоляГруппировки=ПоляГруппировки+",СтавкаНДС";
КонецЕсли;

СтавкаНДСВРознице=-1;
Если Склады<>Неопределено Тогда
Если Поступление Или Оприходование Тогда
СтрокаСклада=Склады.Найти(Документ.Склад,"Объект");
Если СтрокаСклада<>Неопределено Тогда
СтавкаНДСВРознице=СтрокаСклада.СтавкаНДСВРознице;
КонецЕсли;
ИначеЕсли Перемещение Тогда
СтрокаСклада=Склады.Найти(Документ.СкладПолучатель,"Объект");
Если СтрокаСклада<>Неопределено Тогда
СтавкаНДСВРознице=СтрокаСклада.СтавкаНДСВРознице;
КонецЕсли;
КонецЕсли;
Если СтавкаНДСВРознице=1 Тогда
ПоляГруппировки=ПоляГруппировки+",СтавкаНДСВРознице";
КонецЕсли;
КонецЕсли;

Если Перемещение Или Списание Или Оприходование Тогда
ТаблицаДокумента.Свернуть(ПоляГруппировки,"Количество,Сумма,Себестоимость");
Иначе
ТаблицаДокумента.Свернуть(ПоляГруппировки,"Количество,Сумма,Себестоимость,СуммаНДС");
КонецЕсли;

Если Не Перемещение Тогда
Документ.Товары.Очистить();
КонецЕсли;

Если ОбщегоНазначения.ЕстьТабЧастьДокумента("ВозвратнаяТара",МетаданныеДокумента) Тогда
Документ.ВозвратнаяТара.Очистить();
КонецЕсли;

Если ОбщегоНазначения.ЕстьТабЧастьДокумента("Услуги",МетаданныеДокумента) Тогда
Документ.Услуги.Очистить();
КонецЕсли;


Для каждого Строка Из ТаблицаДокумента Цикл
Если Строка.ТипНоменклатуры=1 И Не Розница Тогда
ИмяТабличнойЧасти="Услуги";
СтрокаТЧ=Документ.Услуги.Добавить();
СтрокаТЧ.Номенклатура=Номенклатура.Найти(1,"КодСоответствия").Объект;
СтрокаТЧ.Количество=1;
СтрокаТЧ.Сумма=Строка.Сумма;
СтрокаТЧ.Цена=Строка.Сумма;
Иначе
Если Не (Строка.ТипНоменклатуры=3 И Не (Розница Или Оприходование)) Тогда
Если Перемещение И (Документ.Товары.Количество()>0) Тогда
Если (Строка.Себестоимость <> Документ.Товары[0].Себестоимость) или (Строка.Количество <> Документ.Товары[0].Количество) Тогда
Документ.Комментарий = "Количество: " + Документ.Товары[0].Количество + " Себестоимость: " + Документ.Товары[0].Себестоимость ;
СтрокаТЧ = Документ.Товары[0];
//Документ.Товары[0].Себестоимость = Строка
//Документ.Товары.Очистить();
Иначе
Продолжить;
КонецЕсли;

Иначе
ИмяТабличнойЧасти="Товары";
СтрокаТЧ=Документ.Товары.Добавить();
Попытка
СтрокаТЧ.Коэффициент=1;
Исключение
КонецПопытки;
Если Не (Перемещение Или Списание Или Оприходование) Тогда
СтрокаТЧ.Цена=Строка.Сумма / Строка.Количество;
КонецЕсли;
КонецЕсли;
//СтрокаТЧ.ЕдиницаИзмерения=ЕдиницыИизмерения[Строка.ТипНоменклатуры];
Иначе
ИмяТабличнойЧасти="ВозвратнаяТара";
СтрокаТЧ=Документ.ВозвратнаяТара.Добавить();
Если Не (Перемещение Или Списание) Тогда
СтрокаТЧ.Цена=Строка.Сумма / Строка.Количество;
КонецЕсли;
КонецЕсли;
КонецЕсли;

СтрокаНоменклатуры=Номенклатура.Найти(Строка.ТипНоменклатуры,"КодСоответствия");

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

Процедура Загрузка() Экспорт

Перем ЗагрузкаСначалаМесяца,ПапкаПротокола,СтрокаПодключения,Организация,ГруппаКонтрагентов,Дата1,Дата2;
Перем Пр_Перем;

ТабДок=Новый ТекстовыйДокумент();

НастройкиЗагрузкиДанныхСупермага=Константы.НастройкиЗагрузкиДанныхСупермага.Получить().Получить();
Если ТипЗнч(НастройкиЗагрузкиДанныхСупермага)<>Тип("Структура") Тогда
Сообщение="Не установлены настройки загрузки данных.";
СообщениеОбОшибке(ТабДок,Сообщение);
Возврат;
Иначе
НастройкиЗагрузкиДанныхСупермага.Свойство("ЗагрузкаСначалаМесяца",ЗагрузкаСначалаМесяца);
НастройкиЗагрузкиДанныхСупермага.Свойство("ПапкаПротокола",ПапкаПротокола);
НастройкиЗагрузкиДанныхСупермага.Свойство("СтрокаПодключения",СтрокаПодключения);
НастройкиЗагрузкиДанныхСупермага.Свойство("Организация",Организация);
НастройкиЗагрузкиДанныхСупермага.Свойство("ГруппаКонтрагентов",ГруппаКонтрагентов);
НастройкиЗагрузкиДанныхСупермага.Свойство("Дата1",Дата1);
НастройкиЗагрузкиДанныхСупермага.Свойство("Дата2",Дата2);
Если ЗагрузкаСначалаМесяца=Неопределено Или Не ЗначениеЗаполнено(ПапкаПротокола) Или Не ЗначениеЗаполнено(Организация) Тогда
Сообщение="Не установлены все настройки загрузки данных.";
СообщениеОбОшибке(ТабДок,Сообщение);
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаПодключения) Тогда
СтрокаПодключения="Provider=MSDAORA.1;Password=qqq;User ID=supermag;Data Source=UNION";
КонецЕсли;
КонецЕсли;

Если ЗагрузкаСначалаМесяца Тогда
Дата1=НачалоДня(ТекущаяДата()-86400*14);
Дата2=Неопределено;
КонецЕсли;

Connection = Новый COMОбъект("ADODB.Connection");

Попытка
Connection.Open(СтрокаПодключения);
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки());
ЗаписатьПротоколОшибок(ТабДок,ПапкаПротокола);
Возврат;
КонецПопытки;

Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Выборка = Новый COMОбъект("ADODB.RecordSet");

ТаблицаКонтрагентов=Новый ТаблицаЗначений();
ТаблицаКонтрагентов.Колонки.Добавить("ID");
ТаблицаКонтрагентов.Колонки.Добавить("NAME");
ТаблицаКонтрагентов.Колонки.Добавить("INN");
ТаблицаКонтрагентов.Колонки.Добавить("KPP");
ТаблицаКонтрагентов.Колонки.Добавить("ADDRESS");
ТаблицаКонтрагентов.Колонки.Добавить("FADDRESS");
ТаблицаКонтрагентов.Колонки.Добавить("TEL");
ТаблицаКонтрагентов.Колонки.Добавить("FTEL");
ТаблицаКонтрагентов.Колонки.Добавить("FAX");
ТаблицаКонтрагентов.Колонки.Добавить("FFAX");
ТаблицаКонтрагентов.Колонки.Добавить("EMAIL");
ТаблицаКонтрагентов.Колонки.Добавить("FEMAIL");
ТаблицаКонтрагентов.Колонки.Добавить("OKONH");
ТаблицаКонтрагентов.Колонки.Добавить("OKPO");
ТаблицаКонтрагентов.Колонки.Добавить("JURIDICPERS");

ТекстЗапроса=
"SELECT
| DATATYPE,
| SALELOCATIONFROM,
| SALELOCATIONTO,
| SALEDATE,
| SALEID,
| SALETYPE,
| SALEOP,
| SALEUSEROP,
| SALECLIENTINDEX,
| Doc1.USEROP,
| Doc2.SUPPLIERDOC,
| Doc2.SUPPLIERINVOICE,
| Doc2.SUPPLINVOICECREATE,
| SALEVATRATE,
| RATEID,
| SUM(SALENOVAT),
| SUM(SALEQ),
| SUM(SALESUM),
| SUM(PRIMECOST)
|FROM
| FFMapRep
| INNER JOIN SMCard ON FFMapRep.ARTICLE = SMCard.ARTICLE
| LEFT JOIN SMCardTax ON FFMapRep.ARTICLE = SMCardTax.ARTICLE AND FFMapRep.SALEDATE >= SMCardTax.DATEFROM AND FFMapRep.SALEDATE <= SMCardTax.DATETO AND SMCardTax.RGNID = 1
| INNER JOIN SMTaxGroup ON SMCardTax.TAXGROUPID = SMTaxGroup.TAXGROUPID
| LEFT JOIN FFDocuments Doc1 ON FFMapRep.INCOMEID = Doc1.ID AND FFMapRep.INCOMETYPE=Doc1.DOCTYPE
| INNER JOIN FFDocuments Doc2 ON FFMapRep.SALEID = Doc2.ID AND FFMapRep.SALETYPE=Doc2.DOCTYPE
|WHERE
| ";
Если ЗначениеЗаполнено(Дата1) Тогда
ТекстЗапроса=ТекстЗапроса+
"FFMapRep.SALEDATE >= TO_DATE('"+Формат(Дата1,"ДФ=dd.MM.yyyy")+"','dd.mm.yyyy')
| AND ";
КонецЕсли;
Если ЗначениеЗаполнено(Дата2) Тогда
Дата3=КонецДня(Дата2)+1;
ТекстЗапроса=ТекстЗапроса+
"FFMapRep.SALEDATE < TO_DATE('"+Формат(Дата3,"ДФ=dd.MM.yyyy")+"','dd.mm.yyyy')
| AND ";
КонецЕсли;
ТекстЗапроса=ТекстЗапроса+
"FFMapRep.RECTYPE = 1
|GROUP BY
| DATATYPE,
| SALELOCATIONFROM,
| SALELOCATIONTO,
| SALEDATE,
| SALEID,
| SALETYPE,
| SALEOP,
| SALEUSEROP,
| SALECLIENTINDEX,
| SALEVATRATE,
| RATEID,
| Doc2.SUPPLIERINVOICE,
| Doc2.SUPPLINVOICECREATE,
| Doc1.USEROP,
| Doc2.SUPPLIERDOC
|ORDER BY
| SALEDATE,
| SALEID,
| DATATYPE";

ВидОперацииРеализацияПродажаКомиссия=Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
ВидОперацииВозвратПродажаКомиссия=Перечисления.ВидыОперацийВозвратТоваровОтПокупателя.ПродажаКомиссия;
ВидОперацииПоступлениеПокупкаКомиссия=Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;
ВидОперацииВозвратПокупкаКомиссия=Перечисления.ВидыОперацийВозвратТоваровПоставщику.ПокупкаКомиссия;
ВидОперацииПеремещениеТоварыПродукция=Перечисления.ВидыОперацийПеремещениеТоваров.ТоварыПродукция;
ВидОперацииСписаниеТоварыПродукция=Перечисления.ВидыОперацийСписаниеТоваров.ТоварыПродукция;
ВидОперацииОтчетОРозничныхПродажах=Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетККМОПродажах;
ВидДоговораСПокупателем=Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
ВидДоговораСПоставщиком=Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком;
РазницыЗалоговойИФактическойСтоимостиТары=Справочники.ПрочиеДоходыИРасходы.РазницыЗалоговойИФактическойСтоимостиТары;
РазницыСтоимостиВозвратаИФактическойСтоимостиТоваров=Справочники.ПрочиеДоходыИРасходы.РазницыСтоимостиВозвратаИФактическойСтоимостиТоваров;
Руб=Справочники.Валюты.НайтиПоНаименованию("руб");
//ВедениеВзаиморасчетовПоДоговоруВЦелом=Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
//СчетКасса=ПланыСчетов.Хозрасчетный.КассаОрганизации;
СчетКасса=ПланыСчетов.Хозрасчетный.ОперационнаяКасса;
Ответственный=глЗначениеПеременной("глТекущийПользователь");
ТипОбъектаПереносаДанныхДокумент=Перечисления.ТипОбъектаПереносаДанных.Документ;
ТипОбъектаПереносаДанныхКонтрагент=Перечисления.ТипОбъектаПереносаДанных.Контрагент;
ТипОбъектаПереносаДанныхДоговорКонтрагента=Перечисления.ТипОбъектаПереносаДанных.ДоговорКонтрагента;
ТипОбъектаПереносаДанныхСклад=Перечисления.ТипОбъектаПереносаДанных.Склад;
ТипОбъектаПереносаДанныхНоменклатура=Перечисления.ТипОбъектаПереносаДанных.Номенклатура;
ТипКИАдрес=Перечисления.ТипыКонтактнойИнформации.Адрес;
ТипКИТелефон=Перечисления.ТипыКонтактнойИнформации.Телефон;
ВидКИЮрАдрес=Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
ВидКИФактАдрес=Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента;
ВидКИТелефонКонтрагента=Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
СпособЗачетаАвансовАвтоматически=Перечисления.СпособыЗачетаАвансов.Автоматически;
СтатьяПрочихДоходовРасходов = Справочники.ПрочиеДоходыИРасходы.НайтиПоКоду("00047");
БезНДС=Перечисления.СтавкиНДС.БезНДС;
НДС18=Перечисления.СтавкиНДС.НДС18;
НДС10=Перечисления.СтавкиНДС.НДС10;
ДействиеНДСНеИзменять=Перечисления.ДействиеНДСВСтоимостиТоваров.НеИзменять;

ЗапросПоКонтрагенту=Новый Запрос();
ЗапросПоКонтрагенту.Текст=
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Справочник.Контрагенты
|ГДЕ
| ИНН = &ИНН";

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

Запрос.Текст=
"ВЫБРАТЬ
| КодСоответствия,
| Объект
|ИЗ
| РегистрСведений.СоответствиеСОбъектамиСупермага
|ГДЕ
| ТипОбъекта = &ТипОбъекта
|
|УПОРЯДОЧИТЬ ПО
| КодСоответствия";
Запрос.УстановитьПараметр("ТипОбъекта",ТипОбъектаПереносаДанныхНоменклатура);
Номенклатура=Запрос.Выполнить().Выгрузить();

Запрос.Текст=
"ВЫБРАТЬ
| КодСоответствия,
| Объект
|ИЗ
| РегистрСведений.СоответствиеСОбъектамиСупермага
|ГДЕ
| ТипОбъекта = &ТипОбъекта
|
|УПОРЯДОЧИТЬ ПО
| КодСоответствия";
Запрос.УстановитьПараметр("ТипОбъекта",ТипОбъектаПереносаДанныхСклад);
Склады=Запрос.Выполнить().Выгрузить();

ЗапросПоСФВыданному=Новый Запрос();
ЗапросПоСФВыданному.Текст=
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.СчетФактураВыданный
|ГДЕ
| ДокументОснование = &ДокументОснование";

ЗапросПоСФПолученному=Новый Запрос();
ЗапросПоСФПолученному.Текст=
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.СчетФактураПолученный
|ГДЕ
| ДокументОснование = &ДокументОснование";

ТаблицаДокумента0=Новый ТаблицаЗначений();

ТаблицаДокумента0.Колонки.Добавить("ТипНоменклатуры");
ТаблицаДокумента0.Колонки.Добавить("Количество");
ТаблицаДокумента0.Колонки.Добавить("Сумма");
ТаблицаДокумента0.Колонки.Добавить("Себестоимость");
ТаблицаДокумента0.Колонки.Добавить("СтавкаНДС");
ТаблицаДокумента0.Колонки.Добавить("СуммаНДС");
ТаблицаДокумента0.Колонки.Добавить("СтавкаНДСВРознице");

Инвентаризации=Новый ТаблицаЗначений();
Инвентаризации.Колонки.Добавить("Склад");
Инвентаризации.Колонки.Добавить("ТаблицаДокумента");
Инвентаризации.Колонки.Добавить("ID");
Розница=Новый ТаблицаЗначений();
Розница.Колонки.Добавить("Склад");
Розница.Колонки.Добавить("ТаблицаДокумента");
Розница.Колонки.Добавить("ID");

ТаблицаСписания=ТаблицаДокумента0.Скопировать();
ТаблицаОприходования=ТаблицаДокумента0.Скопировать();

Command.CommandText = "SELECT * FROM SMClientInfo";
Попытка
Выборка=Command.Execute();
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки());
ЗаписатьПротоколОшибок(ТабДок,ПапкаПротокола);
Возврат;
КонецПопытки;
Пока Выборка.EOF()=0 Цикл
СтрокаКонтрагента=ТаблицаКонтрагентов.Добавить();
СтрокаКонтрагента.ID=Выборка.Fields("ID").Value;
СтрокаКонтрагента.NAME=Выборка.Fields("NAME").Value;
СтрокаКонтрагента.INN=Выборка.Fields("INN").Value;
СтрокаКонтрагента.KPP=Выборка.Fields("KPP").Value;
СтрокаКонтрагента.ADDRESS=Выборка.Fields("ADDRESS").Value;
СтрокаКонтрагента.FADDRESS=Выборка.Fields("FADDRESS").Value;
СтрокаКонтрагента.TEL=Выборка.Fields("TEL").Value;
СтрокаКонтрагента.FTEL=Выборка.Fields("FTEL").Value;
//СтрокаКонтрагента.FAX=Выборка.Fields("FAX").Value;
//СтрокаКонтрагента.FFAX=Выборка.Fields("FFAX").Value;
//СтрокаКонтрагента.EMAIL=Выборка.Fields("EMAIL").Value;
//СтрокаКонтрагента.FEMAIL=Выборка.Fields("FEMAIL").Value;
//СтрокаКонтрагента.OKONH=Выборка.Fields("OKONH").Value;
СтрокаКонтрагента.OKPO=Выборка.Fields("OKPO").Value;
СтрокаКонтрагента.JURIDICPERS=Выборка.Fields("JURIDICPERS").Value;
Выборка.MoveNext();
КонецЦикла;

Command.CommandText = "SELECT ID, RGNID FROM SMStoreLocations ORDER BY ID";
Попытка
Выборка=Command.Execute();
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки());
ЗаписатьПротоколОшибок(ТабДок,ПапкаПротокола);
Возврат;
КонецПопытки;
Склады.Колонки.Добавить("СтавкаНДСВРознице");
Пока Выборка.EOF()=0 Цикл
СтрокаСклада=Склады.Найти(Выборка.Fields("ID").Value,"КодСоответствия");
Если СтрокаСклада<>Неопределено Тогда
СтрокаСклада.СтавкаНДСВРознице=Выборка.Fields("RGNID").Value;
КонецЕсли;
Выборка.MoveNext();
КонецЦикла;

Command.CommandText=ТекстЗапроса;

Попытка
Выборка=Command.Execute();
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки());
ЗаписатьПротоколОшибок(ТабДок,ПапкаПротокола);
Возврат;
КонецПопытки;

Если Выборка.EOF()=0 Тогда
Номер=Выборка.Fields("SALEID").Value;
Дата=Выборка.Fields("SALEDATE").Value;
Дата0=Дата;
Иначе
Возврат;
КонецЕсли;

Ошибка=Ложь;
НачатьТранзакцию();
Попытка
ЗагрузкаИзСупермага=1;
Пока Выборка.EOF()=0 Цикл

Пр_Перем = 0;
СкладИз=Выборка.Fields("SALELOCATIONFROM").Value;
СкладВ=Выборка.Fields("SALELOCATIONTO").Value;
Тип=Выборка.Fields("SALETYPE").Value;
Опер=Выборка.Fields("SALEOP").Value;
ПользОпер=Выборка.Fields("SALEUSEROP").Value;
IDКонтрагента=Выборка.Fields("SALECLIENTINDEX").Value;
ВхНомер=Выборка.Fields("SUPPLIERDOC").Value;
ВхНомерСФ=Выборка.Fields("SUPPLIERINVOICE").Value;
ВхДатаСФ=Выборка.Fields("SUPPLINVOICECREATE").Value;

СтрокаДокумента0=ТаблицаДокументов.Найти(Номер,"КодСоответствия");


Если ТипЗнч(ОбъектПоID(IDКонтрагента,ТипОбъектаПереносаДанныхКонтрагент)) = Тип("СправочникСсылка.Склады") Тогда
Если (Тип="WO") и (Опер <> 8) тогда
Опер = 1;
ПользОпер=4;
иначеЕсли (Тип="WI") и (Опер <> 9) тогда
Если ОбъектПоID(IDКонтрагента,ТипОбъектаПереносаДанныхКонтрагент).ВидСклада = Перечисления.ВидыСкладов.НеавтоматизированнаяТорговаяТочка тогда
Тип = "WO";
Опер = 1;
ПользОпер = 4;
Пр_Перем = 1;
СкладИз = СкладВ;
иначе
Опер = 0;
ПользОпер=1;
КонецЕсли;
КонецЕсли;
КонецЕсли;


Документ=Неопределено;
Знак=1;

Если Тип="WI" Тогда
Склад=СкладПоID(Склады,СкладВ,Ошибка,ТабДок);
Если Опер=0 И ПользОпер=-2 Тогда
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.ПоступлениеТоваровУслуг Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
КонецЕсли;
Если Дата>='20110101' Тогда
Документ.Номер=Номер;
КонецЕсли;
Документ.ВидОперации=ВидОперацииПоступлениеПокупкаКомиссия;
Документ.Склад=Склад;
Документ.НомерВходящегоДокумента=ВхНомер;
Документ.ДатаВходящегоДокумента=Дата;
Документ.СпособЗачетаАвансов=СпособЗачетаАвансовАвтоматически;
Документ.НДСВключенВСтоимость=Ложь;
ИначеЕсли Опер=3 Тогда
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.ВозвратТоваровОтПокупателя Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.ВозвратТоваровОтПокупателя.СоздатьДокумент();
КонецЕсли;
Если Дата>='20110101' Тогда
Документ.Номер=Номер;
КонецЕсли;
Документ.ВидОперации=ВидОперацииВозвратПродажаКомиссия;
Документ.Склад=Склад;
ИначеЕсли Опер=9 Тогда
СтрокаДокумента=Инвентаризации.Найти(Склад,"Склад");
Если СтрокаДокумента=Неопределено Тогда
СтрокаДокумента=Инвентаризации.Добавить();
СтрокаДокумента.Склад=Склад;
СтрокаДокумента.ТаблицаДокумента=ТаблицаДокумента0.Скопировать();
СтрокаДокумента.ID=Новый Массив();
КонецЕсли;
СтрокаДокумента.ID.Добавить(Номер);
ТаблицаДокумента=СтрокаДокумента.ТаблицаДокумента;
Знак=-1;
Иначе
Выборка.MoveNext();
Номер=Выборка.Fields("SALEID").Value;
Goto ~L;
КонецЕсли;
ИначеЕсли Тип="WO" Тогда
Склад=СкладПоID(Склады,СкладИз,Ошибка,ТабДок);
//-------------------------------------------------------------->
Если Опер=1 Тогда
Если ПользОпер=-2 Тогда

// проверка на контрагента
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.РеализацияТоваровУслуг Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.РеализацияТоваровУслуг.СоздатьДокумент();
КонецЕсли;
Если Дата>='20110101' Тогда
Документ.Номер=Номер;
КонецЕсли;
Документ.ВидОперации=ВидОперацииРеализацияПродажаКомиссия;
Документ.Склад=Склад;
Документ.СтатьяДоходовИРасходовПоТаре=РазницыЗалоговойИФактическойСтоимостиТары;
Документ.СпособЗачетаАвансов=СпособЗачетаАвансовАвтоматически;
ИначеЕсли ПользОпер=4 Тогда
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.ПеремещениеТоваров Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.ПеремещениеТоваров.СоздатьДокумент();
КонецЕсли;
Документ.ВидОперации=ВидОперацииПеремещениеТоварыПродукция;
Документ.НДСвСтоимостиТоваров=ДействиеНДСНеИзменять;
Если Пр_Перем = 1 тогда
Документ.СкладОтправитель=ОбъектПоID(IDКонтрагента,ТипОбъектаПереносаДанныхКонтрагент);
Документ.СкладПолучатель=Склад;
иначе
Документ.СкладОтправитель=Склад;
Документ.СкладПолучатель=ОбъектПоID(IDКонтрагента,ТипОбъектаПереносаДанныхКонтрагент);
КонецЕсли;
Если Документ.СкладПолучатель.Пустая() Тогда
Сообщение="Не найдена запись в регистре ""Соответствие с объектами Супермага"" с типом объекта переноса данных ""Контрагент"" соответствующая указанному в документе складу с ID = "+IDКонтрагента+".";;
СообщениеОбОшибке(ТабДок,Сообщение,Ошибка);
Выборка.MoveNext();
Продолжить;
КонецЕсли;
КонецЕсли;
//<--------------------------------------------------------------

//-------------------------------------------------------------->
//Если (Опер=1) и (ПользОпер=-2) Тогда
// Если СтрокаДокумента0<>Неопределено И
// СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.РеализацияТоваровУслуг Тогда
// Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
// СтрокаДокумента0.Удалить=Ложь;
// Иначе
// Документ=Документы.РеализацияТоваровУслуг.СоздатьДокумент();
// КонецЕсли;
// Документ.ВидОперации=ВидОперацииРеализацияПродажаКомиссия;
// Документ.Склад=Склад;
// Документ.СтатьяДоходовИРасходовПоТаре=РазницыЗалоговойИФактическойСтоимостиТары;
// Документ.СпособЗачетаАвансов=СпособЗачетаАвансовАвтоматически;
//**************************************************** Dim
//иначеЕсли (Опер=1) и (ПользОпер=4) тогда
// Если СтрокаДокумента0<>Неопределено И
// СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.ПеремещениеТоваров Тогда
// Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
// СтрокаДокумента0.Удалить=Ложь;
// Иначе
// Документ=Документы.ПеремещениеТоваров.СоздатьДокумент();
// КонецЕсли;
// Документ.ВидОперации=ВидОперацииПеремещениеТоварыПродукция;
// Документ.СкладОтправитель=СкладПоID(Склады,СкладИз,Ошибка,ТабДок);
// Документ.СкладПолучатель=СкладПоID(Склады,IDКонтрагента,Ошибка,ТабДок);
//**************************************************** Dim

ИначеЕсли Опер=2 Тогда
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.ВозвратТоваровПоставщику Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.ВозвратТоваровПоставщику.СоздатьДокумент();
КонецЕсли;
Если Дата>='20110101' Тогда
Документ.Номер=Номер;
КонецЕсли;
Документ.ВидОперации=ВидОперацииВозвратПокупкаКомиссия;
Документ.Склад=Склад;
Документ.СтатьяДоходовИРасходов=РазницыСтоимостиВозвратаИФактическойСтоимостиТоваров;
Документ.НДСВключенВСтоимость=Ложь;
ИначеЕсли Опер=7 Тогда
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.СписаниеТоваров Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.СписаниеТоваров.СоздатьДокумент();
КонецЕсли;
Документ.ВидОперации=ВидОперацииСписаниеТоварыПродукция;
Документ.Склад=Склад;
ИначеЕсли Опер=8 Тогда
СтрокаДокумента=Инвентаризации.Найти(Склад,"Склад");
Если СтрокаДокумента=Неопределено Тогда
СтрокаДокумента=Инвентаризации.Добавить();
СтрокаДокумента.Склад=Склад;
СтрокаДокумента.ТаблицаДокумента=ТаблицаДокумента0.Скопировать();
СтрокаДокумента.ID=Новый Массив();
КонецЕсли;
СтрокаДокумента.ID.Добавить(Номер);
ТаблицаДокумента=СтрокаДокумента.ТаблицаДокумента;
Иначе
Выборка.MoveNext();
Номер=Выборка.Fields("SALEID").Value;
Goto ~L;
КонецЕсли;
ИначеЕсли Тип="IW" Тогда
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.ПеремещениеТоваров Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.ПеремещениеТоваров.СоздатьДокумент();
КонецЕсли;
Документ.ВидОперации=ВидОперацииПеремещениеТоварыПродукция;
Документ.НДСвСтоимостиТоваров=ДействиеНДСНеИзменять;
Документ.СкладОтправитель=СкладПоID(Склады,СкладИз,Ошибка,ТабДок);
Документ.СкладПолучатель=СкладПоID(Склады,СкладВ,Ошибка,ТабДок);
ИначеЕсли Тип="CS" Тогда
Склад=СкладПоID(Склады,СкладИз,Ошибка,ТабДок);
СтрокаДокумента=Розница.Найти(Склад,"Склад");
Если СтрокаДокумента=Неопределено Тогда
СтрокаДокумента=Розница.Добавить();
СтрокаДокумента.Склад=Склад;
СтрокаДокумента.ТаблицаДокумента=ТаблицаДокумента0.Скопировать();
СтрокаДокумента.ID=Новый Массив();
КонецЕсли;
СтрокаДокумента.ID.Добавить(Номер);
ТаблицаДокумента=СтрокаДокумента.ТаблицаДокумента;
ИначеЕсли Тип="CR" Тогда
Склад=СкладПоID(Склады,СкладВ,Ошибка,ТабДок);
СтрокаДокумента=Розница.Найти(Склад,"Склад");
Если СтрокаДокумента=Неопределено Тогда
СтрокаДокумента=Розница.Добавить();
СтрокаДокумента.Склад=Склад;
СтрокаДокумента.ТаблицаДокумента=ТаблицаДокумента0.Скопировать();
СтрокаДокумента.ID=Новый Массив();
КонецЕсли;
СтрокаДокумента.ID.Добавить(Номер);
ТаблицаДокумента=СтрокаДокумента.ТаблицаДокумента;
Знак=-1;
Иначе
Выборка.MoveNext();
Номер=Выборка.Fields("SALEID").Value;
Goto ~L;
КонецЕсли;

Если Документ<>Неопределено Тогда
Документ.Дата=Дата;
//Документ.ОтражатьВНалоговомУчете=Истина;
Документ.Организация=Организация;
Документ.Ответственный=Ответственный;
Если Не (Тип="IW" Или Опер=7 или (Опер=1 и ПользОпер=4))Тогда
Документ.ВалютаДокумента=Руб;
Документ.КратностьВзаиморасчетов=1;
Документ.КурсВзаиморасчетов=1;
Контрагент=ОбъектПоID(IDКонтрагента,ТипОбъектаПереносаДанныхКонтрагент);
Если Опер=0 Или Опер=2 Тогда
ВидДоговора=ВидДоговораСПоставщиком;
Дополнение="С поставщиком";
Иначе
ВидДоговора=ВидДоговораСПокупателем;
Дополнение="С покупателем";
КонецЕсли;
КонтрагентОбъект=Неопределено;
Если Контрагент=Неопределено Тогда
СтрокаКонтрагента=ТаблицаКонтрагентов.Найти(IDКонтрагента,"ID");
Если Не ЗначениеЗаполнено(СокрЛП(СтрокаКонтрагента.INN)) Тогда
Сообщение="Не заполнен ИНН контрагента """+СтрокаКонтрагента.NAME+""" (ID='"+IDКонтрагента+"').";
СообщениеОбОшибке(ТабДок,Сообщение,Ошибка);
Выборка.MoveNext();
Продолжить;
КонецЕсли;
ЗапросПоКонтрагенту.УстановитьПараметр("ИНН",СтрокаКонтрагента.INN);
ВыборкаКонтрагента=ЗапросПоКонтрагенту.Выполнить().Выбрать();
Если ВыборкаКонтрагента.Следующий() Тогда
Контрагент=ВыборкаКонтрагента.Ссылка;
Иначе
КонтрагентОбъект=Справочники.Контрагенты.СоздатьЭлемент();
КонтрагентОбъект.Наименование=СтрокаКонтрагента.NAME;
КонтрагентОбъект.Родитель=ГруппаКонтрагентов;
КонтрагентОбъект.НаименованиеПолное=КонтрагентОбъект.Наименование;
КонтрагентОбъект.ИНН=СтрокаКонтрагента.INN;
КонтрагентОбъект.КПП=СтрокаКонтрагента.KPP;
КонтрагентОбъект.КодПоОКПО=СтрокаКонтрагента.OKPO;
Если СтрокаКонтрагента.JURIDICPERS=0 Тогда
КонтрагентОбъект.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ФизЛицо;
Иначе
КонтрагентОбъект.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
КонецЕсли;
КонтрагентОбъект.Записать();
Контрагент=КонтрагентОбъект.Ссылка;
КонецЕсли;
УстановитьСоответствие(IDКонтрагента,ТипОбъектаПереносаДанныхКонтрагент,Контрагент);

Если СтрокаКонтрагента.ADDRESS<>"" Тогда
Запись=РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
Запись.Объект=Контрагент;
Запись.Тип=ТипКИАдрес;
Запись.Вид=ВидКИЮрАдрес;
Запись.Представление=СтрокаКонтрагента.ADDRESS;
Запись.Записать();
КонецЕсли;
Если СтрокаКонтрагента.FADDRESS<>"" Тогда
Запись=РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
Запись.Объект=Контрагент;
Запись.Тип=ТипКИАдрес;
Запись.Вид=ВидКИФактАдрес;
Запись.Представление=СтрокаКонтрагента.FADDRESS;
Запись.Записать();
КонецЕсли;
Если СтрокаКонтрагента.TEL<>"" Или СтрокаКонтрагента.FTEL<>"" Тогда
Если СтрокаКонтрагента.TEL="" Тогда
Телефон=СтрокаКонтрагента.FTEL;
Иначе
Телефон=СтрокаКонтрагента.TEL;
КонецЕсли;
Запись=РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
Запись.Объект=Контрагент;
Запись.Тип=ТипКИТелефон;
Запись.Вид=ВидКИТелефонКонтрагента;
Запись.Поле3=Телефон;
Запись.Представление=Телефон;
Запись.Записать();
КонецЕсли;

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

СтрокаНоменклатуры=ТаблицаДокумента.Добавить();
СтрокаНоменклатуры.ТипНоменклатуры=Выборка.Fields("DATATYPE").Value;
СтрокаНоменклатуры.Количество=Выборка.Fields("SUM(SALEQ)").Value*Знак;
СтрокаНоменклатуры.Сумма=Выборка.Fields("SUM(SALESUM)").Value*Знак;
Если Выборка.Fields("USEROP").Value=3 Тогда
СтрокаНоменклатуры.Себестоимость=0;
Иначе
СтрокаНоменклатуры.Себестоимость=Выборка.Fields("SUM(PRIMECOST)").Value*Знак;
КонецЕсли;
СтрокаНоменклатуры.СуммаНДС=СтрокаНоменклатуры.Сумма-Выборка.Fields("SUM(SALENOVAT)").Value*Знак;
СтавкаНДС=Выборка.Fields("SALEVATRATE").Value;
Если СтавкаНДС=0 Тогда
СтрокаНоменклатуры.СтавкаНДС=БезНДС;
ИначеЕсли СтавкаНДС=18 Тогда
СтрокаНоменклатуры.СтавкаНДС=НДС18;
ИначеЕсли СтавкаНДС=10 Тогда
СтрокаНоменклатуры.СтавкаНДС=НДС10;
Иначе
Сообщение="Не корректно заполнена ставка НДС (ID документа: '"+Номер+"').";
СообщениеОбОшибке(ТабДок,Сообщение,Ошибка);
КонецЕсли;

Если СтрокаНоменклатуры.ТипНоменклатуры=0 Тогда
СтавкаНДСВРознице=Выборка.Fields("RATEID").Value;
Если СтавкаНДСВРознице=2 Тогда
СтрокаНоменклатуры.СтавкаНДСВРознице=НДС18;
ИначеЕсли СтавкаНДСВРознице=1 Тогда
СтрокаНоменклатуры.СтавкаНДСВРознице=НДС10;
Иначе
СтрокаНоменклатуры.СтавкаНДСВРознице=БезНДС;
КонецЕсли;
Иначе
СтрокаНоменклатуры.СтавкаНДСВРознице=БезНДС;
КонецЕсли;

Выборка.MoveNext();
Номер0=Номер;
Пока Выборка.EOF()=0 Цикл
Номер=Выборка.Fields("SALEID").Value;
Если Номер=Номер0 Тогда
СтрокаНоменклатуры=ТаблицаДокумента.Добавить();
СтрокаНоменклатуры.ТипНоменклатуры=Выборка.Fields("DATATYPE").Value;
СтрокаНоменклатуры.Количество=Выборка.Fields("SUM(SALEQ)").Value*Знак;
СтрокаНоменклатуры.Сумма=Выборка.Fields("SUM(SALESUM)").Value*Знак;
Если Выборка.Fields("USEROP").Value=3 Тогда
СтрокаНоменклатуры.Себестоимость=0;
Иначе
СтрокаНоменклатуры.Себестоимость=Выборка.Fields("SUM(PRIMECOST)").Value*Знак;
КонецЕсли;
СтрокаНоменклатуры.СуммаНДС=СтрокаНоменклатуры.Сумма-Выборка.Fields("SUM(SALENOVAT)").Value*Знак;
СтавкаНДС=Выборка.Fields("SALEVATRATE").Value;
Если СтавкаНДС=0 Тогда
СтрокаНоменклатуры.СтавкаНДС=БезНДС;
ИначеЕсли СтавкаНДС=18 Тогда
СтрокаНоменклатуры.СтавкаНДС=НДС18;
ИначеЕсли СтавкаНДС=10 Тогда
СтрокаНоменклатуры.СтавкаНДС=НДС10;
Иначе
Сообщение="Не корректно заполнена ставка НДС (ID документа: '"+Номер+"').";
СообщениеОбОшибке(ТабДок,Сообщение,Ошибка);
КонецЕсли;

Если СтрокаНоменклатуры.ТипНоменклатуры=0 Тогда
СтавкаНДСВРознице=Выборка.Fields("RATEID").Value;
Если СтавкаНДСВРознице=2 Тогда
СтрокаНоменклатуры.СтавкаНДСВРознице=НДС18;
ИначеЕсли СтавкаНДСВРознице=1 Тогда
СтрокаНоменклатуры.СтавкаНДСВРознице=НДС10;
Иначе
СтрокаНоменклатуры.СтавкаНДСВРознице=БезНДС;
КонецЕсли;
Иначе
СтрокаНоменклатуры.СтавкаНДСВРознице=БезНДС;
КонецЕсли;

Выборка.MoveNext();
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Если Документ<>Неопределено Тогда
Если Документ.ПометкаУдаления Тогда
Документ.ПометкаУдаления=Ложь;
КонецЕсли;
ЗаполнениеТабличныхЧастей(Номенклатура,Документ,ТаблицаДокумента,Ошибка,ТабДок,Склады);
ДокументНовый=Документ.ЭтоНовый();
Если Не ЗначениеЗаполнено(Документ.Номер) Тогда
ОбщегоНазначения.УстановитьНомерДокумента(Документ);
КонецЕсли;
СФ=Неопределено;
Если Документ.Метаданные()=Метаданные.Документы.ПоступлениеТоваровУслуг
Или Документ.Метаданные()=Метаданные.Документы.ВозвратТоваровОтПокупателя Тогда
Если ЗначениеЗаполнено(ВхДатаСФ) Тогда
Если Не Документ.УчитыватьНДС Тогда
Документ.УчитыватьНДС=Истина;
Документ.СуммаВключаетНДС=Истина;
КонецЕсли;
Документ.ПредъявленСчетФактура=Истина;
Документ.НДСПредъявленКВычету=Истина;
Документ.НомерВходящегоСчетаФактуры=ВхНомерСФ;
Документ.ДатаВходящегоСчетаФактуры=ВхДатаСФ;
Если Не ДокументНовый Тогда
ЗапросПоСФПолученному.УстановитьПараметр("ДокументОснование",Документ.Ссылка);
ВыборкаПоСФ=ЗапросПоСФПолученному.Выполнить().Выбрать();
Если ВыборкаПоСФ.Следующий() Тогда
СФ=ВыборкаПоСФ.Ссылка.ПолучитьОбъект();
КонецЕсли;
КонецЕсли;
Если СФ=Неопределено Тогда
СФ=Документы.СчетФактураПолученный.СоздатьДокумент();
КонецЕсли;
СФ.ДатаВходящегоДокумента=ВхДатаСФ;
СФ.НомерВходящегоДокумента=ВхНомерСФ;
СФ.НДСПредъявленКВычету=Истина;
ИначеЕсли Документ.УчитыватьНДС Тогда
Сообщение=("Нет данных по полученному счету-фактуре (ID документа прихода: '"+Номер0+"').");
СообщениеОбОшибке(ТабДок,Сообщение);
КонецЕсли;
ИначеЕсли (Документ.Метаданные()=Метаданные.Документы.РеализацияТоваровУслуг
Или Документ.Метаданные()=Метаданные.Документы.ВозвратТоваровПоставщику) И Документ.УчитыватьНДС Тогда
Если Документ.Метаданные()=Метаданные.Документы.ВозвратТоваровПоставщику Тогда
Документ.ПоставщикуВыставляетсяСчетФактураНаВозврат=Истина;
КонецЕсли;
Если Не ДокументНовый Тогда
ЗапросПоСФВыданному.УстановитьПараметр("ДокументОснование",Документ.Ссылка);
ВыборкаПоСФ=ЗапросПоСФВыданному.Выполнить().Выбрать();
Если ВыборкаПоСФ.Следующий() Тогда
СФ=ВыборкаПоСФ.Ссылка.ПолучитьОбъект();
КонецЕсли;
КонецЕсли;
Если СФ=Неопределено Тогда
СФ=Документы.СчетФактураВыданный.СоздатьДокумент();
СФ.ВидСчетаФактуры=Перечисления.НДСВидСчетаФактуры.НаРеализацию;
КонецЕсли;
КонецЕсли;
Попытка
Документ.Записать(РежимЗаписиДокумента.Проведение);
Если ДокументНовый Тогда
УстановитьСоответствие(Номер0,ТипОбъектаПереносаДанныхДокумент,Документ.Ссылка);
КонецЕсли;
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки()+" (ID='"+Номер0+"').",Ошибка);
КонецПопытки;
Если СФ<>Неопределено Тогда
СФ.Номер=Номер0;
СФ.Дата=Документ.Дата;
СФ.Организация=Документ.Организация;
СФ.Контрагент=Документ.Контрагент;
СФ.ДоговорКонтрагента=Документ.ДоговорКонтрагента;
СФ.ВалютаДокумента=Документ.ВалютаДокумента;
СФ.СуммаДокумента=Документ.СуммаДокумента;
СФ.ДокументОснование=Документ.Ссылка;
СФ.Ответственный=Ответственный;
Если СФ.ДокументыОснования.Количество()=0 Тогда
СтрокаТабЧасти=СФ.ДокументыОснования.Добавить();
СтрокаТабЧасти.ДокументОснование=Документ.Ссылка;
КонецЕсли;
Попытка
СФ.Записать(РежимЗаписиДокумента.Проведение);
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки()+" (счет-фактура по документу с ID='"+Номер0+"').",Ошибка);
КонецПопытки;
КонецЕсли;
КонецЕсли;
~L: Если Выборка.EOF()=0 Тогда
Дата=Выборка.Fields("SALEDATE").Value;
Иначе
Дата=Неопределено;
КонецЕсли;
Если Дата<>Дата0 Тогда
Для Каждого СтрокаДокумента Из Розница Цикл
СтрокаДокумента0=ДокументПоДатеИСкладу(ТаблицаДокументов,"Отчет о розничных продажах",Дата0,СтрокаДокумента.Склад);
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.ОтчетОРозничныхПродажах Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
Если Документ.ПометкаУдаления Тогда
Документ.ПометкаУдаления=Ложь;
КонецЕсли;
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
КонецЕсли;
Документ.ВидОперации=ВидОперацииОтчетОРозничныхПродажах;
Документ.СчетКасса=СчетКасса;
Документ.Дата=Дата0;
Документ.Склад=СтрокаДокумента.Склад;
Документ.ВалютаДокумента=Руб;
Документ.КратностьДокумента=1;
Документ.КурсДокумента=1;
Документ.Организация=Организация;
//Документ.ОтражатьВНалоговомУчете=Истина;
Документ.Ответственный=Ответственный;
//изменено
ТорговаяВыручкаСсылка = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("000000014");
Если НЕ ТорговаяВыручкаСсылка = Справочники.СтатьиДвиженияДенежныхСредств.ПустаяСсылка() Тогда
Документ.СтатьяДвиженияДенежныхСредств = ТорговаяВыручкаСсылка;
Конецесли;

ТаблицаДокумента=СтрокаДокумента.ТаблицаДокумента;
ЗаполнениеТабличныхЧастей(Номенклатура,Документ,ТаблицаДокумента,Ошибка,ТабДок);
Если Документ.ЭтоНовый() Тогда
ОбщегоНазначения.УстановитьНомерДокумента(Документ);
КонецЕсли;
Попытка
Документ.Записать(РежимЗаписиДокумента.Проведение);
УстановитьСоответствие(СтрокаДокумента.ID,ТипОбъектаПереносаДанныхДокумент,Документ.Ссылка,"Отчет о розничных продажах");
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки()+" (Отчет о розничных продажах за "+Формат(Дата0,"ДФ=dd.MM.yyyy")+")",Ошибка);
КонецПопытки;
КонецЦикла;
Для Каждого СтрокаДокумента Из Инвентаризации Цикл
ТаблицаСписания.Очистить();
ТаблицаОприходования.Очистить();
СтрокаДокумента.ТаблицаДокумента.Свернуть("ТипНоменклатуры","Количество,Сумма,Себестоимость");
Для Каждого СтрокаНоменклатуры Из СтрокаДокумента.ТаблицаДокумента Цикл
Если СтрокаНоменклатуры.Количество<0 Тогда
СтрокаОприходования=ТаблицаОприходования.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаОприходования,СтрокаНоменклатуры,"ТипНоменклатуры,Количество,Сумма,Себестоимость");
СтрокаОприходования.Количество=СтрокаОприходования.Количество*(-1);
СтрокаОприходования.Сумма=СтрокаОприходования.Сумма*(-1);
СтрокаОприходования.Себестоимость=СтрокаОприходования.Себестоимость*(-1);

Если СтрокаНоменклатуры.Сумма>0 Тогда
СтрокаОприходования.Количество=СтрокаОприходования.Количество+1;
СтрокаОприходования.Сумма=10;
СтрокаОприходования.Себестоимость=10;
СтрокаСписания=ТаблицаСписания.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСписания,СтрокаНоменклатуры,"ТипНоменклатуры,Количество,Сумма,Себестоимость");
СтрокаСписания.Количество=1;
СтрокаСписания.Сумма=СтрокаНоменклатуры.Сумма+10;
СтрокаСписания.Себестоимость=СтрокаНоменклатуры.Себестоимость+10;
КонецЕсли;

Иначе
СтрокаСписания=ТаблицаСписания.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСписания,СтрокаНоменклатуры,"ТипНоменклатуры,Количество,Сумма,Себестоимость");

Если СтрокаНоменклатуры.Сумма<0 Тогда
СтрокаСписания.Количество=СтрокаСписания.Количество+1;
СтрокаСписания.Сумма=10;
СтрокаСписания.Себестоимость=10;
СтрокаОприходования=ТаблицаОприходования.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаОприходования,СтрокаНоменклатуры,"ТипНоменклатуры,Количество,Сумма,Себестоимость");
СтрокаОприходования.Количество=1;
СтрокаОприходования.Сумма=10-СтрокаНоменклатуры.Сумма;
СтрокаОприходования.Себестоимость=10-СтрокаНоменклатуры.Себестоимость;
КонецЕсли;

КонецЕсли;
КонецЦикла;
Если ТаблицаОприходования.Количество()>0 Тогда
СтрокаДокумента0=ДокументПоДатеИСкладу(ТаблицаДокументов,"Инвентаризация: Оприходование товаров",Дата0,СтрокаДокумента.Склад);
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.ОприходованиеТоваров Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.ОприходованиеТоваров.СоздатьДокумент();
КонецЕсли;
Документ.Дата=Дата0;
Документ.СтатьяПрочихДоходовРасходов = СтатьяПрочихДоходовРасходов;
Документ.Склад=СтрокаДокумента.Склад;
Документ.Организация=Организация;
//Документ.ОтражатьВНалоговомУчете=Истина;
Документ.Ответственный=Ответственный;
ЗаполнениеТабличныхЧастей(Номенклатура,Документ,ТаблицаОприходования,Ошибка,ТабДок,Склады);
Если Документ.ЭтоНовый() Тогда
ОбщегоНазначения.УстановитьНомерДокумента(Документ);
ИначеЕсли Документ.ПометкаУдаления Тогда
Документ.ПометкаУдаления=Ложь;
КонецЕсли;
Попытка
Документ.Записать(РежимЗаписиДокумента.Проведение);
УстановитьСоответствие(СтрокаДокумента.ID,ТипОбъектаПереносаДанныхДокумент,Документ.Ссылка,"Инвентаризация: Оприходование товаров");
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки()+" (Инвентаризация: Оприходование товаров за "+Формат(Дата0,"ДФ=dd.MM.yyyy")+")",Ошибка);
КонецПопытки;
КонецЕсли;
Если ТаблицаСписания.Количество()>0 Тогда
СтрокаДокумента0=ДокументПоДатеИСкладу(ТаблицаДокументов,"Инвентаризация: Списание товаров",Дата0,СтрокаДокумента.Склад);
Если СтрокаДокумента0<>Неопределено И
СтрокаДокумента0.Объект.Метаданные()=Метаданные.Документы.СписаниеТоваров Тогда
Документ=СтрокаДокумента0.Объект.ПолучитьОбъект();
СтрокаДокумента0.Удалить=Ложь;
Иначе
Документ=Документы.СписаниеТоваров.СоздатьДокумент();
КонецЕсли;
Документ.Дата=Дата0;
Документ.ВидОперации=ВидОперацииСписаниеТоварыПродукция;
Документ.Склад=СтрокаДокумента.Склад;
Документ.Организация=Организация;
//Документ.ОтражатьВНалоговомУчете=Истина;
Документ.Ответственный=Ответственный;
ЗаполнениеТабличныхЧастей(Номенклатура,Документ,ТаблицаСписания,Ошибка,ТабДок);
Если Документ.ЭтоНовый() Тогда
ОбщегоНазначения.УстановитьНомерДокумента(Документ);
ИначеЕсли Документ.ПометкаУдаления Тогда
Документ.ПометкаУдаления=Ложь;
КонецЕсли;
Попытка
Документ.Записать(РежимЗаписиДокумента.Проведение);
УстановитьСоответствие(СтрокаДокумента.ID,ТипОбъектаПереносаДанныхДокумент,Документ.Ссылка,"Инвентаризация: Списание товаров");
Исключение
СообщениеОбОшибке(ТабДок,ОписаниеОшибки()+" (Инвентаризация: Списание товаров за "+Формат(Дата0,"ДФ=dd.MM.yyyy")+")",Ошибка);
КонецПопытки;
КонецЕсли;
КонецЦикла;
Розница.Очистить();
Инвентаризации.Очистить();
Дата0=Дата;
КонецЕсли;
КонецЦикла;


ЗагрузкаИзСупермага=Неопределено;
Индекс=ТаблицаДокументов.Количество()-1;
Пока Индекс>=0 Цикл
Если ТаблицаДокументов[Индекс].Удалить Тогда
МетаданныеДокумента=ТаблицаДокументов[Индекс].Объект.Метаданные();
Если МетаданныеДокумента=Метаданные.Документы.ПоступлениеТоваровУслуг
Или МетаданныеДокумента=Метаданные.Документы.ВозвратТоваровОтПокупателя Тогда
ЗапросПоСФПолученному.УстановитьПараметр("ДокументОснование",ТаблицаДокументов[Индекс].Объект);
ВыборкаПоСФ=ЗапросПоСФПолученному.Выполнить().Выбрать();
Если ВыборкаПоСФ.Следующий() Тогда
ВыборкаПоСФ.Ссылка.ПолучитьОбъект().Удалить();
КонецЕсли;
ИначеЕсли МетаданныеДокумента=Метаданные.Документы.РеализацияТоваровУслуг
Или МетаданныеДокумента=Метаданные.Документы.ВозвратТоваровПоставщику Тогда
ЗапросПоСФВыданному.УстановитьПараметр("ДокументОснование",ТаблицаДокументов[Индекс].Объект);
ВыборкаПоСФ=ЗапросПоСФВыданному.Выполнить().Выбрать();
Если ВыборкаПоСФ.Следующий() Тогда
ВыборкаПоСФ.Ссылка.ПолучитьОбъект().Удалить();
КонецЕсли;
КонецЕсли;
ТаблицаДокументов[Индекс].Объект.ПолучитьОбъект().Удалить();
КонецЕсли;
Индекс=Индекс-1;
КонецЦикла;
Исключение
ЗагрузкаИзСупермага=Неопределено;
СообщениеОбОшибке(ТабДок,ОписаниеОшибки(),Ошибка);
КонецПопытки;

Если ТабДок.КоличествоСтрок()>0 Тогда
ЗаписатьПротоколОшибок(ТабДок,ПапкаПротокола);
КонецЕсли;

Если Ошибка Тогда
ОтменитьТранзакцию();
Иначе
ЗафиксироватьТранзакцию();
КонецЕсли;

КонецПроцедуры
пс: интересно... в окне редактирования разметка модуля сохраняется, а в сообщении пропадает...
прикладываю файл с модулем
Вложения
Тип файла: rar Обмен 1С-СМ.rar (8.5 Кб, 140 просмотров)
Часовой пояс GMT +3, время: 16:43.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.