Имя: Пароль:
1C
 
Заполнение переменных в цикле
Ø (Волшебник 18.07.2017 10:18)
, ,
0 Marry04
 
18.07.17
06:30
Есть цикл, в котором перебирается ТЧ документа. Из ТЧ выбираются некоторые значения ( организации (при чем они повторяются)) и заносятся в обычную переменную. Как сделать чтоб при последующих значениях переменной была проверка, а принимала ли эта переменная такое значение раннее?
1 1dvd
 
18.07.17
06:34
Нихрена не понял, но подскажу

Если СтрокаТЧ.Организация = ПеременнаяОрганизация Тогда
2 Альбатрос
 
18.07.17
06:35
(0) Тоже включу вангу и подскажу: сверните ТЧ по организации, тогда повторений не будет.
3 Convert
 
18.07.17
06:36
Заполняй массив, и проверяй на вхождение нового реквизитЕсли Не Массив.Найти(СтрокаТЧ.Организация)=Неопределено тогда
//еще не встречался
Иначе
//уже был
КонецЕсли;
Массив.Добавить(СтрокаТЧ.Организация)
4 Convert
 
18.07.17
06:36
вернее
Если Массив.Найти(СтрокаТЧ.Организация)=Неопределено тогда
//еще не встречался
Иначе
//уже был

КонецЕсли;
5 Marry04
 
18.07.17
06:36
(1) Функция Печать() Экспорт
    Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
        Возврат Неопределено;
    КонецЕсли;
    Отправка = СсылкаНаОбъект.ПолучитьОбъект();
    СсылкаНаОбъект.ПолучитьОбъект().Маршрут.Сортировать("Заявка");
    //17072017
    //СсылкаНаОбъект.Маршрут.НайтиСтроки(
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
     |    ОтправкаМашиныМаршрут.Заявка.Ссылка,
     |    ОтправкаМашиныМаршрут.Заявка.Организация КАК Организация
     |ИЗ
     |    Документ.ОтправкаМашины.Маршрут КАК ОтправкаМашиныМаршрут
     |ГДЕ
     |    ОтправкаМашиныМаршрут.Ссылка = &ОтправкаСсылка";
    Запрос.УстановитьПараметр("ОтправкаСсылка", Отправка.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий () Цикл
    ПолучитьНаименованиеОрганизации = Выборка.Организация;
    //Отбор = Новый Структура;
    //Отбор.Вставить("Заявка", ПолучитьНаименованиеОрганизации);
    // СсылкаНаОбъект.
    //Строки = СсылкаНаОбъект.Маршрут.НайтиСтроки(Отбор);
    ЗапросПоОрганизациям = Новый Запрос;
    ЗапросПоОрганизациям.Текст = "ВЫБРАТЬ
     |    ОтправкаМашиныМаршрут.Ссылка,
     |    ОтправкаМашиныМаршрут.Ссылка.Организация,
     |    ОтправкаМашиныМаршрут.Заявка.Ссылка
     |ИЗ
     |    Документ.ОтправкаМашины.Маршрут КАК ОтправкаМашиныМаршрут
     |ГДЕ
     |    ОтправкаМашиныМаршрут.Ссылка = &ОтправкаМашины
     |    И ОтправкаМашиныМаршрут.Заявка.Организация = &Организация";
     ЗапросПоОрганизациям.УстановитьПараметр("ОтправкаМашины", Отправка.Ссылка);
     ЗапросПоОрганизациям.УстановитьПараметр("Организация", ПолучитьНаименованиеОрганизации);
     ВыборкаПоОрганизациям = ЗапросПоОрганизациям.Выполнить().Выбрать();
     Пока ВыборкаПоОрганизациям.Следующий() Цикл
          //Для каждого СтрокаТЧ Из СсылкаНаОбъект.Маршрут Цикл
         ЗаявкаОбъект = ВыборкаПоОрганизациям.ЗаявкаСсылка.ПолучитьОбъект();
                //замена         ВыборкаПоОрганизациям.ЗаявкаСсылка
        РаботаСДиалогами.НапечататьДокумент(Документы.Заявка.ПечатьНакладнойНаЗамену(ВыборкаПоОрганизациям.ЗаявкаСсылка), 2, Истина);
        Если ЗаявкаОбъект.Грузополучатель.Владелец.ПечФорма = Перечисления.ПечФорма.УПД Тогда
            РаботаСДиалогами.НапечататьДокумент(Документы.Заявка.Печать(ВыборкаПоОрганизациям.ЗаявкаСсылка,"УПД",2,Истина));
            //ЗаявкаОбъект. Печать(СтрокаТЧ.Заявка,"УПД",2,Истина);
        ИначеЕсли
            ЗаявкаОбъект.Организация.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо И ЗаявкаОбъект.Организация.ДокументДляПечати <>Перечисления.ВидыДокументовНаПечать.ТОРГ12БезНДС Тогда
            РаботаСДиалогами.НапечататьДокумент(Документы.Заявка.ПечатьТоварногоЧека(ВыборкаПоОрганизациям.ЗаявкаСсылка, СсылкаНаОбъект, Истина), 1, Истина);
            РаботаСДиалогами.НапечататьДокумент(Документы.Заявка.ПечатьТоварногоЧека(ВыборкаПоОрганизациям.ЗаявкаСсылка, Ложь),   1, Истина);
        Иначе
            ЗаявкаОбъект.ПечатьНакладной(ВыборкаПоОрганизациям.ЗаявкаСсылка, "Печатать", СсылкаНаОбъект.Рейс, 2,, СсылкаНаОбъект, Истина);
            Если Не ЗаявкаОбъект.Грузополучатель.Владелец.ПечататьСчетФактуруЗапериод Тогда
                ЗаявкаОбъект.ПечатьСчетФактуры("Печатать", СсылкаНаОбъект.Рейс, 1);
            КонецЕсли;
            ПечатьДоверенности(ВыборкаПоОрганизациям.ЗаявкаСсылка);
        КонецЕсли;
    //КонецЦикла;

         КонецЦикла;
    КонецЦикла;



Вот такой код.. надо чтоб много раз по одной орагнизации не печатались.
6 Альбатрос
 
18.07.17
06:38
(5) мде...
7 Convert
 
18.07.17
06:40
(5) То есть все заявки, кроме первой по данной организации побоку?
8 Marry04
 
18.07.17
06:41
(7) (6) мне надо чтоб печатались сначала все заявки по одной организации, потом по другой..
9 Convert
 
18.07.17
06:41
(8) отсортируй по организации
10 Альбатрос
 
18.07.17
06:41
(8) Тогда открывайте для себя удивительный мир группировок и обход результата запроса по группировкам.
11 Имитация работы
 
18.07.17
06:53
(10) Ты только что убил Машу наповал. Ей надо, а ты с глупостями (:

Маша, солнышко, если ты хочешь сохранить свой чудо-алгоритм, то не выбирай в первом  запросе заявку. Выбирай различные организации. И ничего больше. За два дня справишься.
12 craxx
 
18.07.17
06:54
(0) массивы уже отменили?
13 Marry04
 
18.07.17
06:56
(11) мне надо напечатать все документы! обход по группировкам нужно сделать как было сказано выше.
14 Имитация работы
 
18.07.17
06:57
Кстати она круче Ливингстара-@falselight'а. Надо беречь и сохранять такую трогательную непосредственность!
15 Имитация работы
 
18.07.17
06:59
(13) Конечно-конечно, дорогая, не сердись! Сначала выберешь все организации, а потом все документы. Понятно, рыбка?
16 SleepyHead
 
гуру
18.07.17
07:02
Еще одна совершила дерзкий побег с кухни..
17 SleepyHead
 
гуру
18.07.17
07:03
(4) Тут больше соответствие подходит. Но непринципиально.
18 Convert
 
18.07.17
07:03
(13) Ответ на вопрос в (0) содержится в (3) (4). Или ты хочешь, чтоб в твой код это за тебя встроили?)
19 Имитация работы
 
18.07.17
07:05
(16) Тише, тише! Сейчас будет топот ножками. Ей. Надо.
20 SleepyHead
 
гуру
18.07.17
07:06
(19) Муж с работы придет, а борщ не сварен. Скандал будет!
21 Имитация работы
 
18.07.17
07:07
(18) И левые мужики в коде ковыряются.
22 SleepyHead
 
гуру
18.07.17
07:09
(21) И говорят - мужик, борщ вчерашний будешь? Приходи завтра!
23 Marry04
 
18.07.17
07:19
(22) (21) (18)
МассивОрганизаций = Новый Массив;
        МассивОрганизаций.Добавить(Выборка.Организация);
        Если НЕ МассивОрганизаций.Найти(Выборка.Организация)=Неопределено Тогда
                    
        ПолучитьНаименованиеОрганизации = Выборка.Организация;  

и далее запрос по организациям всем из ТЧ. неправильно?
24 1dvd
 
18.07.17
07:21
(23) ты же понимаешь, что здесь всегда будет истина?

        МассивОрганизаций.Добавить(Выборка.Организация);
        Если НЕ МассивОрганизаций.Найти(Выборка.Организация)=Неопределено Тогда
25 Convert
 
18.07.17
07:22
(23) в (3)
МассивОрганизаций.Добавить(Выборка.Организация);
находится после условия
26 Имитация работы
 
18.07.17
07:22
(24) [Хлопанье ресничками] (:
27 Одинесю
 
18.07.17
07:27
(14) Круче всех Юля.
28 Имитация работы
 
18.07.17
07:35
(27) Она, к сожалению, похоже отошла от дел. Внуки там и все такое :(
29 Одинесю
 
18.07.17
07:41
(28) Нет, там же 1с запретили ))
30 Имитация работы
 
18.07.17
07:47
(29) А кстати.

Маша, ты Первертайло по мужу, или так? Как  там у вас сейчас с 1С, строго?
31 Convert
 
18.07.17
07:48
(30) Да вроде не по мужу. Тут уже предлагали как-то мужа с мисты, который решит ей все проблемы)
32 Convert
 
18.07.17
07:50
Никто ее не заинтересовал, так что ждем новых интересных тем )
33 Имитация работы
 
18.07.17
07:51
(31) Не помню...Помню только как Горогуля клеился, жалко только, что ничего не вышло... Горогуля-Первертайло, звучит!
34 Convert
 
18.07.17
07:52
(33) Да-да, точно ))) Именно это я и вспоминал)
35 Marry04
 
18.07.17
07:55
(30) (28)
скажите пожалуйста почему у меня идет зацыкливание? печатаются по сто раз документы..

Функция Печать() Экспорт
    Если Не ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
        Возврат Неопределено;
    КонецЕсли;
    Отправка = СсылкаНаОбъект.ПолучитьОбъект();
    СсылкаНаОбъект.ПолучитьОбъект().Маршрут.Сортировать("Заявка");
    //17072017
    //СсылкаНаОбъект.Маршрут.НайтиСтроки(
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ОтправкаМашиныМаршрут.Заявка.Ссылка,
                   |    ОтправкаМашиныМаршрут.Заявка.Организация КАК Организация
                   |ИЗ
                   |    Документ.ОтправкаМашины.Маршрут КАК ОтправкаМашиныМаршрут
                   |ГДЕ
                   |    ОтправкаМашиныМаршрут.Ссылка = &ОтправкаСсылка";
    Запрос.УстановитьПараметр("ОтправкаСсылка", Отправка.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий () Цикл
        МассивОрганизаций = Новый Массив;                
        Если  МассивОрганизаций.Найти(Выборка.Организация)=Неопределено Тогда
          МассивОрганизаций.Добавить(Выборка.Организация);                    
          ПолучитьНаименованиеОрганизации = Выборка.Организация;    
          МассивОрганизаций.Добавить(Выборка.Организация);                    
          ПолучитьНаименованиеОрганизации = Выборка.Организация;
    //Отбор = Новый Структура;
    //Отбор.Вставить("Заявка", ПолучитьНаименованиеОрганизации);
    // СсылкаНаОбъект.
    //Строки = СсылкаНаОбъект.Маршрут.НайтиСтроки(Отбор);
    ЗапросПоОрганизациям = Новый Запрос;
    ЗапросПоОрганизациям.Текст = "ВЫБРАТЬ
     |    ОтправкаМашиныМаршрут.Ссылка,
     |    ОтправкаМашиныМаршрут.Ссылка.Организация,
     |    ОтправкаМашиныМаршрут.Заявка.Ссылка
     |ИЗ
     |    Документ.ОтправкаМашины.Маршрут КАК ОтправкаМашиныМаршрут
     |ГДЕ
     |    ОтправкаМашиныМаршрут.Ссылка = &ОтправкаМашины
     |    И ОтправкаМашиныМаршрут.Заявка.Организация = &Организация";
     ЗапросПоОрганизациям.УстановитьПараметр("ОтправкаМашины", Отправка.Ссылка);
     ЗапросПоОрганизациям.УстановитьПараметр("Организация", ПолучитьНаименованиеОрганизации);
     ВыборкаПоОрганизациям = ЗапросПоОрганизациям.Выполнить().Выбрать();
     Пока ВыборкаПоОрганизациям.Следующий() Цикл
          //Для каждого СтрокаТЧ Из СсылкаНаОбъект.Маршрут Цикл
         ЗаявкаОбъект = ВыборкаПоОрганизациям.ЗаявкаСсылка.ПолучитьОбъект();
                //замена         ВыборкаПоОрганизациям.ЗаявкаСсылка
        РаботаСДиалогами.НапечататьДокумент(Документы.Заявка.ПечатьНакладнойНаЗамену(ВыборкаПоОрганизациям.ЗаявкаСсылка), 2, Истина);
        Если ЗаявкаОбъект.Грузополучатель.Владелец.ПечФорма = Перечисления.ПечФорма.УПД Тогда
            РаботаСДиалогами.НапечататьДокумент(Документы.Заявка.Печать(ВыборкаПоОрганизациям.ЗаявкаСсылка,"УПД",2,Истина));
            //ЗаявкаОбъект. Печать(СтрокаТЧ.Заявка,"УПД",2,Истина);
        ИначеЕсли
            ЗаявкаОбъект.Организация.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо И ЗаявкаОбъект.Организация.ДокументДляПечати <>Перечисления.ВидыДокументовНаПечать.ТОРГ12БезНДС Тогда
            РаботаСДиалогами.НапечататьДокумент(Документы.Заявка.ПечатьТоварногоЧека(ВыборкаПоОрганизациям.ЗаявкаСсылка, СсылкаНаОбъект, Истина), 1, Истина);
            РаботаСДиалогами.НапечататьДокумент(Документы.Заявка.ПечатьТоварногоЧека(ВыборкаПоОрганизациям.ЗаявкаСсылка, Ложь),   1, Истина);
        Иначе
            ЗаявкаОбъект.ПечатьНакладной(ВыборкаПоОрганизациям.ЗаявкаСсылка, "Печатать", СсылкаНаОбъект.Рейс, 2,, СсылкаНаОбъект, Истина);
            Если Не ЗаявкаОбъект.Грузополучатель.Владелец.ПечататьСчетФактуруЗапериод Тогда
                ЗаявкаОбъект.ПечатьСчетФактуры("Печатать", СсылкаНаОбъект.Рейс, 1);
            КонецЕсли;
            ПечатьДоверенности(ВыборкаПоОрганизациям.ЗаявкаСсылка);
        КонецЕсли;
    //КонецЦикла;
КонецЦикла;
Иначе

    
        КонецЕсли;
КонецЦикла;
36 Convert
 
18.07.17
07:58
(33) Тебя выбрали - отвечай ))
37 SleepyHead
 
гуру
18.07.17
07:59
(35) Потому что борщ выкипел.
38 Marry04
 
18.07.17
08:02
(36) (37) по идеи - если в массиве определено значение организации - просто выход из цикла идет же, ничего печататься не должно.
39 Convert
 
18.07.17
08:04
(38) Массив в цикле не нужно объявлять, как минимум
40 Convert
 
18.07.17
08:05
(38) дальше тяжело смотреть код
41 h-sp
 
18.07.17
08:06
(38) что-то у вас тут уже двоится

          МассивОрганизаций.Добавить(Выборка.Организация);                    
          ПолучитьНаименованиеОрганизации = Выборка.Организация;    
          МассивОрганизаций.Добавить(Выборка.Организация);                    
          ПолучитьНаименованиеОрганизации = Выборка.Организация;
42 h-sp
 
18.07.17
08:07
(38) Снова рюмка кофе на столе?   (С)
43 Имитация работы
 
18.07.17
08:08
(35) Потому что в первом запросе ты берешь организацию из заявки, а во втором - из всего документа
44 Имитация работы
 
18.07.17
08:08
(36) Первертайло - Имитация работы, тоже ничего (:
45 Convert
 
18.07.17
08:13
(44) Клиенты начнут что-то подозревать)
46 IvaneS
 
18.07.17
08:42
(31) А фото в студию, а потом можно 1С-ника циклом подобрать.
47 IvaneS
 
18.07.17
08:46
(0) А загрузку по Excel закончила?
48 Convert
 
18.07.17
08:55
(46) Бери неглядя - не прогадаешь
49 Marry04
 
18.07.17
09:00
(48) (47) (45) (44) (42) (37) всем спасибо огромное. я только набираюсь опыта, для многих может показаться, что очень туплю))
фотку сейчас поставлю. и мужа у меня нет))))))))))
50 Convert
 
18.07.17
09:05
(49) я тоже думаю ,что зря убрала....помощников с фоткой было гораздо больше)
51 IvaneS
 
18.07.17
09:12
(49) фотку ждем-с.
52 craxx
 
18.07.17
09:13
(49) Маша, я тебя и без фотки нашел. тем более ты моя землячка
53 craxx
 
18.07.17
09:13
(52) + у нас земля талантами богата, LivingStar тоже нашенский
54 Pentosh
 
18.07.17
09:18
(49) заявочка на успех, глядишь и мужа найдете и не надо будет с запросами разбираться.

И все таки, прочитайте про обход по группировкам, вам это и нужно.
запрос будет выглядеть где то так (ошибки возможны):


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

55 Pentosh
 
18.07.17
09:21
(53) Новосибирск которая?)
56 IvaneS
 
18.07.17
09:23
(53) Нашенски, землячки... а мы это чужие и с другой планеты? что то начинаю подозревать.
57 Convert
 
18.07.17
09:25
(56) Чужие, действительно, с другой планеты  ))
58 1dvd
 
18.07.17
09:25
рептилоиды!
59 Имитация работы
 
18.07.17
09:26
Что, однако, признание о незамужестве творит - столько галантных мальчиков сразу повылазило (:
60 Альбатрос
 
18.07.17
09:27
(59) Глупые, фотки то еще не видели :)
61 Convert
 
18.07.17
09:29
(60) Те, кому надо, уже видели)
62 Альбатрос
 
18.07.17
09:34
(61) Эти из разряда "Хитрые")
63 Имитация работы
 
18.07.17
09:35
Дьявол он в мелочах. Надо различать "еще нет" от "уже нет". И сразу 1000 вопросов (:
64 Лефмихалыч
 
18.07.17
09:36
(0) постановка задачи - дичь какая-то. Но, если отвечать на вопрос так, как он поставлен, то для этого соответствия придуманы:


Организации = новый Соответствие;
Для каждого СтрокаТабличнойЧасти из ТабличнаяЧасть Цикл
   Если Организации[СтрокаТабличнойЧасти.Организация] = Неопределено Тогда
      Организации[СтрокаТабличнойЧасти.Организация] = Истина;
      // вот здесь организация получена в первый раз
   Иначе
      // такая организация уже встречалась ранее
   КонецЕсли;
КонецЦикла;


Еще можно:

Организации = ТабличнаяЧасть.Скопировать("Организация, Сумма");
Организации.Свернуть("Организация","Сумма");
Для каждого СтрокаОрганизация ИЗ Организации Цикл
   СтрокиТабЧасти = ТабличнаяЧасть.найтиСтроки(новый Структура("Организация", СтрокаОрганизации.Организация));
   Для каждого Строка из СтрокиТабЧасти Цикл
      // вот тут строки только с одной организацией
65 Одинесю
 
18.07.17
09:37
Да тут одни старперы для нее, женихи,блин )
66 Имитация работы
 
18.07.17
09:37
(64) Вот сразу видно женатого капитана
67 Лефмихалыч
 
18.07.17
09:38
(66) щито?..
68 Имитация работы
 
18.07.17
09:40
(65) Состоятельные кроты

(62) По-моему, вот: http://cs540102.vk.me/c7008/v7008607/1cac/qKLuQmINHn0.jpg
Теребонькайте (:
69 Имитация работы
 
18.07.17
09:41
(67) Вот ваша лодка, говорю (:
70 Лефмихалыч
 
18.07.17
09:45
а, автор - девочка. Я даже на ник забыл посмотреть почему-то
71 IvaneS
 
18.07.17
09:46
(70) получается - образно живешь.
72 IvaneS
 
18.07.17
09:54
(0) Почту прочла?
73 Лефмихалыч
 
18.07.17
09:57
(71) чой-та?!
просто в какой-то момент решил снизить уровень трололо в своей жизни. Вижу вопрос, на который могу и хочу ответить - отвечаю сразу. Даже вон ливингстару помогаю конструктивно, хотя это стоит мне тектонических (sic!) усилий - горы сворачивать, как мне кажется, проще...
74 Альбатрос
 
18.07.17
10:00
ЛивингСтар наверное икает каждый день без перерыва и трет горящие уши )
75 Имитация работы
 
18.07.17
10:00
(72) Выезжаешь?
76 Лефмихалыч
 
18.07.17
10:02
(74) легенда местная, куле... он ОДИН затмил даже 86й год
77 IvaneS
 
18.07.17
10:02
(75) "нам отсюда хорошо видно"
78 Имитация работы
 
18.07.17
10:12
(77) Подсматривать, в таком возрасте... эхь...
79 Имитация работы
 
18.07.17
10:14
(76) Он эталон, да. Был раньше всех и уйдет позже всех.

Помню с ним Мисти сравнивали, как только она пришла - "Что это за Ливингстар в юбке?"
80 IvaneS
 
18.07.17
10:17
(78) подсматривать и присматривать разные в моем понимании)))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс