Добрый день.
Я еще совсем новичок в программировании 1С и у меня возникла ситуация которую я никак не могу побороть. Прошу вашей помощи!

В общем пытаюсь программно создать акт сверки, получилось сделать все, кроме заполнения табличной части непосредственно документами контрагента.
Не могу ни нагуглить, ни наковырять в конфигурации функцию или процедуру, которая это делает
1С 8.3 БП 3.0

Подскажите пожалуйста как ее заполнить?

Заранее благодарен

П.С. И абонемента нет, чтобы скачать обработку и посмотреть как это делается :(
---
Подумал, подумал и решил все-таки код приложить, может кому понадобится...

```1c
    // Формируется структура параметров
    СтруктураПараметров = Новый Структура;

    СтруктураПараметров.Вставить("ДатаНачала", Период.ДатаНачала);
    СтруктураПараметров.Вставить("ДатаОкончания", Новый Граница(КонецДня(Период.ДатаОкончания), ВидГраницы.Включая));
    СтруктураПараметров.Вставить("Организация", Организация);
    СтруктураПараметров.Вставить("Контрагент", Контрагент);
    СтруктураПараметров.Вставить("СОбособленнымиПодразделениями", Ложь);
    СтруктураПараметров.Вставить("ВыводитьСчетаФактуры", Ложь);
    СтруктураПараметров.Вставить("ЗаполнятьДанныеКонтрагента", Истина);
    СтруктураПараметров.Вставить("Валюта", Неопределено);
    СтруктураПараметров.Вставить("ФильтрСписокСчетов", ФильтрСписокСчетов);

    АналитикаРасчетов = Новый Массив();
    АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
    АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
    СтруктураПараметров.Вставить("АналитикаРасчетов", АналитикаРасчетов);

    СтруктураПараметров.Вставить("ДоговорКонтрагента", Неопределено);

    СтруктураПараметров.Вставить("ВыводитьПолныеНазванияДокументов", Ложь);
    СтруктураПараметров.Вставить("ВалютаДокумента", Валюта);
    СтруктураПараметров.Вставить("РазбитьПоДоговорам", Истина);
    СтруктураПараметров.Вставить("ВалютаРегламентированногоУчета", Валюта);

    // Вызывается процедура ПодготовитьДанныеДляЗаполнения
    НаименованиеЗадания = "ЗаполнитьПоДаннымОрганизации";

    Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
    УникальныйИдентификатор,
    "Документы.АктСверкиВзаиморасчетов.ПодготовитьДанныеДляЗаполнения",
    СтруктураПараметров,
    НаименованиеЗадания);

    АдресХранилища = Результат.АдресХранилища;

    // Заполняются табличные части акта сверки
    Если Результат.ЗаданиеВыполнено Тогда
    СтруктураДанных = ПолучитьИзВременногоХранилища(АдресХранилища);

    ДокументОбъект.ОстатокНаНачало = СтруктураДанных.ОстатокНаНачало;
    ДокументОбъект.ПоДаннымОрганизации.Загрузить(СтруктураДанных.ПоДаннымОрганизации);
    Если СтруктураДанных.Свойство("ПоДаннымКонтрагента") Тогда
    ДокументОбъект.ПоДаннымКонтрагента.Загрузить(СтруктураДанных.ПоДаннымКонтрагента);
    КонецЕсли;

    КонецЕсли;
```

Все коряво, но по крайней мере работает :)
---
В общем проблема решилась как мне кажется через жоп.. одно место.

Чтобы программно заполнить табличные части акта сверки в БП 3.0 надо:

переделать под свои данные код функции ЗаполнитьПоДаннымБухгалтерскогоУчета(), которая живет в ФормаДокумента АктаСверкиВзаимозачетов, включая вызываемую из нее функцию ЗагрузитьПодготовленныеДанные(), которая "живет" там же в форме.

Конкретный пример кода приводить не буду, потому что он зависит от названий реквизитов на вашей форме.

Если в двух словах о том как работает заполнение табличной части акта сверки:
1. Формируется СтруктураПараметров, содержащая данные для запроса в базу и формирования "списков" документов
2. Вызывается экспортная процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров.....), живущая в модуле менеджера АктаСверкиВзаимозачетов, она помещает "список" документов во временное хранилище
3. Достаются из временного хранилища данные и заполняются ими табличные части создаваемого объекта акта сверки.
---
процедура ЗаполнитьПоДаннымБухгалтерскогоУчета() ( или похоже)
---
Пробовал, но я видимо что-то не то делаю, вот код, в нем коментарий с объяснением что у меня получается :(

```1c
    &НаСервере
    Функция СоздатьАктСверки(Контрагент)

    ДокументОбъект = Документы.АктСверкиВзаиморасчетов.СоздатьДокумент();
    ДокументОбъект.ВалютаДокумента = Валюта;
    ДокументОбъект.Дата = ДатаАктаСверки;
    ДокументОбъект.ДатаНачала = Период.ДатаНачала;
    ДокументОбъект.ДатаОкончания = Период.ДатаОкончания;
    ДокументОбъект.Контрагент = Контрагент;
    ДокументОбъект.Комментарий = "Создан автоматически "+ТекущаяДата();
    ДокументОбъект.Организация = Организация;
    ДокументОбъект.Ответственный = ПараметрыСеанса.ТекущийПользователь;
    ДокументОбъект.РазбитьПоДоговорам = Истина;
    ДокументОбъект.ПредставительОрганизации = ПредставительОрганизации;
    Для Каждого Счет Из СчетаРасчетов Цикл
    Если Счет.Пометка Тогда
    СтрокаСчета = ДокументОбъект.СписокСчетов.Добавить();
    СтрокаСчета.Счет = Счет.Счет;
    СтрокаСчета.УчаствуетВРасчетах = Истина;
    КонецЕсли;

    КонецЦикла;

    //Вот тут надо бы вставить это заполнение, но
    // ДокументОбъект.ЗаполнитьПоДаннымБухгалтерскогоУчета();
    //Выдает:
    //{ВнешняяОбработка.СозданиеГрупповоеАктовСверкиZ.Форма.Форма.Форма(92)}: Метод объекта не обнаружен (ЗаполнитьПоДаннымБухгалтерскогоУчета)
    ДокументОбъект.ЗаполнитьПоДаннымБухгалтерскогоУчета();

    ДокументОбъект.Записать();
    Возврат ДокументОбъект.Ссылка;

    КонецФункции
```

Если никто не знает, то может быть мне кто-то сможет отправить любую обработку в которой создается акт сверки и я там уже разберусь? :)
---
У тебя же "БП 3.0" есть? Там нет процедуры заполнения "Акта сверки"?
---
БП есть, процедуру найти не могу :(
---
Помогите помогите пожалуйста :)
---
```1c
    &НаСервере
    Функция ЗаполнитьПоДаннымБухгалтерскогоУчета()

    Результат = Новый Структура();
    Результат.Вставить("ЗаданиеВыполнено", Истина);
    Результат.Вставить("Успешно", Ложь);

    //проверим заполненность обязательных реквизитов
    Если НЕ ПроверитьЗаполнение() Тогда
    Возврат Результат;
    КонецЕсли;

    СтруктураПараметров = Новый Структура;

    СтруктураПараметров.Вставить("ДатаНачала", Объект.ДатаНачала);
    СтруктураПараметров.Вставить("ДатаОкончания", Новый Граница(КонецДня(Объект.ДатаОкончания), ВидГраницы.Включая));
    СтруктураПараметров.Вставить("Организация", Объект.Организация);
    СтруктураПараметров.Вставить("Контрагент", Объект.Контрагент);
    СтруктураПараметров.Вставить("СОбособленнымиПодразделениями", Объект.СОбособленнымиПодразделениями);
    СтруктураПараметров.Вставить("ВыводитьСчетаФактуры", Объект.ВыводитьСчетаФактуры);
    СтруктураПараметров.Вставить("ЗаполнятьДанныеКонтрагента", Объект.ПоДаннымКонтрагента.Количество() = 0);
    СтруктураПараметров.Вставить("Валюта", ?((Объект.ВалютаДокумента = ВалютаРегламентированногоУчета), Неопределено, Объект.ВалютаДокумента));

    ФильтрСписокСчетов = Новый Массив();
    Для Каждого СтрокаСчета Из Объект.СписокСчетов Цикл
    Если ЗначениеЗаполнено(СтрокаСчета.Счет) И СтрокаСчета.УчаствуетВРасчетах Тогда
    ФильтрСписокСчетов.Добавить(СтрокаСчета.Счет);
    КонецЕсли;
    КонецЦикла;
    Если ФильтрСписокСчетов.Количество() = 0 Тогда
    ТекстОшибки = НСтр("ru='Не задан список счетов, по которым производится сверка.'");
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , "Объект.СписокСчетов");
    Возврат Результат;
    КонецЕсли;

    СтруктураПараметров.Вставить("ФильтрСписокСчетов", ФильтрСписокСчетов);

    АналитикаРасчетов = Новый Массив();
    АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
    АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
    СтруктураПараметров.Вставить("АналитикаРасчетов", АналитикаРасчетов);

    СтруктураПараметров.Вставить("ДоговорКонтрагента",
    ?(НЕ ЗначениеЗаполнено(Объект.ДоговорКонтрагента), Неопределено, Объект.ДоговорКонтрагента));

    СтруктураПараметров.Вставить("ВыводитьПолныеНазванияДокументов", Объект.ВыводитьПолныеНазванияДокументов);
    СтруктураПараметров.Вставить("ВалютаДокумента", Объект.ВалютаДокумента);
    СтруктураПараметров.Вставить("РазбитьПоДоговорам", Объект.РазбитьПоДоговорам);
    СтруктураПараметров.Вставить("ВалютаРегламентированногоУчета", ВалютаРегламентированногоУчета);

    Если ЭтоАдресВременногоХранилища(АдресХранилищаСОшибками) Тогда
    УдалитьИзВременногоХранилища(АдресХранилищаСОшибками);
    АдресХранилищаСОшибками = ";
    КонецЕсли;

    АдресХранилищаСОшибками = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
    СтруктураПараметров.Вставить("АдресХранилищаСОшибками", АдресХранилищаСОшибками);

    НаименованиеЗадания = "ЗаполнитьПоДаннымОрганизации";

    Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
    УникальныйИдентификатор,
    "Документы.АктСверкиВзаиморасчетов.ПодготовитьДанныеДляЗаполнения",
    СтруктураПараметров,
    НаименованиеЗадания);

    АдресХранилища = Результат.АдресХранилища;

    Если Результат.ЗаданиеВыполнено Тогда
    Результат = ЗагрузитьПодготовленныеДанные();
    КонецЕсли;

    Возврат Результат;

    КонецФункции
```
---
Это функция из модуля формы акта сверки, я не могу ее вызвать. Или может не знаю как.
Просто не представляю что мне с ней делать, не могли бы вы чуток разжевать?
---
Просили найти процедуру или функцию мы Вам нашли. Можно просто добавить в ту форму где Вы пишите например.
---
All XCDttt (avea2003), дело в том что тогда в форму надо добавлять не только эту функцию, потому что из нее запускаются другие функции со стандартной формы Акта сверки. Тогда надо половину стандартного кода впихивать на форму.
Просто не верится что нельзя этого избежать, потому что это не очень правильное решение.
---
Добавь в начала вызова функции слово Экспорт "Функция ЗаполнитьПоДаннымБухгалтерскогоУчета() Экспорт", а потом можешь вызвать данную функцию с помощью <ИмяОбъектаМетаданных>.ЗаполнитьПоДаннымБухгалтерскогоУчета() (не забудь поставить комментарий, чтобы при обновлении конфы не потерять твои наработки).
---
Единственное чтобы данная функция располагалась в модуле объекта метаданных
---
Владимир Кантор (kwl), так дело в том что она в модуле формы, а не в модуле объекта. У документа АктСверкиВзаимозачетов в модуле менеджера есть:

```1c
    Процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров, АдресХранилища) Экспорт
```

Но нет ничего чтобы подготовить СтрукрутуПараметров :(

В общем я так понял что нет встроенного в БП 3,0 способа просто заполнить табличные части акта сверки и придется разбираться как СтруктураПараметров формируется на форме стандартными методами, потом формировать ее у себя, потом вызывать вышеуказанную процедуру, которая поместит результат в какое-то временное хранилище и только потом разбираться как из него забрать данные в табличную часть акта сверки :(

Просто не верится что не предусмотрели простое программное создание этого документа... Но видимо это так и есть :(
---
Владимир Кантор (kwl) и я не очень понял на счет хитрого комментария, не могли бы вы объяснить на примере?
---
я не очень понял на счет хитрого комментария

```1c
    //ФИРМА Фамилия Дата ЗачемПолезМенятьТиповойКод
    //КусокТиповогоКода;
    //..
    //..
    //КонецКускаТиповогоКода;
    ТвойРабочийКод;
    //ФИРМА Фамилия Дата
```

При обновлении типовой помогает не забыть важные кусочки.
---
Хм, интересно, спасибо, только не понимаю почему при обновлении это не затрется вместе с комментариями...
---
почему при обновлении это не затрется вместе с комментариями...
потому что при обновлении ты ОБЯЗАН смотреть, что именно содержит "изменения И в основновной конфигурации, И в конфигурации поставщика".
Там и увидишь, что это конкретное изменение - твоих рук дело, когда и зачем наделал, и сможешь принять решение - нужно это дальше или уже неактуально.
---
Ага! Понял, еще раз большое спасибо!
---
В общем проблема решилась как мне кажется через жоп.. одно место.

Чтобы программно заполнить табличные части акта сверки в БП 3.0 надо:

переделать под свои данные код функции ЗаполнитьПоДаннымБухгалтерскогоУчета(), которая живет в ФормаДокумента АктаСверкиВзаимозачетов, включая вызываемую из нее функцию ЗагрузитьПодготовленныеДанные(), которая "живет" там же в форме.

Конкретный пример кода приводить не буду, потому что он зависит от названий реквизитов на вашей форме.

Если в двух словах о том как работает заполнение табличной части акта сверки:
1. Формируется СтруктураПараметров, содержащая данные для запроса в базу и формирования "списков" документов
2. Вызывается экспортная процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров.....), живущая в модуле менеджера АктаСверкиВзаимозачетов, она помещает "список" документов во временное хранилище
3. Достаются из временного хранилища данные и заполняются ими табличные части создаваемого объекта акта сверки.
---
Подумал, подумал и решил все-таки код приложить, может кому понадобится...

```1c
    // Формируется структура параметров
    СтруктураПараметров = Новый Структура;

    СтруктураПараметров.Вставить("ДатаНачала", Период.ДатаНачала);
    СтруктураПараметров.Вставить("ДатаОкончания", Новый Граница(КонецДня(Период.ДатаОкончания), ВидГраницы.Включая));
    СтруктураПараметров.Вставить("Организация", Организация);
    СтруктураПараметров.Вставить("Контрагент", Контрагент);
    СтруктураПараметров.Вставить("СОбособленнымиПодразделениями", Ложь);
    СтруктураПараметров.Вставить("ВыводитьСчетаФактуры", Ложь);
    СтруктураПараметров.Вставить("ЗаполнятьДанныеКонтрагента", Истина);
    СтруктураПараметров.Вставить("Валюта", Неопределено);
    СтруктураПараметров.Вставить("ФильтрСписокСчетов", ФильтрСписокСчетов);

    АналитикаРасчетов = Новый Массив();
    АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
    АналитикаРасчетов.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
    СтруктураПараметров.Вставить("АналитикаРасчетов", АналитикаРасчетов);

    СтруктураПараметров.Вставить("ДоговорКонтрагента", Неопределено);

    СтруктураПараметров.Вставить("ВыводитьПолныеНазванияДокументов", Ложь);
    СтруктураПараметров.Вставить("ВалютаДокумента", Валюта);
    СтруктураПараметров.Вставить("РазбитьПоДоговорам", Истина);
    СтруктураПараметров.Вставить("ВалютаРегламентированногоУчета", Валюта);

    // Вызывается процедура ПодготовитьДанныеДляЗаполнения
    НаименованиеЗадания = "ЗаполнитьПоДаннымОрганизации";

    Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
    УникальныйИдентификатор,
    "Документы.АктСверкиВзаиморасчетов.ПодготовитьДанныеДляЗаполнения",
    СтруктураПараметров,
    НаименованиеЗадания);

    АдресХранилища = Результат.АдресХранилища;

    // Заполняются табличные части акта сверки
    Если Результат.ЗаданиеВыполнено Тогда
    СтруктураДанных = ПолучитьИзВременногоХранилища(АдресХранилища);

    ДокументОбъект.ОстатокНаНачало = СтруктураДанных.ОстатокНаНачало;
    ДокументОбъект.ПоДаннымОрганизации.Загрузить(СтруктураДанных.ПоДаннымОрганизации);
    Если СтруктураДанных.Свойство("ПоДаннымКонтрагента") Тогда
    ДокументОбъект.ПоДаннымКонтрагента.Загрузить(СтруктураДанных.ПоДаннымКонтрагента);
    КонецЕсли;

    КонецЕсли;
```

Все коряво, но по крайней мере работает :)
---
Дедовским сопосбом сделать. Самому написать процедуру печати акта и всё.. со своим макетом
---
В постах (15) и (16) я написал как это можно сделать, код привел
---
Уважаемые господа, очень прошу помочь (за вознаграждение) с программировать акт сверки в 6й версии 1С бухгалтерии. Эта версия меня во всем устраивает, т.к. научилась вносить все изменения в соответствии с новыми изменениями в законах и постановлениях. Понимаю тех, кто начнет плевать в мою сторону,но надеюсь что найдутся те, кто с уважением отнесется к моей просьбе. Можно даже в Российской версии,я потом его адаптирую к нашей узбекской. С уважением бухгалтер с 30ти летнем стажем
---
Если вдруг кто-то еще будет задаваться целью программного создания акта сверки. В модуле менеджера появилась функция создания "акта сверки"

Документы.АктСверкиВзаиморасчетов.ЗаполнитьАктСверкиПоДаннымИБ