v8: Как дополнить движения документа Операция методом ЗаполнитьЗначенияСвойств? #645759


#0 by Stella0608
БП 2.0. Есть внешняя обработка, создающая проводки в документе Операция (бух.) Делается это так: 1) создается структура, содержащая проводки документа. По реквизитам совпадает с движениями документа. Код могу привести. 2) Далее выполняется такая вот конструкция: В данном случае: Документ = найденный документ Операция (бух.). Тип - ДокументОбъект. По умолчанию подразумевается, что документ найден и существует в базе. При выполнении вышеописанно конструкции проводки документа перезаписываются. Необходимо, чтобы они дополнялись. Т.е. существующие движения оставались нетронутыми, в то время как движения из структуры дозаписывались. При этом максимально не страдала производительность. Как это можно сделать? P.S. В 8.2 не особо сильна, я больше по 7.7.
#1 by HIDDEN MESSAGE
#2 by zak555
ты лучше заполняй ТЧ, потом пиши, а проводки сами появятся
#3 by Stella0608
Данный код писала не я, структура была создана с целью оптимизации. Самое банальное что приходит в голову - дополнить структуру уже имеющимися проводками. Но есть подозрение, что это долго и есть более простой способ.
#4 by zak555
РегистрБухгалтерииНаборЗаписей.<Имя регистра бухгалтерии> (AccountingRegisterRecordSet.<Имя регистра бухгалтерии>) Загрузить (Load) Синтаксис: Загрузить(<Таблица значений>) Параметры: <Таблица значений> (обязательный) Тип: ТаблицаЗначений. Таблица значений, содержащая данные для заполнения набора записей. Описание: Загружает набор записей значениями из переданной таблицы значений. При этом все прежние записи набора удаляются. Заполняются значения доступных для записи свойств записей регистра бухгалтерии, имена которых совпали c именами колонок таблицы значений. Для каждого субконто создается пара колонок с идентификаторами вида ВидСубконто<Номер>, Субконто<Номер>, для регистра не поддерживающего корреспонденцию, и ВидСубконтоДт<Номер>, СубконтоДт<Номер>, ВидСубконтоКт<Номер>, СубконтоКт<Номер>, для регистра поддерживающего корреспонденцию. При этом номера <Номер> могут не совпадать с номерами видов субконто на соответствующем счете. Пример:
#5 by Stella0608
Т.е. предлагаете выгрузить уже существующие записи в ТЗ? Насколько я помню, у ТЗ тоже нет метода "догрузить" (а так порой не хватает :
#6 by zak555
#7 by zak555
в 7ке было
#8 by zak555
оставь структуру, измени алгоритм напонерия
#9 by Stella0608
Т.е. манипулировать с ТЗ? А догружать как, в цикле?
#10 by zak555
+
#11 by zak555
нет, в БП у дока операция есть табличная часть (ТЧ) грузить туда данные то структуры, какой есть как загрузить в ТЧ, записываешь  документ и сам типовой алгоритм записи документа создаст движения ведь, если юзер зайдёт в этот док операция и нажмёт записать -- всё пропадёт
#12 by Stella0608
Немного непонятно. То, что я уловила - скрещиваются 2 ТЗ (из документа и новая из структуры) и уже грузятся в готовый док. Вот как пока для меня непонятно. Вариант с циклом боюсь будет долгий, временная ТЗ - еще дольше. Хотя другого варианта пока не вижу...
#13 by zak555
или у дока операция нет ТЧ, а на форме сами движения ? не могу посмотреть
#14 by Stella0608
Скажу честно, этот код писала не я, и додумалась до него тоже не я :). Но мне было сказано, что он был написан для оптимизации. Похоже единственный на данный момент способ решения проблемы, которая есть - дополнять ТЗ данными в цикле :(. Если кто-нибудь подскажет более оптимальный, буду очень благодарна. Пока я его не вижу. "Описание: Загружает набор записей значениями из переданной таблицы значений. При этом все прежние записи набора удаляются." Вот последнее предложение убрать либо сделать параметром и все было бы зашибись :(.
#15 by kotletka
нет тч есть только движения, они и наполняют
#16 by kotletka
если попробовать через ЗаполнитьЗначенияСвойств(Документ.движения.Хозрасчетные, СтруктураДок.Движения)
#17 by kotletka
#18 by Stella0608
Так, можно по порядку? Что именно делает исходный код? Я подозреваю, что конструкция Документ.Движения[Движение.Имя].Загрузить(Движение.Данные); загружает в документ Операция данные из ТЗ. А вот зачем нужна конструкция ЗаполнитьЗначенияСвойств(Документ, СтруктураДок); Она вообще зависит от заполненности ТЗ?
#19 by cw014
Движения записывай, причем с параметром Заменять = Ложь
#20 by cw014
А сам документ перезаписывать не надо - это грязные инсинуации
#21 by zak555
да, я посмотрел уже
#22 by Stella0608
Как?! :( Что делает конструкция ЗаполнитьЗначенияСвойств?!
#23 by zak555
+1 ЗаполнитьЗначенияСвойств -- для всех типов
#24 by zak555
добавляет твои двежения из структуры
#25 by Stella0608
Это очевидно, т.к. она глобальная. Но что именно? Есть структура. И в этой структуре есть ТЗ с движениями. Этот метод эти самые движения пишет из структуры? Если да, то какой смысл в следующих строчках кода? :(
#26 by zak555
в ты перезаписывала, а в ты дозаписываешь
#27 by zak555
#28 by zak555
как я понял автору нужна универсальность : или дозаписывать или перезаписывать
#29 by Stella0608
Исходная задача поставлена так: добавить на форму внешней обработки флаг. Если ложь - движения перезаписывать, если нет, дозаписывать. С флагом я сама разберусь, нужно понять исходный код.
#30 by Stella0608
Опередил :)))
#31 by zak555
#32 by zak555
#33 by Stella0608
А чем отличаются и ?
#34 by vicof
фотку уже просили?
#35 by Stella0608
Те кому была нужна уже все нашли :))).
#36 by CaptanG
помог ему и просить
#37 by Stella0608
zak555 сам нашел все что ему нужно :). И я так и не получила ответа на .
#38 by zak555
сюда не смотрел ?
#39 by zak555
РегистрБухгалтерииНаборЗаписей.<Имя регистра бухгалтерии>.Загрузить (AccountingRegisterRecordSet.<Имя регистра бухгалтерии>.Load) РегистрБухгалтерииНаборЗаписей.<Имя регистра бухгалтерии> (AccountingRegisterRecordSet.<Имя регистра бухгалтерии>) Загрузить (Load) Синтаксис: Загрузить(<ТаблицаЗначений>) Параметры: Тип: ТаблицаЗначений. Таблица значений, содержащая данные для заполнения набора записей. Описание: Загружает набор записей значениями из переданной таблицы значений. При этом все прежние записи набора удаляются. Заполняются значения доступных для записи свойств записей регистра бухгалтерии, имена которых совпали c именами колонок таблицы значений. Для каждого субконто создается пара колонок с идентификаторами вида ВидСубконто<Номер>, Субконто<Номер>, для регистра не поддерживающего корреспонденцию, и ВидСубконтоДт<Номер>, СубконтоДт<Номер>, ВидСубконтоКт<Номер>, СубконтоКт<Номер>, для регистра поддерживающего корреспонденцию. При этом номера <Номер> могут не совпадать с номерами видов субконто на соответствующем счете. Доступность: Сервер, толстый клиент, внешнее соединение. Пример:
#40 by Stella0608
Я конечно безнадежна, но синтаксис помошник читать умею. :) Вопрос в другом: Методы ЗаполнитьЗначенияСвойств и Загрузить - не взаимозаменяемы ли они? Если нет, то что именно делает первым? Прошу объяснить доступным языком для блондинок :). Ну туплю я сегодня, голова болит, у всех бывает :(.
#41 by zak555
загрузить всё заместит, а вот строка делает следующее:
#42 by zak555
Глобальный контекст.ЗаполнитьЗначенияСвойств (Global context.FillPropertyValues) Глобальный контекст (Global context) ЗаполнитьЗначенияСвойств (FillPropertyValues) Синтаксис: ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>, <СписокСвойств>, <ИсключаяСвойства>) Параметры: Тип: Произвольный. Значение, чьи свойства будут заполнены значениями соответствующих свойств <Источника>. Тип: Произвольный. Значения свойств данного объекта будут установлены в соответствующие свойства <Приемника>. Тип: Строка. Список имен свойств, разделенный запятыми, которые необходимо заполнить. Если свойства не указаны, то копируются только те, которые представлены и в <Источнике> и в <Приемнике>. Если свойства указаны, то они обязательно должны присутствовать в обоих объектах. Если в <Источнике> или <Приемнике> заданное свойство отсутствует, то будет вызвано исключение. <ИсключаяСвойства> (необязательный) Тип: Строка. Список имен свойств, разделенный запятыми, которые необходимо исключить из заполнения. Описание: Копирует значения свойств <Источника> в свойства <Приемника>. Сопоставление производится по именам свойств. Если указаны копируемые свойства, то в заполнении участвуют только они, параметр <ИсключаяСвойства> игнорируется. В противном случае, если указан параметр <ИсключаяСвойства>, то свойства перечисленные в нем, исключаются из обработки. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
#43 by zak555
в ДвижениеИзСтруктурыДок -- это как бы одна "строка" т.е. эту строку "копируем" в НовоеДвижение
#44 by Stella0608
Немного непонятна вот эта строка. ЗаполнитьЗначенияСвойств(НовоеДвижение, ДвижениеИзСтруктурыДок); Она проводки что ли не заполняет? Если нет, то что она вообще делает? :)
#45 by sidalexsandr
Глобальный контекст (Global context) ЗаполнитьЗначенияСвойств (FillPropertyValues) Синтаксис: ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>, <СписокСвойств>, <ИсключаяСвойства>) Параметры: Тип: Произвольный. Значение, чьи свойства будут заполнены значениями соответствующих свойств <Источника>. Тип: Произвольный. Значения свойств данного объекта будут установлены в соответствующие свойства <Приемника>. Тип: Строка. Список имен свойств, разделенный запятыми, которые необходимо заполнить. Если свойства не указаны, то копируются только те, которые представлены и в <Источнике> и в <Приемнике>. Если свойства указаны, то они обязательно должны присутствовать в обоих объектах. Если в <Источнике> или <Приемнике> заданное свойство отсутствует, то будет вызвано исключение. <ИсключаяСвойства> (необязательный) Тип: Строка. Список имен свойств, разделенный запятыми, которые необходимо исключить из заполнения. Описание: Копирует значения свойств <Источника> в свойства <Приемника>. Сопоставление производится по именам свойств. Если указаны копируемые свойства, то в заполнении участвуют только они, параметр <ИсключаяСвойства> игнорируется. В противном случае, если указан параметр <ИсключаяСвойства>, то свойства перечисленные в нем, исключаются из обработки. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
#46 by zak555
что у тебя за старый сп ?
#47 by sidalexsandr
Синтаксис - помощник в пофигураторе.
#48 by Stella0608
Объясните для блондинок плиииз! :)
#49 by zak555
сравни своё и
#50 by Stella0608
Меня на данный момент интересует что именно делает эта строка: Что делает этот метод я примерно представляю. Вопрос в том, что он делает в данном конкретном случае!
#51 by Stella0608
И да, у меня есть СП :)
#52 by aka AMIGO
я пытаюсь обычно, как попроще.. в результате получается мой личный г-код :)
#53 by zippygrill
и почему фото никто не попросил? :)
#54 by zak555
см. в
#55 by CaptanG
потому что те кто помогает уже видели а остальные обойдуться
#56 by Stella0608
У меня счета Дт, Кт и субконто хранятся в ТЗ. Общая организация обработки такая (цель - импорт данных из txt файла): 1) делается цикл собственно по txt файлу. 2) создается структура идентичная документу ОперацияБух 3) в цикле по файлу пытаемся создать нужных контрагентов, товаров и т.п.. Попутно в структуру в элемент Движения, тип у которого - ТЗ, пихаем сами проводки. 4) если возник сбой на этапе загрузки, обработка ничего не делает и пишет "ошибка". 5) если все отработало нормально, делается цикл по структуре и уже оттуда записываются уже готовые сформированные проводки в документ Операция. В данном случае идет их перезапись.
#57 by zak555
#58 by Stella0608
Понятно все кроме вот этой строки (привожу свой код): Вот ее куда?
#59 by Stella0608
Просто вот именно эта строка мне и непонятна. Остальное все более менее...
#60 by zak555
она заполняет все реквизиты документа операцияБух
#61 by Stella0608
А проводки?
#62 by Stella0608
не работает. Выдает ошибку, что счета не заполнены.
#63 by zak555
для Каждого ДвижениеИзСтруктурыДок Из СтруктураДок.Движения Цикл на для Каждого ДвижениеИзСтруктурыДок Из СтруктураДок.Движения.Данные Цикл
#64 by Stella0608
Аналогичная ошибка. {ВнешняяОбработка.ОбщМодульФУТД.МодульОбъекта}: Ошибка при вызове метода контекста (Записать): Запись не верна! Не заполнены оба счета! (Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет); Номер строки: 1)
#65 by zak555
а так ?
#66 by zak555
#67 by zak555
с тебя стрипШоу !
#68 by Stella0608
{ВнешняяОбработка.ОбщМодульФУТД.МодульОбъекта(36,44)}: Переменная не определена (Движения)                        ЗаполнитьЗначенияСвойств(<<?>>Движения[Движение.Имя].Добавить, ДвижениеТЗ); (Проверка: Толстый клиент (обычное приложение)) Не будет тебе стриптизу :))).
#69 by Stella0608
Ощущение, что обработка, натыкаясь на уже найденный док, не видит его движения...
#70 by Stella0608
Метод Документ.Движения.Хозрасчетный возвращает тип данных РегистрБухгалтерииНаборЗаписей.Хозрасчетный а как мне подобраться к проводкам уже найденного документа?
#71 by Stella0608
Точку останова ставлю на моменте поиска документа по номеру.
#72 by Stella0608
Столкнулась с таким моментом. Набор записей надо было прочитать, иначе он банально перезаписывался даже с использованием метода добавить. Но! это не сильно помогло, т.к. регистратор и активность принудительно проставлялись только после записи документа, и при попытке дозаписи проводок документ ругался "запись не активна". Сделала через времянку как советовали в самом начале темы, т.к. "надо было сделать еще вчера". Если кто-то подскажет более красивое решение, буду благодарна.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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