Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
11 Дек 2017, 20:31
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Как найти соответствия между двумя документами  (Прочитано 1882 раз)

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

Оффлайн strelok240378

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-30
  • Сайт: 
Помогите пожалуйста. Есть два типа документов. По одним отпускается товар (расходная накладная) по другим оплачивается (приходно кассовый ордер). Одним ПКО может закрываться несколько РН. И наоборот, одна РН может закрываться несколькими ПКО. Закрытие РН происходит в конце отчетного периода. Как написать процедуру которая будет в соответствии с FIFO или LIFO находить соответствие для каждой РН - ПКО и для каждого ПКО -  РН? 


Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Как? Руками.

Для начала неплохо было бы свой вариант (пусть и неправильный) привести...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн strelok240378

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-30
  • Сайт: 
 
  &НаСервере
Процедура ПолучитьРаспределение(Контрагент)
   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ПродажаТовара.Ссылка,
      |   ПродажаТовара.СуммаДокумента
      |ИЗ
      |   Документ.ПродажаТовара КАК ПродажаТовара
      |ГДЕ
      |   ПродажаТовара.Контрагент = &Контрагент";

   Запрос.УстановитьПараметр("Контрагент", Контрагент);

   Результат = Запрос.Выполнить();

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

   Запрос.УстановитьПараметр("Контрагент", Контрагент);

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
   
// ТаблицаЗначенийОплата
   ТаблицаЗначенийОплата = Новый ТаблицаЗначений;
    ТаблицаЗначенийОплата.Колонки.Добавить("ДокументыОплаты");
    ТаблицаЗначенийОплата.Колонки.Добавить("СуммаОплаты");   
   
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      Стр = ТаблицаЗначенийОплата.Добавить();
       Стр.ДокументыОплаты = ВыборкаДетальныеЗаписи.Ссылка;
      Стр.СуммаОплаты = ВыборкаДетальныеЗаписи.Сумма;
   КонецЦикла;
   
   КоличествоСтрокОплата = ТаблицаЗначенийОплата.Количество();
   
//МассивОплата
   МассивОплата = Новый Массив(КоличествоСтрокОплата + 1);
   МассивСуммаОплаты = Новый Массив(КоличествоСтрокОплата + 1);
   Индекс = 0;
   Для Каждого Строка Из ТаблицаЗначенийОплата Цикл
      МассивОплата[Индекс] = Строка.ДокументыОплаты;
      МассивСуммаОплаты[Индекс] = Строка.СуммаОплаты;
      Индекс = Индекс + 1;
   КонецЦикла;
   
// Наш алгоритм
   ТаблицаЗначенийИтоговая = Новый ТаблицаЗначений;
   ТаблицаЗначенийИтоговая.Колонки.Добавить("ДокументыОплаты");
   ТаблицаЗначенийИтоговая.Колонки.Добавить("СуммаОплаты");
   ТаблицаЗначенийИтоговая.Колонки.Добавить("ДокументыОтгрузки");
   ТаблицаЗначенийИтоговая.Колонки.Добавить("СуммаОтгрузки");
   
   
   Для ИндексОтгрузки = 0 По (КоличествоСтрокОтгрузка + 1) Цикл
      Для ИндексОплаты = 0 По (КоличествоСтрокОплата + 1) Цикл
         Если МассивСуммаОтгрузки[ИндексОтгрузки] < МассивСуммаОплаты[ИндексОплаты] Тогда
            
             МассивСуммаОплаты[ИндексОплаты] = МассивСуммаОплаты[ИндексОплаты] - МассивСуммаОтгрузки[ИндексОтгрузки];
            Стр = ТаблицаЗначенийИтоговая.Добавить();
            Стр.ДокументыОтгрузки = МассивОтгрузка[ИндексОтгрузки];
            Стр.СуммаОтгрузки = МассивСуммаОтгрузки[ИндексОтгрузки];
            Стр.ДокументыОплаты = МассивОплата[ИндексОплаты];
            Стр.СуммаОплаты = МассивСуммаОтгрузки[ИндексОтгрузки];
            Прервать;
         ИначеЕсли МассивСуммаОтгрузки[ИндексОтгрузки] > МассивСуммаОплаты[ИндексОплаты] Тогда
            
            Стр = ТаблицаЗначенийИтоговая.Добавить();
            Стр.ДокументыОтгрузки = МассивОтгрузка[ИндексОтгрузки];
            Стр.СуммаОтгрузки = МассивСуммаОплаты[ИндексОплаты];
            Стр.ДокументыОплаты = МассивОплата[ИндексОплаты];
            Стр.СуммаОплаты = МассивСуммаОплаты[ИндексОплаты];
            МассивСуммаОтгрузки[ИндексОтгрузки] = МассивСуммаОтгрузки[ИндексОтгрузки] - МассивСуммаОплаты[ИндексОплаты];
            МассивСуммаОплаты[ИндексОплаты] = 0;
         Конецесли;
      КонецЦикла;
   КонецЦикла;
Процедура в модуле формы документа, производящего поиск соответствий.
Процедура пока просто выбирает документы ПКО и РН и помещает их в одну табличную часть.
Механизм поиска соответствий только начал делать. Подскажите такой вариант возможен? Или надо использовать что то другое?   
   
   
// ТаблицаЗначенийОбщая добавление оплаты
   ТаблицаЗначенийОбщая.Колонки.Добавить("ДокументыОплаты");
   ТаблицаЗначенийОбщая.Колонки.Добавить("СуммаОплаты");
   ТаблицаЗначенийОбщая.ЗагрузитьКолонку(МассивОплата, "ДокументыОплаты");
   ТаблицаЗначенийОбщая.ЗагрузитьКолонку(МассивСуммаОплаты, "СуммаОплаты");
   Объект.ОтгрузкиВместеСОплатами.Загрузить(ТаблицаЗначенийОбщая);   
КонецПроцедуры
 

Оффлайн strelok240378

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-09-30
  • Сайт: 
Процедура в модуле формы документа. Пока только выбирает документы ПКО и РН и помещает их в одну табличную часть.
Сам механизм поиска соответствий только начал делать, но он основан на полученых таблицах значений.
Перебирая их планирую находить  соответствия. Подскажите так можно?

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Надо завести регистр накопления:
измерения - номенклатура, РН
ресурсы - количество, сумма

Документ РН делает приходные движения в него и соответственно прописывается в измерение РН.
А ПКО делает расходные движения перебирая "партии" соответственно методу списания...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.


Теги:
 

Обмен данными между 1С УТ (базовая) 8.2 редакция 10.3 и Розница (базовая) редакция 1.0

Автор Андрей ОлимпиевРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 7
Просмотров: 4989
Последний ответ 17 Мар 2015, 20:16
от дфтын
Утилита "Найти"

Автор ДимаРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 433
Последний ответ 12 Дек 2016, 12:37
от Геннадий ОбьГЭС
Обмен между типовой и не типовой конфигурацией.

Автор Maestro90Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 3207
Последний ответ 18 Сен 2012, 13:05
от Dethmontt
Различия между Подразделениями и Подразделениями организаций.

Автор EscaladasРаздел Пользователям "1С - Предприятие 8"

Ответов: 3
Просмотров: 3277
Последний ответ 26 Авг 2014, 13:18
от Escaladas
Обмен РИБ, обмен данными между организациями

Автор Azamat FaizovРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 1227
Последний ответ 18 Сен 2014, 11:48
от Azamat Faizov

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
164 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
56 Сообщений
alex0402
46 Сообщений
andron81_81
44 Сообщений
AIFrame
36 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
28 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 328
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal