|
Заполнение пустого поля ТЧ по другому | ☑ | ||
---|---|---|---|---|
0
Anastasiy
25.10.12
✎
11:08
|
Создала Вот такую внешнюю обработку, Чтобы массово заполнить поле НаименованиеТовараНов(ссылка) по ТабПолю НаименованиеТовара(строка), вот только копирует она во все 99 999 строк))) Подскажите, кто знает, что можно сделать.
|
|||
1
Anastasiy
25.10.12
✎
11:09
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
ВыборкаДокументов = Документы.Доверенность.Выбрать(ОтборДатаНач, ОтборДатаКон); Пока ВыборкаДокументов.Следующий() Цикл ОбъектДокумента = ВыборкаДокументов.ПолучитьОбъект(); ТЧ = ОбъектДокумента.Товары; ТЧ1 = ТЧ.С Для каждого Стр Из ОбъектДокумента.Товары Цикл Если Не ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Поля НаименованиеТовара не заполнено"); ИначеЕсли ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда НСтр = ТЧ.Добавить(); НСтр.НаименованиеТовара = Стр.НаименованиеТовара; НСтр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара); НСтр.Количество = Стр.Количество; НСтр.ЕдиницаПоКлассификатору = Стр.ЕдиницаПоКлассификатору; ОбъектДокумента.Дата = ВыборкаДокументов.Дата; ОбъектДокумента.ДатаДействия = ОбъектДокумента.Дата + 10 * (24 * 60 * 60); Иначе Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Номенклатура не найдена"); КонецЕсли; ОбъектДокумента.Записать(); КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
2
lxndr
25.10.12
✎
11:12
|
Ничче не понимаю.. Заполняешь документы самими собой?
ТЧ = ОбъектДокумента.Товары; ... НСтр = ТЧ.Добавить(); |
|||
3
dimaldinho
25.10.12
✎
11:19
|
ИначеЕсли ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда
Стр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара); Если задача только в заполнении реквизита табличной части документа, то реквизиты шапки документа не трогать. |
|||
4
dimaldinho
25.10.12
✎
11:20
|
Ну и сообщить, если номенклатура не найдена по Стр.НаименованиеТовара
Ну и записывать документ не после каждой строчки, а по окончании перебора всей табличной части. |
|||
5
dimaldinho
25.10.12
✎
11:24
|
Если Не ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда
ИначеЕсли ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда Иначе Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Номенклатура не найдена"); КонецЕсли; А это нечеткая логика: значение может быть заполнено, не заполнено и ... промежуточные значения между заполненностью и незаполненностью? |
|||
6
Zmich
25.10.12
✎
11:26
|
ОбъектДокумента.Записать();
выведи за цикл |
|||
7
Anastasiy
25.10.12
✎
11:40
|
(5))) Промежуточное значение не найдена номенклатура в справочнике)) Что тоже имеет место быть))
|
|||
8
Anastasiy
25.10.12
✎
11:40
|
(6) Спасибо, гляну.
|
|||
9
palpetrovich
25.10.12
✎
11:40
|
(0) поток сознания :)
//в цикле Для каждого Стр Из ОбъектДокумента.Товары Цикл // нижеизложенное - не комильфо :) НСтр = ТЧ.Добавить(); |
|||
10
palpetrovich
25.10.12
✎
11:41
|
+9 ну и это:
Если Не ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда ИначеЕсли ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда Иначе // что еще может быть? |
|||
11
Anastasiy
25.10.12
✎
11:57
|
Поток сознания прекрасно работает))) Спасибо(6) устала с этой обработкой, просмотрела)
|
|||
12
Anastasiy
25.10.12
✎
12:07
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
ВыборкаДокументов = Документы.Доверенность.Выбрать(ОтборДатаНач, ОтборДатаКон); Пока ВыборкаДокументов.Следующий() Цикл ОбъектДокумента = ВыборкаДокументов.ПолучитьОбъект(); ТЧ = ОбъектДокумента.Товары; ТЧ1 = ТЧ.Выгрузить(); ТЧ.Загрузить(ТЧ1); Для каждого Стр Из ОбъектДокумента.Товары Цикл Если Не ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Поля НаименованиеТовара не заполнено"); ИначеЕсли ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда Стр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара); ОбъектДокумента.Дата = ВыборкаДокументов.Дата; ОбъектДокумента.ДатаДействия = ОбъектДокумента.Дата + 10 * (24 * 60 * 60); Иначе Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Номенклатура не найдена"); КонецЕсли; КонецЦикла; КонецЦикла; ОбъектДокумента.Записать(); КонецПроцедуры // --------------------------------------------------------------------------------------------------------------------- мНастройкаПериода = Новый НастройкаПериода; Вот так в итоге - работает. |
|||
13
palpetrovich
25.10.12
✎
12:56
|
(12) ничего особо прекрасного в коде вообще-то нет :)
это лишнее, сюда ты никогда не попадещь: Иначе Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Номенклатура не найдена"); а это что??? ТЧ1 = ТЧ.Выгрузить(); ТЧ.Загрузить(ТЧ1); |
|||
14
Шапокляк
25.10.12
✎
13:04
|
(12) ОбъектДокумента.Записать();
КонецПроцедуры Мы перебираем все документы, а записываем объект только один раз, судя по всему для последнего в выборке документа. Вы уверены, что это нормально работает? |
|||
15
Anastasiy
26.10.12
✎
07:59
|
Сорь -))) Вот так, поторопилась))
КнопкаВыполнитьНажатие(Кнопка) ВыборкаДокументов = Документы.Доверенность.Выбрать(ОтборДатаНач, ОтборДатаКон); Пока ВыборкаДокументов.Следующий() Цикл ОбъектДокумента = ВыборкаДокументов.ПолучитьОбъект(); ТЧ = ОбъектДокумента.Товары; Для каждого Стр Из ОбъектДокумента.Товары Цикл Если Не ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Поля НаименованиеТовара не заполнено"); ИначеЕсли ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда Стр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара); ОбъектДокумента.Дата = ВыборкаДокументов.Дата; ОбъектДокумента.ДатаДействия = ОбъектДокумента.Дата + 10 * (24 * 60 * 60); Иначе Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Номенклатура не найдена"); КонецЕсли; КонецЦикла; ОбъектДокумента.Дата = ВыборкаДокументов.Дата; ОбъектДокумента.ДатаДействия = ОбъектДокумента.Дата + 10 * (24 * 60 * 60); ОбъектДокумента.Записать(); КонецЦикла; КонецПроцедуры |
|||
16
palpetrovich
26.10.12
✎
11:15
|
(15) опять поторопилась :)
хоть какой-то смысл есть только в : Процедура КнопкаВыполнитьНажатие(Кнопка) ВыборкаДокументов = Документы.Доверенность.Выбрать(ОтборДатаНач, ОтборДатаКон); Пока ВыборкаДокументов.Следующий() Цикл ОбъектДокумента = ВыборкаДокументов.ПолучитьОбъект(); ОбъектДокумента.ДатаДействия = ОбъектДокумента.Дата + 10 * (24 * 60 * 60); ОбъектДокумента.Записать(); КонецЦикла; КонецПроцедуры ТЧ = ОбъектДокумента.Товары; // нигде не используется Стр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара); // НайтиПоНаименованию возвращает ссылку на элеиент справочника, // но даже если, но даже сделать так: Стр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара).Наименование, все равно // действие бесполезно ибо ищем сами себя ОбъектДокумента.Дата = ВыборкаДокументов.Дата; // масло масляное вообще, зачем перебираешь ТЧ - непонятно, ты-бы озвучила лучше задачу по-русски, без кода, было-бы толку больше :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |