Перем ИмяФайла, ИмяКаталога;
Перем СправочникПодбора,СписокПодбора;
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"
|Период с ВыбНачПериода по ВыбКонПериода;
|Клн = Регистр.Продажи.Контрагент;
|Тов = Регистр.Продажи.Товар;
|_Кво = Регистр.Продажи.Количество;
|Условие (Тов в ВыбТовар);
|Функция Кво = Приход(_Кво);
|Группировка Клн без групп;
|Группировка Тов без групп;
|Группировка День;
|"
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Если ФС.ВыбратьКаталог(ИмяКаталога, "Выберите куда будем выгружать результат")=0 Тогда
Возврат;
КонецЕсли;
ДБФ = СоздатьОбъект("XBASE");
ДБФ.ДобавитьПоле("UR_NAZ","S",65,0); //1
ДБФ.ДобавитьПоле("OKPO","S",15,0); //2
ДБФ.ДобавитьПоле("UR_ADR","S",85,0); //3
ДБФ.ДобавитьПоле("KLN_CODE","S",10,0); //4
ДБФ.ДобавитьПоле("KLN_NAZ","S",60,0); //5
ДБФ.ДобавитьПоле("KLN_ADR","S",255,0); //6
ДБФ.ДобавитьПоле("TOV_CODE","S",10,0); //7
ДБФ.ДобавитьПоле("TOV_NAZ","S",100,0); //8
ДБФ.ДобавитьПоле("DATE","S",10,0); //9
ДБФ.ДобавитьПоле("KOL","N",19,0); //10
ДБФ.СоздатьФайл(ИмяКаталога+"\Otchet.dbf");
ДБФ.ЗакрытьФайл();
ДБФ.ОткрытьФайл(ИмяКаталога+"\Otchet.dbf",,0);
ДБФ.АвтоСохранение(1);
Пока Запрос.Группировка(1) = 1 Цикл
ПечДоставка = ?(ПустаяСтрока(Запрос.Клн.ДоставкаРайон)=0,СокрЛП(Запрос.Клн.ДоставкаРайон)+" - ","") + " " + ?(ПустаяСтрока(Запрос.Клн.ПочтовыйАдрес)=0,СокрЛП(Запрос.Клн.ПочтовыйАдрес),"");
Пока Запрос.Группировка(2) = 1 Цикл
Пока Запрос.Группировка(3) = 1 Цикл
ДБФ.Добавить();
ДБФ.UR_NAZ = Запрос.Клн.ПолноеНаименование;
ДБФ.OKPO = Запрос.Клн.ОКПО;
ДБФ.UR_ADR = Запрос.Клн.ЮридическийАдрес;
ДБФ.KLN_CODE = Запрос.Клн.Код;
ДБФ.KLN_NAZ = Запрос.Клн.Наименование;
ДБФ.KLN_ADR = ПечДоставка;
ДБФ.TOV_CODE = Запрос.Тов.Код;
ДБФ.TOV_NAZ = Запрос.Тов.Наименование;
ДБФ.DATE = Строка(Запрос.День);
ДБФ.KOL = Запрос.Кво;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ДБФ.ЗакрытьФайл();
КонецПроцедуры
//====================
Процедура ОбработкаПодбора(Значение) // Предопределенная процедура
Если (ВРег(Значение.Вид())=СправочникПодбора)И(СписокПодбора.НайтиЗначение(Значение)=0) Тогда
СписокПодбора.ДобавитьЗначение(Значение);
СписокПодбора.ТекущаяСтрока(СписокПодбора.РазмерСписка());
КонецЕсли;
КонецПроцедуры
// ОбработкаПодбора
// ===============================
// Название: РаботаСоСписком
// Параметры:
// Режим - строка, принимающая 4 значения:
// "Добавить"
// "ДобавитьНесколько"
// "Удалить"
// "УдалитьВсе"
// Список - список значений, в котором задается множественный фильтр
// ТипСправочника - строка, содержащая идентификатор справочнника, по
// которому осуществляется мноджественный фильтр
// Возвращаемое значение:
// НЕТ
// Вызывается из формул элементов диалога:
// кнопок работы с множественными фильтрами ("...",".....","X","XX")
// Наименование,.
// Описание:
// процедура предназначена для добавления и удаления элементов
// из множественных фильтров
Процедура РаботаСоСписком(кРежим,Список,ТипСправочника)
Перем ТекПоз;
Перем ТекЭлемент;
Перем Фрм;
Если ТипСправочника = "Направления" Тогда
ТипСправочника = "ПользователиНаправления";
//модно пропатченная отборка по направлениям
СписокНаправлений=СоздатьОбъект("СписокЗначений");
СпрНапр=СоздатьОбъект("Справочник.ПользователиНаправления");
СпрНапр.ИспользоватьВладельца(глПользователь);
СпрНапр.ВыбратьЭлементы();
Если СпрНапр.ПолучитьЭлемент()=1 Тогда
//НомерЭлемента=1;
//СпрНапр.ВыбратьЭлементы();
Пока СпрНапр.ПолучитьЭлемент()=1 Цикл
СписокНаправлений.ДобавитьЗначение(СпрНапр.Направление);
КонецЦикла;
Иначе
Предупреждение("Пользователь "+глПользователь+" не имеет прав доступа"+
" к информации ни по одному из направлений.");
Возврат;
КонецЕсли;
Если кРежим="Добавить" Тогда // добавляем в список один элемент
СписокПодбора = Список;
//СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
Если СпрНапр.Выбрать("Направления", СписокНаправлений)=1 Тогда
Если Список.НайтиЗначение(СпрНапр.ТекущийЭлемент().Направление)=0 Тогда
Список.ДобавитьЗначение(СпрНапр.ТекущийЭлемент().Направление);
КонецЕсли;
КонецЕсли;
ИначеЕсли кРежим="ДобавитьНесколько" Тогда // добавляем в список несколько элементов
СпрНапр.ВыбратьЭлементы();
Пока СпрНапр.ПолучитьЭлемент()=1 Цикл
СписокНаправлений.ДобавитьЗначение(СпрНапр.Направление);
КонецЦикла;
ИначеЕсли кРежим="УдалитьВсе" Тогда // удаляем все элементы из списка
Список.УдалитьВсе();
ИначеЕсли кРежим="Удалить" Тогда // удаляем из списка один элемент
ТекПоз = Список.ТекущаяСтрока();
Если ТекПоз>0 Тогда
Список.УдалитьЗначение(ТекПоз);
КонецЕсли;
КонецЕсли;
Возврат;
КонецЕсли;
ТекПоз = Список.ТекущаяСтрока();
Если ТекПоз>0 Тогда
ТекЭлемент=Список.ПолучитьЗначение(ТекПоз);
КонецЕсли;
Если кРежим="Добавить" Тогда // добавляем в список один элемент
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,0,ТекЭлемент);
//Если ВРег(ТипСправочника)<>"ВИДЫКАТЕГОРИИ" Тогда
Фрм.ВыборГруппы(1);
ИначеЕсли кРежим="ДобавитьНесколько" Тогда // добавляем в список несколько элементов
СписокПодбора = Список;
СправочникПодбора = ВРег(ТипСправочника);
// открываем окно подбора
ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,1,ТекЭлемент);
Фрм.ВыборГруппы(1);
ИначеЕсли кРежим="УдалитьВсе" Тогда // удаляем все элементы из списка
Список.УдалитьВсе();
ИначеЕсли кРежим="Удалить" Тогда // удаляем из списка один элемент
Если ТекПоз>0 Тогда
Список.УдалитьЗначение(ТекПоз);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // работа со списком