Как сравнить регистр сведений и документ? #217919


#0 by Oleg01
Как сравнить непериодический независимый регистр сведений и документ?Если в регистре нету записи то записать из значения из документа.
#1 by Hadgehogs
Ну заведи измерение, которое будет ссылкой на документ.Или сделай его подчиненным регистратору - этому документу - это будет правильней.
#2 by angro
это лучше up пиши, чем новые темы создавать.Если в регистре нет ссылки на документ, то IMHO никак. (через журнал регистраций не считается). Если есть то тривильно, обходишь документы и проверяешь наличие записей.
#3 by Ахмед ибн Фадлан
Я могу ошибаться, но если регистр сведений непериодический, то может быть только одна запись с данным набором измерений. Можешь смело писать, если такой нету - запишется, если нету - перепишется.
#4 by Oleg01
Мне нужен собственно кусок кода как сравнивать, хотя бы приблизительно, я просто только недавно начал кодить и не пойму ещё всю логику как записывать Если Тогда...Мне нужен код - как сравнить а куда его вставить я знаю.
#5 by Hadgehogs
Есть регистр сведений Тест, в нем 2 измерения: Документ (тип - ссылка на нужный тебе документ), и Номенклатура (тип - ссылка на справочник Номенклатура) и один ресурс - Количество.Собственно примерный код:
#6 by Ахмед ибн Фадлан
Да просто попытайся вытащить из этого регистра запись с нужным (заданным в твоем документе) набором значений измерений. Если такая запись есть - значит все. Если ее нету - то нужно писать.
#7 by Hadgehogs
Миль пардон, в не нужна последняя строка.Для примера Запрос.Текст=
#8 by Oleg01
Спасибо вам ребята! Это уже другое дело, попробую подстроить под свою ситуациюю
#9 by Oleg01
Не могу понять!Вот регистр у меня имеет следующую структуру:Измерения:-организация-номенклатураРесурсы:-СчетУчетаБУ-СчетУчетаВРозницеБУ-СчетУчетаПередачиБУ-СчетУчетаНДСПриобретений-СчетУчетаНДСПродаж-ВидНалоговойДеятельности-Амортизируется-УчитываетсяКакЗапасНУ...А документ "ОприходованиеТоваров" имеет ряд реквизитов и ТЧТак мне надо получается перебрать док и его ТЧ, затем сам РС и проверить на запись.Не вдупляюсь как то...
#10 by Ахмед ибн Фадлан
2 Если в запросе из 7 ты передашь в качестве параметра Номенклатура список значений из многострочной части, то тебе вернется сразу не одна, а несколько записей. Потом перебираешь строки и находишь запись в запросе - если не находишь, то нужно создать запись.
#11 by A
+и т.д.а то все записи сотрешь.....................
#12 by Hadgehogs
Не обязательно ломать стены о голову...Можно так:КонецПопытки;Только обязательно учесть А то он взаправду переписывает
#13 by Oleg01
Вот примерно так получилось:-------------------------------Только вот косяк, он пишет что поле объекта "СчетУчетаБУ" не обнаружено...Почему?
#14 by Hadgehogs
Попробуй:НоваяЗапись.СчетУчетаБУ = СтрокаТЧ .СчетУчетаБУ;а вообще на тебя Angro не найдется. Он бы тебя быстро вразумил каким - нибудь хитрым запросов, в котором вложенный запрос, или скорее всего объединение таблицы регистра с таблицей документа.Меня он тоже часто вразумляет.
#15 by angro
а я правильно понял что у тебя оприходований с одним и тем же набором записей не может быть?потому что если может быть, то как отличить каким документом сделана запись?Hadgehogs правильно говорит, сделай его зависимым.По поводу ошибки: попробуй так| Документ.ОприходованиеТоваров.Товары(табличная часть в общем) КАК ОприходованиеТоваровтогда так будет Выборка.СчетУчетаБУ
#16 by Oleg01
Что значит (табличная часть в общем)?
#17 by Oleg01
И ещё. Выдаёт мне следующую ошибку:--------------------------------------------{Форма.Отчет}: Ошибка при вызове метода контекста (Записать): Запись не верна! : (Регистр сведений: Номенклатура организаций; Поле: Организация)        НаборЗаписей.Записать;по причине:Запись не верна! : (Регистр сведений: Номенклатура организаций; Поле: Организация)----------------------------------------------это если я половину записей закомментировал:------------------------------------------------------
#18 by Hadgehogs
В первом приближении возможнаяНаборЗаписей = РегистрыСведений.НоменклатураОрганизаций.СоздатьНаборЗаписей;надо создать перед всеми цикламиНадо выполнять после всех циклов ( значало мы фомрируем много записей в памяти, потом их скидываем на диск, вроде так)   НаборЗаписей.Записать;Это будет быстрее, но по идее твой код не ошибочен.Может ты сделал регистр подчиненным?
#19 by angro
(табличная часть в общем) - это значит название твоей табличной части, я предполагаю что Товары, но не уверен.Ну да видимо не заполняешь измерения, а надоНоваяЗапись.Организация = Выборка.ссылка.Организация.А всё таки ответь, если у тебя будет 2 документа с одинаковым содержимым, как ты определишь какаие записи к какому документу относятся?
#20 by Oleg01
Надеюсь документов с одинаковім содержимым не будет.Я так просмотрел - не должно быть.--------------------------------------Теперь ещё одна ошибка выскакивает:{Форма.Отчет}: Поле объекта не обнаружено (Ссылка)        НоваяЗапись.Организация = Выборка.Ссылка.Организация;
#21 by Hadgehogs
вы строкой запроса  | ОприходованиеТоваров.Ссылка КАК Документ,выбираете ссылку на документ и даете ей псевдоним "Документ", поэтомуНоваяЗапись.Организация = Выборка.Документ.Организация;Подчините регистр этому документу
#22 by Oleg01
Нет! Конфигурацию менять не имею права. Всё єто я делаю внешней обработкой. Регистр должен быть независимым!
#23 by Hadgehogs
Периферийка?Вообще, попробуйте так, не притендую на истину:
#24 by Oleg01
Усё, сделал, осталось маленькое условие там включить.Спасибо всем кто помагал.Если интересно - правильный код ниже:------------------------------------------------------------------------
#25 by Hadgehogs
Если интересно, более правильный код - выше В ты создаешь набор записей для 1-ой записи и пишешь на диск 1-у запись регистра.При больших V-информации - это долго.Оприходование - в принципе небольшой документ, да и нечастый, может это и несущественно, но это только порядок строк поменять, решать тебе...
#26 by angro
если повторяющихся документов не будет тогда проще так уже.я бы так попробвал без лишних проверок
#27 by Hadgehogs
Я же говорил, что придет angro и все поправит.Angro, ваше мнение на
#28 by angro
а чего моё мнение, я тоже думаю что лучше один раз записывать.+ ошибся в записи конечно же надо отбор тоже устанавливать НаборЗаписей.Отбор.Организация.Установить(тДокумент.Организация);        НаборЗаписей.Отбор.Номенклатура.Установить(СтрокаТЧ.Номенклатура);
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С