|
Ввод на основании из ОС в Номенклатуру | ☑ | ||
---|---|---|---|---|
0
Tanis
17.04.13
✎
16:15
|
Добрый вечер!
Подскажите, пожалуйста. Есть следующие данные: ОбъектИсточник (объект документа источника) ДанныеСтроки (строка табличной части) Результат. Необходимо написать код, по поиску номенклатуры. Источник - это передача ОС, там ТЧ - ОС - строка (столбец) справочник ОС. А приемник - поступление ТиУ там необходимо заполнить номенклатуру. Как написать, чтоб вычислить наименование Источника, и потом по поиску из справочника номенклатуры его найти, и постаить в приемник. |
|||
1
НикДляЗапросов
17.04.13
✎
16:17
|
Выбрать и подставить
|
|||
2
Tanis
17.04.13
✎
16:29
|
Вот в этом и вопрос.
|
|||
3
НикДляЗапросов
17.04.13
✎
16:29
|
давай кусок
|
|||
4
Tanis
17.04.13
✎
16:31
|
Номен = ОбъектИсточник.ОС.ДанныеСтроки[ОсновноеСредство].Наименование; Или Ссылка.Наименование;
Нужное = Справочник.Номенклатура.НайтиПоНаименованию("Номен"); Результат = Нужное.Ссылка; Что-то типа этого, но как... |
|||
5
НикДляЗапросов
17.04.13
✎
16:44
|
Для каждого Стр из ОбъектИсточник.ОС Цикл
Результат = Стр.ОсновноеСредство |
|||
6
Tanis
17.04.13
✎
16:48
|
Так они из разных справочников.
|
|||
7
Tanis
17.04.13
✎
16:53
|
Вопрос очень срочный.
Подскажите. |
|||
8
НикДляЗапросов
17.04.13
✎
16:53
|
Ну не знаю тогда
|
|||
9
Tanis
17.04.13
✎
17:17
|
Хелп!!!
|
|||
10
Tanis
17.04.13
✎
17:20
|
как добраться, до этого объекта, ТЧ
|
|||
11
Tanis
17.04.13
✎
17:48
|
Ном = ОбъектИсточник.ОС;
Для Каждого Стр Из Ном Цикл Нужное = Стр.ОсновноеСредство.Наименование; ОченьНужное = Справочники.Номенклатура.НайтиПоНаименованию(Нужное); Результат = ОченьНужное.Ссылка.ПолучитьОбъект; КонецЦикла; Что здесь не так? |
|||
12
Tanis
17.04.13
✎
17:54
|
Подскажите!
|
|||
13
Дейл
17.04.13
✎
17:59
|
Результат = ОченьНужное.Ссылка.ПолучитьОбъект();
|
|||
14
Дейл
17.04.13
✎
18:00
|
Если Результат.Количество()>0 Тогда
Результат = ОченьНужное.Ссылка.ПолучитьОбъект(); Иначе сообщить("Объект не найден"); КонецЕсли; |
|||
15
Tanis
17.04.13
✎
18:11
|
Не помогает.
|
|||
16
Tanis
17.04.13
✎
18:14
|
Может, обработка как-то не так работает?
|
|||
17
Tanis
17.04.13
✎
18:18
|
Обработка не работает. :-((((
Там даже если ставить значение, то в новый док оно не ставится. |
|||
18
Tanis
17.04.13
✎
18:39
|
Обработка. Работает. Теперь опять вопрос с поиском, значения.
|
|||
19
Tanis
17.04.13
✎
18:49
|
Нужное = ОбъектИсточник.ДанныеСтроки[ОсновноеСредство].Наименование;
ОченьНужное = Справочники.Номенклатура.НайтиПоНаименованию(Нужное); Результат = ОченьНужное.Ссылка.ПолучитьОбъект(); Так тоже не прокатывает |
|||
20
Tanis
17.04.13
✎
18:56
|
При вводе формулы можно использовать параметры
ОбъектИсточник (объект документа источника) ДанныеСтроки (строка табличной части) Результат выполнения надо поместить в переменную "Результат" |
|||
21
Tanis
17.04.13
✎
19:06
|
ХЕЛП!!!!
|
|||
22
Tanis
17.04.13
✎
19:17
|
Подскажите! Вопрос очень срочный...
|
|||
23
hhhh
17.04.13
✎
19:24
|
в приемник ведь ссылка нужна на номенклатуру. С какого бока тогда появляется объект?
|
|||
24
Tanis
17.04.13
✎
19:29
|
Ном = ОбъектИсточник.ОС;
Для Каждого Стр Из Ном Цикл Нужное = Стр.ОсновноеСредство.Наименование; ОченьНужное = Справочники.Номенклатура.НайтиПоНаименованию(Нужное); Результат = ОченьНужное.ПолучитьСсылку().Ссылка; КонецЦикла; И так не работает |
|||
25
Tanis
17.04.13
✎
19:30
|
В (20) сказано, что можно использовать.
|
|||
26
Tanis
17.04.13
✎
19:34
|
(23) подскажи, пожалуйста.
|
|||
27
Tanis
17.04.13
✎
19:51
|
ХЕЛП!
|
|||
28
Tanis
17.04.13
✎
20:14
|
Подскажите, пожалуйста!!! Кто-нибудь!!!
Как заставить эту штуку работать?! |
|||
29
hhhh
17.04.13
✎
20:19
|
Результат = Справочники.Номенклатура.НайтиПоНаименованию(Нужное);
|
|||
30
Tanis
17.04.13
✎
20:24
|
Нет.
|
|||
31
Tanis
17.04.13
✎
20:25
|
Может там функция Выражение не работает. :-(
|
|||
32
Tanis
17.04.13
✎
20:25
|
Ном = ОбъектИсточник.ОС;
Для Каждого Стр Из Ном Цикл Нужное = Стр.ОсновноеСредство.Наименование; Результат = Справочники.Номенклатура.НайтиПоНаименованию(Нужное); КонецЦикла; Вот так должно работать? |
|||
33
Tanis
17.04.13
✎
20:28
|
Вот код обработки
Процедура ВыбратьИзСпискаРеквизитов(Элемент, СтандартнаяОбработка,Текст = "") Если ПустаяСтрока(Источник) Тогда Возврат; КонецЕсли; Элемент.СписокВыбора.Очистить(); СтандартнаяОбработка = Ложь; ТекСтрока = ЭлементыФормы.ДеревоСоответствий.ТекущаяСтрока; ТчИсточник = ""; Если ПустаяСтрока(ТекСтрока.ТЧПриемник) Тогда //это реквизит шапки Для каждого Реквизит из Источник.Реквизиты цикл Если СокрЛП(Приемник.Реквизиты[ТекСтрока.ИдПриемник].Тип) = СокрЛП(Реквизит.Тип) тогда Если СтрДлина(Текст) > 0 Тогда Если ВРег(Лев(Реквизит.Имя,СтрДлина(Текст))) = ВРег(Текст) Тогда Элемент.СписокВыбора.Добавить(Реквизит.Имя,Реквизит); КонецЕсли; Иначе Элемент.СписокВыбора.Добавить(Реквизит.Имя,Реквизит,,КартинкаРеквизитаШапки); КонецЕсли; КонецЕсли; КонецЦикла; Элемент.СписокВыбора.Добавить("<Значение>","<Значение>",,КартинкаРеквизитаВведеноЗначение); Элемент.СписокВыбора.Добавить("<Выражение>","<Выражение>",,КартинкаПользовательскиеПоля); ИначеЕсли СокрЛП(ТекСтрока.ТЧПриемник) = "Табличная часть" Тогда Для каждого ТЧ из Источник.ТабличныеЧасти цикл Если СтрДлина(Текст) > 0 Тогда Если ВРег(Лев(тч.Имя,СтрДлина(Текст))) = ВРег(Текст) Тогда Элемент.СписокВыбора.Добавить(тч.Имя,Реквизит); КонецЕсли; Иначе Элемент.СписокВыбора.Добавить(тч.имя,ТЧ,,КартинкаРеквизитаТабличныеЧасти); КонецЕсли; КонецЦикла; иначе //реквизит ТЧ Если Не ПустаяСтрока(ТекСтрока.ТЧИсточник) Тогда Для каждого СтрТЧ из Источник.ТабличныеЧасти[ТекСтрока.ТЧИсточник].Реквизиты цикл Если СокрЛП(Приемник.ТабличныеЧасти[ТекСтрока.ТЧПриемник].Реквизиты[ТекСтрока.ИдПриемник].Тип) = СокрЛП(СтрТЧ.Тип) тогда Если СтрДлина(Текст) > 0 Тогда //фильтр по начальных буквах Если ВРег(Лев(СтрТЧ.Имя,СтрДлина(Текст))) = ВРег(Текст) Тогда Элемент.СписокВыбора.Добавить(СтрТЧ.Имя,Реквизит,,КартинкаРеквизитаТабличнойЧасти); КонецЕсли; Иначе Элемент.СписокВыбора.Добавить(СтрТЧ.имя,СтрТЧ,,КартинкаРеквизитаТабличнойЧасти); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Элемент.СписокВыбора.Добавить("<Значение>","<Значение>",,КартинкаРеквизитаВведеноЗначение); Элемент.СписокВыбора.Добавить("<ВыражениеТЧ>","<Выражение>",,КартинкаПользовательскиеПоля); КонецЕсли; Рез = ВыбратьИзМеню(Элемент.СписокВыбора,Элемент); Если Рез = Неопределено Тогда Возврат; КонецЕсли; Если Рез.Значение = "<Значение>" Тогда ТекСтрока.ВведеноЗначение = Истина; ТекСтрока.Формула = ""; Если ПустаяСтрока(ТекСтрока.ТЧПриемник) Тогда //это реквизит шапки ЭлементыФормы.ДеревоСоответствий.Колонки.Источник.ЭлементУправления.ОграничениеТипа = Приемник.Реквизиты[ТекСтрока.ИдПриемник].Тип; иначе ЭлементыФормы.ДеревоСоответствий.Колонки.Источник.ЭлементУправления.ОграничениеТипа = Приемник.ТабличныеЧасти[ТекСтрока.ТЧПриемник].Реквизиты[ТекСтрока.ИдПриемник].Тип; КонецЕсли; ЭлементыФормы.ДеревоСоответствий.Колонки.Источник.ЭлементУправления.Значение = ЭлементыФормы.ДеревоСоответствий.Колонки.Источник.ЭлементУправления.ОграничениеТипа.ПривестиЗначение(ЭлементыФормы.ДеревоСоответствий.Колонки.Источник.ЭлементУправления.Значение); ЭлементыФормы.ДеревоСоответствий.Колонки.Источник.ЭлементУправления.ВыбиратьТип = Истина; ИначеЕсли (Рез.Значение = "<Выражение>") или (Рез.Значение = "<ВыражениеТЧ>") Тогда ТекСтрока.ВведеноЗначение = Ложь; ФормаВводаФормулы = ЭтотОбъект.ПолучитьФорму("ФормаВводаФормулы"); Если (Рез.Значение = "<ВыражениеТЧ>") Тогда ФормаВводаФормулы.ЭтоФормулаДляТабЧасти = Истина; КонецЕсли; ФормаВводаФормулы.ОткрытьМодально(); Если СтрДлина(ФормаВводаФормулы.Формула) > 0 Тогда ТекСтрока.Источник = "<Выражение>"; ТекСтрока.Формула = ФормаВводаФормулы.Формула; КонецЕсли; Иначе ТекСтрока.ВведеноЗначение = Ложь; ТекСтрока.Формула = ""; ТекСтрока.Источник = Рез.Представление; ТекСтрока.ИдИсточник = Рез.Значение; Если СокрЛП(ТекСтрока.ТЧПриемник) = "Табличная часть" Тогда для Каждого стр из ТекСтрока.Строки Цикл стр.ТЧИсточник = Рез.Значение; стр.ИдИсточник = АнализМетаданныхДокументов(СокрЛП(стр.ИдПриемник),СокрЛП(стр.ТЧПриемник),СокрЛП(стр.ТЧИсточник),стр.Источник); КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
34
mistеr
17.04.13
✎
20:37
|
А без истерики никак нельзя?
Отладчиком строчку (29) проходил(а)? |
|||
35
Tanis
17.04.13
✎
22:55
|
(34) обработка внешняя, как ее отладчиком прйти?
Или в конфу добавлять? |
|||
36
Tanis
17.04.13
✎
23:00
|
не было бы истерики, если бы не 60 неудачных попыток.
дело в том что если даже указываешь Результат = Справочники.Номенклатура.НайтиПоНаименованию(Нужное); без дополнительных действий, то тоже ноль... |
|||
37
НикДляЗапросов
17.04.13
✎
23:16
|
(35) Выгрузи в файл и отлаживать файл
|
|||
38
Tanis
17.04.13
✎
23:23
|
Не знаю как. файл ставлю остановку, он не останавливается. добавил в конфу
|
|||
39
Tanis
17.04.13
✎
23:32
|
Такое чувство, что он формулу не распознает...
|
|||
40
Tanis
17.04.13
✎
23:55
|
для Каждого стрТч из СтрДерева.Строки Цикл //цикл по метаданным строки
Если стрТч.ВведеноЗначение Тогда СтрТчПриемник[стрТч.ИдПриемник] = стрТч.Источник; ИначеЕсли не ПустаяСтрока(стрТч.формула) Тогда Попытка ОбъектИсточник = ДокИсточник; ДанныеСтроки = стрТчИсточник; Результат = ""; Выполнить(стрТч.формула); ДокПриемник[СтрДерева.ИдПриемник] = Результат; Исключение сообщить("Не удалось выполнить формулу для реквизита :"+СтрДерева.ИдПриемник+" табличной части:"+СтрДерева.ТЧПриемник); КонецПопытки; Иначе Было стрДерева.формула, он пролистывал формулу, не видел ее, заменил на стрТЧ. Но тпер не выполняет, почему-то эту формулу. Где еще здесь ошибка? |
|||
41
Tanis
18.04.13
✎
00:05
|
Формула может быть строкой?
|
|||
42
mistеr
18.04.13
✎
00:16
|
Я уже вобще не понимаю, что ты теперь отлаживаешь...
|
|||
43
Tanis
18.04.13
✎
00:18
|
обработку
|
|||
44
Tanis
18.04.13
✎
00:19
|
ее механизм
|
|||
45
Tanis
18.04.13
✎
00:23
|
В (40) надо вставить формулу, чтоб вычислялось нужное.
|
|||
46
mistеr
18.04.13
✎
00:24
|
Номенклатура уже находится?
|
|||
47
Tanis
18.04.13
✎
00:30
|
нет
|
|||
48
Tanis
18.04.13
✎
00:31
|
формула никак не срабатывает.
После всех замен на стрТч стало доходить до ошибки сообщить("Не удалось выполнить формулу для реквизита :"+СтрДерева.ИдПриемник+" табличной части:"+СтрДерева.ТЧПриемник); |
|||
49
Tanis
18.04.13
✎
00:32
|
Выполнить(стрТч.формула); - ?? формула строка
ДокПриемник[СтрДерева.ИдПриемник] = Результат; - 0 либо строка |
|||
50
mistеr
18.04.13
✎
00:37
|
Обработка твоя или типовая. Если типовая, там скорее всего все OK, отлаживай только свой код.
Скопируй (32) в новую внешнюю обработку. Выясни в чем проблема с поиском. |
|||
51
France
18.04.13
✎
00:41
|
Поиск по наименованию моветон. Это для начала
|
|||
52
Tanis
18.04.13
✎
00:42
|
Поиск из внешней обработки работает, я уже проверял.
Обработка с инфостарта, еще под 8.1. И как я понял, что проблема в коде связанном с формулой. |
|||
53
Tanis
18.04.13
✎
00:48
|
могу скинуть обработку :-)
|
|||
54
mistеr
18.04.13
✎
00:54
|
(52) Как все запущено...
|
|||
55
Tanis
18.04.13
✎
00:57
|
в (40) есть ошибка?
|
|||
56
Tanis
18.04.13
✎
00:58
|
Почему сразу запущено? Хорошя обработка! Осталось вот только с формулой решить вопрос.
|
|||
57
Tanis
18.04.13
✎
01:17
|
Если есть желание, могу скинуть обработку, и поковыряйтесь..
|
|||
58
Tanis
18.04.13
✎
08:27
|
Доброе утро! Продолжаем борьбу с обработкой...
Остались считаные часы... Подскажите, пожалуйста, варианты? |
|||
59
Tanis
18.04.13
✎
08:47
|
Вопрос как никогда срочный...
|
|||
60
НикДляЗапросов
18.04.13
✎
08:57
|
Платите деньги спецу
|
|||
61
Tanis
18.04.13
✎
08:59
|
Без денег никак?
Уже ошибки в обработке нашел, еще есть, но не могу найти. Формула должна отображаться в "", или просто строкой? |
|||
62
Tanis
18.04.13
✎
09:16
|
Подскажите, нет ли ошибки в (40)
|
|||
63
Tanis
18.04.13
✎
11:30
|
Большой ХЕЛП!!!
|
|||
64
Tanis
18.04.13
✎
11:51
|
SOS
|
|||
65
Tanis
18.04.13
✎
12:00
|
Кто что может, подскажите?!
|
|||
66
Tanis
18.04.13
✎
12:02
|
для Каждого стрТч из СтрДерева.Строки Цикл //цикл по метаданным строки
Если стрТч.ВведеноЗначение Тогда СтрТчПриемник[стрТч.ИдПриемник] = стрТч.Источник; ИначеЕсли не ПустаяСтрока(стрТч.формула) Тогда Попытка ОбъектИсточник = ДокИсточник; ДанныеСтроки = стрТчИсточник; Результат = ""; Выполнить(стрТч.формула); ДокПриемник[СтрДерева.ИдПриемник] = Результат; Исключение сообщить("Не удалось выполнить формулу для реквизита :"+СтрДерева.ИдПриемник+" табличной части:"+СтрДерева.ТЧПриемник); КонецПопытки; Иначе Здесь не выполняется формула... Сейчас уже просто пробую. Результат = "Справочник.Номенклатура.НайтиПоНаименованию("Номен");" |
|||
67
Tanis
18.04.13
✎
15:42
|
Тема закрыта.
Дело было в коде обработки, в 4-х местах изменил написанное. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |