dbf
Подскажите пожалуйста.
Есть документ, в табличной части которого, имеются реквизиты
Субконто1, Субконто2, Субконто3.
Пытаюсь Экспортировать Эти документы в DBF файл, путем создания объекта x-Base. Вместо субконто выгружаются какие-то числа... Обращаюся к субконто
dbf.SBK=Док.Субконто1
Тип значения субконто - неопределенный, хотя значение берет из справочника.
Пробовал
dbf.SBK=Док.Субконто1.Код
dbf.SBK=Док.Субконто1.Наименование
Не помогает. Посоветуйте пожалуйста, в чем может быть проблема? Заранее благодарен?
Есть документ, в табличной части которого, имеются реквизиты
Субконто1, Субконто2, Субконто3.
Пытаюсь Экспортировать Эти документы в DBF файл, путем создания объекта x-Base. Вместо субконто выгружаются какие-то числа... Обращаюся к субконто
dbf.SBK=Док.Субконто1
Тип значения субконто - неопределенный, хотя значение берет из справочника.
Пробовал
dbf.SBK=Док.Субконто1.Код
dbf.SBK=Док.Субконто1.Наименование
Не помогает. Посоветуйте пожалуйста, в чем может быть проблема? Заранее благодарен?
По теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
неопытный Написал:
-------------------------------------------------------
> > ... В любом док-те, где есть коррСчет и 3
> субконто, типы реквизитов документа
> неопределённый,...
> ...Так вот я и хотел узнать как в таком случае
> достать код и наименование из использовавшегося
> справочника.
Посмотри модуль формы документа процедуру ПриВыбореКоррСчета()
Там написано:
НазначитьТип("Субконто1", КоррСчет.ВидСубконто(1));
НазначитьТип("Субконто2", КоррСчет.ВидСубконто(2));
НазначитьТип("Субконто3", КоррСчет.ВидСубконто(3));
Это и есть назначение типа субконто в зависимости от аналитики корр.счёта
Например, пользователь выбрал счёт 41.1, то
субконто1 становится после этого с типом Справочник.Номенклатура, а субконто2 Справочник.МестаХранения, а Субконто3, остаётся неопределеным.
-------------------------------------------------------
> > ... В любом док-те, где есть коррСчет и 3
> субконто, типы реквизитов документа
> неопределённый,...
> ...Так вот я и хотел узнать как в таком случае
> достать код и наименование из использовавшегося
> справочника.
Посмотри модуль формы документа процедуру ПриВыбореКоррСчета()
Там написано:
НазначитьТип("Субконто1", КоррСчет.ВидСубконто(1));
НазначитьТип("Субконто2", КоррСчет.ВидСубконто(2));
НазначитьТип("Субконто3", КоррСчет.ВидСубконто(3));
Это и есть назначение типа субконто в зависимости от аналитики корр.счёта
Например, пользователь выбрал счёт 41.1, то
субконто1 становится после этого с типом Справочник.Номенклатура, а субконто2 Справочник.МестаХранения, а Субконто3, остаётся неопределеным.
Гость, здесь же уже писалось ;-)
>Посмотри модуль формы документа процедуру
>ПриВыбореКоррСчета()
>Там написано:
>НазначитьТип("Субконто1", КоррСчет.ВидСубконто(1));
>НазначитьТип("Субконто2", КоррСчет.ВидСубконто(2));
>НазначитьТип("Субконто3", КоррСчет.ВидСубконто(3));
>Это и есть назначение типа субконто в зависимости от
>аналитики корр.счёта
>Например, пользователь выбрал счёт 41.1, то
>субконто1 становится после этого с типом >Справочник.Номенклатура, а субконто2 >Справочник.МестаХранения, а Субконто3, остаётся
>неопределеным.
То есть для твоего случая надо:
Док.НоваяСтрока();
Док.КоррСчет = СчетПоКоду("60.2");
Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));
Контрагенты.НайтиПоКоду("0001"); // сто пудов находит //(проверял)
Док.Субконто1 = Контрагенты.ТекущийЭлемент();
И всё будет работать. Просто у тебя не назначены типы субконто в зависимости от счёта
>Посмотри модуль формы документа процедуру
>ПриВыбореКоррСчета()
>Там написано:
>НазначитьТип("Субконто1", КоррСчет.ВидСубконто(1));
>НазначитьТип("Субконто2", КоррСчет.ВидСубконто(2));
>НазначитьТип("Субконто3", КоррСчет.ВидСубконто(3));
>Это и есть назначение типа субконто в зависимости от
>аналитики корр.счёта
>Например, пользователь выбрал счёт 41.1, то
>субконто1 становится после этого с типом >Справочник.Номенклатура, а субконто2 >Справочник.МестаХранения, а Субконто3, остаётся
>неопределеным.
То есть для твоего случая надо:
Док.НоваяСтрока();
Док.КоррСчет = СчетПоКоду("60.2");
Док.НазначитьТип("Субконто1", Док.КоррСчет.ВидСубконто(1));
Док.НазначитьТип("Субконто2", Док.КоррСчет.ВидСубконто(2));
Док.НазначитьТип("Субконто3", Док.КоррСчет.ВидСубконто(3));
Контрагенты.НайтиПоКоду("0001"); // сто пудов находит //(проверял)
Док.Субконто1 = Контрагенты.ТекущийЭлемент();
И всё будет работать. Просто у тебя не назначены типы субконто в зависимости от счёта
неопытный Написал:
-------------------------------------------------------
> Обращаюся к субконто
> dbf.SBK=Док.Субконто1
> Тип значения субконто - неопределенный, хотя
> значение берет из справочника.
Тип субконто уже назначен в соответствии с видами субконто у счёта в документе
> Пробовал
> dbf.SBK=Док.Субконто1.Код
> dbf.SBK=Док.Субконто1.Наименование
> Не помогает. Посоветуйте пожалуйста, в чем может
> быть проблема? Заранее благодарен?
Напиши тип твоего поля SBK, лучше показать как ты его обозначил в программе.
Приведи пример своей обработки вообще, чтобы разобраться и что стоит в полях документа Коррсчет, субконто1,2,3.
Напиши с какой конфигой ты работаешь.
И поможем тебе, а пока информации очень мало
-------------------------------------------------------
> Обращаюся к субконто
> dbf.SBK=Док.Субконто1
> Тип значения субконто - неопределенный, хотя
> значение берет из справочника.
Тип субконто уже назначен в соответствии с видами субконто у счёта в документе
> Пробовал
> dbf.SBK=Док.Субконто1.Код
> dbf.SBK=Док.Субконто1.Наименование
> Не помогает. Посоветуйте пожалуйста, в чем может
> быть проблема? Заранее благодарен?
Напиши тип твоего поля SBK, лучше показать как ты его обозначил в программе.
Приведи пример своей обработки вообще, чтобы разобраться и что стоит в полях документа Коррсчет, субконто1,2,3.
Напиши с какой конфигой ты работаешь.
И поможем тебе, а пока информации очень мало
7.70.478
Документ называется УслугиСтороннихОрганизаций.
В табличной части документа еть реквизиты Субконто1, Субконто2, Субконто3, неопределенного типа.
Однако значения берутся из справочника.
Тип поля SBK делал как строковым, так и числовым - не помогает(Хотя тип поля SBK тут не при чем).
Документ называется УслугиСтороннихОрганизаций.
В табличной части документа еть реквизиты Субконто1, Субконто2, Субконто3, неопределенного типа.
Однако значения берутся из справочника.
Тип поля SBK делал как строковым, так и числовым - не помогает(Хотя тип поля SBK тут не при чем).
Aron Написал:
-------------------------------------------------------
> Мне очень интересно неужели поля в документе так и
> называются Субконто1,Субконто2...., если нет тогда
> называй вещи своими именами так как они
> представлены у тебя в документе.
Конечно так могут называться. А вот просто Субконто уже не может.
-------------------------------------------------------
> Мне очень интересно неужели поля в документе так и
> называются Субконто1,Субконто2...., если нет тогда
> называй вещи своими именами так как они
> представлены у тебя в документе.
Конечно так могут называться. А вот просто Субконто уже не может.
неопытный Написал:
-------------------------------------------------------
> 7.70.478
> Документ называется УслугиСтороннихОрганизаций.
> В табличной части документа еть реквизиты
> Субконто1, Субконто2, Субконто3, неопределенного
> типа.
> Однако значения берутся из справочника.
Тебе уже я говорил, что Тип субконто уже назначен в соответствии с видами субконто у счёта в документе
> Тип поля SBK делал как строковым, так и числовым -
> не помогает(Хотя тип поля SBK тут не при чем).
отлично, что 478-я бухгалтерия.
Напиши свой пример программы и станет ясно почему у тебя возникли проблемы
-------------------------------------------------------
> 7.70.478
> Документ называется УслугиСтороннихОрганизаций.
> В табличной части документа еть реквизиты
> Субконто1, Субконто2, Субконто3, неопределенного
> типа.
> Однако значения берутся из справочника.
Тебе уже я говорил, что Тип субконто уже назначен в соответствии с видами субконто у счёта в документе
> Тип поля SBK делал как строковым, так и числовым -
> не помогает(Хотя тип поля SBK тут не при чем).
отлично, что 478-я бухгалтерия.
Напиши свой пример программы и станет ясно почему у тебя возникли проблемы
Вобщем парит он нам мозги. Щас протестил его ситуэйшн.
1) Вид субконто неопределенного типа быть не может, поэтому все разговоры о субконто - фигня.
2) Субконто1 и т.д. - это у него просто реквизиты документа, в которые записываются элементы справочника.
3) Если делать присвоение текстовому полю DBF непосредственно значение СубконтоX - то да, 1С фичит и не хочет нормально преобразовать тип к строке, записывая в поле ID элемента. Но если в поле записывать СубконтоX.Наименование ("Строка" если) или хотя бы СокрЛП(СубконтоХ), т.е. явно привести тип к строке, то все прокатывает и в поле нормально пишется.
Так что если у него не катит - значит либы он нам репы парит, либо смотрит на зависший экран, где у него естесно ничего не меняется, чтобы он не предпринимал.
1) Вид субконто неопределенного типа быть не может, поэтому все разговоры о субконто - фигня.
2) Субконто1 и т.д. - это у него просто реквизиты документа, в которые записываются элементы справочника.
3) Если делать присвоение текстовому полю DBF непосредственно значение СубконтоX - то да, 1С фичит и не хочет нормально преобразовать тип к строке, записывая в поле ID элемента. Но если в поле записывать СубконтоX.Наименование ("Строка" если) или хотя бы СокрЛП(СубконтоХ), т.е. явно привести тип к строке, то все прокатывает и в поле нормально пишется.
Так что если у него не катит - значит либы он нам репы парит, либо смотрит на зависший экран, где у него естесно ничего не меняется, чтобы он не предпринимал.
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
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
Maljaev Написал:
-------------------------------------------------------
> Вобщем парит он нам мозги. Щас протестил его
> ситуэйшн.
> 1) Вид субконто неопределенного типа быть не
> может, поэтому все разговоры о субконто - фигня.
Он говорит что не тип субконто неопределённый, а тип реквизита Субконто1 и др. неопределённый. Это правильно. Он просто не так выразился. В любом док-те, где есть коррСчет и 3 субконто, типы реквизитов документа неопределённый, например ещё в ПКО.
> 2) Субконто1 и т.д. - это у него просто реквизиты
> документа, в которые записываются элементы
> справочника.
Там не только справочник может быть, но и перечисление, например.
> 3) Если делать присвоение текстовому полю DBF
> непосредственно значение СубконтоX - то да, 1С
> фичит и не хочет нормально преобразовать тип к
> строке, записывая в поле ID элемента.
Вот именно.
> Но если в
> поле записывать СубконтоX.Наименование ("Строка"
> если) или хотя бы СокрЛП(СубконтоХ), т.е. явно
> привести тип к строке, то все прокатывает и в поле
> нормально пишется.
Ну...
-------------------------------------------------------
> Вобщем парит он нам мозги. Щас протестил его
> ситуэйшн.
> 1) Вид субконто неопределенного типа быть не
> может, поэтому все разговоры о субконто - фигня.
Он говорит что не тип субконто неопределённый, а тип реквизита Субконто1 и др. неопределённый. Это правильно. Он просто не так выразился. В любом док-те, где есть коррСчет и 3 субконто, типы реквизитов документа неопределённый, например ещё в ПКО.
> 2) Субконто1 и т.д. - это у него просто реквизиты
> документа, в которые записываются элементы
> справочника.
Там не только справочник может быть, но и перечисление, например.
> 3) Если делать присвоение текстовому полю DBF
> непосредственно значение СубконтоX - то да, 1С
> фичит и не хочет нормально преобразовать тип к
> строке, записывая в поле ID элемента.
Вот именно.
> Но если в
> поле записывать СубконтоX.Наименование ("Строка"
> если) или хотя бы СокрЛП(СубконтоХ), т.е. явно
> привести тип к строке, то все прокатывает и в поле
> нормально пишется.
Ну...
Товарищ Maljaev, благодарю ВАС за помощь. Действительно
Ваше СокрЛП помогло.
Однако я мозги не кому не парю. Отвечать на вопросы я никого не заставляю и если я говорю, что тип неопределенный, то это действительно так.
Что касается dbf.SbK1=doct.Субконто1.Наименование, то возникает ошибка - "Значение не представляет агрегатный объект (Наименование)". Если бы типом Субконто1 был конкретный справочник, то при обращении к наименованюю(или коду) естественно такой ошибки не было. Так вот следовательно ошибка возникает из за того-что тип неопределенный.
Однако в программе значение берется ведь из справочников.
Может и не из одного. Возможно причина в этом. Так вот я и хотел узнать как в таком случае достать код и наименование из использовавшегося справочника.
Ваше СокрЛП помогло.
Однако я мозги не кому не парю. Отвечать на вопросы я никого не заставляю и если я говорю, что тип неопределенный, то это действительно так.
Что касается dbf.SbK1=doct.Субконто1.Наименование, то возникает ошибка - "Значение не представляет агрегатный объект (Наименование)". Если бы типом Субконто1 был конкретный справочник, то при обращении к наименованюю(или коду) естественно такой ошибки не было. Так вот следовательно ошибка возникает из за того-что тип неопределенный.
Однако в программе значение берется ведь из справочников.
Может и не из одного. Возможно причина в этом. Так вот я и хотел узнать как в таком случае достать код и наименование из использовавшегося справочника.
У тебя, скорее всего, в каком-то документе, в какой-то строке реквизит "Субконто1" так и остался неопределенным, т.е. пустым, или там вообще перечисление. Пройдись отладчиком по модулю, или поставь проверку в текст модуля с сообщением текущего док-та.
неопытный Написал:
-------------------------------------------------------
> dbf.addfield("SbK1","S",50,0);
здесь можно организовать поле для хранения кода элемента справочника. Правильно, оно должно быть текстовое, но длину можно уменьшить при желании.
...
> dbf.SbK1=doct.Субконто1.Код;
Здесь всё правильно. НО если присваивать непосредственно субконто1, то тогда вылезет системным идентификатор элемента справочника, а не его код.
Можешь попробовать сделать так:
ТекЭлем=doct.Субконто1;
dbf.SbK1=ТекЭлем.Код;
Посмотришь в отладчике, что присваивается ТекЭлем, и что попадает в dbf.SbK1
НО учти, что не всегда элемент справочника на субконто находится.
Хотя, в услугах сторон. орг-ций обычно присутствуют затратные счета и их аналитика обычно отражена элементами справочников, так что можно пока так отставить, а если появятся ещё другие типы, то тогда надо будет спервать делать проверку субконто на тип.
-------------------------------------------------------
> dbf.addfield("SbK1","S",50,0);
здесь можно организовать поле для хранения кода элемента справочника. Правильно, оно должно быть текстовое, но длину можно уменьшить при желании.
...
> dbf.SbK1=doct.Субконто1.Код;
Здесь всё правильно. НО если присваивать непосредственно субконто1, то тогда вылезет системным идентификатор элемента справочника, а не его код.
Можешь попробовать сделать так:
ТекЭлем=doct.Субконто1;
dbf.SbK1=ТекЭлем.Код;
Посмотришь в отладчике, что присваивается ТекЭлем, и что попадает в dbf.SbK1
НО учти, что не всегда элемент справочника на субконто находится.
Хотя, в услугах сторон. орг-ций обычно присутствуют затратные счета и их аналитика обычно отражена элементами справочников, так что можно пока так отставить, а если появятся ещё другие типы, то тогда надо будет спервать делать проверку субконто на тип.
неопытный Написал:
-------------------------------------------------------
> ...dbf.УстановитьЗначениеПоля("SbK1",СокрЛП(doct.С
> убконто1.Код));
> err: Значение не представляет агрегатный объект
> (Код)
Проверяй на пустое значение:
Если ПустоеЗначение(doct.Субконто1)=0 тогда //т.е. заполнено
...
КонецЕсли;
-------------------------------------------------------
> ...dbf.УстановитьЗначениеПоля("SbK1",СокрЛП(doct.С
> убконто1.Код));
> err: Значение не представляет агрегатный объект
> (Код)
Проверяй на пустое значение:
Если ПустоеЗначение(doct.Субконто1)=0 тогда //т.е. заполнено
...
КонецЕсли;
По большому счету, по-грамотному, надо вообще делать нормальный обработчик типов, а не тупо приводить все к строке. Скажем, если тип Дата - то лучше с полным годом, если перечисление - то идентификатор, а не представление, как в случае с СокрЛП(), если справочник - то идентификатор вида + код/наименование, документ - идентификатор вида + дата + номер и т.д.
А почему я ругался, так потому что Неопытный четко и ясно сказал - одни только справочникик. Поэтому наименование должно было всегда прокатывать. А если там еще и нетипизированное значение попадается или типа другого, то значит входные задачи были поставлены неверно, что и затруднило ее решение.
А почему я ругался, так потому что Неопытный четко и ясно сказал - одни только справочникик. Поэтому наименование должно было всегда прокатывать. А если там еще и нетипизированное значение попадается или типа другого, то значит входные задачи были поставлены неверно, что и затруднило ее решение.
Люди! У меня обратная проблема: из DBF в УслугиСтороннихОрганизаций надо записать. Вот фрагмент кода
Док.НоваяСтрока();
Док.КоррСчет = СчетПоКоду("60.2");
Контрагенты.НайтиПоКоду("0001"); // сто пудов находит //(проверял)
Док.Субконто1 = Контрагенты.ТекущийЭлемент();
Естественно до этого заполняю реквизиты шапки и прочие реквизиты табл. части. Все реквизиты заполняет, а СубконтоХ нет. Что делать???
Док.НоваяСтрока();
Док.КоррСчет = СчетПоКоду("60.2");
Контрагенты.НайтиПоКоду("0001"); // сто пудов находит //(проверял)
Док.Субконто1 = Контрагенты.ТекущийЭлемент();
Естественно до этого заполняю реквизиты шапки и прочие реквизиты табл. части. Все реквизиты заполняет, а СубконтоХ нет. Что делать???
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)