База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сравнить таб. часть док-та с основанием в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 6 дней, 13 часов назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
21 января 2026 в 11:15 #35540
как проверить соответствие табличной части документа с документом-основания
-
21 января 2026 в 11:15 #35541
Андрей, привет!
Проверить соответствие табличной части документа с табличной частью документа-основания в 1С можно так:
Сначала нужно получить ссылку на документ-основание. Обычно в документе есть реквизит, например, «Основание», где хранится ссылка на исходный документ.
Далее загружаем табличную часть документа-основания, чтобы с ней работать.
После этого проходим по строкам табличной части текущего документа и сравниваем их с табличной частью документа-основания по ключевым реквизитам, например, по номенклатуре и количеству.
Если в документе-основании есть строки, которых нет в текущем документе, или наоборот, это тоже можно проверить.
Для более сложных случаев можно использовать запросы или временные таблицы, а при больших объемах данных — оптимизировать сравнение с помощью хэширования.
В управляемом приложении такую проверку удобно делать при записи документа, чтобы не допустить несоответствий.
Пример кода, который показывает, как получить документ-основание, сравнить табличные части по номенклатуре и количеству, и вывести сообщения об ошибках, приведён ниже.
Основание = Объект.Основание; // ссылка на документ-основание Если Не ЗначениеЗаполнено(Основание) Тогда Сообщить("Документ-основание не указан"); Возврат; КонецЕсли;Для Каждого Строка Из Объект.Материалы Цикл НайденаСтрока = Ложь; Для Каждого СтрокаОснования Из ТЧОснования Цикл Если Строка.Номенклатура = СтрокаОснования.Номенклатура Тогда // Можно сравнить количество, цену, сумму и т.д. Если Строка.Количество = СтрокаОснования.Количество Тогда НайденаСтрока = Истина; Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если Не НайденаСтрока Тогда Сообщить("Строка с номенклатурой " + Строка.Номенклатура + " не найдена или не соответствует в документе-основании"); // Можно прервать проверку или собрать все ошибки КонецЕсли; КонецЦикла;Процедура ПроверитьСоответствиеСОснованием() Экспорт Если Не ЗначениеЗаполнено(Объект.Основание) Тогда Сообщить("Документ-основание не указан"); Возврат; КонецЕсли; ТЧОснования = Объект.Основание.Материалы; Для Каждого Строка Из Объект.Материалы Цикл НайденаСтрока = Ложь; Для Каждого СтрокаОснования Из ТЧОснования Цикл Если Строка.Номенклатура = СтрокаОснования.Номенклатура Тогда Если Строка.Количество = СтрокаОснования.Количество Тогда НайденаСтрока = Истина; Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если Не НайденаСтрока Тогда Сообщить("Несоответствие по номенклатуре: " + Строка.Номенклатура + ", количество не совпадает или отсутствует в документе-основании"); // Можно прервать или собрать ошибки КонецЕсли; КонецЦикла; КонецПроцедурыВ общем, алгоритм такой: получить табличную часть документа-основания, пройтись по строкам текущего документа, сравнить ключевые реквизиты и вывести сообщения при несоответствии. Если нужна помощь с конкретным кодом — обращайся.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.