04.03.12 — 21:26
Код
Док = СоздатьОбъект(«Документ»);
Док.ВыбратьПодчиненныеДокументы(,,ТекДок);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Вид() = «СчетФактура» Тогда
ДокСчФ = Док.ТекущийДокумент();
ЕстьСчетФактура = 1;
КонецЕсли;
КонецЦикла;
// создаем СФ
Если ЕстьСчетФактура = 0 Тогда
ДокСчФ = СоздатьОбъект(«Документ.СчетФактура»);
ДокСчФ.Новый();
ИначеЕсли ТекДок.ТекущийДокумент().проведен() = 1 Тогда
// текущиее основание (Документ отгрузка) проведен! — пропускаем цикл
Продолжить;
КонецЕсли;
….
// заполняем СФ
ТекДок.ВыбратьСтроки();
Пока ТекДок.ПолучитьСтроку() = 1 Цикл
…
КонецЦикла;
//Попытка
ДокСчФ.Записать();
суть в том, что если есть непроведенная реализация, то перезаписываем счет-фактуру (если есть, если нет то создаем).
Проблема в том что при записи выдается «Не выбран документ!»
1 — 04.03.12 — 21:38
(0)Так в обоих случаях нужно ДокСчФ = СоздатьОбъект(«Документ.СчетФактура»);
А в первом ещё и спозиционироваться на нём.
2 — 04.03.12 — 21:44
добавил код перед:
ДокСчФ = СоздатьОбъект(«Документ.СчетФактура»);
но все равно не помогает
3 — 04.03.12 — 21:46
А ТекДок — это что ? Где присваиваешь ?
4 — 04.03.12 — 21:50
И сделай лучше так
Если Док.Вид() = «СчетФактура» Тогда
ДокСчФСсылка = Док.ТекущийДокумент();
ЕстьСчетФактура = 1;
КонецЕсли;
ДокСчФ = СоздатьОбъект(«Документ.СчетФактура»);
Если ЕстьСчетФактура = 0 Тогда
ДокСчФ.Новый();
ИначеЕсли ТекДок.ТекущийДокумент().проведен() = 1 Тогда
// текущиее основание (Документ отгрузка) проведен! — пропускаем цикл
Продолжить;
Иначе
ДокСчФ.НайтиДокумент(ДокСчФСсылка) ;
КонецЕсли;
5 — 04.03.12 — 21:52
ДокСчФ = Док.ТекущийДокумент();
заменить на
ДокСчФ = Док;
6 — 04.03.12 — 21:59
ДокСчФ.Договор = ТекДок.Договор;
{C:DOCUMENTS AND SETTINGSdarkРАБОЧИЙ СТОЛЗАГРУЗКАДАННЫХИЗ82ТЕСТ.ERT(288)}: Поле агрегатного объекта не обнаружено (Договор)
7 — 04.03.12 — 22:55
Хэлп!!!
8 — 04.03.12 — 23:00
Настоящий программист даже когда тонет, кричит: «F1! F1! F1!!!»
9 — 05.03.12 — 05:54
телепатирую, в 8.2 поле Договор на самом деле называется ДоговорКонтрагента
10 — 05.03.12 — 06:39
(9) Учитывая, что это 7
11 — 05.03.12 — 06:45
(0) Если ТекДок выбирается в цикле, то переменную ЕстьСчетФактура нужно обнулять.
12 — 05.03.12 — 08:31
(0)
ЕстьСчетФактура =0;
Док = СоздатьОбъект(«Документ»);
Док.ВыбратьПодчиненныеДокументы(,,ТекДок);
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Вид() = «СчетФактура» Тогда
ЕстьСчетФактура = 1;
Прервать;
КонецЕсли;
КонецЦикла;
// создаем СФ
Если ЕстьСчетФактура = 0 Тогда
Док = СоздатьОбъект(«Документ.СчетФактура»);
Док.Новый();
ИначеЕсли ТекДок.проведен() = 1 Тогда
// текущиее основание (Документ отгрузка) проведен! — пропускаем цикл
//Тут тоже бред, если это выборка по ТекДок, то достаточно ТекДок.УстановитьФильтр(0,1);
Продолжить;
КонецЕсли;
….
// заполняем СФ
ТекДок.ВыбратьСтроки();
Пока ТекДок.ПолучитьСтроку() = 1 Цикл
…
КонецЦикла;
//Попытка
Док.Записать();
13 — 05.03.12 — 10:04
(10)а это ни о чем не говорит — ЗАГРУЗКАДАННЫХИЗ82ТЕСТ.ERT ?
15 — 05.03.12 — 10:35
Спасибо, viktor_vv, получилось!
16 — 05.03.12 — 10:47
(15) наивный какой..
17 — 05.03.12 — 10:47
+16 в (4) лажа, если что
18 — 05.03.12 — 10:50
(17) Ну и где там лажа ?
19 — 05.03.12 — 10:56
(18) подумай.
20 — 05.03.12 — 10:59
(19) Ну еще (11) прощелкал.
21 — 05.03.12 — 11:00
(20) еще подумай.
22 — 05.03.12 — 11:04
(21) Ну тут в цикле.
Пока Док.ПолучитьДокумент() = 1 Цикл
Если Док.Вид() = «СчетФактура» Тогда
ДокСчФСсылка = Док.ТекущийДокумент();
ЕстьСчетФактура = 1;
КонецЕсли;
КонецЦикла;
Я уже все не копировал, просто кусок показал где поменять.
Че-то ты меня пмо в тупик ставишь :).
viktor_vv
23 — 05.03.12 — 11:04
*прямо.
Приветствую Вас, уважаемые форумчане! Помогите понять причину такой ошибки, имею код (прошу заранее простить за непонятность имен переменных — вырвал кусок из большой процедуры), получаю список значений и заполняю реквизита документа Счет-фактуры значениями из списка: Проблема вот в чем, на строке: ДокСФ.Записать, ругается, что: Не выбран документ! От чего ругается, ведь по полученному номеру документ нашелся и надо было всего-то перезаписать его реквизиты? Заранее благодарен!
Вот тут ошибка. Текущийдокумент записывать нельзя.
и Как тогда программно поменять значения реквизитов в найденом ДокСФ, ведь мне нужно заменить не все реквизиты, а некотороые, полагаю, что если сделаю ДокСФ.Новый, тогда создастся и запишется совершенно чистый документ?
можешь если не нашелся не делать ничего…
Если не нашелся, у меня с ним отдельный разговор будет. Проблема моя в том, что документ есть, он нашелся по номеру и теперь бы надо поменять пару его реквизитов. Реквизиты переприсвоены, и теперь пришло время записываться — Записать и облом((( Перезаписать уже найденный хочу.
Тебе в написали как, в написали. Тебе этого недостаточно?
ну и что не хватает то? тебе все уже написали… .ТекущийДокумент делать не надо — это ссылка уже а не объект
и я понял, что в момент правильного нахождения документа следует сделать Новый, будет ли это означать, что все реквизиты уже существующего документа «обнулятся» и запишутся только те, которые я присвою?
Если ты нашел документ, то ссылка на него уже в ДокСФ, если не нашел, тогда новый.
Если такого документа нет, то будет создан НОВЫЙ и ВСЕ реквизиты заново надо заполнить. А существующие останутся такими как и были.
Сделал, как понял. Теперь пишет, что Номер не уникальный!((( Но вопрос совсем не в том, что делать с Новым, а как поменять старый??? …в общем, мой мятежный дух успокоился, когда на мысль навел . В существующем документе реквизиты стали перезаписываться. В итоге имею: Благодарю всех за помощь и участие!!!
еще подумай, зачем менять дату и номер у счет фактуры, если она в базе уже есть. Оно тебе точно надо ?
Да, надо. Реквизиты зависят от документа Поступления.
Ошибка там же, где и обычно….
дело в том что ДокСФ = НайдСФ.ТекущийДокумент возвращает ссылку на документ, а ссылкой ничего низя сделать, а нужн получить ОБЪЕКТ а номер будет ругатся. для того чтобы не ругался на номер нужно ДокСФ.УстановитьНовыйНомер
Вообще-то номер и дата счет фактуры поставщика заполняются в отдельном реквизите, а никак не в номердок и датадок. Номердок и датадок — это наши номер и дата, и грузить их не надо, и у уже существующих документов менять не надо.
Проблема у меня была (да и осталась, наверное) в том, что Ссылку и Объект я не вижу явно, другое дело, к примеру, как в 8.2 получил в запросе именно «ссылку», а от неё с помощью ПолучитьОбъект уже сам «объект», и было явно видно, когда имеем объект, а когда ссылку. В 7.7 же мы это только подразумеваем, догадываемся, узнаем из опыта… (У нас здесь) многое зависит от состояния базы, поставленной задачи и прежнего опыта коллег : )
Тэги: 1С 7.7 и ранее
Комментарии доступны только авторизированным пользователям
0 / 0 / 0 Регистрация: 15.05.2012 Сообщений: 16 |
|
1 |
|
Не выбран элемент при записи реквизита справочника из обработки проведения документа02.06.2012, 19:01. Показов 13039. Ответов 12
Требуется из обработки проведения документа внести изменения в справочник, Процедура ОбработкаПроведения() Нажимаю кнопку «Провести» и мне выдает: Уже все перепробовал….
__________________
0 |
2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
|
02.06.2012, 21:05 |
2 |
ДатО или Дата?
1 |
0 / 0 / 0 Регистрация: 15.05.2012 Сообщений: 16 |
|
02.06.2012, 21:42 [ТС] |
3 |
ДатО или Дата? Привел код вот в такой вид, ошибки нет но значения реквизитов не меняются… Процедура ОбработкаПроведения() (((((((
0 |
2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
|
02.06.2012, 21:47 |
4 |
Периодический?
1 |
900 / 877 / 8 Регистрация: 15.03.2012 Сообщений: 2,680 |
|
02.06.2012, 21:47 |
5 |
Ну и правильно, т.к. элемент не найден. Вы значение какого типа передаете в переменной Автомобиль?
1 |
0 / 0 / 0 Регистрация: 15.05.2012 Сообщений: 16 |
|
02.06.2012, 22:12 [ТС] |
6 |
Периодический? В отладчике все проходит.
0 |
0 / 0 / 0 Регистрация: 15.05.2012 Сообщений: 16 |
|
02.06.2012, 22:13 [ТС] |
7 |
Ну и правильно, т.к. элемент не найден. Вы значение какого типа передаете в переменной Автомобиль? Тип значения Справочник.Автомобили в табличной части документа.
0 |
900 / 877 / 8 Регистрация: 15.03.2012 Сообщений: 2,680 |
|
02.06.2012, 22:15 |
8 |
В отладчике все проходит Так Спр.НайтиЭлемент(Автомобиль) что возвращает? 1 или 0?
1 |
0 / 0 / 0 Регистрация: 15.05.2012 Сообщений: 16 |
|
02.06.2012, 22:21 [ТС] |
9 |
Периодический? Прошу прощения, в отладчике Если попадает а вот со строки Спр.НайтиЭлемент(Автомобиль) Добавлено через 1 минуту
Так Спр.НайтиЭлемент(Автомобиль) что возвращает? 1 или 0? По сути должен вернуть элемент который указан в реквизите табличной части документа «Автомобиль».
0 |
900 / 877 / 8 Регистрация: 15.03.2012 Сообщений: 2,680 |
|
02.06.2012, 22:25 |
10 |
По сути должен вернуть элемент который указан в реквизите табличной части документа «Автомобиль». Возвращает Вам 0, поэтому:
в отладчике Если попадает а вот со строки Спр.НайтиЭлемент(Автомобиль) Возвращаемся обратно:
Тип значения Справочник.Автомобили в табличной части документа. У вас скорее всего переменная Автомобиль пуста, т.к. Вы не спозиционировались на конкретной строке таб. чати.
1 |
0 / 0 / 0 Регистрация: 15.05.2012 Сообщений: 16 |
|
02.06.2012, 22:34 [ТС] |
11 |
Возвращает Вам 0, поэтому: Возвращаемся обратно: У вас скорее всего переменная Автомобиль пуста, т.к. Вы не спозиционировались на конкретной строке таб. чати. Подскажите пожалуйста, каким образом это сделать?
0 |
Fenomen 900 / 877 / 8 Регистрация: 15.03.2012 Сообщений: 2,680 |
||||
02.06.2012, 22:38 |
12 |
|||
одскажите пожалуйста, каким образом это сделать?
1 |
untercover 0 / 0 / 0 Регистрация: 15.05.2012 Сообщений: 16 |
||||
02.06.2012, 22:43 [ТС] |
13 |
|||
Спасибо огромное! Все получилось )))
0 |