Поступление ТМЦ и Аналоги

1. Самоделкин 2 07.01.15 16:23 Сейчас в теме
Всех с Рождеством Христовым!!!!

Появилась такая идея: в документе Поступлении ТМЦ, выбираем Поставщика и в Подборе Номенклатуры, если есть Аналог Номенклатуры, то наше Наименование Номенклатуры подменялось бы на Наименование Поставщика.
Т.е. противоположность теме: "Заказ Поставщику и Аналоги Номенклатуры".
Можно такое реализовать? И как?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. l_user 08.01.15 11:21 Сейчас в теме
(1) Самоделкин,
Можно также использовать ещё один вариант:
- убрать колонку "Наименование",
- вместо этой колонки добавить колонку типа "Текст",
- в свойствах данной колонки, на закладке "Дополнительно" прописать вызов своей функции, например "ВывестиНаименование()".
- в модуле этой формы описать функцию. Например:
Функция ВывестиНаименование()
 номенклатура = ТекущийЭлемент();
 Если Номенклатура.ЭтоГруппа()=1 Тогда
  Возврат номенклатура.Наименование;
 Иначе
  Если ЕстьАналог = 1 Тогда // проверка наличия аналога. Придумать самостоятельно
   Возврат ПолучитьНазваниеАналога(Номенклатура); // получить название аналоги. Придумать самостоятельно.
  Иначе
    Возврат номенклатура.Наименование;
  КонецЕсли;
 КонецЕсли;
КонецФункции
Показать


Раньше подобные решения не рекомендовались из-за резкого замедления. Сейчас, во времена гигабитных сетей, это, наверное, уже не актуально.

Если непонятно мое послепраздничное косноязычие, то посмотрите в типовой торговле реализацию вывода значений колонок "Ост" или "Ост.ф." в форме списка "ДляПодбора" в справочнике "Номенклатура".
В этой же форме, можно увидеть ещё один возможный способ отображения информации об аналоге: обратите внимание как вызывается и как работает функция "ИнформационнаяСтрокаПоНоменклатуре()".
2. vcv 89 07.01.15 19:55 Сейчас в теме
Элементарно, Ватсон! :)
Только лучше не подменять наименование номенклатуры, а рисовать рядом отдельной колонкой. Что бы пользователь видел наименование поставщика и свою номенклатуру.
Добавить в табличную часть текстовую колонку. В формулу колонки вызов функции. А дальше всё было в прошлой ветке. При окончании редактирования строки и после обработки заполнения или подбора заполнять таблицу значений аналогами номенклатуры. В функции текстовой колонки искать по таблице значений текущую номенклатуру и показывать её.
3. Самоделкин 2 07.01.15 20:22 Сейчас в теме
(2) vcv, спасибо! Сегодня уже поздно, завтра попробую сделать!
Только боюсь, что видя две колонки с номенклатурой, не запутаться бы мне потом при подборе.
Хотя Ваш вариант более подходящий, будет видно, есть Аналог или нет.
5. Самоделкин 2 08.01.15 13:39 Сейчас в теме
(2) vcv, (4) l_user, это все хорошо, но задам глупый вопрос: где в модуле найти Таблицу Многострочной Части, искал везде - не нашел, Таблица Подбора есть, этой нет.
6. l_user 08.01.15 14:58 Сейчас в теме
(5) Самоделкин,
Снова повторюсь (уже не один раз вам писали об этом): я не вижу в этой ветке ни модуля, ни ссылки о каком модуле идет речь. Как понять вот это:
где в модуле найти Таблицу Многострочной Части
?
А так из серии "ОБС": может это реквизит экранной формы?
7. Самоделкин 2 08.01.15 15:26 Сейчас в теме
(6) l_user, в документе ПоступлениеТМЦ есть кнопка Подбор, по которой вызывается Справочник Номенклатуры Для Подбора, там в Диалоге есть Таблица Многострочной Части (где код, артикул, наименование, остаток и цена)(может она как-то и по другому называется) и Таблица Подбора (куда выводится выбранный товар).
Вот, чтобы добавить колонку, надо сначала найти эту Таблицу, я не знаю где искать.
8. vcv 89 08.01.15 18:48 Сейчас в теме
(7) Самоделкин, То есть аналоги хочется показывать в подборе номенклатуры? Ой, небыстро может работать. Особенно при тех объёмах номенклатуры, которые, как говорят, возникают у торговлев автозапчастями. Рассказывают про сотни тысяч (и более) позиций в справочнике номенклатуры.
Но если хочешь попробовать....
Открой форму списка номенклатуры, которая для подбора. Выбери в меню "Вставить / текст" и ткни мышом в табличную часть справочника. В ней добавится в конце текстовая колонка. Перетащи её куда надо и укажи в формуле какую-нибудь функцию, которую позже напишешь.
Дальше возникают вопросы быстродействия. Реализовать можно много как, вопрос достаточной скорости и удобства работы пользователей.
Первое, что напрашивается, в ПриОткрытии вставить запрос и получить таблицу аналогов, как в прошлой ветке, только без отбора по номенклатуре. Вот тут могут быть первые тормоза, если справочник аналогов относительно большой. Несколько секунд на открытие форму подбора испортят всю пользу от показа аналогов.
Дальше написать в модуле форму функцию, имя которой ты указал в текстовой колонке. В этой функции искать в таблице аналогов, полученной в ПриОткрытии, текущую номенклатуру и показывать её. Тут второе место и тормозами. Потому что поиск по таблице значений, особенно если она большая, далеко не мгновенный. И это будет чувствоваться при перемещении по справочнику и поиску по добавленной колонке.
Дерзай, пробуй.
9. Самоделкин 2 08.01.15 20:59 Сейчас в теме
(8) vcv, спасибо! Завтра, если народа не будет, начну изгаляться!
Номенклатуры у нас пока не много, всего 15 тыс., посмотрим, будут тормоза, буду работать как сейчас, разгадывая Номенклатуру Поставщика (хотя я, в принципе, уже почти всю Номенклатуру Поставщиков выучил).
10. Самоделкин 2 09.01.15 14:58 Сейчас в теме
(8) vcv, ругается: "Если ТаблицаАналогов.НайтиЗначение(Номенклатура,Строчка,"Номенклатура") = 1 Тогда
{Справочник.Номенклатура.ФормаСписка.ДляПодбора.Модуль(1589)}: Неверный идентификатор колонки!"
11. vcv 89 09.01.15 15:11 Сейчас в теме
(10) Самоделкин, Переменной Строчка ноль присвоил, прежде чем искать? А колонка Номенклатура точно есть в таблице значений?
12. Самоделкин 2 09.01.15 16:23 Сейчас в теме
(11) vcv, может посмотрите, что я наделал md
13. vcv 89 10.01.15 08:53 Сейчас в теме
(12) Самоделкин, Все не так. Переменную ТаблицаАналогов описать вверху, как переменную модуля. В ПриОткрытии выпонить запрос без фильтра по номенклатуре и выгрузить его в ТаблицаАналогов. Притом в тексте запроса заменить
|Аналог = Справочник.Аналоги.ТекущийЭлемент;
на
|Аналог = Справочник.Аналоги.Наименование;
Быстрее будет, не понадобится при выводе каждой строки обращение к базе за получением наименования аналога. Сразу будет брать строку наименования из результата запроса.
В функцию АналогПоставщика сделать так
Функция АналогПоставщика();  
  Строчка = 0;
  // Поиск аналога Номенклатуры в каталоге Поставщика
  Если ТаблицаАналогов.НайтиЗначение(Номенклатура,Строчка,"Номенклатура") = 1 Тогда
    // Аналог найден
    Воврат ТаблицаАналогов.ПолучитьЗначение(Строчка,"Аналог");
  КонецЕсли;
КонецФункции;   
Показать
14. Самоделкин 2 10.01.15 09:22 Сейчас в теме
(13) vcv,
выполнить запрос без фильтра по номенклатуре
- это как сделать?

Остальное все сделал, но все равно: "Если ТаблицаАналогов.НайтиЗначение(Номенклатура,Строчка,"Номенклатура") = 1 Тогда
{Справочник.Номенклатура.ФормаСписка.ДляПодбора.Модуль(1588)}: Неверный идентификатор колонки!"
15. vcv 89 10.01.15 18:00 Сейчас в теме
(14) Самоделкин, Запустить отладчик, поставить точку останова на проблемной строке. При остановке просмотреть значение переменной ТаблицаАналогов. Возможно ты забыл её описать как переменную модуля в самом верху. И в функции АналогПоставщика она просто не определена.
16. Самоделкин 2 10.01.15 21:36 Сейчас в теме
(15) vcv, когда только начинал знакомство с 1С, запускал Отладчик, ставил точки останова, но, честно говоря, так и не понял как он работает. Ну дошел до точки останова, открылся отладчик и что дальше делать, где что смотреть не понял.
В начале модуля прописал Перем ТаблицаАналогов, а что значит: "в функции АналогПоставщика она просто не определена"?

Функцию прописал, как Вы рекомендовали выше, все-равно эта ошибка.
17. CheBurator 2696 11.01.15 03:44 Сейчас в теме
Ой блин
Самоделкин тебе бы на денег по скайпу подписаться на экспресскурс чтоб тебе вживую по удаленке программили и тут же обясняли
А то разговор слепого и глухого
Смайл
18. CheBurator 2696 11.01.15 03:53 Сейчас в теме
В отладчике когда стоишь на точке останова то ты находишься в контексте программного окружения этой точки останов
На панели инструментов открой табло
Табло это есть формульный калькулятор по сути
В табло в строке ты можешь писать что угодно главное чтобы это что угодно возвращало ЗНАЧеНие
Это значение и будет через знак равно выводиться как результат вычисления записанного тобой выражения
В выражениях в табло можно писать все что тебе доступно в контексте точки останова

Например если ты в табло напишешь
?(1=1,"истина","ложь")
И нажмешь энтер то увидишь
?(1=1,"истина","ложь") = истина
Если напишешь просто
Тз.получитьзначение(номерстроки, "номенклатура")
То через равно увидишь значение из колонки номенклатура или сообщение об ошибке
Тыж хоть в какомто отладчике работал
Так и тут тире открыл окно вводишь в гего выражения видишь результат
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот