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

Хранилище

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

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



> Выборка данных из необходимых документов , База 1с ТИС 7.7          
inna.innainna84 Подменю пользователя
сообщение 11.11.16, 23:07
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

//************************************   

Процедура ПечатьПоКатегориям()
    Перем Запрос,ТекстЗапроса, Таб;
    Времяначало= ТекущееВремя();
    СписокТоваров=СоздатьОбъект("СписокЗначений");
    СписокКлиентов=СоздатьОбъект("СписокЗначений");
    
    СС=СоздатьОбъект("СписокЗначений");
    ФормированиеСписка(СписокТоваров,"Номенклатура","КатегорииТоваров",ВыбТовар,КатТоваров,МФВыбТовары,МФКатТоваров);
    ФормированиеСписка(СписокКлиентов,"Контрагенты","КатегорииКонтрагентов",ВыбКлиент,КатКлиентов,МФВыбКлиенты,МФКатКлиентов);

    
            
    
    Запрос = СоздатьОбъект("Запрос");       
    ТекстПеременных =       
    "//{{ЗАПРОС(Сформировать)      
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Фирма =             Регистр.ПартииТоваров.Фирма;
    |Товар =             Регистр.ПартииТоваров.Товар;  
    |Контрагент=         Регистр.ПартииТоваров.Контрагент;
    |ТекДокумент =       Регистр.ПартииТоваров.ТекущийДокумент;
    |Вес =               Регистр.ПартииТоваров.Товар.Вес;
    |Нетто =             Регистр.ПартииТоваров.Товар.Нетто;
    |Категория =         Регистр.ПартииТоваров.Товар.КатегорияДляГруппировки;
    |Количество =        Регистр.ПартииТоваров.ОстатокТовара;
    |Оборот =            Регистр.ПартииТоваров.Оборот;  
    |";
                    
    ТекстФункций = "                  
    |Функция КолРасход =   Расход(Количество);                  
    |Функция Сумма =       Сумма(Оборот);                              
    |Функция ВесРасход =   Сумма(Запрос.КолРасход * Вес + Количество - Количество);
    |Функция НеттоРасход = Сумма(Запрос.КолРасход * Нетто + Количество - Количество);
    |";
    
    ТекстГруппировок = "      
    |Группировка Категория  без групп упорядочить по Категория.Наименование;  
    |";  
            
    ТекстУсловий = "
    |Условие(Фирма = ВыбФирма);
    |Условие(Товар в СписокТоваров);
    |Условие(Контрагент в СписокКлиентов) ;
    |Условие(ПустоеЗначение(Контрагент)=0);      
    |"//}}ЗАПРОС                      
;                       

    ТекстЗапроса = ТекстПеременных+РазделительСтрок+ТекстФункций+РазделительСтрок+ТекстГруппировок+РазделительСтрок+ТекстУсловий;

    Запрос = СоздатьОбъект("Запрос");
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;         
    
    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("проба");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    // посщитаем кол-во клиентов  
    
    
            
    Запрос.ВНачалоВыборки();  
    Пока Запрос.Группировка(1) = 1 Цикл
        
        Док=Запрос.ТекДокумент;  
        
        Если Док.Вид()="РасходнаяНакладная" Тогда         
            Если Док.ВидОперации=0 Тогда          

            КонецЕсли;
        КонецЕсли;
        
                    
                        
         Если Док.Вид()="ПриходнаяНакладная" Тогда
                    Если Док.ВидОперации=1 Тогда                   
        КонецЕсли;
    КонецЕсли;

    
        Таб.ВывестиСекцию("КатегорияТовара");         
    КонецЦикла;
    
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);  
    
    Таб.Показать("Сформировать по категории товара", "");
    
КонецПроцедуры  

//****************************************************************

Мне нужно выбрать сумму и колворасход из расходной накладной без возврата поставщику и из приходной без возврата покупателя, так как форма док едина. Я уже не знаю, что делать. Вариант указать Док.ВидОперации, но что-то по незнанию не получается. Подскажите пожалуйста.

inna.innainna84 Подменю пользователя
сообщение 12.11.16, 2:21
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

Все. Исключила не нужные документы.(Сумма(Оборот) когда ((Оборот>0) и (ТекДокумент.Вид() = ""РасходнаяНакладная"")или(Оборот<0) и (ТекДокумент.Вид() = ""ПриходнаяНакладная""))wink.gif Единственное хотелось бы чтобы быстрее формировался. Можно ли что-то подправить?
Запрос = СоздатьОбъект("Запрос");       
    ТекстПеременных =       
    "//{{ЗАПРОС(Сформировать)      
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Фирма =          Регистр.ПартииТоваров.Фирма;
    |Товар =           Регистр.ПартииТоваров.Товар;    
    |Контрагент=    Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент,Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Контрагент;
    |ТекДокумент = Регистр.ПартииТоваров.ТекущийДокумент;
    |Вес =               Регистр.ПартииТоваров.Товар.Вес;
    |Нетто =            Регистр.ПартииТоваров.Товар.Нетто;
    |Категория =     Регистр.ПартииТоваров.Товар.КатегорияДляГруппировки;
    |Количество =    Регистр.ПартииТоваров.ОстатокТовара;
    |Оборот =         Регистр.ПартииТоваров.Оборот;
    |";                  
    
    ТекстГруппировок = "      
    |Группировка Категория  без групп упорядочить по Категория.Наименование;  
    |";  
    ТекстФункций = "                  
    |Функция КолРасход =   Расход(Количество);
    |Функция Сумма =       Сумма(Оборот) когда ((Оборот>0) и (ТекДокумент.Вид() = ""РасходнаяНакладная"")или(Оборот<0) и (ТекДокумент.Вид() = ""ПриходнаяНакладная""));              
       |Функция ВесРасход =   Сумма(Запрос.КолРасход * Вес + Количество - Количество);
    |Функция НеттоРасход = Сумма(Запрос.КолРасход * Нетто + Количество - Количество);
    |";
    ТекстУсловий = "
    |Условие(Фирма = ВыбФирма);
    |Условие(ПустоеЗначение(Контрагент)=0);
    |Условие(Товар в СписокТоваров);
    |Условие(Контрагент в СписокКлиентов);

igmig65 Подменю пользователя
сообщение 12.11.16, 7:03
Сообщение #3

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 613
Из: Донецкая обл
Спасибо сказали: 168 раз
Рейтинг: 140.9

А попробуйте вставить условие в запрос, только по ПН и РН, тогда другие доки вообще не попадут в запрос и не нужно будет условие в функции, что вы добавили.
Ну и по Виду операции, тоже можно добавить условие, чтобы возвраты не попадали в запрос вообще.

inna.innainna84 Подменю пользователя
сообщение 12.11.16, 12:07
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

Если я не укажу Оборот>0 или Оборот<0 тогда вытягиваются возвраты. Вы имеете в виду
|Оборот = Регистр.ПартииТоваров.Оборот; исправить?
Если вам не тяжело можете привести пример.
igmig65 @ Сегодня, 7:03 * ,

nik389 Подменю пользователя
сообщение 12.11.16, 15:56
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 153
Из: Украина
Спасибо сказали: 37 раз
Рейтинг: 34

если база sql, используйте прямые запросы, например, через библиотечку 1cpp. Будет быстрее в разы

Спасибо сказали: inna.innainna84,

sava1 Подменю пользователя
сообщение 12.11.16, 16:43
Сообщение #6

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

Цитата(nik389 @ 12.11.16, 15:56) *
Будет быстрее в разы

Не будет - в семерке выборка из регистров практически оптимальна.

Спасибо сказали: inna.innainna84,

Sharzem Подменю пользователя
сообщение 12.11.16, 17:11
Сообщение #7

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Цитата(igmig65 @ 12.11.16, 7:03) *
А попробуйте вставить условие в запрос, только по ПН и РН, тогда другие доки вообще не попадут в запрос и не нужно будет условие в функции

//Добавьте условие
|Условие((ТекДокумент.Вид() = ""РасходнаяНакладная"") или (ТекДокумент.Вид() = ""ПриходнаяНакладная""));
//Измените функцию:
|Функция Сумма = Сумма(Оборот) когда (Оборот<>0);

Цитата(igmig65 @ 12.11.16, 7:03) *
Ну и по Виду операции, тоже можно добавить условие, чтобы возвраты не попадали в запрос вообще.

//Перед формированием текста запроса добавьте в список нужные коды операций, исключите те которые ниже:
СписКодыОпераций=СоздатьОбъект("СписокЗначений");
СписКодыОпераций.ДобавитьЗначение(ПродажаКупленногоТовара);
СписКодыОпераций.ДобавитьЗначение(ПродажаКупленногоПереданногоТовара);
СписКодыОпераций.ДобавитьЗначение(РозничнаяПродажаКупленногоТовара);
СписКодыОпераций.ДобавитьЗначение(ВозвратТовараОтПокупателя);
СписКодыОпераций.ДобавитьЗначение(ВозвратКупленногоПереданногоТовара);
СписКодыОпераций.ДобавитьЗначение(ВозвратРозничныйКупленногоТовара);
СписКодыОпераций.ДобавитьЗначение(ПродажаПринятогоТовара);
СписКодыОпераций.ДобавитьЗначение(ПродажаПринятогоПереданногоТовара);
СписКодыОпераций.ДобавитьЗначение(РозничнаяПродажаПринятогоТовара);
СписКодыОпераций.ДобавитьЗначение(ВозвратПринятогоТовараОтПокупателя);
СписКодыОпераций.ДобавитьЗначение(ВозвратПринятогоПереданногоТовара);
СписКодыОпераций.ДобавитьЗначение(ПродажаУслуги);
СписКодыОпераций.ДобавитьЗначение(СторноПродажаУслуги);

//Добавьте переменную;
|КодОперации=Регистр.ПартииТоваров.КодОперации;
//Также условие
|Условие (КодОперации В СписКодыОпераций);


От себя повторяю еще раз: У Вас в Регистр.ПартииТоваров.Фирма пусто ! Используйте Фирма = Регистр.ПартииТоваров.ТекущийДокумент.Фирма;

sava1 @ Сегодня, 16:43 * ,
Цитата(sava1 @ 12.11.16, 16:43) *
в семерке выборка из регистров практически оптимальна

Могу согласиться но только частично, если Без итогов в 2-3 этажа то разница не очень ощутима, но вот если с отбором итогов и + многоэтажность - прямые выиграют.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: inna.innainna84,

sava1 Подменю пользователя
сообщение 12.11.16, 17:14
Сообщение #8

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

Цитата(Sharzem @ 12.11.16, 17:11) *
Могу согласиться но только частично

Все в мире относительно. А если не попасть в индексы - то прямой запрос выдаст еще похуже результат.

Sharzem Подменю пользователя
сообщение 12.11.16, 17:18
Сообщение #9

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

sava1 @ Сегодня, 17:14 * ,
Цитата(sava1 @ 12.11.16, 17:14) *
если не попасть в индексы

Так он ведь 1 срр дергает, она сама разложит за 1,5 сек.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: inna.innainna84,

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

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

Да не разложит. 1sqlite - старается попасть, а срр - нифига.

nik389 Подменю пользователя
сообщение 12.11.16, 20:01
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 153
Из: Украина
Спасибо сказали: 37 раз
Рейтинг: 34

sava1 @ Сегодня, 17:51 * ,
А это как запрос напишите.
Насчет оптимальной выборки из регистров..нуу.. доводилось переписывать черные запросы к регистрам на прямые. И всегда работало быстрее, - и чем больший период попадал в выборку, тем существеннее было различие по времени

sava1 Подменю пользователя
сообщение 12.11.16, 20:31
Сообщение #12

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

Цитата(nik389 @ 12.11.16, 20:01) *
И всегда работало быстрее

Только при наложении фильтров, которые правильно попадали в индекс

Спасибо сказали: inna.innainna84,

inna.innainna84 Подменю пользователя
сообщение 13.11.16, 22:24
Сообщение #13

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

1.Регистр.ПартииТоваров.Фирма пусто ! Используйте Фирма = Регистр.ПартииТоваров.ТекущийДокумент.Фирма если изменить вытягивает не понятные данные
2.Добавила через КодОперации все отлично работает быстрее прежнего приблизительно на 00:00;17, но Контрагент нужно указать через нужные документы иначе суммы не верны.
Запрос = СоздатьОбъект("Запрос");       
    ТекстПеременных =       
    "//{{ЗАПРОС(Сформировать)      
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Фирма =             Регистр.ПартииТоваров.Фирма;
    |Товар =             Регистр.ПартииТоваров.Товар;
    |Категория =         Регистр.ПартииТоваров.Товар.КатегорияДляГруппировки;
    |Вес =               Регистр.ПартииТоваров.Товар.Вес;
    |Нетто =             Регистр.ПартииТоваров.Товар.Нетто;
    |ТекДокумент =       Регистр.ПартииТоваров.ТекущийДокумент;    
    |Контрагент=         Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент,Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Контрагент;
    |Количество =        Регистр.ПартииТоваров.ОстатокТовара;
    |Оборот =            Регистр.ПартииТоваров.Оборот;
    |КодОперации=        Регистр.ПартииТоваров.КодОперации;
    |";                  
    
    ТекстГруппировок = "      
    |Группировка Категория  без групп упорядочить по Категория.Наименование;  
    |";  
    ТекстФункций = "                  
    |Функция КолРасход =   Расход(Количество);
    |Функция Сумма =       Сумма(Оборот);            
       |Функция ВесРасход =   Сумма(Запрос.КолРасход * Вес + Количество - Количество);
    |Функция НеттоРасход = Сумма(Запрос.КолРасход * Нетто + Количество - Количество);
    |";
    ТекстУсловий = "
    |Условие (Фирма = ВыбФирма);
    |Условие (ПустоеЗначение(Контрагент)=0);    
//    |Условие (Оборот<>0);  
    |Условие (КодОперации В СписКодыОпераций);
    |Условие (Товар в СписокТоваров);
    |Условие (Контрагент в СписокКлиентов);
    |"//}}ЗАПРОС                      
;

sava1 @ Вчера, 20:31 * ,

Sharzem Подменю пользователя
сообщение 14.11.16, 0:25
Сообщение #14

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Цитата(inna.innainna84 @ 13.11.16, 22:24) *
Фирма если изменить вытягивает не понятные данные

upset.gif Данные не могут быть разными или непонятными. При запросе Фирма = Регистр.ПартииТоваров.Фирма; и Фирма = Регистр.ПартииТоваров.ТекущийДокумент.Фирма; возвращается одно и тоже. В первом случае лезем в регистр, а во втором в документ который в этот регистр сделал запись.
Сами посмотрите в движения документа по регистру (правая кнопка мыши на проведенный ПН или РН, движения документа, партии товаров, Ок), в измерение фирма пусто или записана фирма ? Если записана, значит смотрите в регистр, а если все же пусто тогда в документ. У Вас реквизит "Фирма" общий реквизит документов.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: inna.innainna84,

Serg_XX Подменю пользователя
сообщение 14.11.16, 15:09
Сообщение #15

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

inna.innainna84
Извините, что влезаю в Ваше обсуждение. Чтобы Вы правильно обращались с данными регистров,
нужно знать, что в торговле, при включенном механизме фин. учета, в регистрах, ведущих суммовой
учет (в т.ч. и регистре "Партии товаров"), на каждое движение формируются две записи: одна со
значением "Фирма" (в регистре) равном зтому значению в документе и в валюте фин. учета; вторая
со значением "Фирма" равным Пустому значению справочника "Фирмы" и в валюте управленческого учета.
Какими бы ни были Ваши требования к отчету, во внутреннюю переменную запроса "Фирма" нужно выбирать
данные из регистра (а не документа - документ же в обеих случаях один и тот же) и, естественно указывать
   |Условие (Фирма = ВыбФирма);
, где "ВыбФирма" или конкретная фирма или пустое значение типа "Справочник.Фирмы" иначе
будет или задвоение, если фин. и упр. учеты в одной валюте, или вообще каша - если в разных.

Спасибо сказали: inna.innainna84,

inna.innainna84 Подменю пользователя
сообщение 16.11.16, 1:52
Сообщение #16

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

Serg_XX @ 14.11.16, 15:09 * ,
Sharzem @ 14.11.16, 0:25 * ,
Я посмотрела, что пишет в регистры партии товара,
1)записи дублирует фирма-пусто и фирма с данными
2)контрагент и поставщик сюда записывает только поставщика который поставлял проданный товар в этой накладной. он не записывает контрагента в этом документе. Вот почему у меня не получалось правильно сформировать данные
Срабатывало только так:
|Контрагент= Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Контрагент,Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Контрагент;
3)Если уж так придираться мне вообще не стоило брать из регистра партии данные для отчета,
Возникла идея Дописать и откоректировать Регистр ОборотПродаж
1) в расходной, поставить условие , что вид документа=0 тогда данные из возврата поставщику сюда не подтянутся.
2) в приходной, поставить условие , что вид документа=1 тогда данные из возврата покупателя сюда не подтянутся.
3)Провести все документы за нужный период.

Sharzem Подменю пользователя
сообщение 16.11.16, 15:41
Сообщение #17

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

inna.innainna84 @ Сегодня, 1:52 * ,
Инна, не лезьте туда, плиз...
Я бы Вам порекомендовал это сделать еще в предыдущей теме, но там все настолько запущено, что ппц.
Используйте то что имеете. Не лезьте в наследие авантюризма по регистру "Обороты продаж" дабы не породить еще больше проблем.
Пройдет время, изучите конфигурацию, наберетесь опыта и только тогда будете корректировать, Вам пока еще рановато.
По добавлению данных в регистр Вам нужно заключение, это смогут сделать только специалисты (по результатам полного анализа), все остальное породит только новые грабли.

ЗЫ: Мы с Вами когда-то по этому поводу уже общались. Форум Вам реально в Вашей ситуации не поможет.


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: inna.innainna84,

inna.innainna84 Подменю пользователя
сообщение 16.11.16, 23:47
Сообщение #18

Завсегдатай
****
Группа: Пользователи
Сообщений: 108
Спасибо сказали: 2 раз
Рейтинг: 0

Да я согласна с вами опыта у меня нет. Коректировать регистр мне поможет знакомый специалист по 1с. (Правда к нему очень трудно достучатся). Все что я делаю я сначала тестирую на копии. Спасибо огромное вам за поучения. Sharzem @ Сегодня, 15:41 * ,

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


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

 

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