![]() |
![]() |
|
Помогите заполнить субконто. | ☑ | ||
---|---|---|---|---|
0
bizon2008
04.09.07
✎
12:25
|
Заполняю программно из текстового файла документ «Банковская выписка», в табличной части есть реквизиты «Субконто1», «Субконто2» и «Субконто3» тип значения <<неопределенный>>. В текстовом файле есть конкретное текст, что надо присвоит этому субконто. Т.е. для примера если по счету «631», субконто1 «контрагент», то в файле конкретно записан «Вася пупкин». Используются только несколько счетов, у всех одинаковый набор субконто. Подскажите как можно реализовать такую загрузку? Заранее спасибо.
|
|||
1
Рэйв
04.09.07
✎
12:29
|
1.Назначаешь тип реквизиту в соответсвии с типом субконто.
2.Ищешь значение по наименованию "Вася Пупкин" 3.Присваиваешь |
|||
2
Andy13
04.09.07
✎
12:33
|
Выдержка из дока "Выписка"
НазначитьТип("Субконто1", УсловныйКоррСчет.ВидСубконто(1)); |
|||
3
перцептрон
04.09.07
✎
12:34
|
текс = "Субконто1";
ВидСубконто = Счет.ВидСубконто(Число(Прав(текс, 1))); НазначитьТип(текс, ВидСубконто); Спр = СоздатьОбъект(ВидСубконто.ТипСубконто()); Спр.НайтиПоНаименованию("Вася Пупкин", ...); Док.УстановитьАтрибут(текс, Спр.ТекущийЭлемент()); |
|||
4
bizon2008
04.09.07
✎
13:09
|
(3)Спасибо. Не пойму в чем смысл.
ВидСубконто = Счет.ВидСубконто(Число(Прав(текс, 1))); Можете подробней? |
|||
5
Подводный Таракан
04.09.07
✎
13:14
|
(4) эта строка определяет вид тек. субконто...
извращенно как то сделано))) |
|||
6
bizon2008
04.09.07
✎
15:09
|
(1)
Можно для особо одареных. Расшифровать. 1.Назначаешь тип реквизиту в соответсвии с типом субконто. Спасибо. |
|||
7
bizon2008
04.09.07
✎
15:30
|
Пропадаю. HELP!
|
|||
8
Motya
04.09.07
✎
15:35
|
(6) Док.НазначитьТип(<ИмяРеквизита>,<ТипСубконто>,<Длина>,<Точность>)
|
|||
9
Рэйв
04.09.07
✎
15:42
|
(6)Смотри (3) ...что-то вроде
|
|||
10
bizon2008
04.09.07
✎
15:43
|
Делаю так.
НазначитьТип("Субконто1", Счет.Субконто(1)); Выдает ошибку НазначитьТип<<?>>("Субконто1", Счет.Субконто(1)); {D:\work\Импорт_банк.ert(114)}: Процедура не обнаружена (НазначитьТип) |
|||
11
Motya
04.09.07
✎
15:47
|
(10) Если ты не в модуле формы документа, а в модуле обработки, то
Док.НазначитьТип("Рекв", ТипРекв) Счет - это что? |
|||
12
Подводный Таракан
04.09.07
✎
15:48
|
(10)
Док.НазначитьТип("Субконто1", Счет.ВидСубконто(1)); |
|||
13
Motya
04.09.07
✎
15:53
|
(12) Счет.ВидСубконто(1) вернёт "Склады", для типа "Справочник.Склады" =>
Док.НазначитьТип("Субконто1", "Справочник."+Счет.ВидСубконто(1)) |
|||
14
Motya
04.09.07
✎
15:54
|
(12)Но не факт, что ВидСубконто - типа справочник, это может быть перечисление или документ
|
|||
15
puls
04.09.07
✎
15:55
|
(13) а если тама перечисление?
Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1)); |
|||
16
bizon2008
04.09.07
✎
15:56
|
Спасибо. С НазначитьТип() вроде понял.
Сделал так: Док.НазначитьТип("Субконто1", Док.Счет.Субконто(1)); Как найти по наименованию субконто? |
|||
17
puls
04.09.07
✎
15:58
|
(16) не очень понятен вопрос
|
|||
18
перцептрон
04.09.07
✎
16:12
|
(3, 4) можно сделать текс = ТекущаяКолонка()
|
|||
19
перцептрон
04.09.07
✎
16:15
|
(16) твой код - банален.
Док.Счет.Субконто("наименование_субконто") ?? |
|||
20
Motya
04.09.07
✎
16:19
|
(19) У объекта Счет нет метода Субконто
|
|||
21
перцептрон
04.09.07
✎
16:29
|
(20) зато есть ВидСубконто(). То вообще не мои проблемы чего там нет
|
|||
22
bizon2008
04.09.07
✎
17:50
|
Реализую пример приведенный в (3);
Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1)); СпрСуб1 = СоздатьОбъект(ВидСубконто.ТипСубконто()); СпрСуб.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0); Док.Субконто1 = Спр.ТекущийЭлемент(); При проверке. СпрСуб1 = СоздатьОбъект(ВидСубконто<<?>>.ТипСубконто()); {D:\work\Импорт_банк.ert(115)}: Переменная не определена (ВидСубконто) СпрСуб<<?>>.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0); {D:\work\Импорт_банк.ert(116)}: Переменная не определена (СпрСуб) При проверке модуля обнаружены синтаксические ошибки! |
|||
23
bizon2008
04.09.07
✎
17:58
|
Как правельно задать Создать оъект в приведеном коде.
Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1)); СпрСуб1 = СоздатьОбъект(Док.Счет.ВидСубконто()); СпрСуб1.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0); Док.Субконто1 = Спр.ТекущийЭлемент(); |
|||
24
перцептрон
04.09.07
✎
18:01
|
(23) щас отвечу... 5 сек
|
|||
25
child
04.09.07
✎
18:04
|
(23)
СпрСуб1 = СоздатьОбъект(СокрЛП(Док.Счет.ВидСубконто().ТипСубконто())) |
|||
26
перцептрон
04.09.07
✎
18:06
|
(22) это не мой пример? что ты с ним сделал!?
где строка ВидСубконто = Счет.ВидСубконто(Число(Прав(текс, 1))); |
|||
27
перцептрон
04.09.07
✎
18:09
|
(23) не
СпрСуб1 = СоздатьОбъект(Док.Счет.ВидСубконто()); а СпрСуб1 = СоздатьОбъект(Док.Счет.ВидСубконто(1).типСубконто()); |
|||
28
Креатив
04.09.07
✎
18:28
|
(0) А так уже не прокатывает?
Для ш = 1 По счет.КоличествоСубконто() Цикл Док.НазначитьТип("Субконто" + ш, Счет.ВидСубконто(ш)); КонецЦикла счет определяется в обработке. |
|||
29
bizon2008
04.09.07
✎
18:41
|
Большое спасибо. Но в документе реквизит остается пустой. Мой код.
Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1)); СпрСуб1 = СоздатьОбъект(Док.Счет.ВидСубконто(1).типСубконто()); СпрСуб1.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0); Док.Субконто1 = Спр.ТекущийЭлемент(); Обработка выполняется ошибок нет. |
|||
30
bizon2008
04.09.07
✎
18:42
|
Реквизит Счет заполняется раньше.
Док.Счет = СчетПоКоду(Список.ПолучитьЗначение(Номер+1)); |
|||
31
Креатив
04.09.07
✎
18:47
|
(29) дык в реквизиты после назначения типа нужно значения положить
док.Субконто1 = значение1; |
|||
32
bizon2008
04.09.07
✎
18:49
|
Так ложу
Док.Субконто1 = Спр.ТекущийЭлемент(); |
|||
33
Креатив
04.09.07
✎
18:53
|
(32) Кстати, если у тебя есть одинаковые контрагенты в разных группах, можешь не того найти.
Кстати, а сам-то текстовый документ из клиент-банка? |
|||
34
bizon2008
04.09.07
✎
18:54
|
Одинаковых контрагентоа нет. Документ мой.
|
|||
35
DrShad
04.09.07
✎
18:55
|
(34) а Спр это какой справочник и какой там ТекущийЭлемент()?
|
|||
36
FlashC
04.09.07
✎
18:59
|
Делай так
Если СпрСуб1.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0) = 1 Тогда Док.Субконто1 = Спр.ТекущийЭлемент(); КонецЕсли; |
|||
37
DrShad
04.09.07
✎
19:02
|
(34) ответ на (35) в студию
(36) а ты сам то понял че написал? |
|||
38
FlashC
04.09.07
✎
19:04
|
Если СпрСуб1.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0) = 1 Тогда
Док.Субконто1 = СпрСуб1.ТекущийЭлемент(); КонецЕсли; |
|||
39
FlashC
04.09.07
✎
19:06
|
(37) нет:)
|
|||
40
DrShad
04.09.07
✎
19:07
|
где афтар?
|
|||
41
FlashC
04.09.07
✎
19:10
|
ушел домой или по делам
|
|||
42
bizon2008
04.09.07
✎
19:11
|
(35) Взято из выше приведеных примеров.
|
|||
43
FlashC
04.09.07
✎
19:14
|
(42) выкладывай ка весь код, что напиал.
|
|||
44
Креатив
04.09.07
✎
19:15
|
(34) То есть ты сначала ручками набиваешь текстовый документ, а потом грузишь его в 1С? Я сейчас заплАчу. :-/
|
|||
45
DrShad
04.09.07
✎
19:17
|
(42) читай тогда ЖКК
|
|||
46
bizon2008
04.09.07
✎
19:19
|
(44) Нет я выгружаю из другой программы.
Код. Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1)); СпрСуб1 = СоздатьОбъект(Док.Счет.ВидСубконто(1).типСубконто()); Если СпрСуб1.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0,0)=1 Тогда Док.Субконто1 = Спр.ТекущийЭлемент(); Иначе Сообщить("Субконто1 "+Список.ПолучитьЗначение(Номер+3)); КонецЕсли; |
|||
47
DrShad
04.09.07
✎
19:21
|
(46) ты дятел
|
|||
48
bizon2008
04.09.07
✎
19:22
|
(45) какой раздел
|
|||
49
DrShad
04.09.07
✎
19:22
|
(48) начни с введения
полезно будет |
|||
50
Креатив
04.09.07
✎
19:24
|
(46) Так что в результате получается?
|
|||
51
FlashC
04.09.07
✎
19:26
|
выложи весь код, а не обрезок
|
|||
52
bizon2008
04.09.07
✎
19:28
|
DrShad надеюсь это не все что Вы знаете.
(46)Обработка работает, выдает собщения с названиями контрагентов, но в локумент они не попадают. |
|||
53
FlashC
04.09.07
✎
19:29
|
И что есть: Спр.ТекущийЭлемент()? в отладчике глянь
|
|||
54
bizon2008
04.09.07
✎
19:30
|
(51) весь большой, с какого момента интерисует?
|
|||
55
DrShad
04.09.07
✎
19:31
|
(52) обработка тебе выдает значения списка, а не названия контрагентов
а знаю я очень много |
|||
56
DrShad
04.09.07
✎
19:31
|
(54) начни с того где Спр = СоздатьОбъект(....)
|
|||
57
Креатив
04.09.07
✎
19:32
|
(46)попробуй
СпрСуб1.НайтиПоНаименованию(СокрЛП(Список.ПолучитьЗначение(Номер+3)),0,0) |
|||
58
DrShad
04.09.07
✎
19:33
|
Сообщить("Субконто1 "+Список.ПолучитьЗначение(Номер+3));
млин это что сообщение наименования справочника? |
|||
59
Креатив
04.09.07
✎
19:33
|
И всё-таки если есть возможность синхронизации по коду, очень бы рекомендовал именно её.
|
|||
60
bizon2008
04.09.07
✎
19:35
|
У меня не выполняется условие.
Если СпрСуб1.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0,0)=1 Тогда |
|||
61
DrShad
04.09.07
✎
19:35
|
(60) в списке что хранится?
|
|||
62
DrShad
04.09.07
✎
19:36
|
(60) что выдает в отладчике?
Список.ПолучитьЗначение(Номер+3) |
|||
63
bizon2008
04.09.07
✎
19:36
|
(58)Торможу. Сейчас поменяю и посмотрю.
|
|||
64
DrShad
04.09.07
✎
19:38
|
(63) короче
я пошел домой некогда мне ждать пока у тебя тормоза пройдут |
|||
65
bizon2008
04.09.07
✎
19:38
|
В списке хранятся строка, счет, название котрагента, т.д.
|
|||
66
FlashC
04.09.07
✎
19:39
|
ВЫЛОЖИ ВЕСЬ КОД! А то, так до тяпницы будешь делать!
|
|||
67
bizon2008
04.09.07
✎
19:40
|
(60) что выдает в отладчике?
Список.ПолучитьЗначение(Номер+3) Название контрагента из текстового файла. |
|||
68
bizon2008
04.09.07
✎
19:41
|
Весь код
//******************************************* Процедура Выполнить() Перем к; Перем м; Док = СоздатьОбъект("Документ.БанковскаяВыписка"); ДокДог = СоздатьОбъект("Документ.Договор"); Текст = СоздатьОбъект("Текст"); Список = СоздатьОбъект("СписокЗначений"); Спр = СоздатьОбъект("Справочник.Контрагенты"); СпрТМЦ=СоздатьОбъект("Справочник.ТМЦ"); СпрЕд=СоздатьОбъект("Справочник.Единицы"); СпрМестаХранения=СоздатьОбъект("Справочник.МестаХранения"); СпрФирмы=СоздатьОбъект("Справочник.Фирмы"); СпрВал=СоздатьОбъект("Справочник.ВалДоходыРасходы"); СпрПодр=СоздатьОбъект("Справочник.Подразделения"); //Суб1 = "Субконто1"; //ВидСубконто = Счет.ВидСубконто(Число(Прав(Суб1, 1))); //НазначитьТип(Суб1, ВидСубконто); //СпрСуб1 = СоздатьОбъект(ВидСубконто.ТипСубконто()); //Спр.НайтиПоНаименованию("Вася Пупкин", ...); //Док.УстановитьАтрибут(Суб1, Спр.ТекущийЭлемент()); СпрРСчет=СоздатьОбъект("Справочник.НашиДенежныеСчета"); СпрВалюта=СоздатьОбъект("Справочник.Валюты"); СпрШкалаСтавок=СоздатьОбъект("Справочник.ШкалаСтавок"); Таб = СоздатьОбъект("Таблица"); Текст.Открыть("c:\exp_imp_bk.txt"); м=0; Таб.ВывестиСекцию("Шапка"); //Проход по строкам файла переноса Для Ном=1 По Текст.КоличествоСтрок() Цикл Стр = Текст.ПолучитьСтроку(Ном); Список.ИзСтрокиСРазделителями(Стр); //преобразуем строку в список значений //Проверка на наличие документа Если Док.НайтиПоНомеру(Список.ПолучитьЗначение(5), Список.ПолучитьЗначение(1))=1 Тогда Сообщить("Докумен существует"+Список.ПолучитьЗначение(5)); Перейти ~M; м=1; КонецЕсли; //Создаем новый Док.Новый(); //Заролняем шапку документа //Дата документа Док.ДатаДок = Список.ПолучитьЗначение(1); //Время документа Док.УстановитьВремя(Список.ПолучитьЗначение(2), Список.ПолучитьЗначение(3), Список.ПолучитьЗначение(4)); //Номер документа Док.НомерДок =Список.ПолучитьЗначение(5); //Контрагент документа //Заполняем Расчетный счет Если СпрРСчет.НайтиПоНаименованию(Список.ПолучитьЗначение(6),0,1)=1 Тогда Док.РСчет = СпрРСчет.ТекущийЭлемент(); Иначе м=1; Сообщить("Расчетный счет не найден"+Список.ПолучитьЗначение(6)); Перейти ~M; КонецЕсли; //Заполнение СчетУчета Док.СчетУчета = СчетПоКоду(Список.ПолучитьЗначение(7)); //Заполняем валюта Если СпрВалюта.НайтиПоНаименованию(Список.ПолучитьЗначение(8),0,1)=1 Тогда Док.Валюта = Спр.ТекущийЭлемент(); Иначе м=1; Сообщить("Валюта не найдена"+Список.ПолучитьЗначение(8)); Перейти ~M; КонецЕсли; //Заполнение табличной части************************************* к=1; Для Номер = 9 По Список.РазмерСписка() Цикл Док.НоваяСтрока(); //Заполнение Вид Движения Если Список.ПолучитьЗначение(Номер)="Поступление" Тогда Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Поступление; ИначеЕсли Список.ПолучитьЗначение(Номер)="Выплата" Тогда Док.ВидДвижения = Перечисление.ВидыДвиженийПоРасчетномуСчету.Списание; Иначе м=1; Сообщить("Вид движения не найден"+Список.ПолучитьЗначение(Номер)); Таб.ВывестиСекцию("Стр_1"); Перейти ~M; КонецЕсли; //Заполнение Счет Док.Счет = СчетПоКоду(Список.ПолучитьЗначение(Номер+1)); //Заполнение ВидНДС Если СпрШкалаСтавок.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+2),0)=1 Тогда Док.ВидНДС = СпрШкалаСтавок.ТекущийЭлемент(); Иначе м=1; Сообщить("ВидНДС не найден "+Список.ПолучитьЗначение(Номер+2)); Таб.ВывестиСекцию("Стр_1"); Перейти ~M; КонецЕсли; //Заполнение субконто1 Номер+3 Док.НазначитьТип("Субконто1", Док.Счет.ВидСубконто(1)); СпрСуб1 = СоздатьОбъект(Док.Счет.ВидСубконто(1).типСубконто()); Если СпрСуб1.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+3),0,0)=1 Тогда Док.Субконто1 = Спр.ТекущийЭлемент(); Иначе м=1; Сообщить("Субконто1 "+Список.ПолучитьЗначение(Номер+3)); Таб.ВывестиСекцию("Стр_1"); Перейти ~M; КонецЕсли; //Заполнение субконто2 Номер+4 //Док.НазначитьТип("Субконто2", Док.Счет.ВидСубконто(2)); //СпрСуб2 = СоздатьОбъект(Док.Счет.ВидСубконто(2).типСубконто()); //Если СпрСуб2.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+4),0,0)=1 Тогда // Док.Субконто1 = Спр.ТекущийЭлемент(); //Иначе // м=1; // Сообщить("Субконто2 "+Список.ПолучитьЗначение(Номер+4)); // Таб.ВывестиСекцию("Стр_1"); // Перейти ~M; //КонецЕсли; Док.СуммаСНДС = Список.ПолучитьЗначение(Номер+5); Док.НДС=Список.ПолучитьЗначение(Номер+6); //Заполнение Вид оплат Если Список.ПолучитьЗначение(Номер+7)="Оплата" Тогда Док.ВидОплаты = Перечисление.ВидыОплаты.Оплата; ИначеЕсли Список.ПолучитьЗначение(Номер+7)="Возрат" Тогда Док.ВидОплаты = Перечисление.ВидыОплаты.Возрат; Иначе м=1; Сообщить("Вид оплат не найден ? "+Список.ПолучитьЗначение(Номер+7)); Таб.ВывестиСекцию("Стр_1"); Перейти ~M; КонецЕсли; //Заполнение Субконто Валовых Доходов Номер+8 //Если СпрВал.НайтиПоНаименованию(Список.ПолучитьЗначение(Номер+8),0,0)=1 Тогда // Док.СубконтоВалДохРасх=СпрВал.ТекущийЭлемент(); //Иначе // м=1; // Сообщить("СубконтоВалДохРасх не найден "+Список.ПолучитьЗначение(Номер+8)); // Таб.ВывестиСекцию("Стр_1"); // Перейти ~M; //КонецЕсли; //Содержание Номер+9 //Режим оплаты Номер+10 Номер=Номер+10; КонецЦикла; Док.Записать(); ~M: Если м=0 Тогда Сообщить("Документ: "+Док.НомерДок+" Успешно записан"); Иначе Сообщить("Документ: "+Док.НомерДок+" Не записан"); КонецЕсли; Таб.Показать(); КонецЦикла; КонецПроцедуры |
|||
69
Креатив
04.09.07
✎
19:51
|
Прочитай (57) ещё раз
|
|||
70
bizon2008
04.09.07
✎
20:05
|
Сделал (57) стало, через раз выполнятся условие. В документе пусто.
|
|||
71
Креатив
04.09.07
✎
20:10
|
(70)
Док.Субконто1 = Спр.ТекущийЭлемент(); Конечно круто, но Док.Субконто1 = СпрСуб1.ТекущийЭлемент(); однако, лучше будет |
|||
72
FlashC
04.09.07
✎
20:11
|
Мдя, я конечно, промолчу на счет того что в (68)... но:
1. Спр.ТекущийЭлемент() - у тебя ничего, сначала спозиционируйся на нужном элементе! Спр.НайтиПоНаименованию(Список.ПолучитьЗначение(№)) 2. Почему тут это: //Заполняем валюта Если СпрВалюта.НайтиПоНаименованию(Список.ПолучитьЗначение(8),0,1)=1 Тогда Док.Валюта = !!!Спр.ТекущийЭлемент();!!! Иначе ... 3. В отладчик. |
|||
73
FlashC
04.09.07
✎
20:14
|
(71)->(38)
|
|||
74
Креатив
04.09.07
✎
20:14
|
(72) А как хочется, чтоб 1С сама додумалась. Незачот 1С!!!
|
|||
75
Креатив
04.09.07
✎
20:16
|
(73) Дык в (68) то же самое. Автор идёт своим, непростым путём.
|
|||
76
bizon2008
04.09.07
✎
20:18
|
Большое спасибо.
|
|||
77
Креатив
04.09.07
✎
20:20
|
(76) Обращайся. я на обмене через текстовые файлы стаю борзых схавал. %)
|
|||
78
FlashC
04.09.07
✎
20:27
|
А вот так всегда, когда (7) - накопируешь кусков кода, а глаза не видят:)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |