helpf.pro
Регистрация

v8: 1С 8.2 Бухгалтерия Выгрузка в ДБФ

chainik
25.04.2014 14:48Прочитано: 3503
Необходимо выгрузить что-то подобное Прайс-листа в двф. Из документа "Поступление Товаров и Услуг" выгрузить данные в определенный промежуток времени таким образом, чтобы повторяющие материалы стояли одной строкой со средней ценой. Затруднение возникает в том, что часть документов надо брать без НДС, а часть с НДС. НДС задается в другом объекте. В результате объединение не получается. Если можно, подскажите правильный вариант.Фрагмент:



Если пустаястрока(ИмяФайла)=1 тогда
предупреждение ("Укажите каталог");
Возврат;
КонецЕсли;
Если пустаястрока(ПодразделениеОрг) =1 Тогда
Предупреждение("Выберите организацию");
Возврат;
КонецЕсли;
ДБФ = Новый XBase;
ДБФ.Поля.Добавить("end_dat","D"); // дата окончания выгрузки
ДБФ.Поля.Добавить("km","S",12); // Код материала (НомНомер)
ДБФ.Поля.Добавить("name","S",100); // Наименование материала
ДБФ.Поля.Добавить("price","N",15,2 ); // средняя цена материала
ДБФ.Поля.Добавить("kei","S",100); // Единица измерения материала
ДБФ.СоздатьФайл(ИмяФайла);
ДБФ.Кодировка=КодировкаXBase.OEM;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Номер КАК Номер,
| ПоступлениеТоваровУслуг.Ссылка,
| ПоступлениеТоваровУслуг.Дата КАК ДатаСоставления,
| ПоступлениеТоваровУслуг.НомерВходящегоДокумента КАК НомерСопроводительногоДокумента,
| ПоступлениеТоваровУслуг.Организация,
| ПоступлениеТоваровУслуг.ПодразделениеОрганизации,
| ВЫРАЗИТЬ(ПоступлениеТоваровУслуг.ПодразделениеОрганизации.НаименованиеПолное КАК СТРОКА(200)) КАК ПредставлениеПодразделения,
| ПоступлениеТоваровУслуг.УчитыватьНДС
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаОкон
| И ПоступлениеТоваровУслуг.Ссылка.ПодразделениеОрганизации = &ПодразделениеОрг
| И ПоступлениеТоваровУслуг.Ссылка.Проведен
| ";

Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач));
Запрос.УстановитьПараметр("ДатаОкон", КонецДня(ДатаОкон));
Запрос.УстановитьПараметр("ПодразделениеОрг", ПодразделениеОрг);
Результат = Запрос.Выполнить();
Шапка = Результат.Выбрать();
Пока Шапка.Следующий() Цикл
Доки=Шапка.ссылка;
ЗапросПоТоварам = Новый Запрос;
ЗапросПоТоварам.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Номенклатура,
| ПоступлениеТоваровУслугТовары.СтавкаНДС КАК СтавкаНДС,
| СУММА(ПоступлениеТоваровУслугТовары.Цена) КАК Цена,
| СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
| ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения,
// | СУММА(ПоступлениеТоваровУслугТовары.Количество * ПоступлениеТоваровУслугТовары.Цена/1.18) КАК Поле1
| СУММА(ПоступлениеТоваровУслугТовары.Количество * ПоступлениеТоваровУслугТовары.Цена) КАК Поле1
| ПОМЕСТИТЬ вт
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
|ПоступлениеТоваровУслугТовары.Ссылка = &Доки
| СГРУППИРОВАТЬ ПО
| ПоступлениеТоваровУслугТовары.Номенклатура,
| ПоступлениеТоваровУслугТовары.СтавкаНДС,
| ПоступлениеТоваровУслугТовары.ЕдиницаИзмерения
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| вт.Номенклатура,
| вт.Поле1 / вт.Количество КАК Поле1
|ИЗ
| вт КАК вт
|";
ЗапросПоТоварам.УстановитьПараметр("Доки", Доки);
Результат = ЗапросПоТоварам.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если Шапка.УчитыватьНДС=Истина Тогда
ДБФ.Добавить();
ДБФ.end_dat=ДатаОкон;
ДБФ.km=ВыборкаДетальныеЗаписи.Номенклатура.НомНомер;
ДБФ.name=ВыборкаДетальныеЗаписи.Номенклатура;
ДБФ.kei=ВыборкаДетальныеЗаписи.Номенклатура.БазоваяЕдиницаИзмерения.Код;
Сумма=ВыборкаДетальныеЗаписи.Поле1;
Сумма1=Окр(Число(Сумма)*100/118,2,0);
ДБФ.price=Сумма1;
ДБФ.Записать();
Иначе

ДБФ.Добавить();
ДБФ.end_dat=ДатаОкон;
ДБФ.km=ВыборкаДетальныеЗаписи.Номенклатура.НомНомер;
ДБФ.name=ВыборкаДетальныеЗаписи.Номенклатура;
ДБФ.kei=ВыборкаДетальныеЗаписи.Номенклатура.БазоваяЕдиницаИзмерения.Код;
Сумма=ВыборкаДетальныеЗаписи.Поле1;
Сумма1=Окр(Число(Сумма)*100/118,0);
ДБФ.price=Сумма;
ДБФ.Записать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
ДБФ.ЗакрытьФайл();


Где ошибка, понятно, рассматривается документ-строки и записывается в файл. Если и будет объединение, то внутри документа. А вот как правильно записать, затрудняюсь.
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
25.04.2014 15:45Ответ № 1
А почему бы сразу запросом не собрать по документам номенклатуру и группировать ее получив среднее, а потом выборка по группировкам и пиши в файл!?
chainik
25.04.2014 16:08Ответ № 2
Пробовала, но у меня программа требовала группировку из документа по сумме НДС, но, естественно, объединения нет. Много способов перепробовала.
Вот один из них
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док.Номер КАК Номер,
| Док.Ссылка,
| Док.Дата КАК ДатаСоставления,
| Док.ПодразделениеОрганизации
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК Док
|ГДЕ
| Док.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаОкон
| И Док.Ссылка.ПодразделениеОрганизации = &ПодразделениеОрг
| И Док.Ссылка.Проведен
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Док.Номенклатура,
// | Док.СтавкаНДС КАК СтавкаНДС,
| СУММА(Док.Цена) КАК Цена,
| СУММА(Док.Количество) КАК Количество,
| Док.ЕдиницаИзмерения,
// | СУММА(ПоступлениеТоваровУслугТовары.Количество * ПоступлениеТоваровУслугТовары.Цена/1.18) КАК Поле1
| СУММА(Док.Количество * Док.Цена) КАК Поле1
// | ПОМЕСТИТЬ вт
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК Док
// |ГДЕ
// |Док.Ссылка = &Доки
| СГРУППИРОВАТЬ ПО
| Док.Номенклатура,
| Док.СтавкаНДС,
| Док.ЕдиницаИзмерения
// |;

А вывести среднюю цену ??? Не хватает знаний.
Mokey
28.04.2014 09:57Ответ № 3
| СРЕДНЕЕ(Док.Цена) КАК Цена,
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.