Вопрос № 165307: Здравствуйте, уважаемые эксперты. Пытаюсь внести с помощью XBase данные в табличную часть формы документа. Но вот что-то с кодом не ладится. Версия самописно-переписанная ТИС под 1С Предприятие 7.7 Есть в dbf-файле четыре колонки со значениями: N...
Вопрос № 165.307
Здравствуйте, уважаемые эксперты. Пытаюсь внести с помощью XBase данные в табличную часть формы документа. Но вот что-то с кодом не ладится. Версия самописно-переписанная ТИС под 1С Предприятие 7.7 Есть в dbf-файле четыре колонки со значениями: NomNumber, KOLVO, PRICE, SUMM. В самом документе в 1С, а именно РасходнаяНакладная есть столбцы с идентификаторами в которые нужно импортировать данные: КвоЗаказПокупателя (в этот столбец необходимо внести значения из колонки в dbf-файле KOLVO); Кво (-KOLVO);ЦенаСНДС
(-PRICE); СуммаСНДС (-SUMM). И еще такой нюанс: имеется некая колонка в dbf -файле NomNumber - обозвал его как бы номенклатурным номером, а именно код из справочника ТМЦ под которым имеется название того или иного ТМЦ. Вопрос стоит следующий - считывать этот NomNumber из dbf-ника, и на основе его чтобы выбиралось наименование ТМЦ из справочника и подставлялось в табличную часть формы документа. Ниже привожу код, который привязан к созданной на форме кнопке, ну ни в как
ую не желающий функционировать. Благодарю за внимание и очень надеюсь на Вашу помощь.
Отвечает: Anton Devitsin
Здравствуйте, Greendzhola!
Извините, но как мне видится из вашего кода - он не делает то что вы описывали в задании. Я попробую изменить вашу процедуру для получения ожидаемого результата.
Обратите внимание - находит ли процедура сам файл. создаются ли строки в документе Метод - НоваяСтрока()
Если процедура работает в модуле формы документа - вам подойдет мой вариант. Если же документ создается неявно - тогда обратите внимание на создание новых строк и запись в документе. Обязательно
при обращении к любым внешним файлам - проверяйте открыт ли он. Это позволит избежать некоторой некорректности по отношению к пользователю.
Других ошибок быть не должно.
Приложение:
Ответ отправил: Anton Devitsin (статус: 3-й класс)
Ответ отправлен: 19.04.2009, 03:08
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 247802 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 3 Комментарий оценки: Немного малый сдвиг - в строках заполняется только нумерация, колонки которые должны заполняться из импортируемого файла - пустые. Видоизменение на:
"Если ДБФ.ОткрытьФайл(КаталогИБ()+"ObChKP.dbf")=0 Тогда Сообщить("Файл не найден"); Возврат; КонецЕсли;"
приводит к такому сообщению:
"Если ДБФ.ОткрытьФайл(КаталогИБ()+"ObChKP.dbf")=0 Тогда {Документ.РасходнаяНакладная.Форма.Модуль(3234)}:
Обращение к процедуре объекта как к функции (ОткрытьФайл)"
Отвечает: Анатолий Ясень
Здравствуйте, Greendzhola!
В дополнение к первому ответу, Вам нужно добавить код поиска элементов справочника "Номенклатура" по коду, указанному в поле "NomNumber"
Приложение:
--------- Только вперед!
Ответ отправил: Анатолий Ясень (статус: Студент)
Ответ отправлен: 19.04.2009, 10:13
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 247816 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 3 Комментарий оценки: Попытался довнести с учетом ваших пожеланий и поправив на справочник из самой конфигурации. Общий код получился следующий:
"Процедура ИмпЧКП()
///=======Импортируем в табличную часть Расходной накладной обработанные данные======= ДБФ = СоздатьОбъект("Xbase"); ДБФ.ОткрытьФайл(КаталогИБ()+"ObChKP.dbf");
ДБФ.ПоказыватьУдаленные(0); //Для Ном=1 По ДБФ.КоличествоЗаписей()
Цикл // ДБФ.Перейти(Ном); ДБФ.Первая(); Пока ДБФ.ВКонце() = 0 Цикл // вставить в тело цикла КодТМЦ = ДБФ.NomNumber; Если ТМЦ.НайтиПоКоду(КодТМЦ, 0) = 1 Тогда НоваяСтрока(); // Новую строку добавляем только если найден товар ТМЦ = ТМЦ.ТекущийЭлемент(); Иначе Сообщить("Товар с кодом "+КодТМЦ+" не найден!"); Продолжить; // эту строку пропускаем, ничего не делаем КонецЕсли; // РНКП.НомНоме
р=ДБФ.NomNumber; НоваяСтрока(); КвоЗаказПокупатель=ДБФ.KOLVO; Кво=ДБФ.KOLVO; ЦенаСНДС=ДБФ.PRICE; СуммаСНДС=ДБФ.SUMM; ДБФ.Следующая(); КонецЦикла; ДБФ.ЗакрытьФайл(); КонецПроцедуры"
Однако при запуске процедуры путем нажатия на кнопку выводит сообщение:
"Если ТМЦ.НайтиПоКоду(КодТМЦ, 0) = 1 Тогда {Документ.РасходнаяНакладная.Форма.Модуль(3241)}: Объект не может быть перепозиционирован!"
Естественно заполнение пусть дальше только
нумерации не отрабатывает.
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.