Загрузка данных
Функция Поступления(Запрос) Экспорт
Организация = Запрос.ПараметрыURL.Получить("Организация"); // Уникальный идентификатор организации в базе источнике
ИННОрганизации = Запрос.ПараметрыURL.Получить("ИНН");
ДатаНачала = Запрос.ПараметрыURL.Получить("ДатаНачала");
ДатаОкончания = Запрос.ПараметрыURL.Получить("ДатаОкончания");
Если Организация = Неопределено Или ДатаНачала = Неопределено Или ДатаОкончания = Неопределено Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Система не получила все необходимые параметры");
Иначе
ОтветДляБП = ПодготовитьФайлПоступленийДляОтправки(Организация, ИННОрганизации, Дата(ДатаНачала), Дата(ДатаОкончания));
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ОтветДляБП);
Ответ.Заголовки["Content-Type"] = "text/plain";
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция ПодготовитьФайлПоступленийДляОтправки(Организация, ИНН, ДатаНачала, ДатаОкончания)
Организация = Справочники.Фирмы.НайтиПоРеквизиту("ИНН", ИНН);
Если Не ЗначениеЗаполнено(Организация) Тогда
Возврат Неопределено;
КонецЕсли;
ДанныеОрганизации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Организация, "ВидОрганизации, КонтрагентДляДокументов");
ПапкаИсключение = Справочники.Номенклатура.НайтиПоКоду("ZT0003466"); // Рекламная продукция
Если ДанныеОрганизации.ВидОрганизации = Перечисления.ВидыОрганизаций.ЮЛ Тогда
ДанныеПоступлений = ДанныеПоступленийЮЛ(Организация, ДанныеОрганизации.КонтрагентДляДокументов, ДатаНачала, ДатаОкончания, ПапкаИсключение);
ДанныеДляОтправки = ОбработататьПоступления(ДанныеПоступлений);
КонецЕсли;
СтруктураОтвета = Новый Структура ("result", ДанныеДляОтправки);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
Результат = ЗаписьJSON.Закрыть();
Возврат Результат;
КонецФункции
Функция ОбработататьПоступления(ДанныеПоступлений)
Результат = Новый Массив;
ДанныеДокументов = Новый Соответствие;
Для Каждого Строка Из ДанныеПоступлений Цикл
КлючДокумента = Строка.Ссылка;
ЕстьДокумент = ДанныеДокументов.Получить(КлючДокумента);
Если ЕстьДокумент = Неопределено Тогда
ДокСтруктура = Новый Структура;
ДокСтруктура.Вставить("Документ", Строка(Строка.Ссылка));
ДокСтруктура.Вставить("Склад",Строка(Строка.Склад));
ДокСтруктура.Вставить("Продавец", Строка(Строка.Продавец));
ДокСтруктура.Вставить("Покупатель", Строка(Строка.Покупатель));
ДокСтруктура.Вставить("ФинНомер", Строка.ФинНомер);
ДокСтруктура.Вставить("ИННПродавца", Строка.ИННПродавца);
ДокСтруктура.Вставить("КПППродавца", Строка.КПППродавца);
ДокСтруктура.Вставить("НаименованиеПродавца", Строка.НаименованиеПродавца);
ДокСтруктура.Вставить("ДатаДокумента", Строка(Строка.ДатаДокумента));
ДокСтруктура.Вставить("ФинДата", Строка(Строка.ФинДата));
ДокСтруктура.Вставить("Товары", Новый Массив);
ДокСтруктура.Вставить("НомерДокумента", Строка(Строка.НомерДокумента));
ДанныеДокументов.Вставить(КлючДокумента, ДокСтруктура);
Результат.Добавить(ДокСтруктура);
КонецЕсли;
СтрокаТовара = Новый Структура;
СтрокаТовара.Вставить("Номенклатура", Строка(Строка.Номенклатура));
СтрокаТовара.Вставить("Характеристика", Строка(Строка.Характеристика));
СтрокаТовара.Вставить("Количество", Строка.Количество);
СтрокаТовара.Вставить("Цена", Строка.Цена);
СтрокаТовара.Вставить("Сумма", Строка.Сумма);
СтрокаТовара.Вставить("ГТД", Строка(Строка.ГТД));
СтрокаТовара.Вставить("НоменклатураПоставщика", Строка(Строка.НоменклатураПоставщика));
СтрокаТовара.Вставить("СтавкаНДС", Строка(Строка.СтавкаНДС));
СтрокаТовара.Вставить("СуммаНДС", Строка.СуммаНДС);
СтрокаТовара.Вставить("ГТДСтрана", Строка(Строка.ГТДСтрана));
СтрокаТовара.Вставить("КаталожныйНомерНоменклатуры", Строка(Строка.КаталожныйНомерНоменклатуры));
СтрокаТовара.Вставить("КаталожныйНомерХарактеристики", Строка(Строка.КаталожныйНомерХарактеристики));
ДанныеДокументов[КлючДокумента].Товары.Добавить(СтрокаТовара);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ДанныеПоступленийЮЛ(Организация, Контрагент, ДатаНачала, ДатаОкончания, ПапкаИсключение);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладная.Ссылка,
| РасходнаяНакладная.Склад,
| РасходнаяНакладная.Фирма,
| РасходнаяНакладная.Покупатель,
| РасходнаяНакладная.ФинНомер,
| РасходнаяНакладная.Фирма.ИНН,
| РасходнаяНакладная.Фирма.КПП,
| РасходнаяНакладная.Фирма.НаименованиеПолное,
| РасходнаяНакладная.Дата,
| РасходнаяНакладная.ФинДата
|ПОМЕСТИТЬ ВТ_Расходы
|ИЗ
| Документ.РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| РасходнаяНакладная.Проведен
| И РасходнаяНакладная.Покупатель = &Контрагент
| И РасходнаяНакладная.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И РасходнаяНакладная.ФинНомер <> """"
| И РасходнаяНакладная.ФинДата <> ДАТАВРЕМЯ(1, 1, 1)
| И РасходнаяНакладная.ФинДокумент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПоступлениеТМЦ.Ссылка,
| ПоступлениеТМЦ.Склад,
| ПоступлениеТМЦ.Фирма,
| ПоступлениеТМЦ.ВалютаДокумента,
| ПоступлениеТМЦ.Поставщик,
| ПоступлениеТМЦ.ФинНомер,
| ПоступлениеТМЦ.Поставщик.ИНН,
| ПоступлениеТМЦ.Поставщик.КПП,
| ПоступлениеТМЦ.Поставщик.НаименованиеПолное,
| ПоступлениеТМЦ.Дата,
| ПоступлениеТМЦ.ФинДата
|ПОМЕСТИТЬ ВТ_Поступления
|ИЗ
| Документ.ПоступлениеТМЦ КАК ПоступлениеТМЦ
|ГДЕ
| ПоступлениеТМЦ.Проведен
| И ПоступлениеТМЦ.Фирма = &Организация
| И ПоступлениеТМЦ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасходнаяНакладнаяНоменклатура.Номенклатура,
| РасходнаяНакладнаяНоменклатура.Характеристика,
| РасходнаяНакладнаяНоменклатура.Количество,
| РасходнаяНакладнаяНоменклатура.Цена,
| РасходнаяНакладнаяНоменклатура.Сумма,
| РасходнаяНакладнаяНоменклатура.ГТД,
| РасходнаяНакладнаяНоменклатура.НоменклатураПоставщика,
| РасходнаяНакладнаяНоменклатура.СтавкаНДС,
| РасходнаяНакладнаяНоменклатура.СуммаНДС,
| ВТ_Расходы.Ссылка,
| ВТ_Расходы.Склад,
| ВТ_Расходы.Фирма КАК Продавец,
| ВТ_Расходы.Покупатель,
| ВТ_Расходы.ФинНомер,
| ВТ_Расходы.ФирмаИНН КАК ИННПродавца,
| ВТ_Расходы.ФирмаКПП КАК КПППродавца,
| ВТ_Расходы.ФирмаНаименованиеПолное КАК НаименованиеПродавца,
| РасходнаяНакладнаяНоменклатура.ГТД.Страна КАК ГТДСтрана,
| ВТ_Расходы.Дата КАК ДатаДокумента,
| ВТ_Расходы.ФинДата КАК ФинДата,
| РасходнаяНакладнаяНоменклатура.Номенклатура.КаталожныйНомер КАК КаталожныйНомерНоменклатуры,
| РасходнаяНакладнаяНоменклатура.Характеристика.КаталожныйНомер КАК КаталожныйНомерХарактеристики,
| """" КАК НомерДокумента
|ИЗ
| Документ.РасходнаяНакладная.Номенклатура КАК РасходнаяНакладнаяНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Расходы КАК ВТ_Расходы
| ПО РасходнаяНакладнаяНоменклатура.Ссылка = ВТ_Расходы.Ссылка
|ГДЕ
| НЕ РасходнаяНакладнаяНоменклатура.Номенклатура В ИЕРАРХИИ (&ПапкаИсключение)
| И РасходнаяНакладнаяНоменклатура.Ссылка В
| (ВЫБРАТЬ
| ВТ_Расходы.Ссылка
| ИЗ
| ВТ_Расходы КАК ВТ_Расходы)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПоступлениеТМЦНоменклатура.Номенклатура,
| ПоступлениеТМЦНоменклатура.Характеристика,
| ПоступлениеТМЦНоменклатура.Количество,
| ПоступлениеТМЦНоменклатура.Цена,
| ПоступлениеТМЦНоменклатура.Сумма,
| ПоступлениеТМЦНоменклатура.ГТД,
| ПоступлениеТМЦНоменклатура.НоменклатураПоставщика,
| ПоступлениеТМЦНоменклатура.СтавкаНДС,
| ПоступлениеТМЦНоменклатура.СуммаНДС,
| ВТ_Поступления.Ссылка,
| ВТ_Поступления.Склад,
| ВТ_Поступления.Поставщик,
| ВТ_Поступления.Фирма,
| ВТ_Поступления.ФинНомер,
| ВТ_Поступления.ПоставщикИНН,
| ВТ_Поступления.ПоставщикКПП,
| ВТ_Поступления.ПоставщикНаименованиеПолное,
| ПоступлениеТМЦНоменклатура.ГТД.Страна,
| ВТ_Поступления.Дата,
| ВТ_Поступления.ФинДата,
| ПоступлениеТМЦНоменклатура.Номенклатура.КаталожныйНомер,
| ПоступлениеТМЦНоменклатура.Характеристика.КаталожныйНомер,
| ВТ_Поступления.ФинНомер
|ИЗ
| Документ.ПоступлениеТМЦ.Номенклатура КАК ПоступлениеТМЦНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Поступления КАК ВТ_Поступления
| ПО ПоступлениеТМЦНоменклатура.Ссылка = ВТ_Поступления.Ссылка
|ГДЕ
| НЕ ПоступлениеТМЦНоменклатура.Номенклатура В ИЕРАРХИИ (&ПапкаИсключение)
| И ПоступлениеТМЦНоменклатура.Ссылка В
| (ВЫБРАТЬ
| ВТ_Поступления.Ссылка
| ИЗ
| ВТ_Поступления КАК ВТ_Поступления)";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ПапкаИсключение", ПапкаИсключение);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса;
КонецФункции
Функция Реализации(Запрос) Экспорт
ИдентификаторОрганизацииБП = Запрос.ПараметрыURL.Получить("Организация"); // Уникальный идентификатор организации в базе источнике
ИННОрганизации = Запрос.ПараметрыURL.Получить("ИНН");
ДатаЗагрузки = Запрос.ПараметрыURL.Получить("ДатаЗагрузки");
Если ИдентификаторОрганизацииБП = Неопределено Или ДатаЗагрузки = Неопределено Или ИННОрганизации = Неопределено Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Система не получила все необходимые параметры");
Иначе
ОтветДляБП = ПодготовитьФайлРеализацийДляОтправки(ИдентификаторОрганизацииБП, ИННОрганизации, ДатаЗагрузки);
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ОтветДляБП);
Ответ.Заголовки["Content-Type"] = "text/plain";
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция ПодготовитьФайлРеализацийДляОтправки(ИдентификаторОрганизацииБП, ИННОрганизации, ДатаЗагрузки)
Организация = Справочники.Фирмы.НайтиПоРеквизиту("ИНН", ИННОрганизации);
Если Не ЗначениеЗаполнено(Организация) Тогда
Возврат Неопределено;
КонецЕсли;
ДанныеРеализаций = ДанныеРеализацийМаркированныхТоваров(Организация, Дата(ДатаЗагрузки), ИдентификаторОрганизацииБП);
ДанныеДляОтправки = ОбработататьРеализации(ДанныеРеализаций);
СтруктураОтвета = Новый Структура ("result", ДанныеДляОтправки);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
Результат = ЗаписьJSON.Закрыть();
Возврат Результат;
КонецФункции
Функция ОбработататьРеализации(ДанныеРеализаций)
Результат = Новый Массив;
ДанныеДокументов = Новый Соответствие;
Для Каждого Строка Из ДанныеРеализаций Цикл
КлючДок = Строка.ФинНомер;
ЕстьДокумент = ДанныеДокументов.Получить(КлючДок);
Если ЕстьДокумент = Неопределено Тогда
ДокСтруктура = Новый Структура;
ДокСтруктура.Вставить("Документ", Строка(Строка.Ссылка));
ДокСтруктура.Вставить("Организация",Строка(Строка.Организация));
ДокСтруктура.Вставить("Покупатель", Строка(Строка.Покупатель));
ДокСтруктура.Вставить("ФинНомер", Строка.ФинНомер);
ДокСтруктура.Вставить("ФинДата", Строка(Строка.ФинДата));
ДокСтруктура.Вставить("ИННПокупателя", Строка.ИННПокупателя);
ДокСтруктура.Вставить("КПППокупателя", Строка.КПППокупателя);
ДокСтруктура.Вставить("Город", Строка.Город);
ДокСтруктура.Вставить("Товары", Новый Массив);
ДокСтруктура.Вставить("СуммаДокумента", Строка.СуммаДокумента);
ДанныеДокументов.Вставить(КлючДок, ДокСтруктура);
Результат.Добавить(ДокСтруктура);
КонецЕсли;
СтрокаТовара = Новый Структура;
СтрокаТовара.Вставить("Номенклатура", Строка(Строка.Номенклатура));
СтрокаТовара.Вставить("Характеристика", Строка(Строка.Характеристика));
СтрокаТовара.Вставить("Количество", Строка.Количество);
СтрокаТовара.Вставить("Цена", Строка.Цена);
СтрокаТовара.Вставить("Сумма", Строка.Сумма);
СтрокаТовара.Вставить("СуммаНДС", Строка.СуммаНДС);
СтрокаТовара.Вставить("ГТД", Строка.ГТД);
СтрокаТовара.Вставить("НоменклатураПоставщика", Строка.НоменклатураПоставщика);
СтрокаТовара.Вставить("СтавкаНДС", Строка.СтавкаНДС);
СтрокаТовара.Вставить("Бренд", Строка(Строка.Бренд));
СтрокаТовара.Вставить("КаталожныйНомерХарактеристики", Строка.КаталожныйНомер);
СтрокаТовара.Вставить("КаталожныйНомерХарактеристикиСокращенный", Строка.КаталожныйНомер_Сокращенный);
СтрокаТовара.Вставить("КаталожныйНомерНоменклатуры", Строка.КаталожныйНомерНоменклатуры);
СтрокаТовара.Вставить("АльтернативныеКаталожныеНомераНоменклатуры", Строка.АльтернативныйКаталожныйНомер);
СтрокаТовара.Вставить("КодМаркировки", Строка.КодМаркировки);
ДанныеДокументов[КлючДок].Товары.Добавить(СтрокаТовара);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ДанныеРеализацийМаркированныхТоваров(Организация, ДатаЗагрузки, ИдентификаторОрганизацииБП)
Статус = Перечисления.СтатусыОбменаБП.Получен;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладная.Ссылка
|ПОМЕСТИТЬ ВТ_РеализацииЗаДень
|ИЗ
| Документ.РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| РасходнаяНакладная.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
| И РасходнаяНакладная.МаркированныйТовар
| И РасходнаяНакладная.Проведен
| И РасходнаяНакладная.Фирма = &Организация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВыгруженныеДокументыБП.Документ
|ПОМЕСТИТЬ ВТ_ВыгруженныеВБП
|ИЗ
| РегистрСведений.ВыгруженныеДокументыБП КАК ВыгруженныеДокументыБП
|ГДЕ
| ВыгруженныеДокументыБП.Статус = &Статус
| И ВыгруженныеДокументыБП.ИдентификаторОрганизацииБП = &ИдентификаторОрганизацииБП
| И ВыгруженныеДокументыБП.ДатаВыгрузки <> ДАТАВРЕМЯ(1, 1, 1)
| И ВыгруженныеДокументыБП.Документ ССЫЛКА Документ.РасходнаяНакладная
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_РеализацииЗаДень.Ссылка
|ПОМЕСТИТЬ ВТ_НевыгруженныеДокументы
|ИЗ
| ВТ_РеализацииЗаДень КАК ВТ_РеализацииЗаДень
|ГДЕ
| НЕ ВТ_РеализацииЗаДень.Ссылка В
| (ВЫБРАТЬ
| ВТ_ВыгруженныеВБП.Документ
| ИЗ
| ВТ_ВыгруженныеВБП КАК ВТ_ВыгруженныеВБП)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасходнаяНакладнаяНоменклатура.Ссылка,
| РасходнаяНакладнаяНоменклатура.Номенклатура,
| РасходнаяНакладнаяНоменклатура.Характеристика,
| РасходнаяНакладнаяНоменклатура.Количество,
| РасходнаяНакладнаяНоменклатура.Цена,
| РасходнаяНакладнаяНоменклатура.Сумма,
| РасходнаяНакладнаяНоменклатура.СтавкаНДС,
| РасходнаяНакладнаяНоменклатура.СуммаНДС
|ПОМЕСТИТЬ ВТ_ОсновныеДанныеВыгрузки
|ИЗ
| Документ.РасходнаяНакладная.Номенклатура КАК РасходнаяНакладнаяНоменклатура
|ГДЕ
| РасходнаяНакладнаяНоменклатура.Ссылка В
| (ВЫБРАТЬ
| ВТ_НевыгруженныеДокументы.Ссылка
| ИЗ
| ВТ_НевыгруженныеДокументы КАК ВТ_НевыгруженныеДокументы)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ОсновныеДанныеВыгрузки.Ссылка,
| ВТ_ОсновныеДанныеВыгрузки.Номенклатура,
| ВТ_ОсновныеДанныеВыгрузки.Характеристика,
| ВТ_ОсновныеДанныеВыгрузки.Количество,
| ВТ_ОсновныеДанныеВыгрузки.Цена,
| ВТ_ОсновныеДанныеВыгрузки.Сумма,
| ПРЕДСТАВЛЕНИЕ(ВТ_ОсновныеДанныеВыгрузки.СтавкаНДС) КАК СтавкаНДС,
| ВТ_ОсновныеДанныеВыгрузки.СуммаНДС,
| ХарактеристикиНоменклатуры.Бренд КАК Бренд,
| ХарактеристикиНоменклатуры.КаталожныйНомер КАК КаталожныйНомер,
| ХарактеристикиНоменклатуры.КаталожныйНомер_Сокращенный КАК КаталожныйНомер_Сокращенный,
| НоменклатураСправочник.КаталожныйНомер КАК КаталожныйНомерНоменклатуры,
| НоменклатураСправочник.АльтернативныйКаталожныйНомер КАК АльтернативныйКаталожныйНомер,
| РасходнаяНакладная.ФинНомер КАК ФинНомер,
| РасходнаяНакладная.ФинДата,
| ПРЕДСТАВЛЕНИЕ(РасходнаяНакладная.Фирма) КАК Организация,
| ПРЕДСТАВЛЕНИЕ(РасходнаяНакладная.Покупатель) КАК Покупатель,
| РасходнаяНакладная.Покупатель.ИНН КАК ИННПокупателя,
| РасходнаяНакладная.Покупатель.КПП КАК КПППокупателя,
| ПРЕДСТАВЛЕНИЕ(РасходнаяНакладная.Покупатель.Город) КАК Город,
| РасходнаяНакладная.СуммаДокумента
|ИЗ
| ВТ_ОсновныеДанныеВыгрузки КАК ВТ_ОсновныеДанныеВыгрузки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
| ПО ВТ_ОсновныеДанныеВыгрузки.Характеристика = ХарактеристикиНоменклатуры.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменклатураСправочник
| ПО ВТ_ОсновныеДанныеВыгрузки.Номенклатура = НоменклатураСправочник.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
| ПО ВТ_ОсновныеДанныеВыгрузки.Ссылка = РасходнаяНакладная.Ссылка
|ГДЕ
| ВТ_ОсновныеДанныеВыгрузки.Ссылка В
| (ВЫБРАТЬ
| ВТ_НевыгруженныеДокументы.Ссылка
| ИЗ
| ВТ_НевыгруженныеДокументы КАК ВТ_НевыгруженныеДокументы)
|
|УПОРЯДОЧИТЬ ПО
| ФинНомер";
Запрос.УстановитьПараметр("Дата", ДатаЗагрузки);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ИдентификаторОрганизацииБП", ИдентификаторОрганизацииБП);
Запрос.УстановитьПараметр("Статус", Статус);
ТаблицаДанныхДокументов = Запрос.Выполнить().Выгрузить();
УникальныеДокументы = ОбщегоНазначения.УдалитьПовторяющиесяЭлементыМассива(ТаблицаДанныхДокументов.ВыгрузитьКолонку("Ссылка"));
ЗапросДвижения = Новый Запрос;
ЗапросДвижения.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Регистратор,
| ОстаткиТоваров.Номенклатура,
| ОстаткиТоваров.Характеристика,
| ПРЕДСТАВЛЕНИЕ(ОстаткиТоваров.ГТД) КАК ГТД,
| ПРЕДСТАВЛЕНИЕ(ОстаткиТоваров.НоменклатураПоставщика) КАК НоменклатураПоставщика,
| ОстаткиТоваров.Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
|ГДЕ
| ОстаткиТоваров.Регистратор В(&Регистраторы)";
ЗапросДвижения.УстановитьПараметр("Регистраторы", УникальныеДокументы);
ТаблицаДвижений = ЗапросДвижения.Выполнить().Выгрузить();
ЗапросКИЗ = Новый Запрос;
ЗапросКИЗ.Текст =
"ВЫБРАТЬ
| РасходнаяНакладная.Ссылка
|ПОМЕСТИТЬ ВТ_РеализацииЗаДень
|ИЗ
| Документ.РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| РасходнаяНакладная.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
| И РасходнаяНакладная.МаркированныйТовар
| И РасходнаяНакладная.Проведен
| И РасходнаяНакладная.Фирма = &Организация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВыгруженныеДокументыБП.Документ
|ПОМЕСТИТЬ ВТ_ВыгруженныеВБП
|ИЗ
| РегистрСведений.ВыгруженныеДокументыБП КАК ВыгруженныеДокументыБП
|ГДЕ
| ВыгруженныеДокументыБП.Статус = &Статус
| И ВыгруженныеДокументыБП.ИдентификаторОрганизацииБП = &ИдентификаторОрганизацииБП
| И ВыгруженныеДокументыБП.ДатаВыгрузки <> ДАТАВРЕМЯ(1, 1, 1)
| И ВыгруженныеДокументыБП.Документ ССЫЛКА Документ.РасходнаяНакладная
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_РеализацииЗаДень.Ссылка
|ПОМЕСТИТЬ ВТ_НевыгруженныеДокументы
|ИЗ
| ВТ_РеализацииЗаДень КАК ВТ_РеализацииЗаДень
|ГДЕ
| НЕ ВТ_РеализацииЗаДень.Ссылка В
| (ВЫБРАТЬ
| ВТ_ВыгруженныеВБП.Документ
| ИЗ
| ВТ_ВыгруженныеВБП КАК ВТ_ВыгруженныеВБП)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасходнаяНакладнаяКИЗ.Ссылка КАК Ссылка,
| МаркировкаКИЗ.Бренд КАК Бренд,
| МаркировкаКИЗ.КаталожныйНомер КАК КаталожныйНомер,
| МаркировкаКИЗ.Номенклатура,
| МаркировкаКИЗ.КодМаркировки КАК КодМаркировки,
| ЛОЖЬ КАК Использован
|ИЗ
| Документ.РасходнаяНакладная.КИЗ КАК РасходнаяНакладнаяКИЗ
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МаркировкаКИЗ КАК МаркировкаКИЗ
| ПО РасходнаяНакладнаяКИЗ.КодМаркировки = МаркировкаКИЗ.Ссылка
|ГДЕ
| РасходнаяНакладнаяКИЗ.Ссылка В
| (ВЫБРАТЬ
| ВТ_НевыгруженныеДокументы.Ссылка
| ИЗ
| ВТ_НевыгруженныеДокументы КАК ВТ_НевыгруженныеДокументы)";
ЗапросКИЗ.УстановитьПараметр("Дата", ДатаЗагрузки);
ЗапросКИЗ.УстановитьПараметр("ИдентификаторОрганизацииБП", ИдентификаторОрганизацииБП);
ЗапросКИЗ.УстановитьПараметр("Организация", Организация);
ЗапросКИЗ.УстановитьПараметр("Статус", Статус);
ТаблицаКИЗ = ЗапросКИЗ.Выполнить().Выгрузить();
Результат = ОбработатьТаблицы(ТаблицаДанныхДокументов, ТаблицаДвижений, ТаблицаКИЗ);
Возврат Результат;
КонецФункции
Функция ОбработатьТаблицы(ТаблицаДанныхДокументов, ТаблицаДвижений, ТаблицаКИЗ)
НоваяТаблица = ТаблицаДанныхДокументов.СкопироватьКолонки();
НоваяТаблица.Колонки.Добавить("КодМаркировки");
НоваяТаблица.Колонки.Добавить("НоменклатураПоставщика");
НоваяТаблица.Колонки.Добавить("ГТД");
Для Каждого Строка Из ТаблицаДанныхДокументов Цикл
Если ЗначениеЗаполнено(НоваяТаблица.Найти(Строка.Ссылка, "Ссылка")) Тогда
Продолжить; // По этой реализации строки уже обработаны
КонецЕсли;
ПараметрыОтбораПервойТаблицы = Новый Структура("Ссылка", Строка.Ссылка);
// Все строки исходной таблицы по расходной накладной
СтрокиТаблицыПоРеализации = ТаблицаДанныхДокументов.НайтиСтроки(ПараметрыОтбораПервойТаблицы);
Для Каждого СтрокаРеализации Из СтрокиТаблицыПоРеализации Цикл
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Регистратор", СтрокаРеализации.Ссылка);
ПараметрыОтбора.Вставить("Номенклатура", СтрокаРеализации.Номенклатура);
ПараметрыОтбора.Вставить("Характеристика", СтрокаРеализации.Характеристика);
МассивСтрокДвижений = ТаблицаДвижений.НайтиСтроки(ПараметрыОтбора);
МассивГТД = Новый Массив;
МассивНоменклатурПоставщика = Новый Массив;
Для Каждого СтрокаДвижений Из МассивСтрокДвижений Цикл
// Нам из этого массива строк нужны все возможные номенклатуры поставщика и ГТД при необходимости при подборе в БП будем их перебирать
МассивГТД.Добавить(СтрокаДвижений.ГТД);
МассивНоменклатурПоставщика.Добавить(СтрокаДвижений.НоменклатураПоставщика);
КонецЦикла;
// Все ещё не использованные в документе строки таблицы КИЗ по расходной накладной
ПараметрыОтбораВторойТаблицы = Новый Структура("Ссылка, Номенклатура, Бренд, КаталожныйНомер, Использован",
СтрокаРеализации.Ссылка, СтрокаРеализации.Номенклатура, СтрокаРеализации.Бренд, СтрокаРеализации.КаталожныйНомер_Сокращенный, Ложь);
КоличествоОтобранных = 0;
Пока СтрокаРеализации.Количество > КоличествоОтобранных Цикл
СтрокиТаблицыКИЗ = ТаблицаКИЗ.НайтиСтроки(ПараметрыОтбораВторойТаблицы);
СтрокаКИЗ = СтрокиТаблицыКИЗ[0];
НоваяСтрока = НоваяТаблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРеализации);
НоваяСтрока.КодМаркировки = СтрокаКИЗ.КодМаркировки;
СтрокаКиз.Использован = Истина;
КоличествоОтобранных = КоличествоОтобранных + 1;
НоваяСтрока.НоменклатураПоставщика = МассивНоменклатурПоставщика;
НоваяСтрока.ГТД = МассивГТД;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Возврат НоваяТаблица;
КонецФункции
//++Миронов А.В Выгрузка чеков для АвтоМастера и АвтоТочки
Функция Чеки(Запрос) Экспорт
Организация = Запрос.ПараметрыURL.Получить("Организация");
ИННОрганизации = Запрос.ПараметрыURL.Получить("ИНН");
ДатаНачала = Запрос.ПараметрыURL.Получить("ДатаНачала");
ДатаОкончания = Запрос.ПараметрыURL.Получить("ДатаОкончания");
Если Организация = Неопределено Или ДатаНачала = Неопределено Или ДатаОкончания = Неопределено Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Система не получила все необходимые параметры");
Иначе
ОтветДляБП = ПодготовитьФайлЧековДляОтправки(Организация, ИННОрганизации, Дата(ДатаНачала), Дата(ДатаОкончания));
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ОтветДляБП);
Ответ.Заголовки["Content-Type"] = "text/plain";
КонецЕсли;
Возврат Ответ;
КонецФункции
Функция ПодготовитьФайлЧековДляОтправки(Организация, ИНН, ДатаНачала, ДатаОкончания)
Организация = Справочники.Фирмы.НайтиПоРеквизиту("ИНН", ИНН);
Если Не ЗначениеЗаполнено(Организация) Тогда
Возврат Неопределено;
КонецЕсли;
ПапкаИсключение = Справочники.Номенклатура.НайтиПоКоду("ZT0003466");
ДанныеЧеков = ДанныеЧековККМ(Организация, ДатаНачала, ДатаОкончания, ПапкаИсключение);
ДанныеДляОтправки = ОбработатьЧеки(ДанныеЧеков);
Если ДанныеЧеков.Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
ДанныеДляОтправки = ОбработатьЧеки(ДанныеЧеков);
СтруктураОтвета = Новый Структура("result", ДанныеДляОтправки);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
Результат = ЗаписьJSON.Закрыть();
Возврат Результат;
КонецФункции
Функция ДанныеЧековККМ(Организация, ДатаНачала, ДатаОкончания, ПапкаИсключение)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЧекККМНоменклатура.Ссылка КАК Ссылка,
| ЧекККМНоменклатура.Ссылка.Склад КАК Склад,
| ЧекККМНоменклатура.Ссылка.Дата КАК ДатаДокумента,
| ЧекККМНоменклатура.Ссылка.Номер КАК НомерДокумента,
| ЧекККМНоменклатура.Номенклатура КАК Номенклатура,
| ЧекККМНоменклатура.Характеристика КАК Характеристика,
| ЧекККМНоменклатура.Артикул КАК Артикул,
| ЧекККМНоменклатура.Количество КАК Количество,
| ЧекККМНоменклатура.Сумма КАК Сумма,
| ЧекККМНоменклатура.Сумма / ВЫБОР
| КОГДА ЧекККМНоменклатура.Количество = 0
| ТОГДА 1
| ИНАЧЕ ЧекККМНоменклатура.Количество
| КОНЕЦ КАК Цена,
| ЧекККМНоменклатура.СтавкаНДС КАК СтавкаНДС,
| ЧекККМНоменклатура.СуммаНДС КАК СуммаНДС,
| ЧекККМНоменклатура.Номенклатура.КаталожныйНомер КАК КаталожныйНомерНоменклатуры,
| ЧекККМНоменклатура.Характеристика.КаталожныйНомер КАК КаталожныйНомерХарактеристики
|ПОМЕСТИТЬ ВТ_ДанныеЧеков
|ИЗ
| Документ.ЧекККМ.Номенклатура КАК ЧекККМНоменклатура
|ГДЕ
| ЧекККМНоменклатура.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И НЕ ЧекККМНоменклатура.Ссылка.ПометкаУдаления
| И ЧекККМНоменклатура.Ссылка.Проведен
| И ЧекККМНоменклатура.Ссылка.ЧекПробитНаККМ
| И ЧекККМНоменклатура.Ссылка.Фирма = &Организация
| И НЕ ЧекККМНоменклатура.Номенклатура В ИЕРАРХИИ(&ПапкаИсключение)
| И ЧекККМНоменклатура.Ссылка.ВидОперации <> ЗНАЧЕНИЕ(Перечисление.ВидОперации.Возврат);
|
|
|ВЫБРАТЬ
| ОстаткиТоваров.Регистратор.Ссылка КАК РегистраторСсылка,
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Характеристика КАК Характеристика,
| ОстаткиТоваров.НоменклатураПоставщика КАК НоменклатураПоставщика,
| ОстаткиТоваров.Характеристика.Оф КАК ХарактеристикаОф
|ПОМЕСТИТЬ ВТ_ДанныеРегистраОстатки
|ИЗ
| РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
|ГДЕ
| (ОстаткиТоваров.Регистратор, ОстаткиТоваров.Номенклатура, ОстаткиТоваров.Характеристика) В
| (ВЫБРАТЬ
| ВТ_ДанныеЧеков.Ссылка,
| ВТ_ДанныеЧеков.Номенклатура,
| ВТ_ДанныеЧеков.Характеристика
| ИЗ
| ВТ_ДанныеЧеков КАК ВТ_ДанныеЧеков);
|
|
|ВЫБРАТЬ
| ВТ_ДанныеЧеков.Ссылка КАК Ссылка,
| ВТ_ДанныеЧеков.Склад КАК Склад,
| ВТ_ДанныеЧеков.ДатаДокумента КАК ДатаДокумента,
| ВТ_ДанныеЧеков.НомерДокумента КАК НомерДокумента,
| ВТ_ДанныеЧеков.Номенклатура КАК Номенклатура,
| ВТ_ДанныеЧеков.Характеристика КАК Характеристика,
| ВТ_ДанныеЧеков.Артикул КАК Артикул,
| ВТ_ДанныеЧеков.Количество КАК Количество,
| ВТ_ДанныеЧеков.Сумма КАК Сумма,
| ВТ_ДанныеЧеков.Цена КАК Цена,
| ВТ_ДанныеЧеков.СтавкаНДС КАК СтавкаНДС,
| ВТ_ДанныеЧеков.СуммаНДС КАК СуммаНДС,
| ВТ_ДанныеЧеков.КаталожныйНомерНоменклатуры КАК КаталожныйНомерНоменклатуры,
| ВТ_ДанныеЧеков.КаталожныйНомерХарактеристики КАК КаталожныйНомерХарактеристики,
| МАКСИМУМ(ВТ_ДанныеРегистраОстатки.НоменклатураПоставщика) КАК НоменклатураПоставщика,
| МАКСИМУМ(ВТ_ДанныеРегистраОстатки.ХарактеристикаОф) КАК ХарактеристикаОф
|ИЗ
| ВТ_ДанныеЧеков КАК ВТ_ДанныеЧеков
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДанныеРегистраОстатки КАК ВТ_ДанныеРегистраОстатки
| ПО ВТ_ДанныеЧеков.Ссылка = ВТ_ДанныеРегистраОстатки.РегистраторСсылка
| И ВТ_ДанныеЧеков.Номенклатура = ВТ_ДанныеРегистраОстатки.Номенклатура
| И ВТ_ДанныеЧеков.Характеристика = ВТ_ДанныеРегистраОстатки.Характеристика
|СГРУППИРОВАТЬ ПО
| ВТ_ДанныеЧеков.Ссылка,
| ВТ_ДанныеЧеков.Склад,
| ВТ_ДанныеЧеков.ДатаДокумента,
| ВТ_ДанныеЧеков.НомерДокумента,
| ВТ_ДанныеЧеков.Номенклатура,
| ВТ_ДанныеЧеков.Характеристика,
| ВТ_ДанныеЧеков.Артикул,
| ВТ_ДанныеЧеков.Количество,
| ВТ_ДанныеЧеков.Сумма,
| ВТ_ДанныеЧеков.Цена,
| ВТ_ДанныеЧеков.СтавкаНДС,
| ВТ_ДанныеЧеков.СуммаНДС,
| ВТ_ДанныеЧеков.КаталожныйНомерНоменклатуры,
| ВТ_ДанныеЧеков.КаталожныйНомерХарактеристики";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ПапкаИсключение", ПапкаИсключение);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса;
КонецФункции
Функция ОбработатьЧеки(ДанныеЧеков)
Результат = Новый Массив;
ДанныеДокументов = Новый Соответствие;
Для Каждого Строка Из ДанныеЧеков Цикл
КлючДок = Формат(Строка.ДатаДокумента, "ДФ=yyyyMMdd") + "_" + Строка(Строка.Склад);
ЕстьДокумент = ДанныеДокументов.Получить(КлючДок);
Если ЕстьДокумент = Неопределено Тогда
ДокСтруктура = Новый Структура;
ДокСтруктура.Вставить("Склад", Строка(Строка.Склад));
ДокСтруктура.Вставить("ДатаДокумента", Строка(Строка.ДатаДокумента));
ДокСтруктура.Вставить("Товары", Новый Массив);
ДанныеДокументов.Вставить(КлючДок, ДокСтруктура);
Результат.Добавить(ДокСтруктура);
КонецЕсли;
СтрокаТовара = Новый Структура;
СтрокаТовара.Вставить("Номенклатура", Строка(Строка.Номенклатура));
Если Строка.ХарактеристикаОф = Истина
И ЗначениеЗаполнено(Строка.НоменклатураПоставщика) Тогда
СтрокаТовара.Вставить("НоменклатураПоставщика", Строка(Строка.НоменклатураПоставщика));
Иначе
СтрокаТовара.Вставить("НоменклатураПоставщика", "");
КонецЕсли;
СтрокаТовара.Вставить("Характеристика", Строка(Строка.Характеристика));
СтрокаТовара.Вставить("Количество", Строка.Количество);
СтрокаТовара.Вставить("Цена", Строка.Цена);
СтрокаТовара.Вставить("Сумма", Строка.Сумма);
СтрокаТовара.Вставить("СтавкаНДС", Строка(Строка.СтавкаНДС));
СтрокаТовара.Вставить("СуммаНДС", Строка.СуммаНДС);
СтрокаТовара.Вставить("КаталожныйНомерНоменклатуры", Строка(Строка.КаталожныйНомерНоменклатуры));
СтрокаТовара.Вставить("КаталожныйНомерХарактеристики", Строка(Строка.КаталожныйНомерХарактеристики));
ДанныеДокументов[КлючДок].Товары.Добавить(СтрокаТовара);
КонецЦикла;
Возврат Результат;
КонецФункции
//++Миронов А.В Выгрузка чеков для АвтоМастера и АвтоТочки