Работаю в 1С Предприятие, Управление небольшой фирмой для Украины, редакция 1.5.
Имею документы "Котировка" и "СчетНаОплату".
В документе "Котировка", указан список клиентов в реквизите "Клиент" ТЧ "Расходы"
Стоит задача на основании документа "Котировка" заполнить документ "СчетНаОплату", причем создать документов "СчетНаОплату" нужно столько сколько клиентов указано в документе "Котировка".
Возможно ли такое реализовать, подскажи?
scoodizzy619 @ 04.01.25, 16:11
,
Да, можно, Цикл обхода табличной части Котировка, при обходе цикла вызывать процедуру создания нового документа СчетНаОплату с заполнением табличной части + наверное проверку сделать что таких "документов" не было ранее создано.
Profi_1C77 @ Сегодня, 9:32
,
Мне нужно чтобы и форма этих документов выводилась.
В процедуре ОбработкаЗаполнения я так понимаю такое не реализовать и нужно к примеру создавать кнопку на документе и через нее это выводить?
scoodizzy619 @ Сегодня, 10:57
,
Ну во- первых такие вещи не пишутся в обработке заполнения, не "корректный" подход. Обычно пишутся обработка с признаком "заполнение объекта"; как вариант а лучше
по типу
Функция СведенияОВнешнейОбработке() Экспорт
ИмяОбработки = ЭтотОбъект.Метаданные().Имя;
Синоним = ЭтотОбъект.Метаданные().Синоним;
Синоним = ?(ЗначениеЗаполнено(Синоним),Синоним, ИмяОбработки);
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиСозданиеСвязанныхОбъектов();
ПараметрыРегистрации.Версия = "1.0.0.1";
ПараметрыРегистрации.Наименование = Синоним;
ПараметрыРегистрации.БезопасныйРежим = Ложь;
ПараметрыРегистрации.Информация = "Создание на основании";
ПараметрыРегистрации.Назначение.Добавить("Документ.НазваниеДокумента");
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = Синоним;
Команда.Идентификатор = ИмяОбработки;
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
Команда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
ОтборОбновить = Новый Структура("Обновить",Истина);
Если Объект.Товары.НайтиСтроки(ОтборОбновить).Количество() =0 Тогда
Сообщить ("Не выбраны позиции номенклатуры. Прервано. ",СтатусСообщения.Важное);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Документ1С) Тогда
ДокументОбъект = Объект.Документ1С.ПолучитьОбъект();
ДокументОбъект.Товары.Очистить();
ДокументОбъект.ВидыЦен.Очистить();
Иначе
ДокументОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокументОбъект.Дата = ТекущаяДата();
КонецЕсли;
ДокументОбъект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
Для Каждого СтрТовары Из Объект.Товары Цикл
Если ЗначениеЗаполнено(СтрТовары.Номенклатура) и ЗначениеЗаполнено(СтрТовары.ВидНоменклатуры) и
(СтрТовары.Обновить) Тогда
// поищем дубляж
СтрокаТЧ = ДокументОбъект.Товары.Найти(СтрТовары.Номенклатура,"Номенклатура");
Если СтрокаТЧ = Неопределено Тогда
СтрДок = ДокументОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрДок,СтрТовары);
СтрДок.ВидЦены = Объект.ВидЦены;
СтрДок.Упаковка = СтрДок.Номенклатура.ЕдиницаИзмерения;
Иначе
// сравним цены
Если СтрокаТЧ.Цена < СтрТовары.Цена Тогда
СтрокаТЧ.Цена = СтрТовары.Цена;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
СтрВидыЦен = ДокументОбъект.ВидыЦен.Добавить();
СтрВидыЦен.ВидЦены = Объект.ВидЦены;
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Сообщить (" Записан / обновлен документ цен ",СтатусСообщения.Информация);
Объект.Документ1С = ДокументОбъект.Ссылка;
Результат = ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.ФормаОбъекта",Новый Структура ("Ключ",Объект.Документ1С));
scoodizzy619 @ Сегодня, 12:02
,
тогда БСП у Вас вероятно есть в конфигурации, идеально через Функция СведенияОВнешнейОбработке() Экспорт
Я б сделал бы если у вас мало опыта, сначала внешнюю обработку, в которой бы создал реквизит ССылкаНаДокументОснование
прописал бы процедуру создания/ заполнения документа СчетНаОплату,
а потом бы уже доработал как его внедрить в документ Котировка
Profi_1C77 @ 06.01.25, 9:32
,
Хочу попробовать через Цикл. Впринципе получилось, формы открываются в количестве сколько самих строк.
Вот сама обработка:
Но мне нужно чтобы они открывались именно по количеству уникальных значение, если поставщики повторяются то не создавать еще.
И столкнулся с проблемой. Формы заполняются автоматически но мне нужно чтобы каждая форма заполнялась по разному в соответствии со строкой по которой она создавалась.
Если форма создалась по значению контрагента, к примеру, ТОВ "ДревоБуд" то в новой форме должно заполнится вся ТЧ строками по данному контрагенту с документа основания.
scoodizzy619 @ 10.01.25, 22:42
,
Обычно создается ТЗ в которой сначала группируются схожие объекты- значения типа "Поставщик/Контрагент/ Товар " а потом уже они уже в цикле обходом по ТЗ создаются документы и переносятся данные
Profi_1C77 @ Сегодня, 9:32
,
Можно какой-то небольшой пример, как это сделать.
Голова уже просто не варит.
Начал так:
- создал ТЗ
- дальше нужно добавить по идеи колонки аналогичные табличной части документа основания (Котировка)?
НовыйТЗ = Новый ТаблицаЗначений;
НовыйТЗ.Колонки.Добавить("Услуга", "СправочникСсылка.Номенклатура");
scoodizzy619 @ Вчера, 18:42
,
Можно, примеры в интернете , их полно.
На Вашем коде , тоже можно, но вы его "картинкой" с сообщениях ставите а не текстом, как бы ...
Дайте код, гляну по возможности;
А лучше все таки самому на примерах в интернете, сайтов полно.
Profi_1C77 @ Сегодня, 9:44
,
Примеров много, знаю. Но найти похожее задание не доводилось.
Процедура СчетПоРасходам(Команда)
СчетПоРасходамНаСервере();
УникальныеНаименования = Новый Соответствие;
Для Каждого СтрРасходы ИЗ Объект.Расходы Цикл
Таблица = УникальныеНаименования.Получить(СтрРасходы.Поставщик);
Форма = ПолучитьФорму("Документ.СчетНаОплатуПоставщика.Форма.ФормаДокумента",,,Новый УникальныйИдентификатор());
////
Счет = Форма.Объект;
Счет.Контрагент = Объект.Клиент;
Счет.ДокументОснование = Объект.Ссылка;
////
////
ТЧЗапасы = Счет.Запасы;
НоваяСтр = ТЧЗапасы.Добавить();
НоваяСтр.Номенклатура = СтрРасходы.Услуга;
НоваяСтр.Количество = СтрРасходы.Количество;
////
Форма.Открыть();
КонецЕсли
КонецЦикла
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua