|
Загрузка документа счет на оплату из дбф в 1с | ☑ | ||
---|---|---|---|---|
0
Taffy
02.12.11
✎
12:32
|
При каждой новой загрузке из дбф файла,необходимо чтобы старые записи обходились,а новые записывались.
Функция загрузитьСчетаНаОплату() ДБФ = Новый XBase; ДБФ.ОткрытьФайл(ПутьКФайлу); ДБФ.Кодировка=КодировкаXBase.OEM; //Проверка на наличие записей Если ДБФ.КоличествоЗаписей() = 0 Тогда Сообщить("Файл данных пуст"); ДБФ.ЗакрытьФайл(); //Возврат КонецЕсли; //Переходим на первую строку файла ДокСчет=Документы.СчетНаОплатуПокупателю; ДБФ.Первая(); ПредыдущийНомер = 0; Док=Неопределено; Пока Истина Цикл //Создадим новый документ ТекущийНомер=ДБФ.NUMBERD; Если ТекущийНомер <> ПредыдущийНомер Тогда //записываем предыдущий документ Если Док<>Неопределено тогда Док.Записать(); КонецЕсли; Если ДокСчет.НайтиПоНомеру(ТекущийНомер)=ДокСчет.ПустаяСсылка() тогда //переходим к следующему документу Док = ДокСчет.СоздатьДокумент(); Док.Номер= СокрЛП(ДБФ.NUMBERD); Док.Дата = СокрЛП(ДБФ.DATE); Док.Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); Док.ВалютаДокумента =Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VALD)); Док.Контрагент=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(ДБФ.KONTR)); Док.СтруктурнаяЕдиница = Справочники.БанковскиеСчета.НайтиПоНаименованию(СокрЛП(ДБФ.NAMEBS)); ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); ДоговорКонтрагента.Владелец = Док.Контрагент.Ссылка; ДоговорКонтрагента.Наименование = СокрЛП(ДБФ.NAMED); ДоговорКонтрагента.Номер = СокрЛП(ДБФ.NUMBER); ДоговорКонтрагента.ВидДоговора = Вычислить("Перечисления.ВидыДоговоровКонтрагентов."+СокрЛП(ДБФ.VID)); ДоговорКонтрагента.Дата = СокрЛП(ДБФ.DATED); ДоговорКонтрагента.ВалютаВзаиморасчетов=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL)); ДоговорКонтрагента.Организация =Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); ДоговорКонтрагента.Записать(); Док.ДоговорКонтрагента=ДоговорКонтрагента.Ссылка; Док.КратностьВзаиморасчетов=1; Банк= Справочники.Банки.СоздатьЭлемент(); //Банк.КоррСчет=СокрЛП(ДБФ.KORS); //Банк.Код=СокрЛП(ДБФ.BIK); Банк.Наименование=СокрЛП(ДБФ.NAMEB); Банк.Записать(); БанкСчет=Справочники.БанковскиеСчета.СоздатьЭлемент(); БанкСчет.Владелец=Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); БанкСчет.Банк=Справочники.Банки.НайтиПоКоду(ДБФ.BIK); БанкСчет.Наименование=СокрЛП(ДБФ.NAMEBS); БанкСчет.ВалютаДенежныхСредств=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL)); //БанкСчет.НомерСчета=СокрЛП(ДБФ.COUNT); Банк.Записать(); БанкСчет.Записать(); КонецЕсли; иначе ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер); Док=ДокСсылка.ПолучитьОбъект(); КонецЕсли; //Заполним табличную часть "Товары" НоваяСтрока=Док.Товары.Добавить(); НоваяСтрока.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); НоваяСтрока.ЕдиницаИзмерения= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(СокрЛП(ДБФ.ED)); НоваяСтрока.Количество=СокрЛП(ДБФ.KOL); НоваяСтрока.Цена=СокрЛП(ДБФ.PRICE); НоваяСтрока.СтавкаНДС=СокрЛП(ДБФ.NDS); //Заполним табличную часть "Оплачено" НоваяОплачено= Док.Оплата.Добавить(); НоваяОплачено.ДатаОплаты=СокрЛП(ДБФ.DATEO); НоваяОплачено.Сумма=СокрЛП(ДБФ.SUM); НоваяОплачено.НомерДокумента=СокрЛП(ДБФ.NDOK); //Заполним табличную часть "Отгружено" НоваяОтгружено= Док.Отгрузка.Добавить(); НоваяОтгружено.ДатаОтгрузки=СокрЛП(ДБФ.DATEOT); НоваяОтгружено.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); НоваяОтгружено.Количество=СокрЛП(ДБФ.KOL); НоваяОтгружено.Цена=СокрЛП(ДБФ.PRICE); НоваяОтгружено.Сумма=СокрЛП(ДБФ.SUMOT); //иначе // Док=ДокСчет.НайтиПоНомеру(ТекущийНомер); //конецЕсли; //КонецЕсли; Если Не ДБФ.Следующая()Тогда Прервать; КонецЕсли; ПредыдущийНомер = ТекущийНомер; КонецЦикла; //записываем последний док Если Док<>Неопределено тогда Док.Записать(); КонецЕсли; Делаю так,ругается пишет: Ошибка при вызове метода контекста (ПолучитьОбъект) Док=ДокСсылка.ПолучитьОбъект(); по причине: Элемент не выбран! может кто сталкивался с этим?подскажите пожалуйста,где поправить? |
|||
1
shuhard
02.12.11
✎
12:35
|
(0) Если ДокСчет.НайтиПоНомеру(ТекущийНомер)- код не верный
|
|||
2
Taffy
02.12.11
✎
12:50
|
а как правильно?
|
|||
3
Wobland
02.12.11
✎
12:52
|
(2) ну не нашёл он тебе по номеру
|
|||
4
shuhard
02.12.11
✎
12:52
|
(2) правильно учесть год
|
|||
5
Wobland
02.12.11
✎
12:52
|
кстати, документы вроде ещё по дате ищутся
|
|||
6
shuhard
02.12.11
✎
12:54
|
(5) в 99,99999% случаев
|
|||
7
Taffy
02.12.11
✎
12:56
|
Если ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата) вот так сделала.теперь пишет:указала интервал.теперь пишет:{Форма.Форма.Форма(221)}: Значение не является значением объектного типа (Товары)
НоваяСтрока=Док.Товары.Добавить(); |
|||
8
Wobland
02.12.11
✎
13:03
|
(7) док нашёлся? ты проверяла?
|
|||
9
Wobland
02.12.11
✎
13:03
|
опять деваха с мужеским полом. где уважение традиций?
|
|||
10
Taffy
02.12.11
✎
13:06
|
проверяла.не нашелся.исправила муж пол на женский:)и как так только вышло...
|
|||
11
hhhh
02.12.11
✎
13:07
|
(7) а зачем 2 раза ищешь по номеру? У вас что ли сервер 10-го поколения, тестируете на выносливость?
|
|||
12
Wobland
02.12.11
✎
13:08
|
(10) пола мало, совсем мало
|
|||
13
shuhard
02.12.11
✎
13:09
|
(12) + 1
под таким чудесным именем [Taffy] 100% скрывается обворожительная брюнетка |
|||
14
Wobland
02.12.11
✎
13:10
|
+(13) с прекрасными карими глазами
|
|||
15
shuhard
02.12.11
✎
13:11
|
(14) +1
окаймленными томными ресницами |
|||
16
Wobland
02.12.11
✎
13:12
|
+(15) и чувственные алые губы...
|
|||
17
shuhard
02.12.11
✎
13:14
|
(16) +1
точенная шейка |
|||
18
АйЭм
02.12.11
✎
13:14
|
А я бы считал все документы в структурированную ТЗ и не мучался бы спермотоксикозом. :)
|
|||
19
Taffy
02.12.11
✎
13:15
|
вы правы-обворожительная брюнетка:)вы все точно описали:)давайте перейдем к вопросу))помогите пожалуйста))
|
|||
20
Wobland
02.12.11
✎
13:15
|
ну вот, пришёл поручик и всё опошлил
|
|||
21
shuhard
02.12.11
✎
13:16
|
(19) утром фотка - вечером код
|
|||
22
Taffy
02.12.11
✎
13:18
|
:)да пожалуйста:)
|
|||
23
Wobland
02.12.11
✎
13:21
|
Пока ДБФ.Следующая() Цикл сделай
|
|||
24
Taffy
02.12.11
✎
13:45
|
Функция загрузитьСчетаНаОплату()
ДБФ = Новый XBase; ДБФ.ОткрытьФайл(ПутьКФайлу); ДБФ.Кодировка=КодировкаXBase.OEM; //Проверка на наличие записей Если ДБФ.КоличествоЗаписей() = 0 Тогда Сообщить("Файл данных пуст"); ДБФ.ЗакрытьФайл(); //Возврат КонецЕсли; //Переходим на первую строку файла ДокСчет=Документы.СчетНаОплатуПокупателю; ДБФ.Первая(); ПредыдущийНомер = 0; Док=Неопределено; Пока Истина Цикл //Создадим новый документ ТекущийНомер=ДБФ.NUMBERD; Дата=ДБФ.DATE; Если ТекущийНомер <> ПредыдущийНомер Тогда //записываем предыдущий документ Если Док<>Неопределено тогда Док.Записать(); КонецЕсли; Если ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата)=ДокСчет.ПустаяСсылка() тогда //переходим к следующему документу Док = ДокСчет.СоздатьДокумент(); Док.Номер= СокрЛП(ДБФ.NUMBERD); Док.Дата = Дата; Док.Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); Док.ВалютаДокумента =Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VALD)); Док.Контрагент=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(ДБФ.KONTR)); Док.СтруктурнаяЕдиница = Справочники.БанковскиеСчета.НайтиПоНаименованию(СокрЛП(ДБФ.NAMEBS)); ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); ДоговорКонтрагента.Владелец = Док.Контрагент.Ссылка; ДоговорКонтрагента.Наименование = СокрЛП(ДБФ.NAMED); ДоговорКонтрагента.Номер = СокрЛП(ДБФ.NUMBER); ДоговорКонтрагента.ВидДоговора = Вычислить("Перечисления.ВидыДоговоровКонтрагентов."+СокрЛП(ДБФ.VID)); ДоговорКонтрагента.Дата = СокрЛП(ДБФ.DATED); ДоговорКонтрагента.ВалютаВзаиморасчетов=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL)); ДоговорКонтрагента.Организация =Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); ДоговорКонтрагента.Записать(); Док.ДоговорКонтрагента=ДоговорКонтрагента.Ссылка; Док.КратностьВзаиморасчетов=1; Док.Записать(); Банк= Справочники.Банки.СоздатьЭлемент(); //Банк.КоррСчет=СокрЛП(ДБФ.KORS); //Банк.Код=СокрЛП(ДБФ.BIK); Банк.Наименование=СокрЛП(ДБФ.NAMEB); Банк.Записать(); БанкСчет=Справочники.БанковскиеСчета.СоздатьЭлемент(); БанкСчет.Владелец=Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); БанкСчет.Банк=Справочники.Банки.НайтиПоКоду(ДБФ.BIK); БанкСчет.Наименование=СокрЛП(ДБФ.NAMEBS); БанкСчет.ВалютаДенежныхСредств=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL)); //БанкСчет.НомерСчета=СокрЛП(ДБФ.COUNT); Банк.Записать(); БанкСчет.Записать(); //КонецЕсли; //Док.Записать(); //иначе // Док=ДокСчет.НайтиПоНомеру(ТекущийНомер); // //Док=ДокСсылка.ПолучитьОбъект(); //КонецЕсли; // //Заполним табличную часть "Товары" НоваяСтрока=Док.Товары.Добавить(); НоваяСтрока.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); НоваяСтрока.ЕдиницаИзмерения= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(СокрЛП(ДБФ.ED)); НоваяСтрока.Количество=СокрЛП(ДБФ.KOL); НоваяСтрока.Цена=СокрЛП(ДБФ.PRICE); НоваяСтрока.СтавкаНДС=СокрЛП(ДБФ.NDS); //Заполним табличную часть "Оплачено" НоваяОплачено= Док.Оплата.Добавить(); НоваяОплачено.ДатаОплаты=СокрЛП(ДБФ.DATEO); НоваяОплачено.Сумма=СокрЛП(ДБФ.SUM); НоваяОплачено.НомерДокумента=СокрЛП(ДБФ.NDOK); //Заполним табличную часть "Отгружено" НоваяОтгружено= Док.Отгрузка.Добавить(); НоваяОтгружено.ДатаОтгрузки=СокрЛП(ДБФ.DATEOT); НоваяОтгружено.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); НоваяОтгружено.Количество=СокрЛП(ДБФ.KOL); НоваяОтгружено.Цена=СокрЛП(ДБФ.PRICE); НоваяОтгружено.Сумма=СокрЛП(ДБФ.SUMOT); //иначе // ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер); // Док=ДокСсылка.ПолучитьОбъект(); КонецЕсли; КонецЕсли; Если Не ДБФ.Следующая()Тогда Прервать; КонецЕсли; ПредыдущийНомер = ТекущийНомер; КонецЦикла; //записываем последний док Если Док<>Неопределено тогда Док.Записать(); КонецЕсли; РАБОТАЕТ:)всем спасибо:) |
|||
25
Wobland
02.12.11
✎
13:47
|
/*ворчливо*/ спасибо, спасибо. на здоровье, Гюльчатай
|
|||
26
Taffy
02.12.11
✎
13:52
|
не Гульчатай,а Лейсан:)
|
|||
27
Wobland
02.12.11
✎
13:55
|
(26) всё равно не видно. это нечестно! ;)
|
|||
28
Taffy
02.12.11
✎
13:57
|
все честно:)так лучше?:)
|
|||
29
Wobland
02.12.11
✎
14:00
|
я был прав, сказав о карести глаз и подумав о неземности красоты!
|
|||
30
shuhard
02.12.11
✎
14:01
|
(29) угу, редкий случай красивой девушки на мисте
|
|||
31
Taffy
02.12.11
✎
14:02
|
:)спасибо:)очень приятно:)думаю все девушки по своему красивы:)
|
|||
32
shuhard
02.12.11
✎
14:02
|
(31) по своему красивы жёны
|
|||
33
Wobland
02.12.11
✎
14:02
|
(30) ну прям! их тут пруд пруди.
(28) ну мы-то с тобой понимаем, что в этом пруду ты - жемчужина ;) |
|||
34
Taffy
02.12.11
✎
14:09
|
погорячилась:(конечно с таким кодом у меня старые записи обходятся,а новые записываются,но опять косяк:в табл часть товары попадает только одно значение.остальные не записываются((((!!!как мне быть?
|
|||
35
Taffy
02.12.11
✎
14:19
|
Товарищи,дайте дельный совет пожалуйста!как мне это обойти?
|
|||
36
Wobland
02.12.11
✎
14:19
|
ну вот теперь можно и код почитать. щас, кофе напьюсь, подельников дождусь, и начнём
|
|||
37
Wobland
02.12.11
✎
14:21
|
вот это:
Если ДБФ.КоличествоЗаписей() = 0 Тогда Сообщить("Файл данных пуст"); ДБФ.ЗакрытьФайл(); прекрасно заменяется следующим: Пока ДБФ.Следующий() и без всяких сообщить. отработает корректно |
|||
38
Wobland
02.12.11
✎
14:22
|
навскидку. периодичность у документов какая? поставь в НайтиПоНомеру() вместо даты из ДБФ НачалоГода(ДатаИзДБФ), к примеру
|
|||
39
Taffy
02.12.11
✎
14:32
|
не помогает
|
|||
40
Wobland
02.12.11
✎
14:39
|
ПоищемДок=ДокСчет.НайтиПоНомеру(ТекущийНомер, НачалоГода(Дата));
Если ПоищемДок.Пустая() Тогда |
|||
41
Wobland
02.12.11
✎
14:40
|
ДБФ.NUMBERD - число, а номер документа - строка?
|
|||
42
hhhh
02.12.11
✎
14:47
|
(41)+ да. И эта вот строчка юморная
Док.Дата = СокрЛП(ДБФ.DATE); |
|||
43
Taffy
02.12.11
✎
14:48
|
Да строка.дело в том,что та часть,которая отвечает за то,чтобы программа обходила старые записи и записывались новые работает.а вот в табличную часть записываются только 1 номенклатура.а остальные не записываются(((
|
|||
44
Wobland
02.12.11
✎
14:51
|
(43) там в ДБФке содержимое ТЧ? правильно АйЭм говорил, загрузи всё в ТЗ и потом шпарь по ней. можешь в аську постучаться, песня длинная, т.к. есть желание ваще всё переписать ;)
|
|||
45
Taffy
02.12.11
✎
17:08
|
Сделала вот так.теперь у меня в старые документы дублируются в табличных частях значения при повторном вызове обработки.
Функция загрузитьСчетаНаОплату() ДБФ = Новый XBase; ДБФ.ОткрытьФайл(ПутьКФайлу); ДБФ.Кодировка=КодировкаXBase.OEM; //Проверка на наличие записей Если ДБФ.КоличествоЗаписей() = 0 Тогда Сообщить("Файл данных пуст"); ДБФ.ЗакрытьФайл(); //Возврат КонецЕсли; //Переходим на первую строку файла ДокСчет=Документы.СчетНаОплатуПокупателю; ДБФ.Первая(); ПредыдущийНомер = 0; Док=Неопределено; Пока Истина Цикл //Создадим новый документ ТекущийНомер=ДБФ.NUMBERD; Дата=ДБФ.DATE; Если ТекущийНомер <> ПредыдущийНомер Тогда //записываем предыдущий документ Если Док<>Неопределено тогда Док.Записать(); КонецЕсли; Если ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата)=ДокСчет.ПустаяСсылка() тогда //переходим к следующему документу Док = ДокСчет.СоздатьДокумент(); Док.Номер= СокрЛП(ДБФ.NUMBERD); Док.Дата = Дата; Док.Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); Док.ВалютаДокумента =Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VALD)); Док.Контрагент=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(ДБФ.KONTR)); Док.СтруктурнаяЕдиница = Справочники.БанковскиеСчета.НайтиПоНаименованию(СокрЛП(ДБФ.NAMEBS)); ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); ДоговорКонтрагента.Владелец = Док.Контрагент.Ссылка; ДоговорКонтрагента.Наименование = СокрЛП(ДБФ.NAMED); ДоговорКонтрагента.Номер = СокрЛП(ДБФ.NUMBER); ДоговорКонтрагента.ВидДоговора = Вычислить("Перечисления.ВидыДоговоровКонтрагентов."+СокрЛП(ДБФ.VID)); ДоговорКонтрагента.Дата = СокрЛП(ДБФ.DATED); ДоговорКонтрагента.ВалютаВзаиморасчетов=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL)); ДоговорКонтрагента.Организация =Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); ДоговорКонтрагента.Записать(); Док.ДоговорКонтрагента=ДоговорКонтрагента.Ссылка; Док.КратностьВзаиморасчетов=1; //Док.Записать(); Банк= Справочники.Банки.СоздатьЭлемент(); //Банк.КоррСчет=СокрЛП(ДБФ.KORS); //Банк.Код=СокрЛП(ДБФ.BIK); Банк.Наименование=СокрЛП(ДБФ.NAMEB); Банк.Записать(); БанкСчет=Справочники.БанковскиеСчета.СоздатьЭлемент(); БанкСчет.Владелец=Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG)); БанкСчет.Банк=Справочники.Банки.НайтиПоКоду(ДБФ.BIK); БанкСчет.Наименование=СокрЛП(ДБФ.NAMEBS); БанкСчет.ВалютаДенежныхСредств=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL)); //БанкСчет.НомерСчета=СокрЛП(ДБФ.COUNT); Банк.Записать(); БанкСчет.Записать(); иначе ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата); Док=ДокСсылка.ПолучитьОбъект(); КонецЕсли; КонецЕсли; //Заполним табличную часть "Товары" НоваяСтрока=Док.Товары.Добавить(); НоваяСтрока.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); НоваяСтрока.ЕдиницаИзмерения= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(СокрЛП(ДБФ.ED)); НоваяСтрока.Количество=СокрЛП(ДБФ.KOL); НоваяСтрока.Цена=СокрЛП(ДБФ.PRICE); НоваяСтрока.СтавкаНДС=СокрЛП(ДБФ.NDS); //Заполним табличную часть "Оплачено" НоваяОплачено= Док.Оплата.Добавить(); НоваяОплачено.ДатаОплаты=СокрЛП(ДБФ.DATEO); НоваяОплачено.Сумма=СокрЛП(ДБФ.SUM); НоваяОплачено.НомерДокумента=СокрЛП(ДБФ.NDOK); //Заполним табличную часть "Отгружено" НоваяОтгружено= Док.Отгрузка.Добавить(); НоваяОтгружено.ДатаОтгрузки=СокрЛП(ДБФ.DATEOT); НоваяОтгружено.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM)); НоваяОтгружено.Количество=СокрЛП(ДБФ.KOL); НоваяОтгружено.Цена=СокрЛП(ДБФ.PRICE); НоваяОтгружено.Сумма=СокрЛП(ДБФ.SUMOT); //КонецЕсли; Если Не ДБФ.Следующая()Тогда Прервать; КонецЕсли; ПредыдущийНомер = ТекущийНомер; КонецЦикла; //записываем последний док Если Док<>Неопределено тогда Док.Записать(); КонецЕсли; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |