Имя: Пароль:
1C
1С v8
БП 1,6 ДокументЫ основания
,
0 Gray776
 
13.08.13
08:18
У меня вопрос я думаю довольно простой но вот никак не могу сообразить как сделать:
А именно как в БП 1,6 определить 1 док.Основание или несколько. Ну типа если 1 то и ладно если несколько то буду перебирать в цикле.
1 Starhan
 
13.08.13
08:19
(0) Наверное есть табличная часть Документы основания, в случае если у дока есть несколько документов основания
и реквизит ДокументОснования если 1.

Получается смотрим есть ли ТЧ и сколько там документов, если нет смотрим еть ли реквизит не?
2 Gray776
 
13.08.13
08:19
P.S.: Блин совсем забыл: документы основания для Счетов фактур
3 Gray776
 
13.08.13
08:22
(1)Да есть табличная часть. Но она видима только если на форме галочку поставить "Список" А у самого счета фактуры реквизита такого нет он тока на форме.
4 Gray776
 
13.08.13
13:18
Если Документ.СчетФактура.ДокументыОснования.Количество()>1  Тогда

Хмм... вот так думаю определится со счетами фактуры имеющими больше одного основания. Верно?
5 wPa
 
13.08.13
13:23
БП 1.6 %) не поддерживается с апреля  2011 года
6 wPa
 
13.08.13
13:23
(0) Запросом к ТЧ
7 Gray776
 
13.08.13
13:24
(5) Упс я спросил когда ее с поддержки сняли и даже сам не заметил где во делаааа...
8 Gray776
 
13.08.13
13:24
(6) Это когда буду перебирать докиОснования?
9 wPa
 
13.08.13
13:27
(7) просто интересно как вы баланс сдаете по старой форме и авансы переоцениваете )

(8) Количество() - такая агрегирующая функция
10 Gray776
 
13.08.13
13:30
(9) :))) Незнаю я не бух я не сдаю отчеты... И даже не я решаю какую версию 1с использовать в организации :)))
11 Starhan
 
13.08.13
13:32
(10) надеюсь ты базу в живую видел. А то кто-то кому-то что-то неправильно передал и ты пилишь на 1.6 :).

Хотя есть большие организации с перепиленной БП 1.6 где допиливают регламентированные отчеты :)
12 Gray776
 
13.08.13
13:33
(9)Я пытаюсь прикрутить недостающее до БП 1,6 ну по мере того что у меня бухи просят, или отправить их в основной офис просить перейти на более современную версию программы. :)))
Если честно задолбался до матершинного слова но повторюсь ни меня ни бухов не слушают и требуют делать все на том что есть
13 mistеr
 
13.08.13
13:33
(0) В БП 2.0 ТЧ заполняется, даже если док-основание один. В 1.6 разве не так? Если так, то не вижу смысла определять, проще просто перебирать ТЧ. А еще лучше запросом.
14 hhhh
 
13.08.13
13:40
(12) ну ты им скажи, есть БП 3.0, покупать ее не надо, она у вас есть. Переходите и работайте. То есть у вас есть 1.6, 2.0 и 3.0. Это всё то, что есть.
15 hhhh
 
13.08.13
13:42
(14)+ или ты хотел с них бабки слупить за перевод? Сказал стоит миллион баксов, они и кочевряжатся?
16 Gray776
 
13.08.13
13:43
(11) Конечно видел. Переделываю малость журнал учета счетов фактур. И не спрашивайте как бухи до этого времени с этим вопросом справлялись не в курсе...
17 Gray776
 
13.08.13
13:48
(14)(15) Ну вроде как С Нового Года обещали на 3,0 переходить до этого времени работать с тем что есть ... Самый главный (О_о) программист в конторе так сказал (это не я) В 1С ведется несколько Организаций и перейти только одной организации на другую версию не дают. Ну я так их понял.
18 Gray776
 
13.08.13
13:50
Ну ладно буду пробовать что то более менее приемлемое изобразить из журнала...
19 Gray776
 
13.08.13
14:10
//********************
Если Документ.СчетФактура.ДокументыОснования.Количество()>1  Тогда
    Для Каждого СтрокаТЧ Из Документ.СчетФактура.ДокументыОснования Цикл
        Сообщить("Несколько оснований "+Документ.СчетФактура.ДокументыОснования[0].ДокументОснование);
    КонецЦикла;

иначе
                
        Сообщить("Одно основание "+Документ.СчетФактура.ДокументыОснования[0].ДокументОснование);
КонецЕсли;
//********************
        
Кароче если кому интересно приблизительно об этом шла речь.
Естественно просто сообщать где сколько оснований нафик не надо это типа отладки у меня такое...
20 Starhan
 
13.08.13
14:13
(19) косяк
21 Gray776
 
13.08.13
14:14
(20)Где?
  Сообщить("Несколько оснований "+Документ.СчетФактура.ДокументыОснования[0].ДокументОснование);

Тут?
22 Gray776
 
13.08.13
14:51
Блин точно почему удваивает количество строк не понимаю...
23 hhhh
 
13.08.13
15:01
правильнее

Если Документ.СчетФактура.ДокументыОснования.Количество()>0  Тогда
24 hhhh
 
13.08.13
15:04
а, понял. не то
25 hhhh
 
13.08.13
15:06
вот это какой-то бред

   Для Каждого СтрокаТЧ Из Документ.СчетФактура.ДокументыОснования Цикл
        Сообщить("Несколько оснований "+Документ.СчетФактура.ДокументыОснования[0].ДокументОснование);
    КонецЦикла;

странный кусок
26 salvator
 
13.08.13
15:08
Если Документ.СчетФактура.ДокументыОснования.Количество()>1  Тогда
     Сообщить("Несколько оснований:");
    Для Каждого СтрокаТЧ Из Документ.СчетФактура.ДокументыОснования Цикл
        Сообщить(""+СтрокаТЧ.ДокументОснование);
    КонецЦикла;

иначе
                
        Сообщить("Одно основание "+Документ.СчетФактура.ДокументыОснования[0].ДокументОснование);
КонецЕсли;
27 zbv
 
13.08.13
15:08
А ведь может так быть, что основание одно, а строк в ТЧ - две, ссылка на один и тот же док. основание два раза... или исключено ?
28 Gray776
 
13.08.13
15:29
(27) Незнаю но я пробовал счетчик воткнуть выдавало:

первое основание
второе основание
первое основание
второе основание

А если цикл со счетчиком так вообще ошибка
29 Gray776
 
13.08.13
15:36
(26) Что-то с этим кодом непонятное в чем фишка то?
наводит на мысль что цикл лишний а?
Одно основание Поступление товаров и услуг *** от ***
Несколько оснований:
Поступление товаров и услуг 1859 от 26.05.2013 8:00:00
Поступление товаров и услуг 1860 от 26.05.2013 8:00:00
Несколько оснований:
Поступление товаров и услуг 1859 от 26.05.2013 8:00:00
Поступление товаров и услуг 1860 от 26.05.2013 8:00:00
Одно основание Поступление товаров и услуг **** от ****
30 salvator
 
13.08.13
15:37
(29) Значит у тебя это все еще в одном цикле крутится.
31 Starhan
 
13.08.13
15:37
(29) покажи как выборку документов получаешь
32 Gray776
 
13.08.13
15:48
(31)
        Документ = СчетФактура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Пока Документ.Следующий() Цикл
****************************
****************************
//Тут ставлю условие  
//
КонецЦикла;
33 salvator
 
13.08.13
15:50
(32) Полностью код покажи.
34 Gray776
 
13.08.13
15:51
Кстати когда я пробовал индекс менять в цикле тоже самое получалось только в 4 строчки
Поменял цикл на цикл со счетчиком простой и в качестве индекса воткнул счетчик цикла выдает 2 строчки (Их столько и есть в табличной части) и потом ошибку пытается вывести третью строку которой нет
35 Gray776
 
13.08.13
15:55
(34) То что между звездочками я добавлял, ну и вот весь код функции:

Функция ВыводСтрокиПолуч(СчетФактура, Секция, МассивПрефиксовДляРИБиОрганизации)

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

            Если УстановитьПараметры Тогда
                УстановитьПараметры = Ложь;
                Секция.Параметры.Заполнить(Документ);
            КонецЕсли;                    
            Если НЕ ПустаяСтрока(ПредставлениеОснования) Тогда
                ПредставлениеОснования = ПредставлениеОснования + Символы.ПС;
            КонецЕсли;
                    
            ПредставлениеТипа = ПолучитьПредставлениеПоТипу(ТипЗнч(Документ.ДокументОснование));
                    
            Если Не ПредставлениеТипа = Неопределено Тогда
                ПредставлениеОснования = ПредставлениеОснования + ПредставлениеТипа + " № " + ОбщегоНазначения.ПолучитьНомерНаПечать(Документ.ДокументОснование, МассивПрефиксовДляРИБиОрганизации) + " от "+ Формат(Документ.ДокументОснованиеДата, "ДФ=dd.MM.yyyy") + " г.";
            Иначе    
                ПредставлениеОснования = ПредставлениеОснования + Строка(Документ.ДокументОснование);
            КонецЕсли;
            Секция.Параметры.ПредставлениеОснования = ПредставлениеОснования;
                    
            Секция.Параметры.Контрагент = ПараметрыСФ.Контрагент;
            Если ЗначениеЗаполнено(ПараметрыСФ.Контрагент)  Тогда
                Секция.Параметры.КонтрагентНаименование = ?(ПустаяСтрока(ПараметрыСФ.Контрагент.НаименованиеПолное),СокрЛП(ПараметрыСФ.Контрагент),СокрЛП(ПараметрыСФ.Контрагент.НаименованиеПолное));
                КПП_пок = ПараметрыСФ.Контрагент.КПП;
                Если ЗначениеЗаполнено(КПП_пок) Тогда
                    КПП_пок = " / " + КПП_пок;
                КонецЕсли;
                Секция.Параметры.ИННПокуп = ""+ПараметрыСФ.Контрагент.ИНН+КПП_пок;     
            КонецЕсли;
            Если ТипЗнч(Документ.ДокументОснование) = Тип("ДокументСсылка.ГТДИмпорт") Тогда
                Секция.Параметры.Номер = "ГТД № " + Документ.НомерВходящегоДокумента;
            Иначе
                Секция.Параметры.Дата = Документ.НомерВходящегоДокумента;
                Секция.Параметры.Номер = Формат(Документ.ДатаВходящегоДокумента, "ДФ=dd.MM.yyyy");
                Секция.Параметры.Дата2=Формат(Документ.ДатаРегистрации, "ДФ=dd.MM.yyyy");
                Секция.Параметры.Валюта = ?(Документ.СуммаДокумента = 0,"","" + Документ.ВалютаДокумента.НаименованиеПолное + ", " + Документ.ВалютаДокумента.Код);
            КонецЕсли;
        КонецЦикла;

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

            Если УстановитьПараметры Тогда
                УстановитьПараметры = Ложь;
                Секция.Параметры.Заполнить(Документ);
                Секция.Параметры.Сумма = ?(СчетФактура.СуммаДокумента = 0, "", Формат(СчетФактура.СуммаДокумента, "ЧЦ=19; ЧДЦ=2"));  
                Секция.Параметры.Валюта = ?(Документ.СуммаДокумента = 0,"","" + Документ.ВалютаДокумента.НаименованиеПолное + ", " + Документ.ВалютаДокумента.Код);

            КонецЕсли;                    
            Если НЕ ПустаяСтрока(ПредставлениеОснования) Тогда
            //    //Секция.Параметры.ДокументОснование = Документ.ДокументОснование;
            //Иначе
                ПредставлениеОснования = ПредставлениеОснования+Символы.ПС;
            КонецЕсли;
            ПредставлениеТипа = ПолучитьПредставлениеПоТипу(ТипЗнч(Документ.ДокументОснование));
            Если Не ПредставлениеТипа = Неопределено Тогда
                ПредставлениеОснования = ПредставлениеОснования + ПредставлениеТипа + " № " + ОбщегоНазначения.ПолучитьНомерНаПечать(Новый Структура("Организация, Номер", Организация, Документ.ДокументОснованиеНомер),МассивПрефиксовДляРИБиОрганизации) + " от " + Формат(Документ.ДокументОснованиеДата, "ДФ=dd.MM.yyyy") + " г.";
            Иначе    
                ПредставлениеОснования = ПредставлениеОснования + Строка(Документ.ДокументОснование);
            КонецЕсли;
            Если ТипЗнч(Документ.ДокументОснование) = Тип("ДокументСсылка.ГТДИмпорт") Тогда
                Секция.Параметры.Номер = "ГТД № " + Документ.НомерВходящегоДокумента;
            Иначе
                Секция.Параметры.Дата = Формат(Документ.ДатаВходящегоДокумента, "ДФ=dd.MM.yyyy");
                Секция.Параметры.Номер = "" + Документ.НомерВходящегоДокумента;
                Секция.Параметры.Дата2=Формат(Документ.ДатаРегистрации, "ДФ=dd.MM.yyyy");
            КонецЕсли;
//***********************************************************************************************************************            
                
                Если ТипЗнч(Документ.ДокументОснование) = Тип("ДокументСсылка.ОтражениеПоступленияТоваровИУслугНДС")Тогда
                    СуммаНДС = Документ.ДокументОснование.ТоварыИУслуги.Итог("СуммаНДС");
                    Секция.Параметры.СуммаНДС=?(СуммаНДС>0,Формат(СуммаНДС, "ЧЦ=19; ЧДЦ=2"),"-");
                ИначеЕсли ТипЗнч(Документ.ДокументОснование) = Тип("ДокументСсылка.ВозвратТоваровОтПокупателя") Тогда
                    СуммаНДС=Документ.ДокументОснование.Товары.Итог("СуммаНДС");     
                    Секция.Параметры.СуммаНДС=?(СуммаНДС>0,Формат(СуммаНДС, "ЧЦ=19; ЧДЦ=2"),"-");
                    
                ИначеЕсли Документ.ДокументОснование.УчитыватьНДС тогда
                            СуммаНДС=Документ.ДокументОснование.Товары.Итог("СуммаНДС") + Документ.ДокументОснование.Услуги.Итог("СуммаНДС");     
                            Секция.Параметры.СуммаНДС=?(СуммаНДС>0,Формат(СуммаНДС, "ЧЦ=19; ЧДЦ=2"),"-");
                КонецЕсли;
            
//***********************************************************************************************************************            
            КПП_пок = Документ.ДокументОснование.Контрагент.КПП;
            Если ЗначениеЗаполнено(КПП_пок) Тогда
                КПП_пок = " / " + КПП_пок;
            КонецЕсли;
            Секция.Параметры.ИННПокуп = ""+Документ.ДокументОснование.Контрагент.ИНН+КПП_пок;
            Секция.Параметры.КодОпер="01"; //всегда при поступлении товаров    
            Если ТипЗнч(Документ.СчетФактура)= Тип("ДокументСсылка.СчетФактураПолученный") тогда
                Если Документ.СчетФактура.НаАванс тогда
                    Секция.Параметры.КодОпер="02";
                иначе
                    Секция.Параметры.КодОпер="01";  
                конецЕсли;
            конецЕсли;
//********************
Если Документ.СчетФактура.ДокументыОснования.Количество()>1  Тогда
     Сообщить("Несколько оснований:");
    Для Каждого СтрокаТЧ Из Документ.СчетФактура.ДокументыОснования Цикл
        Сообщить(""+СтрокаТЧ.ДокументОснование);
    КонецЦикла;

иначе
                
        Сообщить("Одно основание "+Документ.СчетФактура.ДокументыОснования[0].ДокументОснование);
КонецЕсли;
//Если Документ.СчетФактура.ДокументыОснования.Количество()>1  Тогда
//    Для ш=0 По Документ.СчетФактура.ДокументыОснования.Количество() Цикл
//        Сообщить("Несколько оснований "+Документ.СчетФактура.ДокументыОснования[ш].ДокументОснование);
//    КонецЦикла;

//иначе
//                
//        Сообщить("Одно основание "+Документ.СчетФактура.ДокументыОснования[0].ДокументОснование);
//КонецЕсли;
//********************
        
    КонецЦикла;
        //Секция.Параметры.ПредставлениеОснования = ПредставлениеОснования;
      
        
    КонецЕсли;
    
    Если ПустаяСтрока(ПредставлениеОснования) Тогда
        Возврат Ложь;
    КонецЕсли;

    Возврат Истина;

КонецФункции //ВыводСтроки()
36 salvator
 
13.08.13
16:09
В выборке результата запроса счета-фактуры есть повторяющиеся?
37 hhhh
 
13.08.13
16:12
(35) совершенно правильно у тебя работает.

Если два основания у счета фактуры, значить он будет выдаваться два раза, и в нем две строчки.

Значит получим, 2х2 = 4. Должно выдать четыре сообщения. Оно тебе четыре и выдает.
38 salvator
 
13.08.13
16:15
...
Иначе
   ...
   УстановитьПараметры = Истина;
   ...
   Пока Документ.Следующий() Цикл
   Если Не Документ.СчетФактура.Проведен тогда    
      ...
      Если УстановитьПараметры Тогда
         УстановитьПараметры = Ложь;

Что за ерундень?
39 Gray776
 
13.08.13
16:18
(37) Я приблизительно так и подумал что удваивает но с вашего объяснения я не понял как с этим боротся :)
(38) Не я писал я только подправляю но я так нонимаю это относится к Общим модулям или нет?
40 Gray776
 
13.08.13
16:19
(37) То что я писал "а цикл тут лишний"?
41 salvator
 
13.08.13
16:22
39) Причем тут общий модуль?
Сначала:
УстановитьПараметры = Истина;
Потом:
Если УстановитьПараметры Тогда
   УстановитьПараметры = Ложь;

В чем смысл сего действа?
42 hhhh
 
13.08.13
16:25
(39) ну вот это

       Документ = СчетФактура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Пока Документ.Следующий() Цикл


СчетФактура - это документы Реализации похоже

и когда Если Документ.СчетФактура.ДокументыОснования.Количество()>1  Тогда

Документ.СчетФактура дублируется.



может массив счетов фактур вести и проверять, чтобы два раза не повторялись?
43 Gray776
 
13.08.13
16:26
(41)Хмм я так понимаю смысл этого сменить значение истины на лож в переменной УстановитьПараметры
Нда блин буду теперь смотреть на что эти параметры влияют
44 hhhh
 
13.08.13
16:27
вообще-то надо взять кувалду и настучать бухам по голове. Чтобы у них четко было соответствие. Один к одному.
45 Gray776
 
13.08.13
16:27
(42)(41) таксь кажется понял но надо все проверить
46 Gray776
 
13.08.13
16:28
(44) :))) самое дельное предложение
47 salvator
 
13.08.13
16:28
(45) Запрос такой же жуткий, как эта функция?
48 Gray776
 
14.08.13
07:20
А вот я тут подумал если документ даже и дублируется то почему вот это:

Если Документ.СчетФактура.ДокументыОснования.Количество()>1  Тогда
    Для ш=0 По Документ.СчетФактура.ДокументыОснования.Количество() Цикл
        Сообщить("Несколько оснований "+Документ.СчетФактура.ДокументыОснования[ш].ДокументОснование);
    КонецЦикла;

иначе
                
        Сообщить("Одно основание "+Документ.СчетФактура.ДокументыОснования[0].ДокументОснование);
КонецЕсли;

Вылетает с ошибкой при попытке вывести 3ю из 2х строк?
У меня теперь такое ощущение что

Документ.СчетФактура.ДокументыОснования.Количество()

Выдает неверное количество.
Или именно про это и разговор?
49 Gray776
 
14.08.13
07:31
(47) От он какой:

Функция ПодготовитьОтчетКВыводуНаПечатьПолуч()
    
    // Документы с реквизитом Предъявлен счет-фактура
    
    МассивДокументовСДаннымиСФ = УчетНДС.ПолучитьИменаДокументовСДаннымиСФ();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    РеестрСчетовФактур.СчетФактура КАК СчетФактура,
    |    РеестрСчетовФактур.ДатаРегистрации КАК ДатаРегистрации,
    |    РеестрСчетовФактур.ДатаВходящегоДокумента,
    |    РеестрСчетовФактур.НомерВходящегоДокумента,
    |    РеестрСчетовФактур.СуммаДокумента,
    |    РеестрСчетовФактур.ВалютаДокумента,
    |    РеестрСчетовФактур.Контрагент,
    |    ВЫБОР
    |        КОГДА ПОДСТРОКА(РеестрСчетовФактур.Контрагент.НаименованиеПолное, 1, 250) = """"
    |            ТОГДА РеестрСчетовФактур.Контрагент.Наименование
    |        ИНАЧЕ ПОДСТРОКА(РеестрСчетовФактур.Контрагент.НаименованиеПолное, 1, 250)
    |    КОНЕЦ КАК КонтрагентНаименование,
    |    РеестрСчетовФактур.ДокументОснование,
    |    РеестрСчетовФактур.ДокументОснованиеДата,
    |    РеестрСчетовФактур.ДокументОснованиеНомер,
    |    РеестрСчетовФактур.ОпределитьПараметрыСчетаФактуры
    |ИЗ
    |    (ВЫБРАТЬ
    |        СчетФактураПолученный.Ссылка КАК СчетФактура,
    |        СчетФактураПолученный.Ссылка.Дата КАК ДатаРегистрации,
    |        СчетФактураПолученный.ДокументОснование КАК ДокументОснование,
    |        ВЫБОР
    |            КОГДА СчетФактураПолученный.Ссылка.СформированПриВводеНачальныхОстатковНДС
    |                ТОГДА СчетФактураПолученный.Ссылка.СуммаДокумента
    |            КОГДА СчетФактураПолученный.Ссылка.НаАванс
    |                ТОГДА СчетФактураПолученный.Ссылка.СуммаДокумента
    |            ИНАЧЕ СчетФактураПолученный.ДокументОснование.СуммаДокумента
    |        КОНЕЦ КАК СуммаДокумента,
    |        СчетФактураПолученный.Ссылка.ДатаВходящегоДокумента КАК ДатаВходящегоДокумента,
    |        СчетФактураПолученный.Ссылка.НомерВходящегоДокумента КАК НомерВходящегоДокумента,
    |        ВЫБОР
    |            КОГДА СчетФактураПолученный.Ссылка.НаАванс
    |                ТОГДА СчетФактураПолученный.Ссылка.Контрагент
    |            КОГДА СчетФактураПолученный.ДокументОснование ССЫЛКА Документ.АвансовыйОтчет
    |                ТОГДА ВложенныйЗапрос.Контрагент
    |            ИНАЧЕ СчетФактураПолученный.ДокументОснование.Контрагент
    |        КОНЕЦ КАК Контрагент,
    |        СчетФактураПолученный.ДокументОснование.ВалютаДокумента КАК ВалютаДокумента,
    |        ВЫБОР
    |            КОГДА НЕ СчетФактураПолученный.Ссылка.НаАванс И СчетФактураПолученный.ДокументОснование ССЫЛКА Документ.АвансовыйОтчет
    |                    ИЛИ СчетФактураПолученный.ДокументОснование ССЫЛКА Документ.ОтчетКомиссионераОПродажах
    |                ТОГДА ИСТИНА
    |            КОГДА НЕ СчетФактураПолученный.Ссылка.НаАванс И (СчетФактураПолученный.ДокументОснование.ДоговорКонтрагента.Владелец ЕСТЬ NULL
    |                    ИЛИ СчетФактураПолученный.ДокументОснование.СуммаДокумента ЕСТЬ NULL)
    |                ТОГДА ИСТИНА
    |            ИНАЧЕ ЛОЖЬ
    |        КОНЕЦ КАК ОпределитьПараметрыСчетаФактуры,
    |        СчетФактураПолученный.ДокументОснование.Дата КАК ДокументОснованиеДата,
    |        СчетФактураПолученный.ДокументОснование.Номер КАК ДокументОснованиеНомер
    |    ИЗ
    |        Документ.СчетФактураПолученный.ДокументыОснования КАК СчетФактураПолученный
    |            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
    |                КонтрагентПоАО.Ссылка КАК АО,
    |                КонтрагентПоАО.СчетФактура КАК СчетФактура,
    |                КонтрагентПоАО.Контрагент КАК Контрагент
    |            ИЗ
    |                (ВЫБРАТЬ
    |                    АвансовыйОтчетТовары.СчетФактура КАК СчетФактура,
    |                    АвансовыйОтчетТовары.Поставщик КАК Контрагент,
    |                    АвансовыйОтчетТовары.Ссылка КАК Ссылка
    |                ИЗ
    |                    Документ.АвансовыйОтчет.Товары КАК АвансовыйОтчетТовары
    |                
    |                ОБЪЕДИНИТЬ ВСЕ
    |                
    |                ВЫБРАТЬ
    |                    АвансовыйОтчетПрочее.СчетФактура,
    |                    АвансовыйОтчетПрочее.Поставщик,
    |                    АвансовыйОтчетПрочее.Ссылка
    |                ИЗ
    |                    Документ.АвансовыйОтчет.Прочее КАК АвансовыйОтчетПрочее) КАК КонтрагентПоАО) КАК ВложенныйЗапрос
    |            ПО СчетФактураПолученный.ДокументОснование = ВложенныйЗапрос.АО
    |                И СчетФактураПолученный.Ссылка = ВложенныйЗапрос.СчетФактура
    |    ГДЕ
    |        (НЕ СчетФактураПолученный.Ссылка.ПометкаУдаления)
    |        И СчетФактураПолученный.Ссылка.Дата >= &НачалоПериода
    |        И СчетФактураПолученный.Ссылка.Дата <= &КонецПериода
    |        И СчетФактураПолученный.Ссылка.Организация = &Организация
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        ГТДИмпортТовары.Ссылка,
    |        ГТДИмпортТовары.Ссылка.Дата,
    |        ГТДИмпортТовары.Ссылка,
    |        СУММА(ГТДИмпортТовары.ФактурнаяСтоимость),
    |        NULL,
    |        ГТДИмпортТовары.Ссылка.НомерГТД,
    |        ГТДИмпортТовары.Ссылка.Контрагент,
    |        ГТДИмпортТовары.Ссылка.ВалютаДокумента,
    |        ЛОЖЬ,
    |        ГТДИмпортТовары.Ссылка.Дата,
    |        ГТДИмпортТовары.Ссылка.Номер
    |    ИЗ
    |        Документ.ГТДИмпорт.Товары КАК ГТДИмпортТовары
    |    ГДЕ
    |        (НЕ ГТДИмпортТовары.Ссылка.ПометкаУдаления)
    |        И ГТДИмпортТовары.Ссылка.Дата >= &НачалоПериода
    |        И ГТДИмпортТовары.Ссылка.Дата <= &КонецПериода
    |        И ГТДИмпортТовары.Ссылка.Организация = &Организация
    |    
    |    СГРУППИРОВАТЬ ПО
    |        ГТДИмпортТовары.Ссылка,
    |        ГТДИмпортТовары.Ссылка.Дата,
    |        ГТДИмпортТовары.Ссылка.НомерГТД,
    |        ГТДИмпортТовары.Ссылка.Контрагент,
    |        ГТДИмпортТовары.Ссылка.Номер,
    |        ГТДИмпортТовары.Ссылка,
    |        ГТДИмпортТовары.Ссылка.Дата";
    
    Для Каждого ДокументСДаннымиСФ Из МассивДокументовСДаннымиСФ Цикл
        
        Запрос.Текст = Запрос.Текст +
        "
        |    ОБЪЕДИНИТЬ ВСЕ
        |    
        |    ВЫБРАТЬ
        |        ДокументСДаннымиСФ.Ссылка,
        |        ДокументСДаннымиСФ.Дата,
        |        ДокументСДаннымиСФ.Ссылка,
        |        ДокументСДаннымиСФ." + ?(ТипЗнч(ДокументСДаннымиСФ) = Тип("Строка"), "СуммаДокумента", ДокументСДаннымиСФ["СуммаДокумента"]) + ",
        |        ДокументСДаннымиСФ.ДатаВходящегоСчетаФактуры,
        |        ДокументСДаннымиСФ.НомерВходящегоСчетаФактуры,
        |        ДокументСДаннымиСФ.Контрагент,
        |        ДокументСДаннымиСФ.ВалютаДокумента,
        |        ЛОЖЬ,
        |        ДокументСДаннымиСФ.Дата,
        |        ДокументСДаннымиСФ.Номер
        |    ИЗ
        |        Документ." + ?(ТипЗнч(ДокументСДаннымиСФ) = Тип("Строка"), ДокументСДаннымиСФ, ДокументСДаннымиСФ["ИмяДокумента"]) + " КАК ДокументСДаннымиСФ
        |    ГДЕ
        |        (НЕ ДокументСДаннымиСФ.ПометкаУдаления)
        |        И ДокументСДаннымиСФ.ПредъявленСчетФактура
        |        И ДокументСДаннымиСФ.Дата >= &НачалоПериода
        |        И ДокументСДаннымиСФ.Дата <= &КонецПериода
        |        И ДокументСДаннымиСФ.Организация = &Организация";
        
    КонецЦикла;
    
    Запрос.Текст = Запрос.Текст +
    ") КАК РеестрСчетовФактур
    |ГДЕ
    |    ВЫБОР
    |            КОГДА &ОтбиратьПоКонтрагенту
    |                ТОГДА РеестрСчетовФактур.Контрагент В ИЕРАРХИИ (&КонтрагентДляОтбора)
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ
    |
    |УПОРЯДОЧИТЬ ПО
    |    ДатаРегистрации,
    |    ДатаВходящегоДокумента
    |ИТОГИ
    |    СУММА(СуммаДокумента),
    |    МАКСИМУМ(ОпределитьПараметрыСчетаФактуры)
    |ПО    СчетФактура";
    
    Если не СформироватьОтчетПоСтандартнойФорме и ГруппироватьПоКонтрагентам Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст,"
                                                |ИТОГИ
                                                |    СУММА(СуммаДокумента),
                                                |    МАКСИМУМ(ОпределитьПараметрыСчетаФактуры)
                                                |ПО    СчетФактура",
                                                "
                                                |ИТОГИ
                                                |    СУММА(СуммаДокумента),
                                                |    МАКСИМУМ(ОпределитьПараметрыСчетаФактуры)
                                                |ПО    Контрагент, СчетФактура");
        
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "УПОРЯДОЧИТЬ ПО", "УПОРЯДОЧИТЬ ПО
        |КонтрагентНаименование, ");
    КонецЕсли;
    
    Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
    Запрос.УстановитьПараметр("КонецПериода", КонецДня(КонецПериода));
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("ВалютаРегламентированногоУчета", мВалютаРегламентированногоУчета);
    Запрос.УстановитьПараметр("ОтбиратьПоКонтрагенту", не СформироватьОтчетПоСтандартнойФорме и ОтбиратьПоКонтрагенту и не КонтрагентДляОтбора = Справочники.Контрагенты.ПустаяСсылка());
    Запрос.УстановитьПараметр("КонтрагентДляОтбора", КонтрагентДляОтбора);

    Возврат Запрос.Выполнить();

КонецФункции
50 Starhan
 
14.08.13
08:05
(48)"Вылетает с ошибкой при попытке вывести 3ю из 2х строк?"

3ью из 2х строк может вывести только Чак Норрис.
51 Starhan
 
14.08.13
08:08
(48) Для ш=0 По Документ.СчетФактура.ДокументыОснования.Количество() Цикл

--------
Индексы начинаются с нуля. А количество выдает строки считая  с единицы.


Сдается мне ты не лукавишь что как то связан с программированием.
52 Starhan
 
14.08.13
08:08
лукавишь*
53 Gray776
 
14.08.13
08:49
(51) Связан, связан не беспокойся...
По некоторым чисто субъективным причинам, присутствует невнимательность. Программировать учился правда не на 1С а вообще. По сути Пофиг на каком языке писать алгоритм он и в Африке алгоритм. Когда попробовал что-то сделать в 1С оч понравилось что на русском процедуры с функциями правда было непривычно сча уже непривычно на не русском языке... То есть программировать приходится совсем редко и совсем чуть чуть...
Хватка теряется...
А касаемо цикла сча изображу например вот так:

Для ш=0 По Документ.СчетФактура.ДокументыОснования.Количество()-1 Цикл

и проверю
Как ваще мне ние прокатит? :))) по моему нет
54 Gray776
 
14.08.13
09:17
Кароче я сейчас немного поиздевался над кодом, уменьшения количества циклов на 1 избавляет от ошибки справится с которой под силу тока Чаку Норрису, но не избавляет от задваивания... Ковырять чужой код очень трудно приходилось не раз не хочу ... Сделаю проверку по номеру документа и хрен с ним...
55 Gray776
 
14.08.13
09:21
(54)З.Ы.: Постольку поскольку документ с двумя основаниями прогоняет 2 раза по основному циклу... Проверил, убедился, огорчился, плюнул...
56 Gray776
 
14.08.13
09:22
Изначально я парился с тем как отследить док с несколькими основаниями а не как цикл организовать так то ... а оно вишь как получилось блин
57 Starhan
 
14.08.13
09:25
ИМХО у тебя в выборке документы задвоены и идут подряд.

А точнее обход результата по группировкам с итогами по СЧ.

Ты лучше из результата запроса выгрузи себе счета-фактуры и удали дубли. Если не хочешь в чужом коде разбираться.
58 Starhan
 
14.08.13
09:26
по СЧ = по счет-фактуре*
59 Starhan
 
14.08.13
09:27
А хотя ....может ты вообще код свой не в том месте вставляешь. :(
60 Gray776
 
14.08.13
09:36
(59) как раз в том где надо, я пока отлаживаю на сообщениях, как будет выдавать то что надо внесу более полезные дейсвия в цикл...
61 Starhan
 
14.08.13
09:46
Документ = СчетФактура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);


Поставь точку останова на этой строке и в Вычислении выражения набери

СчетФактура.Выгрузить()
И посмотри строки которые ты обходишь.


У тебя обход по группировкам. А обхода подгруппировок нет.
62 Gray776
 
14.08.13
09:55
(61) спасибо за совет сча попробую если интересно отпишусь ...