helpf.pro
Регистрация

v8: ВнешняяОбработказаполнения поля ТЧпо другому

Dana
24.10.2012 14:47Прочитано: 1614
Сделала внешнюю обработку отбором по периду(ДатаНач,ДатаКон)

При запуске пишет, что поле Дата, не может быть пустым... Пожалуйста подскажите с кодом, совсем извел)) Отладчиком видно, что проскакивает Цикл (ДляКаждого)

Процедура КнопкаВыполнитьНажатие(Кнопка)

Выборка = Документы.Доверенность.Выбрать(ОтборДатаНач, ОтборДатаКон);
Ссылка = Документы.Доверенность;
Док = Ссылка.СоздатьДокумент();
//ТЧ=Док.Товары;

Пока Выборка.Следующий() Цикл
Дата = Док.Дата;
Для каждого Стр Из Док.Товары Цикл


Если Не ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда

Сообщить("Доверенность № """ + Выборка.Номер +", " + Выборка.Дата + """ Поля НаименованиеТовара не заполнено");


ИначеЕсли Стр.НаименованиеТовараНов = Справочники.Номенклатура.ПустаяСсылка() Тогда
Сообщить("Доверенность № """ + Выборка.Номер +", " + Выборка.Дата + """ Номенклатура не найдена");

Иначе
Стр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию("НаименованиеТовара");

КонецЕсли;
Дата = Док.Дата;
//Стр.НаименованиеТовараНов = ?( Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара)=Справочники.Номенклатура.ПустаяСсылка(),Стр.НаименованиеТовара,Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара));

КонецЦикла;


КонецЦикла;

Док.ЭтотОбъект.Товары.Добавить();
Док.Записать();

КонецПроцедуры

// ---------------------------------------------------------------------------------------------------------------------

мНастройкаПериода = Новый НастройкаПериода;
*12
Yandex
Возможно, вас также заинтересует
Реклама на портале
Mokey
24.10.2012 15:07Ответ № 1
Документ создали, дату не присвоили и пытаетесь инициализировать переменную Дата.
Дата = Док.Дата;

И вообще код сумбурный и непонятный.
Изменено 24.10.12 15:08:39
Dana
25.10.2012 06:22Ответ № 2
Ну, вообще-то нужно косо заполненные доверенности перезаполнить массово. Данные берутся с поля НаименованиеТовара(тип строка), а заполнить нужно поле НаименованиеТовараНов( тип ссылка), можно поподробнее с датой)))
Mokey
25.10.2012 09:32Ответ № 3
Ссылка = Документы.Доверенность;
Док = Ссылка.СоздатьДокумент();
//ТЧ=Док.Товары;

Пока Выборка.Следующий() Цикл
Дата = Док.Дата;

вот этот кусок, создали новый документ и пытаетесь тут же считать дату, а пока документ не записан или не присвоен реквизит Дата, она пустая, вот и ошибка. Тут либо сразу записать документ какой-то датой, либо Вы манипулируете не с тем документом.
Dana
25.10.2012 11:00Ответ № 4
Вот так получилось работоспособно, НО!!!! копирование происходит в 99 999 строках((( Что изменить в коде, чтобы ограничиться кол-вом строк документа????

Процедура КнопкаВыполнитьНажатие(Кнопка)

ВыборкаДокументов = Документы.Доверенность.Выбрать(ОтборДатаНач, ОтборДатаКон);

Пока ВыборкаДокументов.Следующий() Цикл

ОбъектДокумента = ВыборкаДокументов.ПолучитьОбъект();
ТЧ = ОбъектДокумента.Товары;
ТЧ1 = ТЧ.С
Для каждого Стр Из ОбъектДокумента.Товары Цикл


Если Не ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда

Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Поля НаименованиеТовара не заполнено");


ИначеЕсли ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда

НСтр = ТЧ.Добавить();

НСтр.НаименованиеТовара = Стр.НаименованиеТовара;
НСтр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара);


НСтр.Количество = Стр.Количество;
НСтр.ЕдиницаПоКлассификатору = Стр.ЕдиницаПоКлассификатору;

ОбъектДокумента.Дата = ВыборкаДокументов.Дата;
ОбъектДокумента.ДатаДействия = ОбъектДокумента.Дата + 10 * (24 * 60 * 60);



Иначе
Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Номенклатура не найдена");
КонецЕсли;
ОбъектДокумента.Записать();
КонецЦикла;


КонецЦикла;

КонецПроцедуры
Dana
25.10.2012 11:02Ответ № 5
* ТЧ1 = ТС.С - просто не убрала, начало попытки сделать копирование)
Mokey
25.10.2012 11:22Ответ № 6
Итак, если это весь код, то теперь непонятно, какой документ Вы правите, вернее, правите документ из выборки, а именно, получаете объект, считываете ЕГО табчасть, потом в ЕГО же табчасть добавляете строки и записываете после считывания КАЖДОЙ строки.
Что есть "косо заполненные"?
Mokey
25.10.2012 11:26Ответ № 7
Код 1C v 8.х
 
Процедура КнопкаВыполнитьНажатие(Кнопка)

ВыборкаДокументов = Документы.Доверенность.Выбрать(ОтборДатаНач, ОтборДатаКон);

Пока ВыборкаДокументов.Следующий() Цикл

ОбъектДокумента = ВыборкаДокументов.ПолучитьОбъект();
ТЧ = ОбъектДокумента.Товары;
// ТЧ1 = ТЧ.С
Для каждого Стр Из ТЧ Цикл

Если Не ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда

Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Поля НаименованиеТовара не заполнено");

ИначеЕсли ЗначениеЗаполнено(Стр.НаименованиеТовара) Тогда

НСтр = ТЧ.Добавить();

// может, надо просто поправить существующую строку????

НСтр.НаименованиеТовара = Стр.НаименованиеТовара;
НСтр.НаименованиеТовараНов = Справочники.Номенклатура.НайтиПоНаименованию(Стр.НаименованиеТовара);
НСтр.Количество = Стр.Количество;
НСтр.ЕдиницаПоКлассификатору = Стр.ЕдиницаПоКлассификатору;

Иначе
Сообщить("Доверенность № """ + ОбъектДокумента.Номер +", " + ОбъектДокумента.Дата + """ Номенклатура не найдена");
КонецЕсли;

КонецЦикла;

ОбъектДокумента.Дата = ВыборкаДокументов.Дата;
ОбъектДокумента.ДатаДействия = ОбъектДокумента.Дата + 10 * (24 * 60 * 60);
ОбъектДокумента.Записать();

КонецЦикла;

КонецПроцедуры

Изменено 25.10.12 11:32:04
Mokey
25.10.2012 14:01Ответ № 8
Ещё вариант:
создать пустую ТЗ из ТЧ, заполнить её по циклу, потом заменить ТЧ на ТЗ. Я понятно изъясняюсь? ))
Но мне кажется задача намного проще и достаточно будет просто поправить текущую строку в цикле по строкам ТЧ.
Dana
26.10.2012 06:08Ответ № 9
Спасибо за помощь, но просто запись объекта нужно было вынести за цикл, а не записывать каждую строку. Но всё равно спасибо))
Dana
26.10.2012 06:09Ответ № 10
А, ну и поскольку Объект, можно не добавлять, а изменять тут же))
Dana
26.10.2012 06:11Ответ № 11
P.S Строку НаименованиеТовараНов( типа ссылка) нужно было заполнить по строке ТЧ НаименованиеТовара( типа Строка 10) Всё работает, спасибо.))
Mokey
26.10.2012 10:09Ответ № 12
(9) Dana, так я же так и поправил
(10) Dana, вопросом задавался )))
(11) Dana, наслаждайтесь
Удачи
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.