Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 ноя 2024, 07:18

Заполнение справочника данными из табличной части

Автор Golickoff, 13 мар 2015, 06:29

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

Golickoff

Цитата: Дмитрий@ от 13 мар 2015, 09:47
А если так написать
Если Дубликат = Товар.ПустаяСсылка() ИЛИ Дубликат = Неопределено Тогда
Не помогает.
Как я понял, проблема в следующем:
Строка Товар = Справочники.Номенклатура; присваивает переменной "Товар" значение "СправочникМенеджер.Номенклатура", вместо ожидаемого "Справочники.Номенклатура", но как с этим бороться я даже не представляю.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Дмитрий@

Методы "ПустаяСсылка()" и "НайтиПоНаименованию" это есть методы справочника менеджера, поэтому Товар должен быть "СправочникМенеджер.Номенклатура"

Golickoff

Цитата: cska-fanat-kz от 13 мар 2015, 10:36
как именно "не полетело"?
Когда я дописал условие с неопределённостью, не зависимо от того, есть товар в номенклатуре, или нет, обработка всегда считала, что он там есть и переходила к шагу с заменой количества. ну а затем опять выдавала ошибку на строке с получением объекта.
Добавлено: 13 мар 2015, 10:42


Цитата: Дмитрий@ от 13 мар 2015, 10:40
Методы "ПустаяСсылка()" и "НайтиПоНаименованию" это есть методы справочника менеджера, поэтому Товар должен быть "СправочникМенеджер.Номенклатура"
Так, ладно, так и должно быть. Всё списано с примера в СП, на первой странице можно посмотреть и сравнить, но не работает так как должно. Есть товар, нет товара -- код всегда приводит к тому, что товара якобы нет и добавляет дублирующий.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Дмитрий@

Правильная процедура

Для Каждого СтрокаТЧ ИЗ Объект.ТабДок Цикл
      Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
       СтрокаПоиска = СтрокаТЧ.Товар;
       Товар = Справочники.Номенклатура;
       Дубликат = Товар.НайтиПоНаименованию(СтрокаПоиска);     
      Если Дубликат = Товар.ПустаяСсылка() ИЛИ Дубликат = Неопределено Тогда
         Номенклатура.Наименование = СтрокаТЧ.Товар;
         Номенклатура.Количество = Число(СтрокаТЧ.Количество);
      Иначе
         Номенклатура = Дубликат.ПолучитьОбъект();
         Номенклатура["Количество"] = Число(СтрокаТЧ.Количество);
      КонецЕсли;
      Номенклатура.Записать();
   КонецЦикла;

Golickoff

Цитата: Дмитрий@ от 13 мар 2015, 11:19
Правильная процедура

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

Дмитрий@

Обрати внимание на строку

Номенклатура = Дубликат.ПолучитьОбъект();

Golickoff

Цитата: Дмитрий@ от 13 мар 2015, 11:28
Обрати внимание на строку

Номенклатура = Дубликат.ПолучитьОбъект();
Гораздо больше этой строки в данный момент меня волнует почему при проверке алгоритм считает, что товара из таблицы в номенклатуре нет, когда он есть, с точно таким же названием.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Дмитрий@


Golickoff

К сожалению, я не могу продолжать дискуссию т.к. должен отлучиться от компьютера на 5 часов. Для удобства предоставляю ссылку на конфигурацию. В ней всего 2 справочника и обработка. Проблемный кусок кода находится в модуле обработки, его легко можно найти. Если кому-то проще понять проблему, взглянув на конфигурацию -- пожалуйста.
P.S. спасибо всем за попытки помочь.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск