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