7.7 получение значения справочника

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Prosecutor, 24 апр 2008.

  1. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте, Уважаемые конфигураторы 1С.
    Немного о себе, что б понимали с кем имеете дело: В конфигурировании 1С, я - Чайник(знаю VB, PHP, MySQL...). Максимум что делал - это изменял формы отчётов.

    У меня такой вопрос:
    В "1С-Торговля+Склад, редакция 9.2", есть Обработка по распечатке ценников на товар. Очень бы хотелось, что б на ценнике высвечивался текст из "Справочники.Номенклатура.Комментарий".
    Может кто-нибудь подсказать несколько строк, как имея "Наименование" товара, получить на него "Комментарий".

    Заранее благодарю за помощь.
  2. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    Буквально вчера-сегодня обсуждали. Можно предпринять аналогичные действия
    http://www.1c-pro.ru/index.php?showtopic=11709&hl=
  3. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Это конечно на такую же тему, но в той теме так к решению и не пришли.

    Я так понимаю что "ТаблицаТоваров" - это в некотором роде переменная, которая содержит только основные данные из Номенклатуры, и в ней не содержатся "Комментарий" или "СтранаПроисхождения", поэтому и появляется ошибка...
    Если бы "ТаблицаТоваров" была бы встроенной, то она скорее всего содержала бы ВСЕ данные, но к сожалению наверное это не так...

    Нельзя ли как-то написать что-то типа:
    -----------
    Искать по "Номенклатуре" где "Номенклатура.ПолнНаименование" = (нужный товар)

    и из найденного получить

    Х=найденная строка.Комментарий
    -----------
  4. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Код:
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    СпрНом.ВыбратьЭлементы();
    Если СпрНом.НайтиПоНаименованию(ТвоеНаименование,1,1) = 1 Тогда
    Комментарий = СпрНом.Комментарий;
    Иначе
    Комментарий = ПолучитьПустоеЗначение("Строка");
    КонецЕсли;
    
    

    Я правильно понял?
  5. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Да понял очень правильно, но проделал следующее:

    Код:
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    СпрНом.ВыбратьЭлементы();
    Если СпрНом.НайтиПоНаименованию(ТаблицаТоваров.Товар,1,1) = 1 Тогда
    Комментарий = СпрНом.Комментарий;
    Иначе
    Комментарий = ПолучитьПустоеЗначение("Строка");
    КонецЕсли;
    Сообщить ("-" + ТаблицаТоваров.Товар + "-");
    Сообщить ("-" + Комментарий + "-");
    Сообщить ("-" + СпрНом.НайтиПоНаименованию(ТаблицаТоваров.Товар,1,1) + "-");
    
    
    
    Выводит:
    *********************************
    -Nokia N81 warm silver/brown 8Gb-
    --
    -0-
    *********************************

    Просто не находит по наименованию...
  6. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    А что такое
    Код:
    ТаблицаТоваров.Товар
    
    ? Это элемент справочника или уже строка?
    Если это элемент справочника, то достаточно написать
    Код:
    Комментарий = ТаблицаТоваров.Товар.Комментарий
    
    Если же это строка, то попробуй вместо
    Код:
    СпрНом.НайтиПоНаименованию(ТаблицаТоваров.Товар,1,1)
    
    написать
    Код:
    СпрНом.НайтиПоНаименованию(ТаблицаТоваров.Товар)
    
    , то есть с параметрами по умолчанию.

    Пиши.
  7. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    ХЗ :)
    Это значение из "Списка значений"

    Код:
    //******************************************************************************
    // ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд)
    //
    // Параметры:
    //  Таб             - таблица, в которую выполняется вывод ценника
    //  ПечНаименование - наименование товара
    //  ПечРозн         - цена товара
    //  Столбик         - номер столбика.
    //  Ряд             - номер ряда
    //
    // Возвращаемое значение:
    //  Нет.
    //
    // Описание:
    //  Добавляет ценник в таблицу.
    //
    Процедура ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд)
    
    Столбик        = ?(Столбик = 0, 1      , 0  );
    Ряд                = ?(Столбик = 0, Ряд + 1, Ряд);
    
    Если Ряд > 4 Тогда
    Таб.НоваяСтраница();
    Ряд = 1;
    КонецЕсли;
    
    Если Столбик = 0 Тогда
    Таб.ВывестиСекцию("Товар|Ценник");
    Иначе
    Таб.ПрисоединитьСекцию("Товар|Ценник");
    КонецЕсли;
    
    КонецПроцедуры // ДобавитьЦенник()
    
    //******************************************************************************
    // Сформировать(ТаблицаТоваров, ПечФирма)
    //
    // Параметры:
    //  ТаблицаТоваров        - таблица значений, содержащая информацию о цене товара
    //  ПечФирма                - наименование фирмы, которое будет выводиться вверху ценника
    //
    // Возвращаемое значение:
    //  Нет.
    //
    // Описание:
    //  Формирует таблицу с ценниками.
    //
    Процедура Сформировать(ТаблицаТоваров,ПечФирма)
    
    //  Создание Таблицы для выходного отчета
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    
    Столбик = 1;
    Ряд     = 0;
    
    ТаблицаТоваров.ВыбратьСтроки();
    Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
    ПечРозн    = глФРМ(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);
    ПечНаименование        = ТаблицаТоваров.Товар;
    
    //*****************************************
    
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    СпрНом.ВыбратьЭлементы();
    Если СпрНом.НайтиПоНаименованию(ТаблицаТоваров.Товар,1,1) = 1 Тогда
    Комментарий = СпрНом.Комментарий;
    Иначе
    Комментарий = ПолучитьПустоеЗначение("Строка");
    КонецЕсли;
    Сообщить ("-" + ТаблицаТоваров.Товар + "-");
    Сообщить ("-" + Комментарий + "-");
    Сообщить (СпрНом.НайтиПоНаименованию(ТаблицаТоваров.Товар,1,1));
    //*****************************************
    
    ДобавитьЦенник(Таб, ПечФирма, ТаблицаТоваров.Товар, ТаблицаТоваров.Единица, ПечРозн, Столбик, Ряд);
    глОживить(1);
    КонецЦикла;
    
    //Вызов выходного отчета в окно просмотра и редактирования.
    Таб.Опции(0,0,0,0,"ПечатьЦенников","ПечатьЦенников");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Товарные ценники","");
    
    КонецПроцедуры
    
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ПриОткрытии()
    
    СтатусВозврата(0);
    ДанныеДляПечати = Форма.Параметр;
    
    Если ТипЗначенияСтр(ДанныеДляПечати) <> "СписокЗначений" Тогда
    Возврат;
    КонецЕсли;
    
    ПечФирма       = ДанныеДляПечати.Получить("Фирма");
    ТаблицаТоваров = ДанныеДляПечати.Получить("Таблица");
    Сформировать(ТаблицаТоваров, ПечФирма);
    
    КонецПроцедуры // ПриОткрытии()
    
    
  8. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Проверить тип можно так:
    Код:
    Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
    Сообщить(ТипЗначенияСтр(ТаблицаТоваров.Товар));
    
    КонецЦикла;
    
  9. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Строка!
  10. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Попробуй так еще

    Код:
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    СпрНом.ВыбратьЭлементы(0);
    Если СпрНом.НайтиПоНаименованию(ТвоеНаименование) = 1 Тогда
    Комментарий = СпрНом.Комментарий;
    Иначе
    Комментарий = ПолучитьПустоеЗначение("Строка");
    КонецЕсли;
    
    
    Поиграйся с параметрами:)
  11. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    Попробуй еще раз обратиться к той теме. Решение сделали через внешнюю обработку печати ценников. Файл выложен. Попробуй и ты.
    ТаблицаТоваров создается в справочнике Номенклатура, так что и его ковырять придется. В данном случае, считаю, внешняя обработка удобнее, выгоднее и быстрее.
  12. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Тот вариант работает, я пробовал, но проблема в том, что он работает только с одним ценником и основан на "выборе". А встроенная обработка основана на передаче "таблицы значений" из других документов. Я попытался перекинуть код из внешнего во встроеный, постоянно выдаёт, что не выбран элемент...

    А на счёт того что ТаблицаТоваров создается в справочнике Номенклатура - это тоже вариант, судя по всему при её создании, в неё не записываются данные из "Комментарий", поэтому если делать запрос "ТаблицаТоваров.Комментарий", то получается "ШИШ". Надо найти момент её создания и попытаться добавить этот параметр.

    А можно как-то выполнить что-то на подобе:
    Сообщить (ТалбицаТоваров);
    Просто как-нибудь увидеть её содержимое на момент выполнения какой-либо операции...
  13. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Ничего не выходит! :unsure:
  14. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Я рад помочь, но не знаю, как. У меня безлимит, так что если у тебя с этим напряга нет-можешь мне базу выслать на gaiduchok@mail.ru Че-нить придумаем;)
  15. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    В отладчике вызвать метод ВыбратьСтроку()
    То есть ТаблицаТоваров.ВыбратьСтроку() и все увидишь
  16. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Чем дальше, тем больше чувствую себя оленем.

    В Отладчик я то зашёл, а вот как запросить - не знаю...
  17. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Напротив нужной строки щелкаешь правой кнопкой и выбираешь "Точка Останова"
    Идешь в 1С, запускаешь печать, когда произойдет переключение в окно отладчика-нажимаешь Shift+F9, в появившемся окне пишешь ТаблицаТовароы.ВыбрастьСтроку() жмешь Рассчитать.
  18. TopicStarter Overlay
    Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Отладчик - прикольная штука! B)
    ТаблицаТоваров содержит только "наименование", "сумма", "руб", "шт".

    Я всё таки пришлю копию базы, там уже забит код, который Вы мне дали, вот только он почему-то не находит в "Номенклатуре" по "наименованию". :unsure: Хотя я думаю, что структура правельна, а вот может с форматами лажа.....
    Пробовал ставить вместо "ТаблицаТоваров.Товар" просто "Нименование"-текстом и ничего не находит.
    Пробовал не "НаитиПоНаименованию", а "НайтиПоКоду" и тоже не находит.
  19. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Ты конечно молодец, а где сама обработка-то?

    Всё, нашел, извиняюсь.
  20. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    428
    Симпатии:
    3
    Баллы:
    29
    Не смог отправить тебе по электронке обработку. поэтому привожу на этом форуме. Надеюсь, что помог. Не забудь запросить опцию "печатать комментарий" на форме обработки. Обязательно отпишись о результатах.

    P.S. Не забываем про кнопочку СПАСИБО :unsure:

    Вложения:

Поделиться этой страницей