Программное создание акта сверки (не могу заполнить табличные данные акта)
Добрый день.
Я еще совсем новичок в программировании 1С и у меня возникла ситуация которую я никак не могу побороть. Прошу вашей помощи!
В общем пытаюсь программно создать акт сверки, получилось сделать все, кроме заполнения табличной части непосредственно документами контрагента.
Не могу ни нагуглить, ни наковырять в конфигурации функцию или процедуру, которая это делает
1С 8.3 БП 3.0
Подскажите пожалуйста как ее заполнить?
Заранее благодарен
П.С. И абонемента нет, чтобы скачать обработку и посмотреть как это делается :(
Я еще совсем новичок в программировании 1С и у меня возникла ситуация которую я никак не могу побороть. Прошу вашей помощи!
В общем пытаюсь программно создать акт сверки, получилось сделать все, кроме заполнения табличной части непосредственно документами контрагента.
Не могу ни нагуглить, ни наковырять в конфигурации функцию или процедуру, которая это делает
1С 8.3 БП 3.0
Подскажите пожалуйста как ее заполнить?
Заранее благодарен
П.С. И абонемента нет, чтобы скачать обработку и посмотреть как это делается :(
По теме из базы знаний
- Перенос данных из УПП 1.3 / КА 1.1 в БП 3. Переносятся документы, справочники и начальные остатки
- Перенос данных и обмен из УТ 10.3 в УТ 11 / КА 2 / ERP 2. Переносятся документы, справочники и остатки
- Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория
- HTTP, Ajax, JSON: Один год Pet-проекту на 1С
- Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия
Найденные решения
Подумал, подумал и решил все-таки код приложить, может кому понадобится...
Все коряво, но по крайней мере работает :)
// Формируется структура параметров
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ДатаНачала", Период.ДатаНачала);
СтруктураПараметров.Вставить("ДатаОкончания", Новый Граница(КонецДня(Период.ДатаОкончания), ВидГраницы.Включая));
СтруктураПараметров.Вставить("Организация", Организация);
СтруктураПараметров.Вставить("Контрагент", Контрагент);
СтруктураПараметров.Вставить("СОбособленнымиПодразделениями", Ложь);
СтруктураПараметров.Вставить("ВыводитьСчетаФактуры", Ложь);
СтруктураПараметров.Вставить("ЗаполнятьДанныеКонтрагента", Истина);
СтруктураПараметров.Вставить("Валюта", Неопределено);
СтруктураПараметров.Вставить("ФильтрСписокСчетов", ФильтрСписокСчетов);
АналитикаРасчетов = Новый Массив();
АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
СтруктураПараметров.Вставить("АналитикаРасчетов", АналитикаРасчетов);
СтруктураПараметров.Вставить("ДоговорКонтрагента", Неопределено);
СтруктураПараметров.Вставить("ВыводитьПолныеНазванияДокументов", Ложь);
СтруктураПараметров.Вставить("ВалютаДокумента", Валюта);
СтруктураПараметров.Вставить("РазбитьПоДоговорам", Истина);
СтруктураПараметров.Вставить("ВалютаРегламентированногоУчета", Валюта);
// Вызывается процедура ПодготовитьДанныеДляЗаполнения
НаименованиеЗадания = "ЗаполнитьПоДаннымОрганизации";
Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
УникальныйИдентификатор,
"Документы.АктСверкиВзаиморасчетов.ПодготовитьДанныеДляЗаполнения",
СтруктураПараметров,
НаименованиеЗадания);
АдресХранилища = Результат.АдресХранилища;
// Заполняются табличные части акта сверки
Если Результат.ЗаданиеВыполнено Тогда
СтруктураДанных = ПолучитьИзВременногоХранилища(АдресХранилища);
ДокументОбъект.ОстатокНаНачало = СтруктураДанных.ОстатокНаНачало;
ДокументОбъект.ПоДаннымОрганизации.Загрузить(СтруктураДанных.ПоДаннымОрганизации);
Если СтруктураДанных.Свойство("ПоДаннымКонтрагента") Тогда
ДокументОбъект.ПоДаннымКонтрагента.Загрузить(СтруктураДанных.ПоДаннымКонтрагента);
КонецЕсли;
КонецЕсли;
ПоказатьВсе коряво, но по крайней мере работает :)
В общем проблема решилась как мне кажется через жоп.. одно место.
Чтобы программно заполнить табличные части акта сверки в БП 3.0 надо:
переделать под свои данные код функции ЗаполнитьПоДаннымБухгалтерскогоУчета(), которая живет в ФормаДокумента АктаСверкиВзаимозачетов, включая вызываемую из нее функцию ЗагрузитьПодготовленныеДанные(), которая "живет" там же в форме.
Конкретный пример кода приводить не буду, потому что он зависит от названий реквизитов на вашей форме.
Если в двух словах о том как работает заполнение табличной части акта сверки:
1. Формируется СтруктураПараметров, содержащая данные для запроса в базу и формирования "списков" документов
2. Вызывается экспортная процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров.....), живущая в модуле менеджера АктаСверкиВзаимозачетов, она помещает "список" документов во временное хранилище
3. Достаются из временного хранилища данные и заполняются ими табличные части создаваемого объекта акта сверки.
Чтобы программно заполнить табличные части акта сверки в БП 3.0 надо:
переделать под свои данные код функции ЗаполнитьПоДаннымБухгалтерскогоУчета(), которая живет в ФормаДокумента АктаСверкиВзаимозачетов, включая вызываемую из нее функцию ЗагрузитьПодготовленныеДанные(), которая "живет" там же в форме.
Конкретный пример кода приводить не буду, потому что он зависит от названий реквизитов на вашей форме.
Если в двух словах о том как работает заполнение табличной части акта сверки:
1. Формируется СтруктураПараметров, содержащая данные для запроса в базу и формирования "списков" документов
2. Вызывается экспортная процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров.....), живущая в модуле менеджера АктаСверкиВзаимозачетов, она помещает "список" документов во временное хранилище
3. Достаются из временного хранилища данные и заполняются ими табличные части создаваемого объекта акта сверки.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Пробовал, но я видимо что-то не то делаю, вот код, в нем коментарий с объяснением что у меня получается :(
Если никто не знает, то может быть мне кто-то сможет отправить любую обработку в которой создается акт сверки и я там уже разберусь? :)
&НаСервере
Функция СоздатьАктСверки(Контрагент)
ДокументОбъект = Документы.АктСверкиВзаиморасчетов.СоздатьДокумент();
ДокументОбъект.ВалютаДокумента = Валюта;
ДокументОбъект.Дата = ДатаАктаСверки;
ДокументОбъект.ДатаНачала = Период.ДатаНачала;
ДокументОбъект.ДатаОкончания = Период.ДатаОкончания;
ДокументОбъект.Контрагент = Контрагент;
ДокументОбъект.Комментарий = "Создан автоматически "+ТекущаяДата();
ДокументОбъект.Организация = Организация;
ДокументОбъект.Ответственный = ПараметрыСеанса.ТекущийПользователь;
ДокументОбъект.РазбитьПоДоговорам = Истина;
ДокументОбъект.ПредставительОрганизации = ПредставительОрганизации;
Для Каждого Счет Из СчетаРасчетов Цикл
Если Счет.Пометка Тогда
СтрокаСчета = ДокументОбъект.СписокСчетов.Добавить();
СтрокаСчета.Счет = Счет.Счет;
СтрокаСчета.УчаствуетВРасчетах = Истина;
КонецЕсли;
КонецЦикла;
//Вот тут надо бы вставить это заполнение, но
// ДокументОбъект.ЗаполнитьПоДаннымБухгалтерскогоУчета();
//Выдает:
//{ВнешняяОбработка.СозданиеГрупповоеАктовСверкиZ.Форма.Форма.Форма(92)}: Метод объекта не обнаружен (ЗаполнитьПоДаннымБухгалтерскогоУчета)
ДокументОбъект.ЗаполнитьПоДаннымБухгалтерскогоУчета();
ДокументОбъект.Записать();
Возврат ДокументОбъект.Ссылка;
КонецФункции
ПоказатьЕсли никто не знает, то может быть мне кто-то сможет отправить любую обработку в которой создается акт сверки и я там уже разберусь? :)
&НаСервере
Функция ЗаполнитьПоДаннымБухгалтерскогоУчета()
Результат = Новый Структура();
Результат.Вставить("ЗаданиеВыполнено", Истина);
Результат.Вставить("Успешно", Ложь);
//проверим заполненность обязательных реквизитов
Если НЕ ПроверитьЗаполнение() Тогда
Возврат Результат;
КонецЕсли;
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ДатаНачала", Объект.ДатаНачала);
СтруктураПараметров.Вставить("ДатаОкончания", Новый Граница(КонецДня(Объект.ДатаОкончания), ВидГраницы.Включая));
СтруктураПараметров.Вставить("Организация", Объект.Организация);
СтруктураПараметров.Вставить("Контрагент", Объект.Контрагент);
СтруктураПараметров.Вставить("СОбособленнымиПодразделениями", Объект.СОбособленнымиПодразделениями);
СтруктураПараметров.Вставить("ВыводитьСчетаФактуры", Объект.ВыводитьСчетаФактуры);
СтруктураПараметров.Вставить("ЗаполнятьДанныеКонтрагента", Объект.ПоДаннымКонтрагента.Количество() = 0);
СтруктураПараметров.Вставить("Валюта", ?((Объект.ВалютаДокумента = ВалютаРегламентированногоУчета), Неопределено, Объект.ВалютаДокумента));
ФильтрСписокСчетов = Новый Массив();
Для Каждого СтрокаСчета Из Объект.СписокСчетов Цикл
Если ЗначениеЗаполнено(СтрокаСчета.Счет) И СтрокаСчета.УчаствуетВРасчетах Тогда
ФильтрСписокСчетов.Добавить(СтрокаСчета.Счет);
КонецЕсли;
КонецЦикла;
Если ФильтрСписокСчетов.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru='Не задан список счетов, по которым производится сверка.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , "Объект.СписокСчетов");
Возврат Результат;
КонецЕсли;
СтруктураПараметров.Вставить("ФильтрСписокСчетов", ФильтрСписокСчетов);
АналитикаРасчетов = Новый Массив();
АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
СтруктураПараметров.Вставить("АналитикаРасчетов", АналитикаРасчетов);
СтруктураПараметров.Вставить("ДоговорКонтрагента",
?(НЕ ЗначениеЗаполнено(Объект.ДоговорКонтрагента), Неопределено, Объект.ДоговорКонтрагента));
СтруктураПараметров.Вставить("ВыводитьПолныеНазванияДокументов", Объект.ВыводитьПолныеНазванияДокументов);
СтруктураПараметров.Вставить("ВалютаДокумента", Объект.ВалютаДокумента);
СтруктураПараметров.Вставить("РазбитьПоДоговорам", Объект.РазбитьПоДоговорам);
СтруктураПараметров.Вставить("ВалютаРегламентированногоУчета", ВалютаРегламентированногоУчета);
Если ЭтоАдресВременногоХранилища(АдресХранилищаСОшибками) Тогда
УдалитьИзВременногоХранилища(АдресХранилищаСОшибками);
АдресХранилищаСОшибками = "";
КонецЕсли;
АдресХранилищаСОшибками = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
СтруктураПараметров.Вставить("АдресХранилищаСОшибками", АдресХранилищаСОшибками);
НаименованиеЗадания = "ЗаполнитьПоДаннымОрганизации";
Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
УникальныйИдентификатор,
"Документы.АктСверкиВзаиморасчетов.ПодготовитьДанныеДляЗаполнения",
СтруктураПараметров,
НаименованиеЗадания);
АдресХранилища = Результат.АдресХранилища;
Если Результат.ЗаданиеВыполнено Тогда
Результат = ЗагрузитьПодготовленныеДанные();
КонецЕсли;
Возврат Результат;
КонецФункции
Показать
All XCDttt (avea2003), дело в том что тогда в форму надо добавлять не только эту функцию, потому что из нее запускаются другие функции со стандартной формы Акта сверки. Тогда надо половину стандартного кода впихивать на форму.
Просто не верится что нельзя этого избежать, потому что это не очень правильное решение.
Просто не верится что нельзя этого избежать, потому что это не очень правильное решение.
(10) Добавь в начала вызова функции слово Экспорт "Функция ЗаполнитьПоДаннымБухгалтерскогоУчета() Экспорт", а потом можешь вызвать данную функцию с помощью <ИмяОбъектаМетаданных>.ЗаполнитьПоДаннымБухгалтерскогоУчета() (не забудь поставить комментарий, чтобы при обновлении конфы не потерять твои наработки).
Владимир Кантор (kwl), так дело в том что она в модуле формы, а не в модуле объекта. У документа АктСверкиВзаимозачетов в модуле менеджера есть:
Но нет ничего чтобы подготовить СтрукрутуПараметров :(
В общем я так понял что нет встроенного в БП 3,0 способа просто заполнить табличные части акта сверки и придется разбираться как СтруктураПараметров формируется на форме стандартными методами, потом формировать ее у себя, потом вызывать вышеуказанную процедуру, которая поместит результат в какое-то временное хранилище и только потом разбираться как из него забрать данные в табличную часть акта сверки :(
Просто не верится что не предусмотрели простое программное создание этого документа... Но видимо это так и есть :(
Процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров, АдресХранилища) Экспорт
Но нет ничего чтобы подготовить СтрукрутуПараметров :(
В общем я так понял что нет встроенного в БП 3,0 способа просто заполнить табличные части акта сверки и придется разбираться как СтруктураПараметров формируется на форме стандартными методами, потом формировать ее у себя, потом вызывать вышеуказанную процедуру, которая поместит результат в какое-то временное хранилище и только потом разбираться как из него забрать данные в табличную часть акта сверки :(
Просто не верится что не предусмотрели простое программное создание этого документа... Но видимо это так и есть :(
(18)
потому что при обновлении ты ОБЯЗАН смотреть, что именно содержит "изменения И в основновной конфигурации, И в конфигурации поставщика".
Там и увидишь, что это конкретное изменение - твоих рук дело, когда и зачем наделал, и сможешь принять решение - нужно это дальше или уже неактуально.
почему при обновлении это не затрется вместе с комментариями...
потому что при обновлении ты ОБЯЗАН смотреть, что именно содержит "изменения И в основновной конфигурации, И в конфигурации поставщика".
Там и увидишь, что это конкретное изменение - твоих рук дело, когда и зачем наделал, и сможешь принять решение - нужно это дальше или уже неактуально.
В общем проблема решилась как мне кажется через жоп.. одно место.
Чтобы программно заполнить табличные части акта сверки в БП 3.0 надо:
переделать под свои данные код функции ЗаполнитьПоДаннымБухгалтерскогоУчета(), которая живет в ФормаДокумента АктаСверкиВзаимозачетов, включая вызываемую из нее функцию ЗагрузитьПодготовленныеДанные(), которая "живет" там же в форме.
Конкретный пример кода приводить не буду, потому что он зависит от названий реквизитов на вашей форме.
Если в двух словах о том как работает заполнение табличной части акта сверки:
1. Формируется СтруктураПараметров, содержащая данные для запроса в базу и формирования "списков" документов
2. Вызывается экспортная процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров.....), живущая в модуле менеджера АктаСверкиВзаимозачетов, она помещает "список" документов во временное хранилище
3. Достаются из временного хранилища данные и заполняются ими табличные части создаваемого объекта акта сверки.
Чтобы программно заполнить табличные части акта сверки в БП 3.0 надо:
переделать под свои данные код функции ЗаполнитьПоДаннымБухгалтерскогоУчета(), которая живет в ФормаДокумента АктаСверкиВзаимозачетов, включая вызываемую из нее функцию ЗагрузитьПодготовленныеДанные(), которая "живет" там же в форме.
Конкретный пример кода приводить не буду, потому что он зависит от названий реквизитов на вашей форме.
Если в двух словах о том как работает заполнение табличной части акта сверки:
1. Формируется СтруктураПараметров, содержащая данные для запроса в базу и формирования "списков" документов
2. Вызывается экспортная процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров.....), живущая в модуле менеджера АктаСверкиВзаимозачетов, она помещает "список" документов во временное хранилище
3. Достаются из временного хранилища данные и заполняются ими табличные части создаваемого объекта акта сверки.
Подумал, подумал и решил все-таки код приложить, может кому понадобится...
Все коряво, но по крайней мере работает :)
// Формируется структура параметров
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ДатаНачала", Период.ДатаНачала);
СтруктураПараметров.Вставить("ДатаОкончания", Новый Граница(КонецДня(Период.ДатаОкончания), ВидГраницы.Включая));
СтруктураПараметров.Вставить("Организация", Организация);
СтруктураПараметров.Вставить("Контрагент", Контрагент);
СтруктураПараметров.Вставить("СОбособленнымиПодразделениями", Ложь);
СтруктураПараметров.Вставить("ВыводитьСчетаФактуры", Ложь);
СтруктураПараметров.Вставить("ЗаполнятьДанныеКонтрагента", Истина);
СтруктураПараметров.Вставить("Валюта", Неопределено);
СтруктураПараметров.Вставить("ФильтрСписокСчетов", ФильтрСписокСчетов);
АналитикаРасчетов = Новый Массив();
АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
СтруктураПараметров.Вставить("АналитикаРасчетов", АналитикаРасчетов);
СтруктураПараметров.Вставить("ДоговорКонтрагента", Неопределено);
СтруктураПараметров.Вставить("ВыводитьПолныеНазванияДокументов", Ложь);
СтруктураПараметров.Вставить("ВалютаДокумента", Валюта);
СтруктураПараметров.Вставить("РазбитьПоДоговорам", Истина);
СтруктураПараметров.Вставить("ВалютаРегламентированногоУчета", Валюта);
// Вызывается процедура ПодготовитьДанныеДляЗаполнения
НаименованиеЗадания = "ЗаполнитьПоДаннымОрганизации";
Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
УникальныйИдентификатор,
"Документы.АктСверкиВзаиморасчетов.ПодготовитьДанныеДляЗаполнения",
СтруктураПараметров,
НаименованиеЗадания);
АдресХранилища = Результат.АдресХранилища;
// Заполняются табличные части акта сверки
Если Результат.ЗаданиеВыполнено Тогда
СтруктураДанных = ПолучитьИзВременногоХранилища(АдресХранилища);
ДокументОбъект.ОстатокНаНачало = СтруктураДанных.ОстатокНаНачало;
ДокументОбъект.ПоДаннымОрганизации.Загрузить(СтруктураДанных.ПоДаннымОрганизации);
Если СтруктураДанных.Свойство("ПоДаннымКонтрагента") Тогда
ДокументОбъект.ПоДаннымКонтрагента.Загрузить(СтруктураДанных.ПоДаннымКонтрагента);
КонецЕсли;
КонецЕсли;
ПоказатьВсе коряво, но по крайней мере работает :)
Уважаемые господа, очень прошу помочь (за вознаграждение) с программировать акт сверки в 6й версии 1С бухгалтерии. Эта версия меня во всем устраивает, т.к. научилась вносить все изменения в соответствии с новыми изменениями в законах и постановлениях. Понимаю тех, кто начнет плевать в мою сторону,но надеюсь что найдутся те, кто с уважением отнесется к моей просьбе. Можно даже в Российской версии,я потом его адаптирую к нашей узбекской. С уважением бухгалтер с 30ти летнем стажем
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот