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

Автор Тема: Лбход элементов табличной части документа(проблема)  (Прочитано 5218 раз)

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

Оффлайн metalstorm_tlt

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 2
  • КПД: 11%
  • Регистрация: 2010-09-10
  • Сайт: 
Процедура ОбновлениеСпискаДопУслуг()
    //удаление недействующих элементов
   Спр=Справочники.ВидыДопУслуг.Выбрать();
   Для Каждого СтрокаДопУслуги Из ДопУслуги Цикл
      ЭлементНайден=Ложь;
      Пока Спр.Следующий() Цикл
         Если Спр.Наименование=СтрокаДопУслуги.Услуга И
         Спр.ОсновнаяУслуга=ЭлементыФормы.Услуга.Значение Тогда
            ЭлементНайден=Истина;
            Прервать;
         КонецЕсли;
      КонецЦикла; //обошли справочник
      Если ЭлементНайден=Ложь Тогда
         ДопУслуги.Удалить(СтрокаДопУслуги);
      КонецЕсли;
   КонецЦикла;
   //добавление новых
   Спр=Справочники.ВидыДопУслуг.Выбрать();
   Пока Спр.Следующий() Цикл
      Если Спр.ОсновнаяУслуга=ЭлементыФормы.Услуга.Значение И
      ДопУслуги.Найти(Спр.Наименование,"Услуга")=Неопределено Тогда
         НоваяСтрока=ДопУслуги.Добавить();
         НоваяСтрока.Услуга=Спр.Наименование;
      КонецЕсли;
   КонецЦикла;
КонецПроцедуры

Почему то цикл: Для Каждого СтрокаДопУслуги.... делает меньшее число итераций чем должен...то есть в табличной части документа остаются неудаленные строки. Помогите пожалуйста как исправить эту проблему. Буду очень благодарен


Оффлайн metalstorm_tlt

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 2
  • КПД: 11%
  • Регистрация: 2010-09-10
  • Сайт: 
Неужели никто не поможет?(

Оффлайн Vit1501

  • ****
  • Сообщений: 392
  • РЕПУТАЦИЯ: 65
  • КПД: 17%
  • Регистрация: 2010-06-05
  • Сайт: 
  • Профессия: Программист 1С
я тоже столкнулся с этой проблемой

Оффлайн Vit1501

  • ****
  • Сообщений: 392
  • РЕПУТАЦИЯ: 65
  • КПД: 17%
  • Регистрация: 2010-06-05
  • Сайт: 
  • Профессия: Программист 1С
попробуй перестроить код по другому. Я так полагаю что перебор идет по индексам и при удалении индексы сдвигаются, поэтому и не все обработываются строки

Оффлайн metalstorm_tlt

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 2
  • КПД: 11%
  • Регистрация: 2010-09-10
  • Сайт: 
Попробую сначала выгрузить в таблицу значений, а потом пройтись по ней циклом...посмотрим что получится...

Оффлайн metalstorm_tlt

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 2
  • КПД: 11%
  • Регистрация: 2010-09-10
  • Сайт: 
Ещё хотел уточнить, при обходе элементов справочника следующим способом:
Спр=Справочники.ВидыДопУслуг.Выбрать();
   Пока Спр.Следующий() Цикл

Нет необходимости вызывать метод Спр.ПолучитьОбъект(), чтобы обратиться к реквизитам элемента?

Оффлайн metalstorm_tlt

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 2
  • КПД: 11%
  • Регистрация: 2010-09-10
  • Сайт: 
Попробовал так:

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

Почему то цикл Для Каждого ИндексыТБ Из ТаблЗнач.Индексы.... не делает ни одной итерации...Попробую обойти не индексы а строки из ТаблицыЗначений..

Оффлайн metalstorm_tlt

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 2
  • КПД: 11%
  • Регистрация: 2010-09-10
  • Сайт: 
Хм...за два прохода удаляет все элементы (когда их 3, сначала 2 потом 1), причем заметил что при первом вызове процедуры цикл

Для Каждого СтрокаТаблЗнач Из ТаблЗнач

Считывает только две строки, а при попытке считать третью все колонки из СтрокаТаблЗнач принимают значение: "Ошибка чтения значения". А при втором вызове этой процедуры удаляет оставшийся элемент без проблем...мистика какая то...

Вот сама процедура:

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

Оффлайн metalstorm_tlt

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 2
  • КПД: 11%
  • Регистрация: 2010-09-10
  • Сайт: 
Если кто знает как исправить помогите пожалуйста...а то мне сегодня надо исправить все ошибки =(

Оффлайн metalstorm_tlt

  • *
  • Сообщений: 18
  • РЕПУТАЦИЯ: 2
  • КПД: 11%
  • Регистрация: 2010-09-10
  • Сайт: 


Теги:
 

Не открывает форму сохраненного документа, открывает форму нового.

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

Ответов: 1
Просмотров: 6285
Последний ответ 13 Апр 2012, 23:26
от Vit1501
Добавление сведений в графу "основание" документа "ТОРГ-12"

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

Ответов: 4
Просмотров: 10074
Последний ответ 20 Авг 2013, 18:45
от Ярослав1984
"Не совпадают сумма документа и общая сумма по платежным ведомостям"

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

Ответов: 1
Просмотров: 8952
Последний ответ 11 Янв 2015, 02:55
от MuI_I_Ika
При создании нового документа "Заявка на кассовый расход" Ошибка "Значение 9 поля "номер" не уникально

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

Ответов: 14
Просмотров: 14191
Последний ответ 22 Ноя 2014, 04:50
от cska-fanat-kz
Фамилия руководителя в печатных формах документа "Акт сверки", "Акт об оказании"

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

Ответов: 1
Просмотров: 9426
Последний ответ 03 Фев 2012, 17:27
от Dinah

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
67 Сообщений
oooo800
39 Сообщений
LexaK
31 Сообщений
Дмитрий Джей Дмитрий Джей
29 Сообщений
IL2016
28 Сообщений
antoneus antoneus
24 Сообщений
DmitriyF DmitriyF
17 Сообщений
Ann_
16 Сообщений
мадам брошкина
13 Сообщений
illiona
10 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal