Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Нужна помощь с ТЗ и выгрузкой из нее.          
EritikWoW Подменю пользователя
сообщение 23.07.15, 1:39
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

Внешнаяя обработка: Отчет-выгрузка по продажам..
Брал за основу готовый "универсальный отчет по продажам"

Знаю что портянка но боюсь без нее суть будет не очень понятна...

Есть ТЗ по именем "ТБ" в нее я закинул заполнение Табличной части "Документ"
При сверте данный кусок таблицы пропадает... если прописать "Документ" в свертку... тогда не идет расчет "сумм,себестоимости,ндса и т.д.)
Может посоветует кто как решить данную проблему ?

// Настройка периода
Перем НП Экспорт;
Перем ТаблицаТД Экспорт;
Перем ТаблицаТБ Экспорт;


Процедура ПродажиПоКлиентам(ТабДок) Экспорт

    Макет = ПолучитьМакет("ПродажиПоКлиентам");
    
    
    Запрос = Новый Запрос;
    ТекстЗапроса =
     "ВЫБРАТЬ
     |    ХозрасчетныйДвиженияССубконто.Регистратор.Дата КАК ДатаПр,
     |    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент КАК Контрагент,
     |    ХозрасчетныйДвиженияССубконто.СубконтоКт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='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки);
        КонецПопытки;
        
    
    Возврат;
    
    Иначе
        Возврат
    КонецЕсли;
    
КонецПроцедуры

НП = Новый НастройкаПериода;
НП.УстановитьПериод(НачалоНедели(РабочаяДата),КонецНедели(РабочаяДата),Истина);

ДатаНач = НП.ПолучитьДатуНачала();
ДатаКон = НП.ПолучитьДатуОкончания();




sava1 Подменю пользователя
сообщение 23.07.15, 7:15
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

Так много бестолковых букофф. Может, немного почитать про запросы и тз ?

TipsyKID Подменю пользователя
сообщение 23.07.15, 10:51
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 413
Из: Киев
Спасибо сказали: 161 раз
Рейтинг: 0

Сложно разобраться в Вашем алгоритме, что смог подправил, но думаю следует использовать конструкцию
    СтруктураОтбора = Новый Структура("Док,ТМЦ");
    СтруктураОтбора.Док = СтрокаТаблицы.Док;
    СтруктураОтбора.ТМЦ = СтрокаТаблицы.ТМЦ;
    НайденныеСтроки = ТБ.НайтиСтроки(СтруктураОтбора);

Таким способом можно найти строки в ТБ в которых и нужный док и тмц находятся в одной строке а не в разных ( что возможно по Вашему алгоритму)
Поправленная часть :
    ТБ = Результат.Выгрузить();
    ТБ.Колонки.Добавить("СуммаСебестоимость");
    ТБ.Колонки.Добавить("Документ");
    
    ТДСебестоимость = РезультатСебестоимость.Выгрузить();
    
    Для каждого СтрокаТаблицы Из ТДСебестоимость Цикл
        НеНайденНеобходимыйДокумент = ТБ.Найти(СтрокаТаблицы.Док,"Док") = Неопределено;
        НайденнаяСтрокаСНоменклатурой = ТБ.Найти(СтрокаТаблицы.ТМЦ,"ТМЦ");
        НеНайденаНеобходимаяНоменклатура = НайденнаяСтрокаСНоменклатурой = Неопределено;
        ПустыеСуммыИКоличествоВСтрокеНоменклатуры = ?(НеНайденаНеобходимаяНоменклатура,Истина,НайденнаяСтрокаСНоменклатурой.Количество=0 И НайденнаяСтрокаСНоменклатурой.Сумма=0);
        
        Если НеНайденНеобходимыйДокумент ИЛИ НеНайденаНеобходимаяНоменклатура ИЛИ ПустыеСуммыИКоличествоВСтрокеНоменклатуры Тогда
            продолжить;
        КонецЕсли;
        
        НоваяСтрока = ТБ.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока,СтрокаТаблицы);
        НоваяСтрока.Документ = СтрокаТаблицы.Док;//--► идиотизм, одни и те же сущности называть по разному, где - то Документ а где - то Док.
    КонецЦикла;
    
    Для каждого СтрокаТаблицы Из ТБ Цикл
        Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.Док) Тогда
            Продолжить;
        КонецЕсли;    
        Если СтрокаТаблицы.Док.СуммаВключаетНДС = Истина Тогда
            СтрокаТаблицы.Сумма = СтрокаТаблицы.Сумма-СтрокаТаблицы.СуммаНДС;
        КонецЕсли;    
    КонецЦикла;


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Спасибо сказали: EritikWoW,

EritikWoW Подменю пользователя
сообщение 23.07.15, 11:06
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

Ребят я дико извиняюсь ! Просто:
1. Как я уже описал выше "Сам отчет писал не Я",
2. Я лишь пытаюсь его оптимизировать под себя с возможностью выгрузки результата в DBF и XML...
3. Ошибки в коде могут быть, бо работал с ним уже под утро, так что спасибо за подсказки =)

4. Может я не правильно описал... суть вопроса такова что после всех обработок из таблицы "ТБ" исчезает колонка "Документ" (оно и понятно), вот ток суть вопроса такова что могу я как то как мне сделать так что в обработку "Выгрузки" попала Эта самая колонка со всеми данными ?

p.s. не успел отредоктировать предыдущее сообщение !

sava1 Подменю пользователя
сообщение 23.07.15, 11:26
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

Цитата(EritikWoW @ 23.07.15, 2:39) *
ТБ.Свернуть("ДатаПр,КОнтрагент,ТМЦ","Количество,Сумма,СуммаНДС,СуммаСебестоимость");


ТБ.Свернуть("ДатаПр,Документ,КОнтрагент,ТМЦ","Количество,Сумма,СуммаНДС,СуммаСебестоимость");

Спасибо сказали: EritikWoW,

EritikWoW Подменю пользователя
сообщение 23.07.15, 11:41
Сообщение #6

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

ребят огромное спс ! Решил вопрос, исправлением запроса по совету "TipsyKID" и частичного совета "sava1" Большое спс !



ТБ.Колонки.Добавить("Документ"); // Удалил
НоваяСтрока.Документ = СтрокаТаблицы.Док;//--► идиотизм, одни и те же сущности называть по разному, где - то Документ а где - то Док. УДАЛИЛ
ТБ.Свернуть("ДатаПр,Док,КОнтрагент,ТМЦ","Количество,Сумма,СуммаНДС,СуммаСебестоимость");

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 01.11.24, 1:08
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!