dbf

1. неопытный 01.11.06 15:23 Сейчас в теме
Подскажите пожалуйста.
Есть документ, в табличной части которого, имеются реквизиты
Субконто1, Субконто2, Субконто3.
Пытаюсь Экспортировать Эти документы в DBF файл, путем создания объекта x-Base. Вместо субконто выгружаются какие-то числа... Обращаюся к субконто
dbf.SBK=Док.Субконто1
Тип значения субконто - неопределенный, хотя значение берет из справочника.
Пробовал
dbf.SBK=Док.Субконто1.Код
dbf.SBK=Док.Субконто1.Наименование
Не помогает. Посоветуйте пожалуйста, в чем может быть проблема? Заранее благодарен?

По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
18. vladko 02.11.06 11:36 Сейчас в теме
неопытный Написал:
-------------------------------------------------------
> > ... В любом док-те, где есть коррСчет и 3
> субконто, типы реквизитов документа
> неопределённый,...
> ...Так вот я и хотел узнать как в таком случае
> достать код и наименование из использовавшегося
> справочника.
Посмотри модуль формы документа процедуру ПриВыбореКоррСчета()
Там написано:
НазначитьТип("Субконто1", КоррСчет.ВидСубконто(1));
НазначитьТип("Субконто2", КоррСчет.ВидСубконто(2));
НазначитьТип("Субконто3", КоррСчет.ВидСубконто(3));
Это и есть назначение типа субконто в зависимости от аналитики корр.счёта
Например, пользователь выбрал счёт 41.1, то
субконто1 становится после этого с типом Справочник.Номенклатура, а субконто2 Справочник.МестаХранения, а Субконто3, остаётся неопределеным.
23. vladko 09.11.06 12:42 Сейчас в теме
Гость, здесь же уже писалось ;-)
>Посмотри модуль формы документа процедуру
>ПриВыбореКоррСчета()
>Там написано:
>НазначитьТип("Субконто1", КоррСчет.ВидСубконто(1));
>НазначитьТип("Субконто2", КоррСчет.ВидСубконто(2));
>НазначитьТип("Субконто3", КоррСчет.ВидСубконто(3));
>Это и есть назначение типа субконто в зависимости от
>аналитики корр.счёта
>Например, пользователь выбрал счёт 41.1, то
>субконто1 становится после этого с типом >Справочник.Номенклатура, а субконто2 >Справочник.МестаХранения, а Субконто3, остаётся
>неопределеным.
То есть для твоего случая надо:
Док.НоваяСтрока();
Док.КоррСчет = СчетПоКоду("60.2");
Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));
Контрагенты.НайтиПоКоду("0001"); // сто пудов находит //(проверял)
Док.Субконто1 = Контрагенты.ТекущийЭлемент();
И всё будет работать. Просто у тебя не назначены типы субконто в зависимости от счёта
2. CheBurator 3119 01.11.06 19:42 Сейчас в теме
Попробуй втупую
bf.SBK= " "+Док.Субконто1;
с другой стороныЮ, если не прокатило
dbf.SBK=Док.Субконто1.Наименование
- какй тип поля SBK...?
3. vladko 02.11.06 07:52 Сейчас в теме
неопытный Написал:
-------------------------------------------------------
> Обращаюся к субконто
> dbf.SBK=Док.Субконто1
> Тип значения субконто - неопределенный, хотя
> значение берет из справочника.
Тип субконто уже назначен в соответствии с видами субконто у счёта в документе

> Пробовал
> dbf.SBK=Док.Субконто1.Код
> dbf.SBK=Док.Субконто1.Наименование
> Не помогает. Посоветуйте пожалуйста, в чем может
> быть проблема? Заранее благодарен?
Напиши тип твоего поля SBK, лучше показать как ты его обозначил в программе.
Приведи пример своей обработки вообще, чтобы разобраться и что стоит в полях документа Коррсчет, субконто1,2,3.
Напиши с какой конфигой ты работаешь.
И поможем тебе, а пока информации очень мало
4. 02.11.06 08:38 Сейчас в теме
Мне очень интересно неужели поля в документе так и называются Субконто1,Субконто2...., если нет тогда называй вещи своими именами так как они представлены у тебя в документе.
5. неопытный 02.11.06 09:21 Сейчас в теме
7.70.478
Документ называется УслугиСтороннихОрганизаций.
В табличной части документа еть реквизиты Субконто1, Субконто2, Субконто3, неопределенного типа.
Однако значения берутся из справочника.
Тип поля SBK делал как строковым, так и числовым - не помогает(Хотя тип поля SBK тут не при чем).
6. vladko 02.11.06 09:37 Сейчас в теме
Aron Написал:
-------------------------------------------------------
> Мне очень интересно неужели поля в документе так и
> называются Субконто1,Субконто2...., если нет тогда
> называй вещи своими именами так как они
> представлены у тебя в документе.
Конечно так могут называться. А вот просто Субконто уже не может.
7. vladko 02.11.06 09:39 Сейчас в теме
неопытный Написал:
-------------------------------------------------------
> 7.70.478
> Документ называется УслугиСтороннихОрганизаций.
> В табличной части документа еть реквизиты
> Субконто1, Субконто2, Субконто3, неопределенного
> типа.
> Однако значения берутся из справочника.

Тебе уже я говорил, что Тип субконто уже назначен в соответствии с видами субконто у счёта в документе

> Тип поля SBK делал как строковым, так и числовым -
> не помогает(Хотя тип поля SBK тут не при чем).
отлично, что 478-я бухгалтерия.
Напиши свой пример программы и станет ясно почему у тебя возникли проблемы
8. maljaev 789 02.11.06 09:50 Сейчас в теме
Вобщем парит он нам мозги. Щас протестил его ситуэйшн.

1) Вид субконто неопределенного типа быть не может, поэтому все разговоры о субконто - фигня.
2) Субконто1 и т.д. - это у него просто реквизиты документа, в которые записываются элементы справочника.
3) Если делать присвоение текстовому полю DBF непосредственно значение СубконтоX - то да, 1С фичит и не хочет нормально преобразовать тип к строке, записывая в поле ID элемента. Но если в поле записывать СубконтоX.Наименование ("Строка" если) или хотя бы СокрЛП(СубконтоХ), т.е. явно привести тип к строке, то все прокатывает и в поле нормально пишется.

Так что если у него не катит - значит либы он нам репы парит, либо смотрит на зависший экран, где у него естесно ничего не меняется, чтобы он не предпринимал.
9. неопытный 02.11.06 09:51 Сейчас в теме
procedure ActUslug()
var rez;

doct=createobject("Документ.УслугиСтороннихОрганизаций");
dbf=CreateObject("XBase");

dbf.addfield("NomDoc","S",20,0);
dbf.addfield("DateDoc","D",10,0);
dbf.addfield("K_Agent","S",20,0);
dbf.addfield("Usl_Name","S",60,0);
dbf.addfield("Kolvo","N",14,4);
dbf.addfield("Vsego","N",15,4);
dbf.addfield("NDS","N",15,4);
dbf.addfield("NP","N",15,4);
dbf.addfield("Summ","N",15,4);
dbf.addfield("SCHET_KOD","S",15,0);
//???dbf.addfield("SbK1","S",50,0);

dbf.createfile(FullFile);

if doct.ВыбратьДокументы()=1 then
while (doct.ПолучитьДокумент)=1) do
doct.выбратьстроки();
while doct.получитьстроку()>0 do
dbf.add();
dbf.NomDoc=doct.НомерДок;
dbf.DateDoc=doct.ДатаДок;
dbf.K_Agent=doct.Контрагент.Код;
dbf.Usl_Name=doct.НаименованиеУслуги;
dbf.SCHET_KOD=Doct.КоррСчет.Код;
//???dbf.SbK1=doct.Субконто1.Код;
dbf.Kolvo=doct.Количество;
dbf.Vsego=doct.Всего;
dbf.NDS=doct.НДС;
dbf.NP=doct.НП;
dbf.Summ=doct.Сумма;

dbf.save();
enddo
enddo
endif;
dbf.closefile()
endprocedure
10. vladko 02.11.06 11:13 Сейчас в теме
Maljaev Написал:
-------------------------------------------------------
> Вобщем парит он нам мозги. Щас протестил его
> ситуэйшн.
> 1) Вид субконто неопределенного типа быть не
> может, поэтому все разговоры о субконто - фигня.
Он говорит что не тип субконто неопределённый, а тип реквизита Субконто1 и др. неопределённый. Это правильно. Он просто не так выразился. В любом док-те, где есть коррСчет и 3 субконто, типы реквизитов документа неопределённый, например ещё в ПКО.

> 2) Субконто1 и т.д. - это у него просто реквизиты
> документа, в которые записываются элементы
> справочника.
Там не только справочник может быть, но и перечисление, например.

> 3) Если делать присвоение текстовому полю DBF
> непосредственно значение СубконтоX - то да, 1С
> фичит и не хочет нормально преобразовать тип к
> строке, записывая в поле ID элемента.
Вот именно.

> Но если в
> поле записывать СубконтоX.Наименование ("Строка"
> если) или хотя бы СокрЛП(СубконтоХ), т.е. явно
> привести тип к строке, то все прокатывает и в поле
> нормально пишется.
Ну...
11. неопытный 02.11.06 11:17 Сейчас в теме
Товарищ Maljaev, благодарю ВАС за помощь. Действительно
Ваше СокрЛП помогло.
Однако я мозги не кому не парю. Отвечать на вопросы я никого не заставляю и если я говорю, что тип неопределенный, то это действительно так.
Что касается dbf.SbK1=doct.Субконто1.Наименование, то возникает ошибка - "Значение не представляет агрегатный объект (Наименование)". Если бы типом Субконто1 был конкретный справочник, то при обращении к наименованюю(или коду) естественно такой ошибки не было. Так вот следовательно ошибка возникает из за того-что тип неопределенный.
Однако в программе значение берется ведь из справочников.
Может и не из одного. Возможно причина в этом. Так вот я и хотел узнать как в таком случае достать код и наименование из использовавшегося справочника.
12. defini 464 02.11.06 11:21 Сейчас в теме
Попробуй вот так:

dbf.УстановитьЗначениеПоля("SbK1",СокрЛП(doct.Субконто1.Код));

или

dbf.SetFieldValue("SbK1",TrimAll(doct.Субконто1.Код));

ну или Число(), если у тебя Субконто.Код числовое значение
13. неопытный 02.11.06 11:24 Сейчас в теме

... В любом док-те, где есть коррСчет и 3 субконто, типы реквизитов документа неопределённый,...
...Так вот я и хотел узнать как в таком случае достать код и наименование из использовавшегося справочника.


14. неопытный 02.11.06 11:27 Сейчас в теме
...dbf.УстановитьЗначениеПоля("SbK1",СокрЛП(doct.Субконто1.Код));
err: Значение не представляет агрегатный объект (Код)
15. defini 464 02.11.06 11:29 Сейчас в теме
У тебя, скорее всего, в каком-то документе, в какой-то строке реквизит "Субконто1" так и остался неопределенным, т.е. пустым, или там вообще перечисление. Пройдись отладчиком по модулю, или поставь проверку в текст модуля с сообщением текущего док-та.
16. vladko 02.11.06 11:29 Сейчас в теме
неопытный Написал:
-------------------------------------------------------
> dbf.addfield("SbK1","S",50,0);
здесь можно организовать поле для хранения кода элемента справочника. Правильно, оно должно быть текстовое, но длину можно уменьшить при желании.
...
> dbf.SbK1=doct.Субконто1.Код;
Здесь всё правильно. НО если присваивать непосредственно субконто1, то тогда вылезет системным идентификатор элемента справочника, а не его код.
Можешь попробовать сделать так:
ТекЭлем=doct.Субконто1;
dbf.SbK1=ТекЭлем.Код;

Посмотришь в отладчике, что присваивается ТекЭлем, и что попадает в dbf.SbK1
НО учти, что не всегда элемент справочника на субконто находится.
Хотя, в услугах сторон. орг-ций обычно присутствуют затратные счета и их аналитика обычно отражена элементами справочников, так что можно пока так отставить, а если появятся ещё другие типы, то тогда надо будет спервать делать проверку субконто на тип.
17. неопытный 02.11.06 11:35 Сейчас в теме
Благодарю за помощь и терпение!
19. vladko 02.11.06 11:38 Сейчас в теме
неопытный Написал:
-------------------------------------------------------
> ...dbf.УстановитьЗначениеПоля("SbK1",СокрЛП(doct.С
> убконто1.Код));
> err: Значение не представляет агрегатный объект
> (Код)
Проверяй на пустое значение:
Если ПустоеЗначение(doct.Субконто1)=0 тогда //т.е. заполнено
...
КонецЕсли;
20. maljaev 789 02.11.06 11:42 Сейчас в теме
По большому счету, по-грамотному, надо вообще делать нормальный обработчик типов, а не тупо приводить все к строке. Скажем, если тип Дата - то лучше с полным годом, если перечисление - то идентификатор, а не представление, как в случае с СокрЛП(), если справочник - то идентификатор вида + код/наименование, документ - идентификатор вида + дата + номер и т.д.

А почему я ругался, так потому что Неопытный четко и ясно сказал - одни только справочникик. Поэтому наименование должно было всегда прокатывать. А если там еще и нетипизированное значение попадается или типа другого, то значит входные задачи были поставлены неверно, что и затруднило ее решение.
21. 09.11.06 10:28 Сейчас в теме
Люди! У меня обратная проблема: из DBF в УслугиСтороннихОрганизаций надо записать. Вот фрагмент кода

Док.НоваяСтрока();
Док.КоррСчет = СчетПоКоду("60.2");
Контрагенты.НайтиПоКоду("0001"); // сто пудов находит //(проверял)
Док.Субконто1 = Контрагенты.ТекущийЭлемент();

Естественно до этого заполняю реквизиты шапки и прочие реквизиты табл. части. Все реквизиты заполняет, а СубконтоХ нет. Что делать???
22. CheBurator 3119 09.11.06 10:44 Сейчас в теме
1. Субконто1 - не контрагенты.
2. не находит
Оставьте свое сообщение

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