Внешнаяя обработка: Отчет-выгрузка по продажам..
Брал за основу готовый "универсальный отчет по продажам"
Знаю что портянка но боюсь без нее суть будет не очень понятна...
Есть ТЗ по именем "ТБ" в нее я закинул заполнение Табличной части "Документ"
При сверте данный кусок таблицы пропадает... если прописать "Документ" в свертку... тогда не идет расчет "сумм,себестоимости,ндса и т.д.)
Может посоветует кто как решить данную проблему ?
// Настройка периода
Перем НП Экспорт;
Перем ТаблицаТД Экспорт;
Перем ТаблицаТБ Экспорт;
Процедура ПродажиПоКлиентам(ТабДок) Экспорт
Макет = ПолучитьМакет("ПродажиПоКлиентам");
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| ХозрасчетныйДвиженияССубконто.Регистратор.Дата КАК ДатаПр,
| ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент КАК Контрагент,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК ТМЦ,
| ХозрасчетныйДвиженияССубконто.Регистратор КАК Док,
| СУММА(ХозрасчетныйДвиженияССубконто.Сумма) КАК СуммаСебестоимость
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
|ГДЕ
| (ХозрасчетныйДвиженияССубконто.Регистратор.Дата >= &ДатаНач)
| И (ХозрасчетныйДвиженияССубконто.Регистратор.Дата <= &ДатаКон)
| И (ХозрасчетныйДвиженияССубконто.СубконтоДт1<>ХозрасчетныйДвиженияССубконто.СубконтоКт1)
| И (ХозрасчетныйДвиженияССубконто.СчетКт.Забалансовый=ЛОЖЬ)
|";
Условия="";
Если Не ВыбТМЦ.Пустая() Тогда
Запрос.УстановитьПараметр("ВыбТМЦ",ВыбТМЦ);
Условия = Условия + " И (ХозрасчетныйДвиженияССубконто.СубконтоКт1 В ИЕРАРХИИ(&ВыбТМЦ)) ";
КонецЕсли;
Если Не ВыбКонтрагент.Пустая() Тогда
Запрос.УстановитьПараметр("ВыбКонтрагент",ВыбКонтрагент);
Условия = Условия + " И (ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент В ИЕРАРХИИ(&ВыбКонтрагент))";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + Условия+ "
|
|СГРУППИРОВАТЬ ПО
| ХозрасчетныйДвиженияССубконто.Регистратор.Дата,
| ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент,
| ХозрасчетныйДвиженияССубконто.Регистратор,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1
|
|УПОРЯДОЧИТЬ ПО
| ДатаПр,
| Контрагент,
| Док,
| ТМЦ
|";
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
РезультатСебестоимость = Запрос.Выполнить();
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Номенклатура КАК ТМЦ,
| РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
| РеализацияТоваровУслугТовары.Ссылка.Дата КАК ДатаПр,
| РеализацияТоваровУслугТовары.Ссылка КАК Док,
| СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
| СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
| СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| (РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач)
| И (РеализацияТоваровУслугТовары.Ссылка.Дата <= &ДатаКон)
| И (РеализацияТоваровУслугТовары.СчетУчетаБУ.Забалансовый=ЛОЖЬ)
|";
Условия="";
Если Не ВыбТМЦ.Пустая() Тогда
Запрос.УстановитьПараметр("ВыбТМЦ",ВыбТМЦ);
Условия = Условия + " И (РеализацияТоваровУслугТовары.Номенклатура В ИЕРАРХИИ(&ВыбТМЦ)) ";
КонецЕсли;
Если Не ВыбКонтрагент.Пустая() Тогда
Запрос.УстановитьПараметр("ВыбКонтрагент",ВыбКонтрагент);
Условия = Условия + " И (РеализацияТоваровУслугТовары.Ссылка.Контрагент В ИЕРАРХИИ(&ВыбКонтрагент))";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + Условия+ "
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.Ссылка.Дата,
| РеализацияТоваровУслугТовары.Ссылка.Контрагент,
| РеализацияТоваровУслугТовары.Ссылка,
| РеализацияТоваровУслугТовары.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| ДатаПр,
| Контрагент,
| Док,
| ТМЦ
| ";
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
Запрос.УстановитьПараметр("РезультатСебестоимость",РезультатСебестоимость);
Результат = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьТМЦ = Макет.ПолучитьОбласть("ТМЦ");
ОбластьИтог = Макет.ПолучитьОбласть("Итог");
ОбластьЗаголовок.Параметры.Период = ПредставлениеПериода(НачалоДня(ДатаНач),КонецДня(ДатаКон),"Л="+Локализация.ОпределитьКодЯзыкаДляФормат(Локализация.КодЯзыкаИнтерфейса())+"; ФП=Истина");
ТабДок.Вывести(ОбластьЗаголовок);
ИтНаценка = 0;
ИтКоличество = 0;
ИтСуммаСебестоимость = 0;
ИтСумма = 0;
ТБ = Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой);
ТДСебестоимость = РезультатСебестоимость.Выгрузить(ОбходРезультатаЗапроса.Прямой);
Массив = Новый Массив;
Массив.Добавить(Тип("Число"));
КЧ = Новый КвалификаторыЧисла(15,3);
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
ТБ.Колонки.Добавить("СуммаСебестоимость",ОписаниеТиповЧ);
Тб.Колонки.Добавить("Документ",Новый ОписаниеТипов("ДокументСсылка.РеализацияТоваровУслуг"),"Документ");
Для каждого СтрокаТаблицы Из ТДСебестоимость Цикл
Док = СтрокаТаблицы.Док;
Если ТБ.Найти(Док,"Док")=Неопределено Тогда
продолжить;
КонецЕсли;
ТМЦ = СтрокаТаблицы.ТМЦ;
ТекСтр = ТБ.Найти(ТМЦ,"ТМЦ");
Если ТекСтр=Неопределено Тогда
продолжить;
КонецЕсли;
Если (ТекСтр.Количество=0) И (ТекСтр.Сумма=0) Тогда
продолжить;
КонецЕсли;
Массив = Новый Массив;
Массив.Добавить(Тип("ДокументОбъект.РеализацияТоваровУслуг"));
ОпТип = Новый ОписаниеТипов(Массив);
НоваяСтрока = ТБ.Добавить();
НоваяСтрока.ДатаПр = СтрокаТаблицы.ДатаПр;
НоваяСтрока.Документ = СтрокаТаблицы.Док;
НоваяСтрока.КОнтрагент = СтрокаТаблицы.КОнтрагент;
НоваяСтрока.ТМЦ = СтрокаТаблицы.ТМЦ;
НоваяСтрока.СуммаСебестоимость = СтрокаТаблицы.СуммаСебестоимость;
КонецЦикла;
Для каждого СтрокаТаблицы Из ТБ Цикл
Если СокрЛП(Строка(СтрокаТаблицы.Док)) = "" Тогда
Продолжить;
КонецЕсли;
Если СтрокаТаблицы.Док.СуммаВключаетНДС = Истина Тогда
СтрокаТаблицы.Сумма = СтрокаТаблицы.Сумма-СтрокаТаблицы.СуммаНДС;
КонецЕсли;
КонецЦикла;
ТБ.Свернуть("ДатаПр,КОнтрагент,ТМЦ","Количество,Сумма,СуммаНДС,СуммаСебестоимость");
ТБ.Сортировать("ДатаПр,КОнтрагент,ТМЦ");
Для каждого СтрокаТаблицы Из ТБ Цикл
Если СокрЛП(Строка(СтрокаТаблицы.Контрагент)) = "" Тогда
Продолжить;
КонецЕсли;
Если СокрЛП(Строка(СтрокаТаблицы.ТМЦ)) = "" Тогда
Продолжить;
КонецЕсли;
СуммаСНДС = СтрокаТаблицы.Сумма + СтрокаТаблицы.СуммаНДС;
СуммаБезНДС = СтрокаТаблицы.Сумма;
ЦенаПродажи = ?(СтрокаТаблицы.Количество=0,СуммаСНДС,СуммаСНДС/СтрокаТаблицы.Количество);
Себестоимость = ?(СтрокаТаблицы.Количество=0,СтрокаТаблицы.СуммаСебестоимость,СтрокаТаблицы.СуммаСебестоимость/СтрокаТаблицы.Количество);
Наценка = СуммаБезНДС - СтрокаТаблицы.СуммаСебестоимость;
ИтНаценка = ИтНаценка + Наценка;
ИтКоличество = ИтКоличество + СтрокаТаблицы.Количество;
ИтСуммаСебестоимость = ИтСуммаСебестоимость + СтрокаТаблицы.СуммаСебестоимость;
ИтСумма = ИтСумма + СуммаСНДС;
ОбластьТМЦ.Параметры.ДатаПр = СтрокаТаблицы.ДатаПр;
ОбластьТМЦ.Параметры.КОнтрагент = СтрокаТаблицы.КОнтрагент;
ОбластьТМЦ.Параметры.ТМЦ = СтрокаТаблицы.ТМЦ;
ОбластьТМЦ.Параметры.Количество = СтрокаТаблицы.Количество;
ОбластьТМЦ.Параметры.Сумма = СуммаСНДС;
ОбластьТМЦ.Параметры.СуммаСебестоимость = СтрокаТаблицы.СуммаСебестоимость;
ОбластьТМЦ.Параметры.Себестоимость = Себестоимость;
ОбластьТМЦ.Параметры.ЦенаПродажи = ЦенаПродажи;
ОбластьТМЦ.Параметры.Наценка = Наценка;
ТабДок.Вывести(ОбластьТМЦ);
КонецЦикла;
ОбластьИтог.Параметры.ИтНаценка = ИтНаценка;
ОбластьИтог.Параметры.ИтКоличество = ИтКоличество;
ОбластьИтог.Параметры.ИтСуммаСебестоимость = ИтСуммаСебестоимость;
ОбластьИтог.Параметры.ИтСумма = ИтСумма;
ТабДок.Вывести(ОбластьИтог);
ТаблицаТД = ТДСебестоимость;
ТаблицаТБ = ТБ;
КонецПроцедуры
Процедура ВыгрузкаВDBF()Экспорт
Кодировка = "DOS";
ФайлВыгрузки = "C:\Base\Продажи\Sales.dbf";
ТекФайл = Новый Файл(ФайлВыгрузки);
ФайлDBF = Новый XBase;
ФайлDBF.Поля.Добавить("KLIENT","C",32,0); //Внутренний идентификатор или уникальный номер, торговой - розничной точки контрагента далее (ТРТ) = (Klient.DBF поле «ID»)
ФайлDBF.Поля.Добавить("DATE","D",32,0); //Дата документа
ФайлDBF.Поля.Добавить("DOCNOM","C",50,0); //Номер документа
ФайлDBF.Поля.Добавить("TOVAR","C",15,0); //Штрих-код товара накладной
ФайлDBF.Поля.Добавить("KOL","N",15,0); //Количество товара накладной
ФайлDBF.Поля.Добавить("SUM","N",15,2); //Сумма по строке
ФайлDBF.Поля.Добавить("MENEGER","C",50,0); //Наименование торгового агента
ФайлDBF.Поля.Добавить("P_MENEGER","C",50,0); //Наименование руководителя торгового агента
ФайлDBF.Поля.Добавить("OKPO_DISTR","N",15,0); //ОКПО партньора (организации, которая формирует файл)
//ФайлDBF.Поля.Добавить("ID","C",32,0); //Внутренний идентификатор или уникальный номер, торговой - розничной точки контрагента, далее (ТРТ);
//ФайлDBF.Поля.Добавить("NAME","C",50,0); //Краткое наименование ТРТ в информационной базе;
//ФайлDBF.Поля.Добавить("FULLNAME","C",200,0); //Полное представление ТРТ, если нет, то равняется полю NAME.
//ФайлDBF.Поля.Добавить("REGION","C",250,0); //Регион нахождения (Область/Город/Район)
//ФайлDBF.Поля.Добавить("P_ID","C",32,0); //Внутренний идентификатор или уникальный номер Хозяина ТРТ, если нет детальной информации, то дублируется поле ID.
//ФайлDBF.Поля.Добавить("P_NAME","C",50,0); //Краткое наименование Хозяина ТРТ, если нет детальной информации, то дублируется поле NAME.
//ФайлDBF.Поля.Добавить("OKPO","N",15,0); //Код ОКПО Владельца служит для дополнительной идентификации владельца.
//ФайлDBF.Поля.Добавить("ADRES","C",250,0); //Фактический адрес. Месторасположение ТРТ.
//ФайлDBF.Поля.Добавить("OKPO_DISTR","N",15,0); //ОКПО партньора (организации, которая формирует файл
Попытка
ФайлDBF.СоздатьФайл(ФайлВыгрузки );
Исключение
Предупреждение("Ошибка создания файла " + ФайлВыгрузки);
Возврат;
КонецПопытки;
Если НЕ ТаблицаТБ = Неопределено Тогда
Для каждого СтрокаТаблицы из ТаблицаТБ Цикл
Если НЕ СтрокаТаблицы = Неопределено
И НЕ СтрокаТаблицы = ""
Тогда ФайлDBF.Добавить();
Иначе Продолжить;
КонецЕсли;
//Меняем символы
СтрокаТаблицы.ТМЦ = СтрЗаменить(СтрокаТаблицы.ТМЦ,"і","i");
СтрокаТаблицы.Контрагент = СтрЗаменить(СтрокаТаблицы.Контрагент,"і","i");
Организация = СтрЗаменить(СтрокаТаблицы.Документ.Организация.Наименование,"і","i");
ФайлDBF.KLIENT = СтрокаТаблицы.Контрагент;
ФайлDBF.DATE = СтрокаТаблицы.ДатаПр;
ФайлDBF.DOCNOM = СтрокаТаблицы.Документ.Номер;
Если Кодировка = "DOS" Тогда
ФайлDBF.Кодировка = КодировкаXBase.OEM;
Иначе
ФайлDBF.Кодировка = КодировкаXBase.ANSI;
КонецЕсли;
ФайлDBF.Записать();
КонецЦикла;
ФайлDBF.ЗакрытьФайл();
Попытка
Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки);
Исключение
Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки);
КонецПопытки;
Возврат;
Иначе
Возврат
КонецЕсли;
КонецПроцедуры
НП = Новый НастройкаПериода;
НП.УстановитьПериод(НачалоНедели(РабочаяДата),КонецНедели(РабочаяДата),Истина);
ДатаНач = НП.ПолучитьДатуНачала();
ДатаКон = НП.ПолучитьДатуОкончания();