Содержание:
1. Сверка документов в 1С
2. Внешний вид обработки
Сверка документов в 1С
Конфигурация БП 3.0 КОРП
Необходимо разработать обработку сверки двух баз (источника и приемника) по-документно за любой выбранный период (месяц, неделя, день), и если документ отсутствует в базе приемнике, то подгружать из источника.
При нажатии выбранной кнопки, например «Поступления на р/с» из базы приемника в базу источника передается HTTP запрос и полученными данными заполняется табличная часть обработки 1С «ТаблицаРезультат».
Затем в колонке «Загрузить» ставим флаг на той строке какой документ хотим загрузить в базу приемника.
После нажатия кнопки «Загрузить выбранный документ» срабатывает процедура загрузки данного вида документа из базы источника в базу приемник.
Дальше по кнопке «Обновить список» обновляется табличная часть и можно сверить каждый загруженный документ с документом в источнике.
Процесс сверки и загрузки других видов документов аналогично.
По кнопке «Статусы счетов покупателей» проставляется статус документа Счет (подгружается в регистр сведений СтатусыДокументов).
Внешний вид обработки

Сверка документов
Процедуры и функции обработки:
#Область Переменные
&НаКлиенте
Перем ИмяБазы, Префикс, ИННОрганизации, КППОрганизации;
&НаКлиенте
Перем ИмяФайлаПравилОбмена, ИмяФайлаОбмена;
&НаКлиенте
Перем ИмяФайлаПравилОбменаАТ, ИмяФайлаПравилОбменаИТ;
&НаКлиенте
Перем ИмяФайлаОбменаАТ, ИмяФайлаОбменаИТ;
&НаКлиенте
Перем ПользовательИТ, ПарольИТ, НаименованиеСервераИТ, НаименованиеБазыИТ, СерверИсточникИТ;
&НаКлиенте
Перем ПользовательАТ, ПарольАТ, НаименованиеСервераАТ, НаименованиеБазыАТ, СерверИсточникАТ;
&НаКлиенте
Перем Пользователь, Пароль, НаименованиеСервера, НаименованиеБазы, СерверИсточник;
&НаКлиенте
Перем ВыбранныйВидДокумента;
&НаКлиенте
Перем ИмяРоли;
#КонецОбласти
#Область ВидыДокументов
&НаКлиенте
Процедура ПоступленияНаРС(Команда)
ПолучитьДокументыHTTP(“ПоступлениеНаРасчетныйСчет”);
КонецПроцедуры
&НаКлиенте
Процедура СписанияРС(Команда)
ПолучитьДокументыHTTP(“СписаниеСРасчетногоСчета”);
КонецПроцедуры
&НаКлиенте
Процедура ПоступлениеТоваровУслуг(Команда)
ПолучитьДокументыHTTP(“ПоступлениеТоваровУслуг”);
КонецПроцедуры
&НаКлиенте
Процедура РеализацияТоваровУслуг(Команда)
ПолучитьДокументыHTTP(“РеализацияТоваровУслуг”);
КонецПроцедуры
&НаКлиенте
Процедура Операции(Команда)
ПолучитьДокументыHTTP(“ОперацияБух”);
КонецПроцедуры
&НаКлиенте
Процедура ПКО(Команда)
ПолучитьДокументыHTTP(“ПриходныйКассовыйОрдер”);
КонецПроцедуры
&НаКлиенте
Процедура РКО(Команда)
ПолучитьДокументыHTTP (“РасходныйКассовыйОрдер”);
КонецПроцедуры
&НаКлиенте
Процедура ОперацияСБилетом(Команда)
ПолучитьДокументыHTTP(“ОперацияСБилетом”);
КонецПроцедуры
&НаКлиенте
Процедура АвансовыйОтчет(Команда)
ПолучитьДокументыHTTP(“АвансовыйОтчет”);
КонецПроцедуры
&НаКлиенте
Процедура ТребованиеНакладная(Команда)
ПолучитьДокументыHTTP(“ТребованиеНакладная”);
КонецПроцедуры
&НаКлиенте
Процедура ПоступлениеДопРасходов(Команда)
ПолучитьДокументыHTTP(“ПоступлениеДопРасходов”);
КонецПроцедуры
&НаКлиенте
Процедура ПередачаМатериаловВЭксплуатацию(Команда)
ПолучитьДокументыHTTP(“ПередачаМатериаловВЭксплуатацию”);
КонецПроцедуры
&НаКлиенте
Процедура СчетПокупателю(Команда)
ПолучитьДокументыHTTP(“СчетНаОплатуПокупателю”);
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ТолькоПроведенныеДокументыВИсточнике = Истина;
ПереключательБазы = 1;
ИмяБазы = "ИТ";
Префикс = "ИТ";
ИННОрганизации = "111111111";
КППОрганизации = "777777777";
ИмяОбработки = ПредопределенноеЗначение("Перечисление.Расш1_ВидыОбработок.СверкаДокументов");
БазаАТ = ПредопределенноеЗначение("Перечисление.Расш1_ИменаБаз.АТ");
БазаИТ = ПредопределенноеЗначение("Перечисление.Расш1_ИменаБаз.ИТ");
ПутиАТ = ДанныеПодключения.ПолучитьПути(ИмяОбработки, БазаАТ);
Если ПутиАТ = Неопределено Тогда
ИмяФайлаПравилОбменаАТ = "";
ИмяФайлаОбменаАТ = "";
Иначе
ИмяФайлаПравилОбменаАТ = ПутиАТ.ИмяФайлаПравилОбмена;
ИмяФайлаОбменаАТ = ПутиАТ.ИмяФайлаОбмена;
КонецЕсли;
ПутиИТ = ДанныеПодключения.ПолучитьПути(ИмяОбработки, БазаИТ);
Если ПутиИТ = Неопределено Тогда
ИмяФайлаПравилОбменаИТ = "";
ИмяФайлаОбменаИТ = "";
Иначе
ИмяФайлаПравилОбменаИТ = ПутиИТ.ИмяФайлаПравилОбмена;
ИмяФайлаОбменаИТ = ПутиИТ.ИмяФайлаОбмена;
КонецЕсли;
ДанныеАвторизацииИТ = ДанныеПодключения.ПолучитьАвторизацию("ИТ");
Если ДанныеАвторизацииИТ = Неопределено Тогда
ПользовательИТ = "";
ПарольИТ = "";
НаименованиеСервераИТ = "";
НаименованиеБазыИТ = "";
СерверИсточникИТ = "";
Иначе
ПользовательИТ = Строка(ДанныеАвторизацииИТ.Пользователь);
ПарольИТ = Строка(ДанныеАвторизацииИТ.Пароль);
НаименованиеСервераИТ = Строка(ДанныеАвторизацииИТ.НаименованиеСервера);
НаименованиеБазыИТ = Строка(ДанныеАвторизацииИТ.НаименованиеБазы);
СерверИсточникИТ = Строка(ДанныеАвторизацииИТ.СерверИсточник);
КонецЕсли;
ДанныеАвторизацииАТ = ДанныеПодключения.ПолучитьАвторизацию("АТ");
Если ДанныеАвторизацииАТ = Неопределено Тогда
ПользовательАТ = "";
ПарольАТ = "";
НаименованиеСервераАТ = "";
НаименованиеБазыАТ = "";
СерверИсточникАТ = "";
Иначе
ПользовательАТ = Строка(ДанныеАвторизацииАТ.Пользователь);
ПарольАТ = Строка(ДанныеАвторизацииАТ.Пароль);
НаименованиеСервераАТ = Строка(ДанныеАвторизацииАТ.НаименованиеСервера);
НаименованиеБазыАТ = Строка(ДанныеАвторизацииАТ.НаименованиеБазы);
СерверИсточникАТ = Строка(ДанныеАвторизацииАТ.СерверИсточник);
КонецЕсли;
ТД = ТекущаяДата();
ПериодСверки.ДатаНачала = НачалоМесяца(ТД);
ПериодСверки.ДатаОкончания = КонецМесяца(ТД);
ИмяРоли = "Расш1_РазрешитьЗагрузкуДокументовПоИТ";
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ТолькоПроведенныеДокументыВИсточнике = Истина;
ПереключательБазы = 1;
ИмяБазы = "ИТ";
Префикс = "ИТ";
ИННОрганизации = "111111111";
КППОрганизации = "777777777";
ИмяОбработки = ПредопределенноеЗначение("Перечисление.Расш1_ВидыОбработок.СверкаДокументов");
БазаАТ = ПредопределенноеЗначение("Перечисление.Расш1_ИменаБаз.АТ");
БазаИТ = ПредопределенноеЗначение("Перечисление.Расш1_ИменаБаз.ИТ");
ПутиАТ = ДанныеПодключения.ПолучитьПути(ИмяОбработки, БазаАТ);
Если ПутиАТ = Неопределено Тогда
ИмяФайлаПравилОбменаАТ = "";
ИмяФайлаОбменаАТ = "";
Иначе
ИмяФайлаПравилОбменаАТ = ПутиАТ.ИмяФайлаПравилОбмена;
ИмяФайлаОбменаАТ = ПутиАТ.ИмяФайлаОбмена;
КонецЕсли;
ПутиИТ = ДанныеПодключения.ПолучитьПути(ИмяОбработки, БазаИТ);
Если ПутиИТ = Неопределено Тогда
ИмяФайлаПравилОбменаИТ = "";
ИмяФайлаОбменаИТ = "";
Иначе
ИмяФайлаПравилОбменаИТ = ПутиИТ.ИмяФайлаПравилОбмена;
ИмяФайлаОбменаИТ = ПутиИТ.ИмяФайлаОбмена;
КонецЕсли;
ДанныеАвторизацииИТ = ДанныеПодключения.ПолучитьАвторизацию("ИТ");
Если ДанныеАвторизацииИТ = Неопределено Тогда
ПользовательИТ = "";
ПарольИТ = "";
НаименованиеСервераИТ = "";
НаименованиеБазыИТ = "";
СерверИсточникИТ = "";
Иначе
ПользовательИТ = Строка(ДанныеАвторизацииИТ.Пользователь);
ПарольИТ = Строка(ДанныеАвторизацииИТ.Пароль);
НаименованиеСервераИТ = Строка(ДанныеАвторизацииИТ.НаименованиеСервера);
НаименованиеБазыИТ = Строка(ДанныеАвторизацииИТ.НаименованиеБазы);
СерверИсточникИТ = Строка(ДанныеАвторизацииИТ.СерверИсточник);
КонецЕсли;
ДанныеАвторизацииАТ = ДанныеПодключения.ПолучитьАвторизацию("АТ");
Если ДанныеАвторизацииАТ = Неопределено Тогда
ПользовательАТ = "";
ПарольАТ = "";
НаименованиеСервераАТ = "";
НаименованиеБазыАТ = "";
СерверИсточникАТ = "";
Иначе
ПользовательАТ = Строка(ДанныеАвторизацииАТ.Пользователь);
ПарольАТ = Строка(ДанныеАвторизацииАТ.Пароль);
НаименованиеСервераАТ = Строка(ДанныеАвторизацииАТ.НаименованиеСервера);
НаименованиеБазыАТ = Строка(ДанныеАвторизацииАТ.НаименованиеБазы);
СерверИсточникАТ = Строка(ДанныеАвторизацииАТ.СерверИсточник);
КонецЕсли;
ТД = ТекущаяДата();
ПериодСверки.ДатаНачала = НачалоМесяца(ТД);
ПериодСверки.ДатаОкончания = КонецМесяца(ТД);
ИмяРоли = "Расш1_РазрешитьЗагрузкуДокументовПоИТ";
КонецПроцедуры
#Область HTTP
&НаКлиенте
Процедура УстановитьВидимостьКолонок(ВидДокумента)
Если ВидДокумента = "ПередачаМатериаловВЭксплуатацию" или ВидДокумента = "ТребованиеНакладная" или ВидДокумента = "ОперацияБух" Тогда
Элементы.ТаблицаРезультатИННКонтрагента.Видимость = Ложь;
Элементы.ТаблицаРезультатКонтрагент.Видимость = Ложь;
Элементы.ТаблицаРезультатСуммаДокумента.Видимость = Ложь;
Элементы.ТаблицаРезультатСуммаДокументаЗдесь.Видимость = Ложь;
Иначе
Элементы.ТаблицаРезультатИННКонтрагента.Видимость = Истина;
Элементы.ТаблицаРезультатКонтрагент.Видимость = Истина;
Элементы.ТаблицаРезультатСуммаДокумента.Видимость = Истина;
Элементы.ТаблицаРезультатСуммаДокументаЗдесь.Видимость = Истина;
Элементы.ТаблицаРезультатОперацияЗдесь.Видимость = Ложь;
Элементы.ТаблицаРезультатСуммаОперацииЗдесь.Видимость = Ложь;
Элементы.ТаблицаРезультатОбщаяСуммаЗдесь.Видимость = Ложь;
КонецЕсли;
Если ВидДокумента = "СписаниеСРасчетногоСчета" или ВидДокумента = "ПоступлениеТоваровУслуг" Тогда
Если Элементы.ТаблицаРезультатСуммаОперацииЗдесь.ТекстПодвала = "0" Тогда
Элементы.ТаблицаРезультатОперацияЗдесь.Видимость = Ложь;
Элементы.ТаблицаРезультатСуммаОперацииЗдесь.Видимость = Ложь;
Элементы.ТаблицаРезультатОбщаяСуммаЗдесь.Видимость = Ложь;
Иначе
Элементы.ТаблицаРезультатОперацияЗдесь.Видимость = Истина;
Элементы.ТаблицаРезультатСуммаОперацииЗдесь.Видимость = Истина;
Элементы.ТаблицаРезультатОбщаяСуммаЗдесь.Видимость = Истина;
КонецЕсли;
КонецЕсли;
Элементы.ТаблицаРезультатНомерСчетНаОплату.Видимость = Ложь;
Элементы.ТаблицаРезультатРазницаНомеров.Видимость = Ложь;
КонецПроцедуры
&НаКлиенте
Функция ВыполнитьЗапросHTTP(ИмяМетода, АдресРесурса, СтрокаТелаЗапрос, ИмяБазы)
РезультатЗапросаHTTP = Неопределено;
Сообщение = Новый СообщениеПользователю;
Если ИмяБазы = "АТ" Тогда
СерверИсточник = СерверИсточникАТ;
Пользователь = ПользовательАТ;
Пароль = ПарольАТ;
ИначеЕсли ИмяБазы = "ИТ" Тогда
СерверИсточник = СерверИсточникИТ;
Пользователь = ПользовательИТ;
Пароль = ПарольИТ;
КонецЕсли;
Попытка
HTTPСоединение = Новый HTTPСоединение(СерверИсточник,, Пользователь, Пароль);
Исключение
Сообщение.Текст = "Не удалось установить HTTP соединение!";
Сообщение.Сообщить();
Возврат РезультатЗапросаHTTP;
КонецПопытки;
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
Если ИмяМетода <> "GET" и ИмяМетода <> "DELETE" Тогда
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаТелаЗапрос);
КонецЕсли;
Попытка
Результат = HTTPСоединение.ВызватьHTTPМетод(ИмяМетода, HTTPЗапрос);
РезультатЗапросаHTTP = Результат.ПолучитьТелоКакСтроку();
Если Результат.КодСостояния > 299 Тогда
Сообщение.Текст = РезультатЗапросаHTTP;
Сообщение.Сообщить();
РезультатЗапросаHTTP = Неопределено;
КонецЕсли;
Возврат РезультатЗапросаHTTP;
Исключение
Сообщение.Текст = ОписаниеОшибки();
Сообщение.Сообщить();
Возврат РезультатЗапросаHTTP;
КонецПопытки;
КонецФункции
&НаКлиенте
Процедура ПолучитьДокументыHTTP(ВидДокумента)
ТаблицаРезультат.Очистить();
ДоступКДокументам = ПроверкаДоступаКДокументамСервер.ЕстьРоль(ИмяРоли);
Если Не ДоступКДокументам Тогда
ПоказатьПредупреждение(, "Нет доступа загрузки документов " + ИмяБазы);
Возврат;
КонецЕсли;
ВыбранныйВидДокумента = ВидДокумента;
СтруктураДат = ПроверитьПериодСверки();
Если СтруктураДат = 0 Тогда
Возврат;
КонецЕсли;
СтрокаДата1 = СтруктураДат.СтрокаДата1;
СтрокаДата2 = СтруктураДат.СтрокаДата2;
ТаблицаРезультат.Очистить();
ПараметрыОтбора = СтрокаДата1 + "/" + СтрокаДата2 + "/" + ВидДокумента + "/" + ИННОрганизации + "/" + КППОрганизации;
Если ВыводитьСообщения Тогда
Сообщить("ПараметрыОтбора = " + ПараметрыОтбора);
КонецЕсли;
Если ПереключательБазы = 1 Тогда
Адрес = "/at_IToCORP/hs/documents/" + ПараметрыОтбора;
ИначеЕсли ПереключательБазы = 2 Тогда
Адрес = "/at_BPoAT_/hs/documents/" + ПараметрыОтбора;
КонецЕсли;
РезультатЗапросаHTTP = ВыполнитьЗапросHTTP("GET", Адрес, "", ИмяБазы);
Если РезультатЗапросаHTTP = Неопределено Тогда
Сообщить("Ошибка в HTTP запросе!");
Элементы.ТаблицаРезультатСуммаДокумента.ТекстПодвала = 0;
Элементы.ТаблицаРезультатСуммаДокументаЗдесь.ТекстПодвала = 0;
Элементы.ТаблицаРезультатСуммаОперацииЗдесь.ТекстПодвала = 0;
Элементы.ТаблицаРезультатОбщаяСуммаЗдесь.ТекстПодвала = 0;
Иначе
ОбработатьФайлJSON(РезультатЗапросаHTTP, ВидДокумента);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьФайлJSON(СтрокаТекста, ВидДокумента)
Дата1 = ПериодСверки.ДатаНачала;
Дата2 = ПериодСверки.ДатаОкончания;
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаТекста);
ДанныеJSON = ПрочитатьJSON(ЧтениеJSON, Истина);
МассивДанных = Новый Массив;
Для каждого стр Из ДанныеJSON Цикл
//Сообщить("стр.Ключ = " + стр.Ключ);
//Сообщить("стр.Значение = " + стр.Значение);
Для каждого Данные Из стр.Значение Цикл
//Сообщить(" Данные.Ключ = " + Данные.Ключ);
//Сообщить(" Данные.Значение = " + Данные.Значение);
ТекЗначение = Данные.Значение;
Если Данные.Ключ = "Номер" Тогда
Номер = ТекЗначение;
ИначеЕсли Данные.Ключ = "Дата" Тогда
Дата = ТекЗначение;
ИначеЕсли Данные.Ключ = "ИННКонтрагента" Тогда
ИННКонтрагента = ТекЗначение;
ИначеЕсли Данные.Ключ = "НаименованиеКонтрагента" Тогда
НаименованиеКонтрагента = ТекЗначение;
ИначеЕсли Данные.Ключ = "СуммаДокумента" Тогда
СуммаДокумента = ТекЗначение;
ИначеЕсли Данные.Ключ = "СуммаОперации" Тогда
СуммаОперации = ТекЗначение;
ИначеЕсли Данные.Ключ = "Проведен" Тогда
Проведен = ТекЗначение;
Иначе
КонецЕсли;
КонецЦикла;
Номер = Префикс + Сред(Номер, 3);
ЭтоОперация = Ложь;
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Номер", Номер);
СтруктураДанных.Вставить("Дата", Дата);
СтруктураДанных.Вставить("СуммаДокумента", СуммаДокумента);
СтруктураДанных.Вставить("Проведен", Проведен);
СтруктураДанных.Вставить("ИННКонтрагента", ИННКонтрагента);
СтруктураДанных.Вставить("НаименованиеКонтрагента", НаименованиеКонтрагента);
СтруктураДанных.Вставить("ВидДокумента", ВидДокумента);
СтруктураДанных.Вставить("ЭтоОперация", ЭтоОперация);
Если ТолькоПроведенныеДокументыВИсточнике и НЕ Проведен Тогда
Продолжить;
КонецЕсли;
МассивДанных.Добавить(СтруктураДанных);
КонецЦикла;
ЧтениеJSON.Закрыть();
Для каждого стр Из МассивДанных Цикл
Если ВидДокумента = "СписаниеСРасчетногоСчета" или ВидДокумента = "ПоступлениеТоваровУслуг" Тогда
ЭтоОперация = ПроверитьНаСовпадениеИНН(стр.ИННКонтрагента);
Если ЭтоОперация Тогда
стр.ЭтоОперация = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗаполнитьДокументыБазыНаСервере(МассивДанных, Дата1, Дата2, ВидДокумента);
УстановитьВидимостьКолонок(ВидДокумента);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДокументыБазыНаСервере(МассивДанных, Дата1, Дата2, ВидДокумента)
Массив = Новый Массив;
КС = Новый КвалификаторыСтроки(11);
Массив.Добавить(Тип("Строка"));
ОписаниеТиповСтрока11 = Новый ОписаниеТипов(Массив, , , ,КС);
Массив.Очистить();
КД = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
Массив.Добавить(Тип("Дата"));
ОписаниеТиповДата = Новый ОписаниеТипов(Массив, , ,КД);
Массив.Очистить();
КЧ = Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный);
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧисло15_2 = Новый ОписаниеТипов(Массив, , ,КЧ);
Массив.Очистить();
КС = Новый КвалификаторыСтроки(12);
Массив.Добавить(Тип("Строка"));
ОписаниеТиповСтрока12 = Новый ОписаниеТипов(Массив, , , ,КС);
Массив.Очистить();
КС = Новый КвалификаторыСтроки(35);
Массив.Добавить(Тип("Строка"));
ОписаниеТиповСтрока35 = Новый ОписаниеТипов(Массив, , , ,КС);
Массив.Очистить();
ОписаниеБулево = Новый ОписаниеТипов("Булево");
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номер", ОписаниеТиповСтрока11);
ТЗ.Колонки.Добавить("Дата", ОписаниеТиповДата);
ТЗ.Колонки.Добавить("СуммаДокумента", ОписаниеТиповЧисло15_2);
ТЗ.Колонки.Добавить("Проведен", ОписаниеБулево);
ТЗ.Колонки.Добавить("ИННКонтрагента", ОписаниеТиповСтрока12);
ТЗ.Колонки.Добавить("НаименованиеКонтрагента", ОписаниеТиповСтрока35);
ТЗ.Колонки.Добавить("ВидДокумента", ОписаниеТиповСтрока35);
ТЗ.Колонки.Добавить("ЭтоОперация", ОписаниеБулево);
Для каждого стр Из МассивДанных Цикл
//Сообщить("стр = " + стр);
НоваяСтрока = ТЗ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, стр);
КонецЦикла;
//Сообщить("ВидДокумента = " + ВидДокумента);
Если ВидДокумента = "ПоступлениеНаРасчетныйСчет" Тогда
Выборка = ДокументыБазыСервер.ПолучитьПоступленияНаРасчетныйСчет(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "СписаниеСРасчетногоСчета" Тогда
Выборка = ДокументыБазыСервер.ПолучитьСписанияСРасчетногоСчета(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "ПоступлениеТоваровУслуг" Тогда
Выборка = ДокументыБазыСервер.ПолучитьПоступленийТоваровУслуг(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "РеализацияТоваровУслуг" Тогда
Выборка = ДокументыБазыСервер.ПолучитьРеализацийТоваровУслуг(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "ПриходныйКассовыйОрдер" Тогда
Выборка = ДокументыБазыСервер.ПолучитьПриходныеКассовыеОрдера(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "ОперацияСБилетом" Тогда
Выборка = ДокументыБазыСервер.ПолучитьОперацияСБилетом(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "АвансовыйОтчет" Тогда
Выборка = ДокументыБазыСервер.ПолучитьАвансовыеОтчеты(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "ТребованиеНакладная" Тогда
Выборка = ДокументыБазыСервер.ПолучитьТребованииНакладные(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "ПоступлениеДопРасходов" Тогда
Выборка = ДокументыБазыСервер.ПолучитьПоступленийДопРасходов(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "ПередачаМатериаловВЭксплуатацию" Тогда
Выборка = ДокументыБазыСервер.ПолучитьПередачиМатериаловВЭксплуатацию(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "ОперацияБух" Тогда
Выборка = ДокументыБазыСервер.ПолучитьОперацииБух(ТЗ, Дата1, Дата2);
ИначеЕсли ВидДокумента = "СчетНаОплатуПокупателю" Тогда
Выборка = ДокументыБазыСервер.ПолучитьСчетаНаОплатуПокупателей(ТЗ, Дата1, Дата2);
Иначе
Возврат;
КонецЕсли;
МассивКонтрагентовНеНужноПерекидывать = Новый Массив;
МассивКонтрагентовНеНужноПерекидывать.Добавить("1655382341");
МассивКонтрагентовНеНужноПерекидывать.Добавить("1655420111");
К = 0;
Пока Выборка.Следующий() Цикл
Если ВидДокумента = "РеализацияТоваровУслуг" Тогда
Если Не МассивКонтрагентовНеНужноПерекидывать.Найти(Выборка.ИННКонтрагента) = Неопределено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
К = К + 1;
//Сообщить("К = " + К);
НоваяСтрока = ТаблицаРезультат.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.НомерСтроки = К;
НоваяСтрока.ВидДокументаВТаблице = Выборка.ВидДокумента;
НоваяСтрока.ОбщаяСуммаЗдесь = Выборка.СуммаДокументаЗдесь + Выборка.СуммаОперацииЗдесь;
НоваяСтрока.ДокументЗагруженВерно = (ЗначениеЗаполнено(Выборка.ДокументЗдесь) и Выборка.СуммаДокумента = Выборка.СуммаДокументаЗдесь)
или (ЗначениеЗаполнено(Выборка.ОперацияЗдесь) и Выборка.СуммаДокумента = Выборка.СуммаОперацииЗдесь);
Если (ВидДокумента = "РеализацияТоваровУслуг" ИЛИ ВидДокумента = "ПоступлениеНаРасчетныйСчет") и ЗначениеЗаполнено(Выборка.ДокументЗдесь) Тогда
НоваяСтрока.НомерСчетНаОплату = Выборка.НомерСчетНаОплату;
Иначе
НоваяСтрока.НомерСчетНаОплату = "";
КонецЕсли;
Если СокрЛП(НоваяСтрока.Номер) = СокрЛП(НоваяСтрока.НомерСчетНаОплату) Тогда
НоваяСтрока.РазницаНомеров = Истина;
Иначе
НоваяСтрока.РазницаНомеров = Ложь;
КонецЕсли;
Если ВыводитьСообщения Тогда
Сообщить("НомерСтроки = " + К);
Сообщить("Номер = " + Выборка.Номер);
Сообщить("НомерЗдесь = " + Выборка.НомерЗдесь);
Сообщить("Дата = " + Выборка.Дата);
Сообщить("ДатаЗдесь = " + Выборка.ДатаЗдесь);
Сообщить("СуммаДокумента = " + Выборка.СуммаДокумента);
//Сообщить("СуммаОперации = " + СтрокаМассива.СуммаОперации);
Сообщить("Проведен = " + Выборка.Проведен);
//Сообщить("ОригиналПолучен = " + ОригиналПолучен);
//Сообщить("СтатусДокумента = " + СтатусДокумента);
Если Не Выборка.ИННКонтрагента = "" Тогда
Сообщить("ИННКонтрагента = " + Выборка.ИННКонтрагента);
КонецЕсли;
Если Не Выборка.НаименованиеКонтрагента = "" Тогда
Сообщить("НаименованиеКонтрагента = " + Выборка.НаименованиеКонтрагента);
КонецЕсли;
Если Выборка.ЭтоОперация Тогда
Сообщить("ЭтоОперация = " + Выборка.ЭтоОперация);
КонецЕсли;
Сообщить("=============================");
КонецЕсли;
КонецЦикла;
Если ТаблицаРезультат.Количество() > 0 Тогда
Элементы.ТаблицаРезультатСуммаДокумента.ТекстПодвала = ТаблицаРезультат.Итог("СуммаДокумента");
Элементы.ТаблицаРезультатСуммаДокументаЗдесь.ТекстПодвала = ТаблицаРезультат.Итог("СуммаДокументаЗдесь");
Элементы.ТаблицаРезультатСуммаОперацииЗдесь.ТекстПодвала = ТаблицаРезультат.Итог("СуммаОперацииЗдесь");
Элементы.ТаблицаРезультатОбщаяСуммаЗдесь.ТекстПодвала = ТаблицаРезультат.Итог("ОбщаяСуммаЗдесь");
Иначе
Элементы.ТаблицаРезультатСуммаДокумента.ТекстПодвала = 0;
Элементы.ТаблицаРезультатСуммаДокументаЗдесь.ТекстПодвала = 0;
Элементы.ТаблицаРезультатСуммаОперацииЗдесь.ТекстПодвала = 0;
Элементы.ТаблицаРезультатОбщаяСуммаЗдесь.ТекстПодвала = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПереключательБазыПриИзменении(Элемент)
ТаблицаРезультат.Очистить();
Если ПереключательБазы = 1 Тогда
ИмяБазы = "ИТ";
Префикс = "ИТ";
ИННОрганизации = "7701881977";
КППОрганизации = "770101001";
ИмяРоли = "Расш1_РазрешитьЗагрузкуДокументовПоИТ";
ИначеЕсли ПереключательБазы = 2 Тогда
ИмяБазы = "АТ";
Префикс = "АТ";
ИННОрганизации = "7702413379";
КППОрганизации = "770101001";
ИмяРоли = "Расш1_РазрешитьЗагрузкуДокументовПоАТ";
КонецЕсли;
//Сообщить("ИмяБазы = " + ИмяБазы);
//Сообщить("Префикс = " + Префикс);
//Сообщить("ИННОрганизации = " + ИННОрганизации);
//Сообщить("КППОрганизации = " + КППОрганизации);
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаРезультатЗагрузитьПриИзменении(Элемент)
КоличествоФлажков = 0;
Для каждого стр Из ТаблицаРезультат Цикл
Если стр.Загрузить Тогда
КоличествоФлажков = КоличествоФлажков + 1;
КонецЕсли;
КонецЦикла;
Если КоличествоФлажков > 6 Тогда
ТекущаяСтрока = Элементы.ТаблицаРезультат.ТекущиеДанные.НомерСтроки;
ДопПараметр = Новый Структура("ТекущаяСтрока", (ТекущаяСтрока - 1));
Описание = Новый ОписаниеОповещения("ТаблицаРезультатЗагрузитьПриИзмененииЗавершение", ЭтаФорма, ДопПараметр);
ПоказатьПредупреждение(Описание, "Выберите флажков не больше 6 шт.");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаРезультатЗагрузитьПриИзмененииЗавершение(ДопПараметр) Экспорт
ТекущаяСтрока = ДопПараметр.ТекущаяСтрока;
ТаблицаРезультат[ТекущаяСтрока].Загрузить = Ложь;
КонецПроцедуры
&НаКлиенте
Функция ПроверитьНаСовпадениеИНН(ИННКонтрагента)
МассивКонтрагентов = Новый Массив;
МассивКонтрагентов.Добавить("7");
МассивКонтрагентов.Добавить("0");
Если МассивКонтрагентов.Найти(ИННКонтрагента) = Неопределено Тогда
ЭтоОперация = Ложь;
Иначе
ЭтоОперация = Истина;
КонецЕсли;
Возврат ЭтоОперация;
КонецФункции
#КонецОбласти
#Область ЗагрузкаДокументов
&НаКлиенте
Процедура ОрганизоватьОтборПоНомеру(СтрокаМассива, МассивНомеров, ТекстДок)
КоличествоНомеров = МассивНомеров.Количество();
ОтборПоНомеру = "";
Разделитель = "#";
К = 0;
Для каждого ТекНомер Из МассивНомеров Цикл
К = К + 1;
ОтборПоНомеру = ОтборПоНомеру + """"+ТекНомер+"""";
Если К < КоличествоНомеров Тогда
ОтборПоНомеру = ОтборПоНомеру + Разделитель;
КонецЕсли;
КонецЦикла;
ОтборПоНомеру = "Если Объект.Номер = " + СтрЗаменить(ОтборПоНомеру, "#", " или Объект.Номер = ") + " Тогда Иначе Отказ = Истина; КонецЕсли;";
ВидДокументаВТаблице = СтрокаМассива.ВидДокументаВТаблице;
ТекВидДокумента = СтрокаМассива.ТекВидДокумента;
//Сообщить("ВидДокументаВТаблице = " + ВидДокументаВТаблице + " ТекВидДокумента = " + ТекВидДокумента);
Если ВидДокументаВТаблице = "СписаниеСРасчетногоСчета" Тогда
Если ТекВидДокумента = "СписаниеСРасчетногоСчета" или ТекВидДокумента = "СписаниеСРасчетногоСчета_ОперацияБух" Тогда
СтрокаЗамены = "<ПередВыгрузкойОбъекта>" + ОтборПоНомеру + "</ПередВыгрузкойОбъекта>";
Иначе
СтрокаЗамены = "<ПередВыгрузкойОбъекта>//#55#</ПередВыгрузкойОбъекта>";
КонецЕсли;
ИначеЕсли ВидДокументаВТаблице = "ПоступлениеТоваровУслуг" Тогда
Если ТекВидДокумента = "ПоступлениеТоваровУслуг" или ТекВидДокумента = "ПоступлениеТоваровУслуг_Оборудование" или ТекВидДокумента = "ПоступлениеТоваровУслуг_ОперацияБухОС" или ТекВидДокумента = "ПоступлениеТоваровУслуг_ОперацияБухРБП" Тогда
СтрокаЗамены = "<ПередВыгрузкойОбъекта>" + ОтборПоНомеру + "</ПередВыгрузкойОбъекта>";
Иначе
СтрокаЗамены = "<ПередВыгрузкойОбъекта>//#55#</ПередВыгрузкойОбъекта>";
КонецЕсли;
Иначе
Если ВидДокументаВТаблице = ТекВидДокумента Тогда
СтрокаЗамены = "<ПередВыгрузкойОбъекта>" + ОтборПоНомеру + "</ПередВыгрузкойОбъекта>";
Иначе
СтрокаЗамены = "<ПередВыгрузкойОбъекта>//#55#</ПередВыгрузкойОбъекта>";
КонецЕсли;
КонецЕсли;
ТекстДок.ЗаменитьСтроку(СтрокаМассива.Индекс, СтрокаЗамены);
КонецПроцедуры
&НаКлиенте
Процедура КорректировкаПравилаВыгрузкиДанных(СтрокаМассива, ТекстДок)
ИндексПризнакВыгрузки = СтрокаМассива.Индекс - 7;
ВидДокументаВТаблице = СтрокаМассива.ВидДокументаВТаблице;
ТекВидДокумента = СтрокаМассива.ТекВидДокумента;
Если ВидДокументаВТаблице = "СписаниеСРасчетногоСчета" Тогда
Если ТекВидДокумента = "СписаниеСРасчетногоСчета" или ТекВидДокумента = "СписаниеСРасчетногоСчета_ОперацияБух" Тогда
ПризнакВыгрузки = "<Правило Отключить=" + """false""" + ">";
Иначе
ПризнакВыгрузки = "<Правило Отключить=" + """true""" + ">";
КонецЕсли;
ИначеЕсли ВидДокументаВТаблице = "ПоступлениеТоваровУслуг" Тогда
Если ТекВидДокумента = "ПоступлениеТоваровУслуг" или ТекВидДокумента = "ПоступлениеТоваровУслуг_Оборудование" или ТекВидДокумента = "ПоступлениеТоваровУслуг_ОперацияБухОС" или ТекВидДокумента = "ПоступлениеТоваровУслуг_ОперацияБухРБП" Тогда
ПризнакВыгрузки = "<Правило Отключить=" + """false""" + ">";
Иначе
ПризнакВыгрузки = "<Правило Отключить=" + """true""" + ">";
КонецЕсли;
Иначе
Если ВидДокументаВТаблице = ТекВидДокумента Тогда
ПризнакВыгрузки = "<Правило Отключить=" + """false""" + ">";
Иначе
ПризнакВыгрузки = "<Правило Отключить=" + """true""" + ">";
КонецЕсли;
КонецЕсли;
ТекстДок.ЗаменитьСтроку(ИндексПризнакВыгрузки, ПризнакВыгрузки);
//Сообщить("Корректировали");
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьВыбранныйДокумент(Команда)
ОчиститьСообщения();
МассивНомеров = Новый Массив;
Для каждого стр Из ТаблицаРезультат Цикл
Если стр.Загрузить Тогда
ВидДокументаВТаблице = стр.ВидДокументаВТаблице;
Если ПереключательБазы = 1 Тогда
ТекНомер = "ИТ" + Сред(стр.Номер, 3);
Иначе
ТекНомер = "00" + Сред(стр.Номер, 3);
КонецЕсли;
МассивНомеров.Добавить(ТекНомер);
КонецЕсли;
КонецЦикла;
Если МассивНомеров.Количество() = 0 Тогда
ПоказатьПредупреждение(, "Выберите нужный документ!");
Возврат;
КонецЕсли;
Если Элементы.ЗагрузитьВыбранныйДокумент.Заголовок = "КНОПКА НАЖАТА!" Тогда
ПоказатьПредупреждение(, "Загрузка прошла, обновите список!");
Возврат;
КонецЕсли;
Описание = Новый ОписаниеОповещения("ЗагрузитьВыбранныйДокументЗавершение", ЭтаФорма);
ВыполнитьОбработкуОповещения(Описание, КодВозвратаДиалога.Да);
Сообщить("Кнопка нажата, ждите идет соединение с источником");
МассивСтрок = Новый Массив;
Если ИмяБазы = "АТ" Тогда
ИмяФайлаОбмена = ИмяФайлаОбменаАТ;
ИмяФайлаПравилОбмена = ИмяФайлаПравилОбменаАТ;
ИначеЕсли ИмяБазы = "ИТ" Тогда
ИмяФайлаОбмена = ИмяФайлаОбменаИТ;
ИмяФайлаПравилОбмена = ИмяФайлаПравилОбменаИТ;
КонецЕсли;
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.Прочитать(ИмяФайлаПравилОбмена);
ИндексПервойСтроки = 0;
НашлиПервуюСтроку = Ложь;
ИндексПоследнейСтроки = 0;
НашлиПоследнююСтроку = Ложь;
СтрокаПоискаОригинал = "<ПередВыгрузкойОбъекта>//#55#</ПередВыгрузкойОбъекта>";
СтрокаПоиска = "<ПередВыгрузкойОбъекта>";
МассивИндексовНайденныхСтрокПередВыгрузкойОбъекта = Новый Массив;
Для Индекс = 1 По ТекстДок.КоличествоСтрок() Цикл
СтрокаXML = СокрЛП(Строка(ТекстДок.ПолучитьСтроку(Индекс)));
Если СтрокаXML = "<ПравилаВыгрузкиДанных>" Тогда
// Сообщить("СтрокаXML = " + СтрокаXML);
ИндексПервойСтроки = Индекс;
НашлиПервуюСтроку = Истина;
КонецЕсли;
Если СтрокаXML = "</ПравилаВыгрузкиДанных>" Тогда
// Сообщить("СтрокаXML = " + СтрокаXML);
ИндексПоследнейСтроки = Индекс;
НашлиПоследнююСтроку = Истина;
КонецЕсли;
Если НашлиПервуюСтроку и Индекс >= ИндексПервойСтроки Тогда //42268
ТекСтрокаПоиска = Сред(СтрокаXML, 1, 23);
Если ТекСтрокаПоиска = СтрокаПоиска Тогда
ТекСтрокаКода = СокрЛП(Строка(ТекстДок.ПолучитьСтроку(Индекс - 6)));
ДлинаСтроки = СтрДлина(ТекСтрокаКода);
ТекВидДокумента = Сред(ТекСтрокаКода, 6, ДлинаСтроки - 11);
СтруктураПередВыгрузкойОбъекта = Новый Структура("Индекс, ВидДокументаВТаблице, ТекВидДокумента", Индекс, ВидДокументаВТаблице, ТекВидДокумента);
МассивИндексовНайденныхСтрокПередВыгрузкойОбъекта.Добавить(СтруктураПередВыгрузкойОбъекта);
//Сообщить("ВидДокументаВТаблице = " + ВидДокументаВТаблице);
//Сообщить("ТекВидДокумента = " + ТекВидДокумента);
КонецЕсли;
Если НашлиПоследнююСтроку и Индекс >= ИндексПоследнейСтроки Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для каждого СтрокаМассива Из МассивИндексовНайденныхСтрокПередВыгрузкойОбъекта Цикл
ОрганизоватьОтборПоНомеру(СтрокаМассива, МассивНомеров, ТекстДок);
КорректировкаПравилаВыгрузкиДанных(СтрокаМассива, ТекстДок);
КонецЦикла;
ТекстДок.Записать(ИмяФайлаПравилОбмена);
ЗапуститьОбработкуCOM(1);
Сообщить("Конец обработки!");
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьВыбранныйДокументЗавершение(Ответ, ДопПараметр) Экспорт
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Элементы.ЗагрузитьВыбранныйДокумент.Заголовок = "КНОПКА НАЖАТА!";
Элементы.ЗагрузитьВыбранныйДокумент.ЦветФона = WebЦвета.Аквамарин;
ОбновитьИнтерфейс();
КонецПроцедуры
&НаКлиенте
Функция ПроверитьПериодСверки()
ОчиститьСообщения();
Дата1 = ПериодСверки.ДатаНачала;
Дата2 = ПериодСверки.ДатаОкончания;
Если Не ЗначениеЗаполнено(Дата1) или Не ЗначениеЗаполнено(Дата2) Тогда
Сообщить("Не выбран период серки!");
Возврат 0;
КонецЕсли;
СтрокаДата1 = Формат(Дата1, "ДФ=yyyyMMdd");
СтрокаДата2 = Формат(Дата2, "ДФ=yyyyMMddHHmmss");
СтруктураДат = Новый Структура("СтрокаДата1, СтрокаДата2", СтрокаДата1, СтрокаДата2);
Возврат СтруктураДат;
КонецФункции
&НаКлиенте
Процедура ЗапуститьОбработкуCOM(Команда)
Сообщить("Источник = " + ИмяБазы);
Если ПереключательБазы = 1 Тогда
НаименованиеСервера = НаименованиеСервераИТ;
НаименованиеБазы = НаименованиеБазыИТ;
Пользователь = ПользовательИТ;
Пароль = ПарольИТ;
ИначеЕсли ПереключательБазы = 2 Тогда
НаименованиеСервера = НаименованиеСервераАТ;
НаименованиеБазы = НаименованиеБазыАТ;
Пользователь = ПользовательАТ;
Пароль = ПарольАТ;
Иначе
Возврат;
КонецЕсли;
ПараметрыПодключения = "Srvr = """+НаименованиеСервера+"""; Ref = """+НаименованиеБазы+"""; Usr = """+Пользователь+"""; Pwd = """+Пароль+""";";
V83 = Новый COMОбъект("V83.COMConnector");
Попытка
Соединение = V83.Connect(ПараметрыПодключения);
Сообщить("Подключениепо COM сервису выполнено");
Исключение
Сообщить("Ошибка подключения по COM сервису!");
Соединение = Неопределено;
Возврат;
КонецПопытки;
ОбработкаТам = Соединение.Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаТам.РежимОбмена = "Выгрузка";
ОбработкаТам.ДатаНачала = ПериодСверки.ДатаНачала;
ОбработкаТам.ДатаОкончания = ПериодСверки.ДатаОкончания;
ОбработкаТам.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбмена;
ОбработкаТам.ИмяФайлаОбмена = ИмяФайлаОбмена;
ОбработкаТам.ЗагрузитьПравилаОбмена();
Сообщить("Период сверки с " + ПериодСверки.ДатаНачала + " по " + ПериодСверки.ДатаОкончания);
ОбработкаТам.ВыполнитьВыгрузку();
АдресВременногоХранилища = "";
ПоместитьФайл(АдресВременногоХранилища, ИмяФайлаОбмена,, Ложь, ЭтаФорма.УникальныйИдентификатор); // помещаем наш файл во временное хранилище (для его передачи на сервер)
ЗагрузкаЗдесь(АдресВременногоХранилища);
Соединение = Неопределено;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗагрузкаЗдесь(АдресВременногоХранилища)
ДД = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); // вытаскиваем на сервере из временного хранилища как двоичные данные
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); // получаем имя временного файла на сервере
ДД.Записать(ИмяВременногоФайла);
ОбработкаЗдесь = Обработки.УниверсальныйОбменДаннымиXML.Создать();
// ОбработкаЗдесь.ИмяФайлаОбмена = ИмяФайлаОбмена;
ОбработкаЗдесь.ИмяФайлаОбмена = ИмяВременногоФайла;
ОбработкаЗдесь.РежимОбмена = "Загрузка";
ОбработкаЗдесь.ОптимизированнаяЗаписьОбъектов = Истина;
ОбработкаЗдесь.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
ОбработкаЗдесь.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
ОбработкаЗдесь.ЗагружатьДанныеВРежимеОбмена = Истина;
ОбработкаЗдесь.ВыполнитьЗагрузку();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСписок(Команда)
ЕстьФлажки = Ложь;
Для каждого стр Из ТаблицаРезультат Цикл
Если Не стр.Загрузить Тогда
Продолжить;
КонецЕсли;
ЕстьФлажки = Истина;
КонецЦикла;
Если ЕстьФлажки Тогда
ПолучитьДокументыHTTP(ВыбранныйВидДокумента);
КонецЕсли;
Элементы.ЗагрузитьВыбранныйДокумент.Заголовок = "";
Элементы.ЗагрузитьВыбранныйДокумент.ЦветФона = Новый Цвет(-1, -1, -1);
КонецПроцедуры
#КонецОбласти
Специалист компании ООО "Кодерлайн",
Айзатуллов Марс
Добавить комментарий