Имя: Пароль:
1C
1C 7.7
v7: ТиС изменить документ при обходе группировки запроса. Ошибка Не выбран документ
0 raykom
 
30.10.14
09:32
Обхожу группировку, надо внести комментарий и записать, или пометить документ на удаление.
Получаю ошибку -
Не выбран документ!

                    Если Запрос. Док.Вид() = ВыбНеДок.Вид() Тогда
                        ДокРаботаем = Запрос.Док;
                        ДокРаботаем.Комментарий = "ххх";
                        ДокРаботаем.Записать();
                        //Сообщить(Запрос.Док);
                    КонецЕсли;


То не так ?
1 DGorgoN
 
30.10.14
09:34
ДокРаботаем = Запрос.Док.ПолучитьОбъект();
2 vicof
 
30.10.14
09:34
ПолучитьОбъект() уже было?
3 DGorgoN
 
30.10.14
09:34
А 7-ка, тогда
ДокРаботаем = СоздатьОбъект("Документ");
ДокРаботаем.Найти(Запрос.Док);
5 DGorgoN
 
30.10.14
09:35
ДокРаботаем = СоздатьОбъект("Документ"); - вынести в начало цикла только вынеси
6 DGorgoN
 
30.10.14
09:36
Хотя конечно стаж 9 лет 5 месяцев 8 дней впечатляет )
7 raykom
 
30.10.14
09:36
От я  ... дворник. Мутное подозрение то было, что то ли найти, то ли получить надо, прежде чем чето делать ...
Попробую.
Пока спасибо.
8 raykom
 
30.10.14
09:37
(6)Дак жизненный опыт - не количество лет, а количество событий за количество лет )))
9 raykom
 
30.10.14
09:46
Усе пучком. Благодарю за помощь.
Правда пришлось интеллект наморщить, потому как
не
ДокРаботаем.Найти(Запрос.Док);

а

ДокРаботаем.НайтиДокумент(Запрос.Док);

Утираю пот, от усилий ...
10 DGorgoN
 
30.10.14
09:46
(9) Ну надо ж что-то напрячь то.
11 Looser-1c
 
30.10.14
09:47
(9) А на свежем воздухе пота не было бы.... ))))
12 Ёпрст
 
30.10.14
09:47
условие на вид документа нужно было в сам запрос воткнуть
13 raykom
 
30.10.14
10:02
(10)Ну ... Напрягаем, чем бог не ? обидел  ))
(11)Ты это про метлу ? :D
(12)А есть, а затупил, чего то. Еще по условию сравнивать начал )

Говорят же - не воздух пора.

Нормально все. Еще раз спасибо.
14 raykom
 
30.10.14
10:14
Ээээ, а можно еще вапроц ?

Я перебираю строки табличной части документа и по условию надо удалять некоторую строку,
Что там с позиционированием ? Надо кудато двигать там минус один или плюс один ?
15 Looser-1c
 
30.10.14
10:16
(14) Выгржай в тз, там удаляй, потом загружай ))
16 raykom
 
30.10.14
10:18
Пляя ... а просто чикнуть не ? И потом, какая разница, где с позиционированием морочится в ТЧ Документа или в ТЗ ?
17 aka AMIGO
 
30.10.14
10:23
(16) не надо.. делай, как в (15) советовал
пустяк написать код-то..
18 raykom
 
30.10.14
10:28
Так чем отличается удаление из ТЧ Документа от удаления из ТЗ ?
Если я не правильно делаю, так я и в ТЗ не правильно удалю ...
19 aka AMIGO
 
30.10.14
10:28
(18) с тз проще работать
20 raykom
 
30.10.14
10:30
Ну ладно, но удалять то как ?

Типаэ

ВыбратьСтроки()
Пока ВыбратьСтроки() =1 Цикл
Если Док.Номенклатура = УдалНоменклатура Тогда
Док.Номенклатура.УдалитьСтроку;

Так чтоли ? И в ТЗ так же
21 DGorgoN
 
30.10.14
10:33
(20) Перебирай в цикле:
Для к=1 по ТабЧасть.КоличествоСтрок() Цикл
22 raykom
 
30.10.14
10:34
Щас.
24 aka AMIGO
 
30.10.14
10:40
вообще-то я-б сделал так:

    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    Док.ВыгрузитьтабличнуюЧасть(ТЗ);
    Стр=0;
    Если ТЗ.Найти(Номенклатура, Стр, "Номенклатура")>0 Тогда
        ТЗ.УдалитьСтроку(Стр);
        Док.УдалитьСтроки();
        Док.ЗагрузитьТабличнуюЧасть(ТЗ);
    КонецЕсли;

но код этот никому-бы не показывал :)
25 aka AMIGO
 
30.10.14
10:43
+24 ""но код этот никому-бы не показывал"" - истина, т.к. ошибка
Если ТЗ.НайтиЗначение(Номенклатура, Стр, "Номенклатура")>0 Тогда
26 raykom
 
30.10.14
10:49
(21)Не удаляить ничего

                        ДокРаботаем = СоздатьОбъект("Документ."+Запрос. Док.Вид());
                        ДокРаботаем.НайтиДокумент(Запрос.Док);
                        Для к=1 по ДокРаботаем.КоличествоСтрок() Цикл
                            Если к = УдалНом Тогда
                                 ДокРаботаем.УдалитьСтроку();
                            КонецЕсли;
                        ДокРаботаем.Записать();
                        КонецЦикла;
27 КонецЦикла
 
30.10.14
11:01
Можно упростить

ДокРаботаем = СоздатьОбъект("Документ"); // и так хорошо
ДокРаботаем.НайтиДокумент(Запрос.Док);
Если ДокРаботаем.Выбран() = 1 Тогда
ДокРаботаем.УдалитьСтроки(); //читаем блиать СП
ДокРаботаем.Записать();
КонецЕсли;
28 raykom
 
30.10.14
11:03
(27)Чето мне кажется не СП читать надо будет, а пачку беломора ... И скать работу с лопатой на севере )))
29 aka AMIGO
 
30.10.14
11:15
(26) //Для к=1 по Док.КоличествоСтрок() Цикл

ДокРаботаем.ВыбратьСтроки();
Пока ДокРаботаем.ПолучитьСтроку()=1 Цикл
30 aka AMIGO
 
30.10.14
11:23
ДокРаботаем = СоздатьОбъект("Документ."+Запрос. Док.Вид());
                        ДокРаботаем.НайтиДокумент(Запрос.Док);
                        //Для к=1 по ДокРаботаем.КоличествоСтрок() Цикл
                        ДокРаботаем.ВыбратьСтроки();
                        Пока ДокРаботаем.ПолучитьСтроку()=1 Цикл
                            Если к = УдалНом Тогда
                                 ДокРаботаем.УдалитьСтроку();
                                 ДокРаботаем.Записать();
                                 Прервать; //если номеклатура не дублируется в разных строках
                           КонецЕсли;
31 aka AMIGO
 
30.10.14
11:23
КонецЦикла; :)
32 DGorgoN
 
30.10.14
11:27
щас насоветуйте - он же сделает. Может сразу sudo mkfs.ntfs /dev/sdX на диске где база?
33 raykom
 
30.10.14
11:29
Да парни, у меня и так в голове каша, вы еще тут суицид подкидываете ...

Дайте нормальный код. Вообще ни что не понимаю, как будто курил канаплю какую то ...

Не, спать таки надо по ночам.
34 raykom
 
30.10.14
11:30
(31)Можно аминь, в принципе )
но в (30) то ничего страшного, оно просто работать ни буит )
35 raykom
 
30.10.14
11:31
Я не соображу, как к то получать значение нужное ...
36 aka AMIGO
 
30.10.14
11:34
(34) тогда возвращаемся к (24) точна буить!
37 aka AMIGO
 
30.10.14
11:37
(35) это у тебя внешняя обработка?
И что значит "значение нужное"? нужную позицию в ТЧ с удаляемой номенклатурой? или самоё номенклатуру, чтоб её сравнивать со значением в ТЧ?
38 raykom
 
30.10.14
11:39
(36)Дак я уже ... Походу он обратно пустую ТЗ грузит.
Но копия тоесть базы )))
Так тчо для полного эффекта надо реально (32)
(37)Да. Внешняя.
39 raykom
 
30.10.14
11:41
Почему вот этот порошек ни чего не удаляет ??

                        ДокРаботаем.ВыбратьСтроки();
                        Пока ДокРаботаем.ПолучитьСтроку()=1 Цикл
                            Если ДокРаботаем.Номенклатура = УдалНом Тогда
                                ДокРаботаем.УдалитьСтроку();
                                //Прервать; //если номеклатура не дублируется в разных строках
                                // А ЕСЛИ ДУБЛИРУЕТСЯ ?
                            КонецЕсли;
                        КонецЦикла;
                        
                        ДокРаботаем.Записать();
40 raykom
 
30.10.14
11:43
(37)Ну к это же тупо индекс строки
в ТЧ документа то как значение получить номенклатуры ...
41 raykom
 
30.10.14
11:52
Патамушта парни ... Открою секрет.
Я просто сравнение не по той номенклатуре делал ...

Жесть. Втыкаю в стол брови ...
42 raykom
 
30.10.14
11:58
Теперь стало што то удалять но какое то деление на ноль выскакивает.
Гдето видно усе в ТЧ удалилось ...
43 raykom
 
30.10.14
12:19
Тыкните пальцем мне в пост, который есть пральное решение. А то перестану подметать, пойду в дипутаты. Я вам там наворочу ...
44 aka AMIGO
 
30.10.14
12:19
(42) увы, могу только отладчик посоветовать..
45 raykom
 
30.10.14
12:19
(44)Дак я и сам могу себе его посоветовать ))
47 raykom
 
30.10.14
12:25
Отладчик говорит что ошибка и все, ну в каком документе еще.
Это первый документ с такой позицией.
48 raykom
 
30.10.14
12:33
Отправил ... Вот жпо то. Дожил. Ведь заморочка то на пустом месте. Просто дворницкая смекалка затупилас. двадцатый час идет как за компом ...
49 aka AMIGO
 
30.10.14
12:40
(48) не переживай так.. попытаюсь найти.
50 raykom
 
30.10.14
12:42
Да не то што бы ... Просто тупой коматоз. И кофе кончилось.
Сижу, как тот воробей красноглазый обкуреный на плече у орла ...
Старый онекдод.
51 raykom
 
30.10.14
13:02
Емае ...
Как вот тут до Номенклатуры то добраться ??!

Для сч = - ДокРаботаем.КоличествоСтрок() По -1 Цикл
    ТекСтрока = ДокРаботаем.ПолучитьСтрокуПоНомеру(Сч);
    Сообщить(ТекСтрока.Номенклатура);
52 raykom
 
30.10.14
13:05
Почему оно мне говорит, что нет такого агрегатного объекта ???
53 Ёпрст
 
30.10.14
13:08
п...ц
54 Rokford
 
30.10.14
13:08
Всегда пользую этот код. Не подводит.

//"Правильное" удаление строк из ТЗ
Для Индекс = -ТЗ.КоличествоСтрок() По -1 Цикл
    ТЗ.ПолучитьСтрокуПоНомеру(-Индекс);
    Если <ПроверкаУсловий> Тогда
        ТЗ.УдалитьСтроку();
    КонецЕсли;
КонецЦикла;
55 Ёпрст
 
30.10.14
13:08
Для сч = - ДокРаботаем.КоличествоСтрок() По -1 Цикл
    ДокРаботаем.ПолучитьСтрокуПоНомеру(-Сч);
    Сообщить(ДокРаботаем.Номенклатура);
56 raykom
 
30.10.14
13:10
(53)Дак да .. Огромный ...
57 raykom
 
30.10.14
13:14
Блт ... Опять ошибка

ЦенаРеал = Док.Цена*Коэф/Док.Коэффициент;
{C:\ОБМЕНЫ\ОБРАБОТКИ\ОТЧЕТ ПО ПРОДАЖАМ.ERT(881)}: Деление на 0
58 Ёпрст
 
30.10.14
13:15
(57) страсти какие.
Дарю:

ЦенаРеал = ?(,,)
59 raykom
 
30.10.14
13:20
(58)Дак нафига оно уже, если просто строка удаляется ??
И потом уже отчет не формируется. Где то строка остается с номенклатурой но без количества и цены ...
Хо за хня ...
60 Ёпрст
 
30.10.14
13:22
больше кода
61 Ёпрст
 
30.10.14
13:23
и это, докумет то перепроводишь потом хоть, опосля его правки ?
62 raykom
 
30.10.14
13:24
Записываю
63 Ёпрст
 
30.10.14
13:25
(62) круто, проводить не пробовал ?
:)))

твой отчет по продажам данные тащит с регистров, а они то не изменились
64 raykom
 
30.10.14
13:25
Ну да ... Тогда ГП ПЦ.
65 raykom
 
30.10.14
13:26
Понял как надоть.
66 aka AMIGO
 
30.10.14
14:28
Отправил. Смотри замечания в письме.
ЗЫ. что смог сообразить - то и сделал.

ЗЫЫ. блин.. заметил после того, как отправил!

измени код блочка на такой:

                        Пока ДокРаботаем.ПолучитьСтроку()=1 Цикл
                            Если ДокРаботаем.Номенклатура = УдалНом Тогда
                                Сообщить(ДокРаботаем.Номенклатура);
                                ДокРаботаем.УдалитьСтроку();
                                //Прервать; //если номеклатура не дублируется в разных строках
                                // А ЕСЛИ ДУБЛИРУЕТСЯ ?
                            КонецЕсли;
                        КонецЦикла;
                        ДокРаботаем.Записать();


Иначе сообщает о номенклатуре оставшейся, а не об удаленной
67 aka AMIGO
 
30.10.14
14:30
+66 и проверь работу при установке твоих дополнительных маркеров
68 aka AMIGO
 
30.10.14
14:41
Кстати, такое сообщение об авосте?

ЦенаРеал = Док.Цена*Коэф/Док.Коэффициент;
{D:\1C\TMP\EXTFORMS\ОТЧЕТ ПО ПРОДАЖАМ.ERT(881)}: Деление на 0

Если фирма не использует Коэффициенты, можно переделать операторы, примерно так:

ЦенаРеал = Док.Цена; //*Коэф/Док.Коэффициент;
69 raykom
 
30.10.14
18:44
(68)Да это от того, что я в алгоритме удаления строки испоьзовал записать, а не провести.
В регистре то ничего не менялось. А строка отсутствовала в натуре.
После проведения все норм. Но ГП слетает.

Все сделал, короче. Тебе отдельное спасибо. За отклик и вообще.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.