Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 22:52
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Помогите дописать запрос Удаление строки из ТЧ.  (Прочитано 5966 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pavel779

  • ***
  • Сообщений: 145
  • РЕПУТАЦИЯ: 3
  • КПД: 2%
  • Регистрация: 2011-11-01
  • Сайт: 
  • Профессия: Консультант 1С
Написал запрос. Он выбирает строку где цена не заполнена. Потом Создал команду на форме она должна удалять строки ТЧ где цена не заполнена. Он он почему то удаляет саму номенклатуру где цена не заполнена, причем удаляет с концами из "Базы". Скажите что не так.

&НаСервере
Процедура ПроверкаСтроки(Ссылка)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоступлениеТоваровТовары.Цена,
| ПоступлениеТоваровТовары.Номенклатура,
| ПоступлениеТоваровТовары.НомерСтроки
|ИЗ
| Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
|ГДЕ
| ПоступлениеТоваровТовары.Ссылка = &Ссылка
| И ПоступлениеТоваровТовары.Цена = 0";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

ВыборкаДетальныеЗаписи.Номенклатура.ПолучитьОбъект().Удалить();

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




КонецПроцедуры


Оффлайн LexaK

  • *****
  • Сообщений: 1267
  • РЕПУТАЦИЯ: 347
  • КПД: 27%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
попробуйте это

//Сначала запросом получаем номера строк где цена = 0. подумайте почему я сделал сортировку по убыванию?
запрос = новый запрос;
Запрос.Текст = "
|Выбрать
|док.НомерСтроки
|из
|Документ.ПоступлениеТоваров.Товары КАК док
|ГДЕ
|док.Ссылка = &Ссылка и док.цена = 0
|упорядочить по 1 убыв
|";
Запрос.УстановитьПараметр("Ссылка",Ссылка);

выборка = запрос.выполнить().выбрать();

//подумайте зачем здесь эта проверка
Если выборка.Количество()=0 Тогда
//нет строчек с пустой ценой, удалять нечего, выходим
возврат;
КонецЕсли;

Документ = Ссылка.ПолучитьОбъект();
Пока выборка.Следующий() Цикл
   Документ.товары.удалить(Выборка.НомерСтроки-1);
КонецЦикла;
Документ.Записать();

Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн Pavel779

  • ***
  • Сообщений: 145
  • РЕПУТАЦИЯ: 3
  • КПД: 2%
  • Регистрация: 2011-11-01
  • Сайт: 
  • Профессия: Консультант 1С
Если честно, то что то я не понимаю....

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
1. Я не понимаю зачем проверка Выборка.Количество() (Выборка.Следующий() вернет ложь если там нет записей)
2. Зачем получать объект и записывать его? "Документ = Ссылка.ПолучитьОбъект();Документ.Записать();" ? А если пользователь ошибся при нажатии на кнопку и хочет отменить?
3. В такой ситуации запрос не оправдан!!! Ссылки может и не быть (если документ не записан)!!!  Достаточна простого обхода циклом Табличной Части

З.Ы.
(Учитесь писать правильно...)
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Pavel779

  • ***
  • Сообщений: 145
  • РЕПУТАЦИЯ: 3
  • КПД: 2%
  • Регистрация: 2011-11-01
  • Сайт: 
  • Профессия: Консультант 1С
Dethmontt можете доделать мой запрос, меня интересует как это сделать с помощью запроса.

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Ты на форме документа сделал кнопку?
&НаКлиенте
Процедура КомандаНажатие(Команда)
    Для Каждого Строка Из Объект.Товары Цикл
        Если Строка.Цена = 0 Тогда
            Объект.Товары.Удалить(Строка);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
блиииннн форум не жрет символы ТАБУЛЯЦИИ

Не нужен тут ЗАПРОС!

(Мысли в слух....
Вот когда действительно нужно пользоваться запросами, ВАС не заставишь!!!, когда они не нужны - НАЧИНАЮТ просить "Мне нужно через запрос")
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Pavel779

  • ***
  • Сообщений: 145
  • РЕПУТАЦИЯ: 3
  • КПД: 2%
  • Регистрация: 2011-11-01
  • Сайт: 
  • Профессия: Консультант 1С
Кнопку на форме сделал.

Встроенным языком эту задачу я решил, и хочется решить запросом. Если не сложно то помогите решить!!!!

Оффлайн Pavel779

  • ***
  • Сообщений: 145
  • РЕПУТАЦИЯ: 3
  • КПД: 2%
  • Регистрация: 2011-11-01
  • Сайт: 
  • Профессия: Консультант 1С
Данную задачу оптимально решать вот так.

В модуле объекта пишем:

Процедура ОчиститьСтрокиСПустойЦеной() Экспорт

    Отбор = Новый Структура("Цена",0 );

МассивСтрок = Товары.НайтиСтроки(Отбор);

  Для каждого Строка Из МассивСтрок Цикл
 
  Товары.Удалить(Строка);
 
  КонецЦикла;

КонецПроцедуры

Потом описываем действие команды
&НаКлиенте
Процедура ОчиститьСтрокиСПустойЦеной(Команда)
ОчиститьСтрокиСПустойЦенойНаСервере();
КонецПроцедуры



&НаСервере
Процедура ОчиститьСтрокиСПустойЦенойНаСервере()

ДокОбъект = РеквизитФормыВЗначение("Объект");
ДокОбъект.ОчиститьСтрокиСПустойЦеной();
ЗначениеВРеквизитФормы(ДокОбъект,"Объект");


КонецПроцедуры

Оффлайн LexaK

  • *****
  • Сообщений: 1267
  • РЕПУТАЦИЯ: 347
  • КПД: 27%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
Dethmontt, как постановку озвучил Павел так я ему пример кода и написал.
то что вы не понимаете элементарных вещей, ваши проблемы.
попытаюсь конечно вам разъяснить.
во первых такую обработку неоптимально писать под один документ, однако по условию Павла у него есть Ссылка на документ, который надо обработать. Возможен такой вариант, в форме обработки, в поле, пользователь выбирает документ и нажимает кнопку выполнить. И в выбранном документе происходит удаление строк где цена = 0.
теперь по вашим пунктам
1.Выборка.Количество() нужна для того что бы не полнять дальше кусок программы. По вашему если все равно Выборка.Следующий() вернет ложь и мы не попадем в цикл, то до цикла и после цикла будут выполнены две комманды
Документ = Ссылка.ПолучитьОбъект();
...
Документ.Записать();
которые совсем не нужны в данном случае, и которые сами по себе очень медленные. представтье себе что эту обработку вы модернизируете для обработки 1000 документов и половина из них не содержит строк с ценой=0?
(вот такие как вы и пишут тормознутые конфигурации, когда все в 1С висит)
2.3. уже обсудили выше, считалось что это отдельная обработка, в этом случае запрос один из методов получения данных документа.
 
если же вопрос стоит из формы документа удалять строчки где цена = 0
то действительно запрос не нужен, достаточно обхода по циклу
...
Для каждого Строка Из Товары Цикл
   Если Строка.Цена = 0 Тогда   
   ... // :-) Сюда надо вставить нужный код
   КонецЕсли
КонецЦикла;

если же там кто-то упорствует что необходим именно запрос, да если учесть еще, что документ может быть незаписан, то можно из через запрос выполнить. Табличную часть Товары выгрузить в ТаблицуЗначений и ее ввиде параметра передать в запрос.
Помогло? - Нажми СПАСИБО!!!
                       :)


Теги:
 

Помогите срочно!! В вкладке "Сервис"--> "Журнал регистрации" отражаются все операции как можно определить сделаны ли операции "задним числом" и как вычислить первоначальную информацию какой расчет поменял на другой?

Автор 2ronРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 4294
Последний ответ 24 Дек 2015, 15:34
от дфтын
Помогите подобрать Back-office и Front-office

Автор avrnskРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 5554
Последний ответ 07 Сен 2010, 12:01
от mohock
Помогите с отчётами в УТ 10.3. (Ведомость по товарам и ведомость по заказам)

Автор chum710Раздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 5891
Последний ответ 28 Мар 2012, 13:02
от chum710
Помогите с отчетом "Валовая прибыль"

Автор Dm109Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 4376
Последний ответ 10 Сен 2015, 13:57
от Dm109
помогите с отчетом "характеристики контрагентов"

Автор Vasya PovarРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 1981
Последний ответ 07 Дек 2016, 15:53
от Kironten

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
180 Сообщений
ilyay ilyay
69 Сообщений
alex0402
54 Сообщений
oleg-x
48 Сообщений
AIFrame
46 Сообщений
andron81_81
44 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Golickoff Golickoff
31 Сообщений
BuhRust
30 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 216
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal