|
Перезаписать таб.часть документа | ☑ | ||
---|---|---|---|---|
0
Ane4ka2410
22.03.12
✎
04:25
|
Такая вот дилемма. В задачу входило сделать обработку для обмена между базами 1с 77 и 82, перенос определенных документов.
Никак не могу разобраться как перезаписывать табличную часть документов. Тоесть в чем суть - запустили обработку, перенесли необходимые документы, но после переноса в 77 возможны какие-то изменения в табл.части товаров и необходимо чтоб при повторной передаче доков - эти части перезаписывались. Пока у меня срабатывает так, что если документ уже существует в базе 82, то обработка его просто пропускает, никак не могу разобраться как правильно прописать чтоб обработка находила доки и если уже существует док, то перезаписывала табл.часть. Помогите пожалуйста. Сильно не ругайте, в 1с новичок, стараюсь потихоньку колупаться, но могу сильно где-то тупануть. |
|||
1
Ane4ka2410
22.03.12
✎
04:28
|
вот кусок кода, где начинаем записывать док и часть кода с записью табл.части.
Для каждого Док Из ТаблицаДокументов Цикл ФлагУспешнойЗаписиДокумента = Ложь; Документ = Документы.РеализацияТоваровУслуг.СоздатьДокумент(); Документ.Дата = Док.ДатаДок; Документ.Номер = Док.НомерДок; Документ.Организация = ОрганизацияПоУмолчанию; Документ.КурсВзаиморасчетов = Док.Курс; Документ.ТипЦен = ОсновнойТипЦен; Документ.ВалютаДокумента = ОсновнаяВалюта; Документ.КратностьВзаиморасчетов = "1"; Документ.ОтражатьВБухгалтерскомУчете = истина; Документ.ОтражатьВНалоговомУчете = истина; Документ.ОтражатьВУправленческомУчете = истина; //НОМЕНКЛАТУРА ДОК ВыборкаНоменклатуры = ТаблицаНоменклатуры.НайтиСтроки(Новый Структура("Владелец", Док)); Для каждого ДокСтрока Из ВыборкаНоменклатуры Цикл Документ.Товары.Очистить(); Строка = Документ.Товары.Добавить(); НаименованиеТМЦ = СокрЛП(ДокСтрока.ТМЦ_Наименование); ПоискСоответствия = ТаблицаСоответствий.Найти(НаименованиеТМЦ, "Наименование"); Строка.Номенклатура = ПоискСоответствия.Номенклатура_v82; Строка.Количество = ДокСтрока.Кво; Строка.Коэффициент = "1"; Строка.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.СоСклада; ПоискЕдиницы = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(ДокСтрока.Ед_Ед); Если ПоискЕдиницы.Пустая() Тогда НоваяЕдиница = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); НоваяЕдиница.Наименование = ДокСтрока.Ед_Ед; НоваяЕдиница.Коэффициент = ДокСтрока.Ед_Коэффициент; Попытка НоваяЕдиница.Записать(); Исключение Сообщить("Ошибка при записи единицы измерения " + ДокСтрока.Ед_Ед + " !", СтатусСообщения.Важное); возврат; КонецПопытки; Строка.ЕдиницаИзмерения = НоваяЕдиница.Ссылка; Иначе Строка.ЕдиницаИзмерения = ПоискЕдиницы.Ссылка; КонецЕсли; Строка.Цена = ДокСтрока.ЦенаБезНДС; Строка.Сумма = ДокСтрока.ЦенаБезНДС*ДокСтрока.Кво; Строка.СтавкаНДС = ?(Док.ВидНДС_Ставка <> 0, Перечисления.СтавкиНДС.НДС20, Перечисления.СтавкиНДС.БезНДС); Строка.СуммаНДС = ДокСтрока.НДС; КонецЦикла; //ЗАПИСЬ Попытка Документ.Записать(?(Проводить, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись)); Сообщить("Документ № " + Документ.Номер + " от " + Документ.Дата + " записан!"); КоличествоИмпортаДокументов = КоличествоИмпортаДокументов +1; ФлагУспешнойЗаписиДокумента = Истина; Исключение Сообщить("Документ № " + Документ.Номер + " от " + Документ.Дата + " не записан!") КонецПопытки; ЭлементыФормы.Индикатор.Значение = ЭлементыФормы.Индикатор.Значение + 1; Состояние("Запис документів. Оброблено " + ЭлементыФормы.Индикатор.Значение + " з " + СписокНакладных.Количество() + " документів."); КонецЦикла; Сообщить("Документы: Сохранено "+КоличествоИмпортаДокументов+ " записей из найденых "+ТаблицаДокументов.Количество() ); ЭлементыФормы.Индикатор.Видимость = ЛОЖЬ; |
|||
2
Лирик
22.03.12
✎
06:35
|
Существующие документы не изменяет потому, что ты наверняка работаешь со ссылкой. В приведенном коде только создание новых документов, а где код обработки найденных? И где, в конце концов, фото?! Сколько вас учат, ничего не понимаете :)
|
|||
3
Kassius
22.03.12
✎
06:37
|
Категорически согласен с (2).
(0) без фото тут никто не помогает. |
|||
4
Ane4ka2410
22.03.12
✎
11:29
|
эх.... вообще любопытная политика, какое отношение фото имеет к программированию в 1с, ну хоть за совет спасибо :)
А обработки найденных нет, потому что чтобы то что я выдумывала - не срабатывает. |
|||
5
lxs
22.03.12
✎
11:34
|
(0) тебе не кажется, что вот здесь:
Для каждого ДокСтрока Из ВыборкаНоменклатуры Цикл Документ.Товары.Очистить(); кроется засада? |
|||
6
patapum
22.03.12
✎
11:37
|
Ну попробуй перед созданием документа
ДокументСсылка = Документы.РеализацияТоваровИУслуг.НайтиПоНомеру(Док.ДатаДок, Док.НомерДок); Если ЗначениеЗаполнено(ДокументСсылка) Тогда Документ = ДокументСсылка.ПолучитьОбъект(); Иначе то что было у тебя КонецЕсли; а без фото на мисте программирование не пойдет. это МИСТика... |
|||
7
Ane4ka2410
22.03.12
✎
11:37
|
пробовала так. Не проходит. Если документ уже существует, то он его тупо не записывает
|
|||
8
patapum
22.03.12
✎
11:40
|
ну, если ему сказать Записать, то ему деваться то некуда...
|
|||
9
Alex375
22.03.12
✎
11:45
|
если хочешь, можешь в аську постучаться - помогу разобраться с задачей
|
|||
10
Ane4ka2410
22.03.12
✎
11:49
|
patapum, lxs - Спасибо за помощь :) пока не выходит, но идея ясна, буду рыть в ту сторону.
Alex375 - я пока постараюсь сильно никого собой не обременять и попробую поколупаться, но если туго будет - напишу, спасибо :) |
|||
11
patapum
22.03.12
✎
11:51
|
"Сисадмин цветы и конфеты не пьет!" (с)
фото с тебя... ))) |
|||
12
Ane4ka2410
22.03.12
✎
11:56
|
добавила фото, раз это так существенно :)
|
|||
13
lxs
22.03.12
✎
11:58
|
(7) Почему не записывает-то? Ошибка какая-то или что? может транзакцию не закрываешь. Распиши подробнее.
|
|||
14
sanja26
22.03.12
✎
12:03
|
А ты существующий док после перезаполнения записываешь? или тлько новые
|
|||
15
sanja26
22.03.12
✎
12:05
|
в (1) только вновь создаваемый
|
|||
16
Ane4ka2410
22.03.12
✎
12:13
|
sanja26, пишет при записи, что номер не уникален.
Вообще немного путаюсь - по факту мне нужно перезаписать только табл.часть, а не весь документ. Тоесть мне перед началом цикла создания дока нужно сделать проверку, а очищать уже в цикле табл.части? з.ы. сильно не ругайтесь на тупёж:) |
|||
17
Гефест
22.03.12
✎
12:15
|
(16) Ты наверное создаешь новый документ? Ты должна найти существующий, внести в него изменения и записать
|
|||
18
lxs
22.03.12
✎
12:16
|
(16) показывай. где ищешь.
|
|||
19
Ane4ka2410
22.03.12
✎
12:28
|
Для каждого Док Из ТаблицаДокументов Цикл
НомерСчета= "РН00000026"; ДокументСсылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НомерСчета); Если Если ДокументСсылка = Неопределено Тогда Документ = Документы.РеализацияТоваровУслуг.СоздатьДокумент(); ........ Иначе ИначеЕсли Документ <> Неопределено Тогда Сообщить("Найден документ №"+НомерСчета); Ну это приблизительно. Взяла один конкретный док, поиск среди всех потом напишу, мне пока главное принцип понять. Документ то находит, а вот что дальше с ним делать - путаюсь. КонецЕсли нужно ж уже прописывать в самом конце всех махинаций? В Записи просто изменила Исключение |
|||
20
Ane4ka2410
22.03.12
✎
12:29
|
*без еще одного иначе
|
|||
21
lxs
22.03.12
✎
12:31
|
Неправильно. Неопределено может быть только в том случае, если ты не передаешь НомерСчета.
|
|||
22
Гефест
22.03.12
✎
12:32
|
(19) Точно так же как и для нового заполняй реквизиты и записывай. Для табличных частей не забудь УдалитьСтроки(), чтобы очистить их
|
|||
23
Ane4ka2410
22.03.12
✎
12:33
|
ДокументСсылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(Док.ДатаДок, Док.НомерДок);
Если ЗначениеЗаполнено(ДокументСсылка) Тогда Документ = ДокументСсылка.ПолучитьОбъект(); |
|||
24
hhhh
22.03.12
✎
12:34
|
(23) ДокументСсылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(Док.ДатаДок, Док.НомерДок);
спасибо, рассмешила. |
|||
25
Ane4ka2410
22.03.12
✎
12:34
|
тоесть грубо говоря нужно будет дважды продублировать код, но в коде где документ найден очистить строки?
Ну с этим поколупаюсь. А такой еще вопрос, если мне при записи пишет что номер не уникален, то как это обойти? |
|||
26
lxs
22.03.12
✎
12:35
|
...
Если Документссылка.Пустая() Тогда //создаешь новый Иначе //получаешь объект Об = Документссылка.ПолучитьОбъект(); //меняешь реквизиты, если надо .. //меняешь табличную часть Об.<Табличная часть>.Очистить(); Для каждого СтрокаЗаполнения Из ДанныеДляЗаполненияДокумента Цикл НоваяСтрока = Об.<Табличная часть>.Добавить(); .. КонецЦикла; Попытка Об.Записать(<РежимЗаписиДокумента>); Исключение .. КонецПопытки; |
|||
27
lxs
22.03.12
✎
12:36
|
(25) Устранить причину неуникальности.
|
|||
28
Ane4ka2410
22.03.12
✎
12:37
|
hhhh, я лишь скопировала то что мне написали до этого, мне главное принцип понять, это ж черновой вариант. И я очень благодарна что мне пытаются помочь.
|
|||
29
Ane4ka2410
22.03.12
✎
12:38
|
lxs, спасибо большое, попробую :))
|
|||
30
sanja26
22.03.12
✎
13:34
|
НомерСчета разве не переменная, которую получаешь из семерки?? СокрЛП(НомерСчета) тебе в помощь
|
|||
31
Ane4ka2410
23.03.12
✎
00:33
|
Все большое спасибо за помощь! Разобралась :) сразу не было возможности написать))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |