Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 12:55

1с: Бухгалтерия. Заполнение колонки в табличном документе в зависимости от типа ведомости

Автор Reflection_, 23 сен 2024, 22:24

0 Пользователей и 1 гость просматривают эту тему.

Reflection_

Добрый вечер, столкнулся с проблемой, нужно заполнить колонку "Счет" в табличном документе зависимости от типа ведомости. Их всего 2: "На счета сотрудников" и "По зарплатному проекту". На первый тип  нужен Основной Банковский Счет, а на вторую Лицевой Счет. У меня же всегда выгружает банковский. Предполагаю, что ошибка где-то в запросе, но не уверен. Буду очень признателен за помощь. Заранее спасибо за ответы. Код:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)     
   ДанныеФайла = ПолучитьДанныеФайла(ПараметрКоманды);
   Если ЗначениеЗаполнено(ДанныеФайла.ТекстОшибки) Тогда
      ОбщегоНазначенияКлиент.СообщитьПользователю(ДанныеФайла.ТекстОшибки);
      Возврат;
   КонецЕсли;     
   
   Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
   ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
   ДиалогОткрытия.Каталог = "";
   ДиалогОткрытия.МножественныйВыбор = Ложь;
   ДиалогОткрытия.Заголовок = "Выберите каталог для сохранения файла";   
   
   Если ДиалогОткрытия.Выбрать() Тогда
      ПутьККаталогу = ДиалогОткрытия.Каталог;
      ДанныеФайла.ТабличныйДокумент.Записать(ПутьККаталогу + "\" + ДанныеФайла.НомерРеестра + ".xlsx", ТипФайлаТабличногоДокумента.XLSX);
      Состояние("Файл успешно сохранен");
   КонецЕсли;   
КонецПроцедуры


&НаСервере
Функция ПолучитьДанныеФайла(Ведомость)
  ТабличныйДокумент = Новый ТабличныйДокумент;   
 
  Макет=Документы.ВедомостьНаВыплатуЗарплатыВБанк.ПолучитьМакет("ВыгрузкаВПСБ");
  Область=Макет.ПолучитьОбласть("Заголовок");       
  ТабличныйДокумент.Вывести(Область); 
 
   
  Запрос = Новый Запрос;
  Запрос.Текст= 
  "ВЫБРАТЬ
  |   ВедомостьНаВыплатуЗарплатыВБанкЗарплата.ФизическоеЛицо КАК ФизическоеЛицо,
  |   СУММА(ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КВыплате) КАК КВыплате
  |ИЗ
  |   Документ.ВедомостьНаВыплатуЗарплатыВБанк.Зарплата КАК ВедомостьНаВыплатуЗарплатыВБанкЗарплата
  |ГДЕ
  |   ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка = &Ссылка
  |
  |СГРУППИРОВАТЬ ПО
  |   ВедомостьНаВыплатуЗарплатыВБанкЗарплата.ФизическоеЛицо
  |УПОРЯДОЧИТЬ ПО
  |   ФизическоеЛицо 
  |АВТОУПОРЯДОЧИВАНИЕ";
  Запрос.УстановитьПараметр("Ссылка", Ведомость); 
 
  ТаблицаДанных = Запрос.Выполнить().Выгрузить();
  КадровыеДанныеФизическихЛиц = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина, ТаблицаДанных.ВыгрузитьКолонку("ФизическоеЛицо"), "ФизическоеЛицо, ОсновнойБанковскийСчет, Фамилия, Имя, Отчество, ДокументСерия, ДокументНомер");
 
 
  Для Каждого ТекСтрока Из ТаблицаДанных Цикл 
  Область = Макет.ПолучитьОбласть("Строка");
  Область.Параметры.Заполнить(ТекСтрока);
  ДанныеФизлица = КадровыеДанныеФизическихЛиц.НайтиСтроки(Новый Структура("ФизическоеЛицо", ТекСтрока.ФизическоеЛицо));
 
  Если ДанныеФизлица.Количество() > 0 Тогда
  Область.Параметры.Заполнить(ДанныеФизлица[0]);
КонецЕсли;

  Область.Параметры.ТабельныйНомер = ТекСтрока.ФизическоеЛицо.Код;
  Область.Параметры.КВыплате = Формат(ТекСтрока.КВыплате, "ЧДЦ=2; ЧРД=.; ЧГ=");
  ТабличныйДокумент.Вывести(Область);
КонецЦикла; 

    Результат = Новый Структура;
   Результат.Вставить("ТекстОшибки", ?(ТаблицаДанных.Количество() = 0, "Нет данных для формирования отчета", ""));
   Результат.Вставить("ТабличныйДокумент", ТабличныйДокумент);
   Результат.Вставить("НомерРеестра", Ведомость.НомерРеестра);
   
   Возврат Результат;


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

Максим75

Reflection_, Вы пишите за заполнение табличной части документа, а привели код печати чего-то (видимо ведомости). где код заполнения табличной части (если он есть)?
или все-таки надо при печати что-то заполнить? тогда хоть сам макет как-то приведите, посмотреть, где же там Счет, потому как в коде вывода на печать пока заполнения Счета не видно. Особенно интересует область "Строка" в макете, что там?

вот здесь Вы получаете судя по всему основной банковсикй счет
КадровыеДанныеФизическихЛиц = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина, ТаблицаДанных.ВыгрузитьКолонку("ФизическоеЛицо"), "ФизическоеЛицо, ОсновнойБанковскийСчет, Фамилия, Имя, Отчество, ДокументСерия, ДокументНомер");

а вот получения лицевого счета не видно.
ставьте условие, если тип ведомости такая-то - то получаем Основной банковский счет, иначе - лицевой счет (кстати, он хоть есть в кадровых данных физических лиц?)

Reflection_

Максим75, Ошибку с запросом нашёл, хотел бы у вас спросить, как правильно(в плане синтаксиса) указать тип ведомости?

Максим75

Reflection_, как у Вас в конфигурации этот реквизит называется? скорее всего так и называется ТипВедомости.
имеет тип скорее всего Перечисление.

тогда так и пишите
Если Ведомость.ТипВедомости = Перечисление.какое-то перечисление (смотрите в конфигураторе).какое-то значение перечисления (там же смотрите) тогда
//определяете Основной банковский счет
иначе
//определяете Лицевой счет
КонецЕсли

где у Вас лицевой счет хранится, тоже смотрите в конфигураторе.

Reflection_


Reflection_

Максим75, Проверил еще раз результат и увидел проблему, при выгрузке любой ведомости в колонке счет всегда выгружается банковский счет, оставлю чуть ниже код, возможно ошибся в чем-то.

Если Ведомость=Перечисления.ВидыМестВыплатыЗарплаты.БанковскийСчет Тогда
Область.Параметры.ОсновнойБанковскийСчет=ТекСтрока.ФизическоеЛицо.ОсновнойБанковскийСчет;
ИначеЕсли Ведомость=Перечисления.ВидыМестВыплатыЗарплаты.ЗарплатныйПроект Тогда
Область.Параметры.ОсновнойБанковскийСчет=ТекСтрока.НомерЛицевогоСчета;   
КонецЕсли;


Но при этом если в 3 строке изменить ИначеЕсли на Иначе и оставить пустой, то в ведомостях с номером лицевого счета будет выгружаться лицевой счет, а с банковским счетом ничего не выгружается.

p.s: Я забыл указать реквизит типа ведомости, очень глупая ошибка. Еще раз спасибо вам за помощь.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск