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. не находит
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день